From 67e6ad81689e8aa05396dccd5cb6c52405cd1a87 Mon Sep 17 00:00:00 2001 From: Patrik Date: Mon, 7 Oct 2024 12:07:03 -0400 Subject: [PATCH 001/110] docs: specifies `defaultLocale` as a required property for localization (#8585) Fixes #8567 --- docs/configuration/localization.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/configuration/localization.mdx b/docs/configuration/localization.mdx index f5878efb89..fc011ea5f1 100644 --- a/docs/configuration/localization.mdx +++ b/docs/configuration/localization.mdx @@ -35,7 +35,8 @@ import { buildConfig } from 'payload' export default buildConfig({ // ... localization: { - locales: ['en', 'es', 'de'] // highlight-line + locales: ['en', 'es', 'de'] // required + defaultLocale: 'en', // required }, }) ``` @@ -63,7 +64,7 @@ export default buildConfig({ rtl: true, }, ], - defaultLocale: 'en', + defaultLocale: 'en', // required fallback: true, }, }) From 2a1321c8132fc583d74d1669ea5185b78556a72f Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 7 Oct 2024 10:36:15 -0600 Subject: [PATCH 002/110] fix(ui): add unstyled prop to react-select so that payload styles take priority (#8572) Adds `unstyled={true}` prop to the react-select element so that payload's styles take priority. Due to the way react-select adds its own styles (injected into the page) they were higher specificity due to not being in a layer. Fixes this bug with our styles' specificity not being applied ![image](https://github.com/user-attachments/assets/1cd216a4-8125-4312-949e-168c7eb96186) Also fixes https://github.com/payloadcms/payload/issues/8507 --- packages/ui/src/elements/ReactSelect/index.scss | 2 +- packages/ui/src/elements/ReactSelect/index.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/elements/ReactSelect/index.scss b/packages/ui/src/elements/ReactSelect/index.scss index 60cc186ee5..4d13427d82 100644 --- a/packages/ui/src/elements/ReactSelect/index.scss +++ b/packages/ui/src/elements/ReactSelect/index.scss @@ -8,7 +8,6 @@ .react-select { .rs__control { @include formInput; - height: auto; padding: base(0.4) base(0.6); flex-wrap: nowrap; } @@ -45,6 +44,7 @@ .rs__group-heading { color: var(--theme-elevation-800); padding-left: base(0.5); + margin-top: base(0.25); margin-bottom: base(0.25); } diff --git a/packages/ui/src/elements/ReactSelect/index.tsx b/packages/ui/src/elements/ReactSelect/index.tsx index 4d364dc34e..f37fe4e3d6 100644 --- a/packages/ui/src/elements/ReactSelect/index.tsx +++ b/packages/ui/src/elements/ReactSelect/index.tsx @@ -106,6 +106,7 @@ const SelectAdapter: React.FC = (props) => { onMenuClose={onMenuClose} onMenuOpen={onMenuOpen} options={options} + unstyled={true} value={value} /> ) From 1b63ad4cb3b7ca96cc2bbc4a84191d2e74a33c73 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:20:07 -0400 Subject: [PATCH 003/110] fix: verify view is inaccessible (#8557) Fixes https://github.com/payloadcms/payload/issues/8470 Cleans up the way we redirect and where it happens. ## Improvements - When you verify, the admin panel will display a toast when it redirects you to the login route. This is contextually helpful as to what is happening. - Removes dead code path, as we always set the _verifiedToken to null after it is used. ## `handleAdminPage` renamed to `getRouteInfo` This function no longer handles routing. It kicks that responsibility back up to the initPage function. ## `isAdminAuthRoute` renamed to `isPublicAdminRoute` This was inversely named as it determines if a given route is public. Also simplifies deterministic logic here. ## `redirectUnauthenticatedUser` argument This is no longer used or needed. We can determine these things by using the `isPublicAdminRoute` function. ## View Style fixes - Reset Password - Forgot Password - Unauthorized --- packages/graphql/src/resolvers/auth/login.ts | 4 +- packages/graphql/src/resolvers/auth/logout.ts | 5 +- .../graphql/src/resolvers/auth/refresh.ts | 4 +- .../src/resolvers/auth/resetPassword.ts | 4 +- .../next/src/elements/FormHeader/index.scss | 6 ++ .../next/src/elements/FormHeader/index.tsx | 22 ++++++ packages/next/src/routes/rest/auth/login.ts | 4 +- packages/next/src/routes/rest/auth/logout.ts | 5 +- packages/next/src/routes/rest/auth/refresh.ts | 4 +- .../src/routes/rest/auth/registerFirstUser.ts | 4 +- .../src/routes/rest/auth/resetPassword.ts | 4 +- .../src/utilities/initPage/handleAdminPage.ts | 44 ++++------- .../utilities/initPage/handleAuthRedirect.ts | 75 ++++++++----------- packages/next/src/utilities/initPage/index.ts | 24 ++++-- .../next/src/utilities/initPage/shared.ts | 29 ++++--- .../ForgotPasswordForm/index.tsx | 28 ++++--- .../next/src/views/ForgotPassword/index.tsx | 42 ++++++----- .../index.tsx} | 39 ++++------ .../next/src/views/ResetPassword/index.scss | 26 +------ .../next/src/views/ResetPassword/index.tsx | 57 ++++++++------ .../next/src/views/Root/getViewFromConfig.ts | 6 -- packages/next/src/views/Root/index.tsx | 8 +- .../next/src/views/Unauthorized/index.scss | 29 ------- .../next/src/views/Unauthorized/index.tsx | 21 ++++-- .../next/src/views/Verify/index.client.tsx | 32 ++++++++ packages/next/src/views/Verify/index.tsx | 19 +++-- packages/payload/src/admin/views/types.ts | 1 + packages/payload/src/auth/cookies.ts | 41 +++++----- .../src/auth/operations/resetPassword.ts | 2 +- .../src/auth/operations/verifyEmail.ts | 3 - packages/payload/src/exports/shared.ts | 15 +++- packages/translations/src/languages/ar.ts | 4 +- packages/translations/src/languages/az.ts | 4 +- packages/translations/src/languages/bg.ts | 4 +- packages/translations/src/languages/cs.ts | 4 +- packages/translations/src/languages/de.ts | 4 +- packages/translations/src/languages/en.ts | 3 +- packages/translations/src/languages/es.ts | 4 +- packages/translations/src/languages/fa.ts | 4 +- packages/translations/src/languages/fr.ts | 4 +- packages/translations/src/languages/he.ts | 6 +- packages/translations/src/languages/hr.ts | 19 ++--- packages/translations/src/languages/hu.ts | 4 +- packages/translations/src/languages/it.ts | 4 +- packages/translations/src/languages/ja.ts | 4 +- packages/translations/src/languages/ko.ts | 4 +- packages/translations/src/languages/my.ts | 4 +- packages/translations/src/languages/nb.ts | 6 +- packages/translations/src/languages/nl.ts | 4 +- packages/translations/src/languages/pl.ts | 6 +- packages/translations/src/languages/pt.ts | 8 +- packages/translations/src/languages/ro.ts | 4 +- packages/translations/src/languages/rs.ts | 8 +- .../translations/src/languages/rsLatin.ts | 6 +- packages/translations/src/languages/ru.ts | 4 +- packages/translations/src/languages/sk.ts | 6 +- packages/translations/src/languages/sv.ts | 4 +- packages/translations/src/languages/th.ts | 4 +- packages/translations/src/languages/tr.ts | 4 +- packages/translations/src/languages/uk.ts | 4 +- packages/translations/src/languages/vi.ts | 6 +- packages/translations/src/languages/zh.ts | 8 +- packages/translations/src/languages/zhTw.ts | 6 +- packages/ui/src/providers/Auth/index.tsx | 11 ++- test/access-control/e2e.spec.ts | 7 +- test/helpers.ts | 1 + 66 files changed, 417 insertions(+), 377 deletions(-) create mode 100644 packages/next/src/elements/FormHeader/index.scss create mode 100644 packages/next/src/elements/FormHeader/index.tsx rename packages/next/src/views/ResetPassword/{index.client.tsx => ResetPasswordForm/index.tsx} (71%) create mode 100644 packages/next/src/views/Verify/index.client.tsx diff --git a/packages/graphql/src/resolvers/auth/login.ts b/packages/graphql/src/resolvers/auth/login.ts index 241c204ebe..fe588a563a 100644 --- a/packages/graphql/src/resolvers/auth/login.ts +++ b/packages/graphql/src/resolvers/auth/login.ts @@ -19,8 +19,8 @@ export function login(collection: Collection): any { const result = await loginOperation(options) const cookie = generatePayloadCookie({ - collectionConfig: collection.config, - payload: context.req.payload, + collectionAuthConfig: collection.config.auth, + cookiePrefix: context.req.payload.config.cookiePrefix, token: result.token, }) diff --git a/packages/graphql/src/resolvers/auth/logout.ts b/packages/graphql/src/resolvers/auth/logout.ts index c81dbb7994..7277ea5a2f 100644 --- a/packages/graphql/src/resolvers/auth/logout.ts +++ b/packages/graphql/src/resolvers/auth/logout.ts @@ -13,8 +13,9 @@ export function logout(collection: Collection): any { const result = await logoutOperation(options) const expiredCookie = generateExpiredPayloadCookie({ - collectionConfig: collection.config, - payload: context.req.payload, + collectionAuthConfig: collection.config.auth, + config: context.req.payload.config, + cookiePrefix: context.req.payload.config.cookiePrefix, }) context.headers['Set-Cookie'] = expiredCookie return result diff --git a/packages/graphql/src/resolvers/auth/refresh.ts b/packages/graphql/src/resolvers/auth/refresh.ts index ef25253e55..0f5dc8912c 100644 --- a/packages/graphql/src/resolvers/auth/refresh.ts +++ b/packages/graphql/src/resolvers/auth/refresh.ts @@ -14,8 +14,8 @@ export function refresh(collection: Collection): any { const result = await refreshOperation(options) const cookie = generatePayloadCookie({ - collectionConfig: collection.config, - payload: context.req.payload, + collectionAuthConfig: collection.config.auth, + cookiePrefix: context.req.payload.config.cookiePrefix, token: result.refreshedToken, }) context.headers['Set-Cookie'] = cookie diff --git a/packages/graphql/src/resolvers/auth/resetPassword.ts b/packages/graphql/src/resolvers/auth/resetPassword.ts index b17f4afa17..161e693225 100644 --- a/packages/graphql/src/resolvers/auth/resetPassword.ts +++ b/packages/graphql/src/resolvers/auth/resetPassword.ts @@ -23,8 +23,8 @@ export function resetPassword(collection: Collection): any { const result = await resetPasswordOperation(options) const cookie = generatePayloadCookie({ - collectionConfig: collection.config, - payload: context.req.payload, + collectionAuthConfig: collection.config.auth, + cookiePrefix: context.req.payload.config.cookiePrefix, token: result.token, }) context.headers['Set-Cookie'] = cookie diff --git a/packages/next/src/elements/FormHeader/index.scss b/packages/next/src/elements/FormHeader/index.scss new file mode 100644 index 0000000000..950597471b --- /dev/null +++ b/packages/next/src/elements/FormHeader/index.scss @@ -0,0 +1,6 @@ +.form-header { + display: flex; + flex-direction: column; + gap: calc(var(--base) * .5); + margin-bottom: var(--base); +} diff --git a/packages/next/src/elements/FormHeader/index.tsx b/packages/next/src/elements/FormHeader/index.tsx new file mode 100644 index 0000000000..22a07eb8f2 --- /dev/null +++ b/packages/next/src/elements/FormHeader/index.tsx @@ -0,0 +1,22 @@ +import React from 'react' + +import './index.scss' + +const baseClass = 'form-header' + +type Props = { + description?: React.ReactNode | string + heading: string +} +export function FormHeader({ description, heading }: Props) { + if (!heading) { + return null + } + + return ( +
+

{heading}

+ {Boolean(description) &&

{description}

} +
+ ) +} diff --git a/packages/next/src/routes/rest/auth/login.ts b/packages/next/src/routes/rest/auth/login.ts index 5714c023d8..f9f046c0d6 100644 --- a/packages/next/src/routes/rest/auth/login.ts +++ b/packages/next/src/routes/rest/auth/login.ts @@ -29,8 +29,8 @@ export const login: CollectionRouteHandler = async ({ collection, req }) => { }) const cookie = generatePayloadCookie({ - collectionConfig: collection.config, - payload: req.payload, + collectionAuthConfig: collection.config.auth, + cookiePrefix: req.payload.config.cookiePrefix, token: result.token, }) diff --git a/packages/next/src/routes/rest/auth/logout.ts b/packages/next/src/routes/rest/auth/logout.ts index e27c319909..cc49b48b2f 100644 --- a/packages/next/src/routes/rest/auth/logout.ts +++ b/packages/next/src/routes/rest/auth/logout.ts @@ -30,8 +30,9 @@ export const logout: CollectionRouteHandler = async ({ collection, req }) => { } const expiredCookie = generateExpiredPayloadCookie({ - collectionConfig: collection.config, - payload: req.payload, + collectionAuthConfig: collection.config.auth, + config: req.payload.config, + cookiePrefix: req.payload.config.cookiePrefix, }) headers.set('Set-Cookie', expiredCookie) diff --git a/packages/next/src/routes/rest/auth/refresh.ts b/packages/next/src/routes/rest/auth/refresh.ts index 9c77ca90c3..abf446cff9 100644 --- a/packages/next/src/routes/rest/auth/refresh.ts +++ b/packages/next/src/routes/rest/auth/refresh.ts @@ -20,8 +20,8 @@ export const refresh: CollectionRouteHandler = async ({ collection, req }) => { if (result.setCookie) { const cookie = generatePayloadCookie({ - collectionConfig: collection.config, - payload: req.payload, + collectionAuthConfig: collection.config.auth, + cookiePrefix: req.payload.config.cookiePrefix, token: result.refreshedToken, }) diff --git a/packages/next/src/routes/rest/auth/registerFirstUser.ts b/packages/next/src/routes/rest/auth/registerFirstUser.ts index 7743ce79ab..47995f8258 100644 --- a/packages/next/src/routes/rest/auth/registerFirstUser.ts +++ b/packages/next/src/routes/rest/auth/registerFirstUser.ts @@ -28,8 +28,8 @@ export const registerFirstUser: CollectionRouteHandler = async ({ collection, re }) const cookie = generatePayloadCookie({ - collectionConfig: collection.config, - payload: req.payload, + collectionAuthConfig: collection.config.auth, + cookiePrefix: req.payload.config.cookiePrefix, token: result.token, }) diff --git a/packages/next/src/routes/rest/auth/resetPassword.ts b/packages/next/src/routes/rest/auth/resetPassword.ts index b32ae23e5e..4cf7bbe1c4 100644 --- a/packages/next/src/routes/rest/auth/resetPassword.ts +++ b/packages/next/src/routes/rest/auth/resetPassword.ts @@ -20,8 +20,8 @@ export const resetPassword: CollectionRouteHandler = async ({ collection, req }) }) const cookie = generatePayloadCookie({ - collectionConfig: collection.config, - payload: req.payload, + collectionAuthConfig: collection.config.auth, + cookiePrefix: req.payload.config.cookiePrefix, token: result.token, }) diff --git a/packages/next/src/utilities/initPage/handleAdminPage.ts b/packages/next/src/utilities/initPage/handleAdminPage.ts index 24868a322d..5ef40467fe 100644 --- a/packages/next/src/utilities/initPage/handleAdminPage.ts +++ b/packages/next/src/utilities/initPage/handleAdminPage.ts @@ -1,25 +1,21 @@ -import type { - Permissions, - SanitizedCollectionConfig, - SanitizedConfig, - SanitizedGlobalConfig, -} from 'payload' +import type { SanitizedCollectionConfig, SanitizedConfig, SanitizedGlobalConfig } from 'payload' -import { notFound } from 'next/navigation.js' +import { getRouteWithoutAdmin, isAdminRoute } from './shared.js' -import { getRouteWithoutAdmin, isAdminAuthRoute, isAdminRoute } from './shared.js' - -export const handleAdminPage = ({ - adminRoute, - config, - permissions, - route, -}: { +type Args = { adminRoute: string config: SanitizedConfig - permissions: Permissions route: string -}) => { +} +type RouteInfo = { + collectionConfig?: SanitizedCollectionConfig + collectionSlug?: string + docID?: string + globalConfig?: SanitizedGlobalConfig + globalSlug?: string +} + +export function getRouteInfo({ adminRoute, config, route }: Args): RouteInfo { if (isAdminRoute({ adminRoute, config, route })) { const routeWithoutAdmin = getRouteWithoutAdmin({ adminRoute, route }) const routeSegments = routeWithoutAdmin.split('/').filter(Boolean) @@ -33,28 +29,18 @@ export const handleAdminPage = ({ if (collectionSlug) { collectionConfig = config.collections.find((collection) => collection.slug === collectionSlug) - - if (!collectionConfig) { - notFound() - } } if (globalSlug) { globalConfig = config.globals.find((global) => global.slug === globalSlug) - - if (!globalConfig) { - notFound() - } - } - - if (!permissions.canAccessAdmin && !isAdminAuthRoute({ adminRoute, config, route })) { - notFound() } return { collectionConfig, + collectionSlug, docID, globalConfig, + globalSlug, } } diff --git a/packages/next/src/utilities/initPage/handleAuthRedirect.ts b/packages/next/src/utilities/initPage/handleAuthRedirect.ts index 20393b6985..bba32ae471 100644 --- a/packages/next/src/utilities/initPage/handleAuthRedirect.ts +++ b/packages/next/src/utilities/initPage/handleAuthRedirect.ts @@ -1,57 +1,46 @@ +import type { User } from 'payload' + import { formatAdminURL } from '@payloadcms/ui/shared' -import { redirect } from 'next/navigation.js' import * as qs from 'qs-esm' -import { isAdminAuthRoute, isAdminRoute } from './shared.js' - -export const handleAuthRedirect = ({ - config, - redirectUnauthenticatedUser, - route, - searchParams, -}: { +type Args = { config - redirectUnauthenticatedUser: boolean | string route: string searchParams: { [key: string]: string | string[] } -}) => { + user?: User +} +export const handleAuthRedirect = ({ config, route, searchParams, user }: Args): string => { const { admin: { - routes: { login: loginRouteFromConfig }, + routes: { login: loginRouteFromConfig, unauthorized: unauthorizedRoute }, }, routes: { admin: adminRoute }, } = config - if (!isAdminAuthRoute({ adminRoute, config, route })) { - if (searchParams && 'redirect' in searchParams) { - delete searchParams.redirect - } - - const redirectRoute = encodeURIComponent( - route + Object.keys(searchParams ?? {}).length - ? `${qs.stringify(searchParams, { addQueryPrefix: true })}` - : undefined, - ) - - const adminLoginRoute = formatAdminURL({ adminRoute, path: loginRouteFromConfig }) - - const customLoginRoute = - typeof redirectUnauthenticatedUser === 'string' ? redirectUnauthenticatedUser : undefined - - const loginRoute = isAdminRoute({ adminRoute, config, route }) - ? adminLoginRoute - : customLoginRoute || loginRouteFromConfig - - const parsedLoginRouteSearchParams = qs.parse(loginRoute.split('?')[1] ?? '') - - const searchParamsWithRedirect = `${qs.stringify( - { - ...parsedLoginRouteSearchParams, - ...(redirectRoute ? { redirect: redirectRoute } : {}), - }, - { addQueryPrefix: true }, - )}` - - redirect(`${loginRoute.split('?')[0]}${searchParamsWithRedirect}`) + if (searchParams && 'redirect' in searchParams) { + delete searchParams.redirect } + + const redirectRoute = encodeURIComponent( + route + Object.keys(searchParams ?? {}).length + ? `${qs.stringify(searchParams, { addQueryPrefix: true })}` + : undefined, + ) + + const redirectTo = formatAdminURL({ + adminRoute, + path: user ? unauthorizedRoute : loginRouteFromConfig, + }) + + const parsedLoginRouteSearchParams = qs.parse(redirectTo.split('?')[1] ?? '') + + const searchParamsWithRedirect = `${qs.stringify( + { + ...parsedLoginRouteSearchParams, + ...(redirectRoute ? { redirect: redirectRoute } : {}), + }, + { addQueryPrefix: true }, + )}` + + return `${redirectTo.split('?')[0]}${searchParamsWithRedirect}` } diff --git a/packages/next/src/utilities/initPage/index.ts b/packages/next/src/utilities/initPage/index.ts index ff2ef34a28..fb402c3ab4 100644 --- a/packages/next/src/utilities/initPage/index.ts +++ b/packages/next/src/utilities/initPage/index.ts @@ -2,6 +2,7 @@ import type { InitPageResult, Locale, PayloadRequest, VisibleEntities } from 'pa import { findLocaleFromCode } from '@payloadcms/ui/shared' import { headers as getHeaders } from 'next/headers.js' +import { notFound } from 'next/navigation.js' import { createLocalReq, isEntityHidden, parseCookies } from 'payload' import * as qs from 'qs-esm' @@ -9,13 +10,13 @@ import type { Args } from './types.js' import { getPayloadHMR } from '../getPayloadHMR.js' import { initReq } from '../initReq.js' -import { handleAdminPage } from './handleAdminPage.js' +import { getRouteInfo } from './handleAdminPage.js' import { handleAuthRedirect } from './handleAuthRedirect.js' +import { isPublicAdminRoute } from './shared.js' export const initPage = async ({ config: configPromise, importMap, - redirectUnauthenticatedUser = false, route, searchParams, }: Args): Promise => { @@ -128,22 +129,30 @@ export const initPage = async ({ .filter(Boolean), } - if (redirectUnauthenticatedUser && !user) { - handleAuthRedirect({ + let redirectTo = null + + if ( + !permissions.canAccessAdmin && + !isPublicAdminRoute({ adminRoute, config: payload.config, route }) + ) { + redirectTo = handleAuthRedirect({ config: payload.config, - redirectUnauthenticatedUser, route, searchParams, + user, }) } - const { collectionConfig, docID, globalConfig } = handleAdminPage({ + const { collectionConfig, collectionSlug, docID, globalConfig, globalSlug } = getRouteInfo({ adminRoute, config: payload.config, - permissions, route, }) + if ((collectionSlug && !collectionConfig) || (globalSlug && !globalConfig)) { + return notFound() + } + return { collectionConfig, cookies, @@ -152,6 +161,7 @@ export const initPage = async ({ languageOptions, locale, permissions, + redirectTo, req, translations: i18n.translations, visibleEntities, diff --git a/packages/next/src/utilities/initPage/shared.ts b/packages/next/src/utilities/initPage/shared.ts index 986f573cd8..185d7ad7b7 100644 --- a/packages/next/src/utilities/initPage/shared.ts +++ b/packages/next/src/utilities/initPage/shared.ts @@ -1,6 +1,10 @@ import type { SanitizedConfig } from 'payload' -const authRouteKeys: (keyof SanitizedConfig['admin']['routes'])[] = [ +// Routes that require admin authentication +const publicAdminRoutes: (keyof Pick< + SanitizedConfig['admin']['routes'], + 'createFirstUser' | 'forgot' | 'inactivity' | 'login' | 'logout' | 'reset' | 'unauthorized' +>)[] = [ 'createFirstUser', 'forgot', 'login', @@ -13,17 +17,16 @@ const authRouteKeys: (keyof SanitizedConfig['admin']['routes'])[] = [ export const isAdminRoute = ({ adminRoute, - config, route, }: { adminRoute: string config: SanitizedConfig route: string }): boolean => { - return route.startsWith(adminRoute) && !isAdminAuthRoute({ adminRoute, config, route }) + return route.startsWith(adminRoute) } -export const isAdminAuthRoute = ({ +export const isPublicAdminRoute = ({ adminRoute, config, route, @@ -32,13 +35,17 @@ export const isAdminAuthRoute = ({ config: SanitizedConfig route: string }): boolean => { - const authRoutes = config.admin?.routes - ? Object.entries(config.admin.routes) - .filter(([key]) => authRouteKeys.includes(key as keyof SanitizedConfig['admin']['routes'])) - .map(([_, value]) => value) - : [] - - return authRoutes.some((r) => getRouteWithoutAdmin({ adminRoute, route }).startsWith(r)) + return publicAdminRoutes.some((routeSegment) => { + const segment = config.admin?.routes?.[routeSegment] || routeSegment + const routeWithoutAdmin = getRouteWithoutAdmin({ adminRoute, route }) + if (routeWithoutAdmin.startsWith(segment)) { + return true + } else if (routeWithoutAdmin.includes('/verify/')) { + return true + } else { + return false + } + }) } export const getRouteWithoutAdmin = ({ diff --git a/packages/next/src/views/ForgotPassword/ForgotPasswordForm/index.tsx b/packages/next/src/views/ForgotPassword/ForgotPasswordForm/index.tsx index 8c1b15496b..c5f4833faa 100644 --- a/packages/next/src/views/ForgotPassword/ForgotPasswordForm/index.tsx +++ b/packages/next/src/views/ForgotPassword/ForgotPasswordForm/index.tsx @@ -5,7 +5,9 @@ import type { FormState, PayloadRequest } from 'payload' import { EmailField, Form, FormSubmit, TextField, useConfig, useTranslation } from '@payloadcms/ui' import { email, text } from 'payload/shared' -import React, { Fragment, useState } from 'react' +import React, { useState } from 'react' + +import { FormHeader } from '../../../elements/FormHeader/index.js' export const ForgotPasswordForm: React.FC = () => { const { config } = useConfig() @@ -54,10 +56,10 @@ export const ForgotPasswordForm: React.FC = () => { if (hasSubmitted) { return ( - -

{t('authentication:emailSent')}

-

{t('authentication:checkYourEmailForPasswordReset')}

-
+ ) } @@ -68,12 +70,14 @@ export const ForgotPasswordForm: React.FC = () => { initialState={initialState} method="POST" > -

{t('authentication:forgotPassword')}

-

- {loginWithUsername - ? t('authentication:forgotPasswordUsernameInstructions') - : t('authentication:forgotPasswordEmailInstructions')} -

+ {loginWithUsername ? ( { } /> )} - {t('general:submit')} + {t('general:submit')} ) } diff --git a/packages/next/src/views/ForgotPassword/index.tsx b/packages/next/src/views/ForgotPassword/index.tsx index 108638df07..ec154248d2 100644 --- a/packages/next/src/views/ForgotPassword/index.tsx +++ b/packages/next/src/views/ForgotPassword/index.tsx @@ -5,6 +5,7 @@ import { formatAdminURL, Translation } from '@payloadcms/ui/shared' import LinkImport from 'next/link.js' import React, { Fragment } from 'react' +import { FormHeader } from '../../elements/FormHeader/index.js' import { ForgotPasswordForm } from './ForgotPasswordForm/index.js' export { generateForgotPasswordMetadata } from './meta.js' @@ -31,26 +32,27 @@ export const ForgotPasswordView: React.FC = ({ initPageResult }) if (user) { return ( -

{i18n.t('authentication:alreadyLoggedIn')}

-

- ( - - {children} - - ), - }} - i18nKey="authentication:loggedInChangePassword" - t={i18n.t} - /> -

-
+ ( + + {children} + + ), + }} + i18nKey="authentication:loggedInChangePassword" + t={i18n.t} + /> + } + heading={i18n.t('authentication:alreadyLoggedIn')} + /> diff --git a/packages/next/src/views/ResetPassword/index.client.tsx b/packages/next/src/views/ResetPassword/ResetPasswordForm/index.tsx similarity index 71% rename from packages/next/src/views/ResetPassword/index.client.tsx rename to packages/next/src/views/ResetPassword/ResetPasswordForm/index.tsx index 6128de4c96..c0af119d6f 100644 --- a/packages/next/src/views/ResetPassword/index.client.tsx +++ b/packages/next/src/views/ResetPassword/ResetPasswordForm/index.tsx @@ -1,6 +1,4 @@ 'use client' -import type { FormState } from 'payload' - import { ConfirmPasswordField, Form, @@ -13,8 +11,8 @@ import { } from '@payloadcms/ui' import { formatAdminURL } from '@payloadcms/ui/shared' import { useRouter } from 'next/navigation.js' +import { type FormState } from 'payload' import React from 'react' -import { toast } from 'sonner' type Args = { readonly token: string @@ -33,7 +31,7 @@ const initialState: FormState = { }, } -export const ResetPasswordClient: React.FC = ({ token }) => { +export const ResetPasswordForm: React.FC = ({ token }) => { const i18n = useTranslation() const { config: { @@ -47,26 +45,21 @@ export const ResetPasswordClient: React.FC = ({ token }) => { } = useConfig() const history = useRouter() - const { fetchFullUser } = useAuth() - const onSuccess = React.useCallback( - async (data) => { - if (data.token) { - await fetchFullUser() - history.push(adminRoute) - } else { - history.push( - formatAdminURL({ - adminRoute, - path: loginRoute, - }), - ) - toast.success(i18n.t('general:updatedSuccessfully')) - } - }, - [adminRoute, fetchFullUser, history, i18n, loginRoute], - ) + const onSuccess = React.useCallback(async () => { + const user = await fetchFullUser() + if (user) { + history.push(adminRoute) + } else { + history.push( + formatAdminURL({ + adminRoute, + path: loginRoute, + }), + ) + } + }, [adminRoute, fetchFullUser, history, loginRoute]) return (
= ({ token }) => { method="POST" onSuccess={onSuccess} > -
+
form { - width: 100%; - - & > .inputWrap { - display: flex; - flex-direction: column; - gap: base(0.8); - - > * { - margin: 0; - } - } - } - - & > .btn { - margin: 0; - } } } } diff --git a/packages/next/src/views/ResetPassword/index.tsx b/packages/next/src/views/ResetPassword/index.tsx index 4b25efbb96..0ddc1f05e9 100644 --- a/packages/next/src/views/ResetPassword/index.tsx +++ b/packages/next/src/views/ResetPassword/index.tsx @@ -5,8 +5,9 @@ import { formatAdminURL, Translation } from '@payloadcms/ui/shared' import LinkImport from 'next/link.js' import React from 'react' -import { ResetPasswordClient } from './index.client.js' +import { FormHeader } from '../../elements/FormHeader/index.js' import './index.scss' +import { ResetPasswordForm } from './ResetPasswordForm/index.js' export const resetPasswordBaseClass = 'reset-password' @@ -29,7 +30,7 @@ export const ResetPassword: React.FC = ({ initPageResult, params const { admin: { - routes: { account: accountRoute }, + routes: { account: accountRoute, login: loginRoute }, }, routes: { admin: adminRoute }, } = config @@ -37,25 +38,27 @@ export const ResetPassword: React.FC = ({ initPageResult, params if (user) { return (
-

{i18n.t('authentication:alreadyLoggedIn')}

-

- ( - - {children} - - ), - }} - i18nKey="authentication:loggedInChangePassword" - t={i18n.t} - /> -

+ ( + + {children} + + ), + }} + i18nKey="authentication:loggedInChangePassword" + t={i18n.t} + /> + } + heading={i18n.t('authentication:alreadyLoggedIn')} + /> @@ -65,8 +68,16 @@ export const ResetPassword: React.FC = ({ initPageResult, params return (
-

{i18n.t('authentication:resetPassword')}

- + + + + {i18n.t('authentication:backToLogin')} +
) } diff --git a/packages/next/src/views/Root/getViewFromConfig.ts b/packages/next/src/views/Root/getViewFromConfig.ts index 2185948f3b..b7851ca39e 100644 --- a/packages/next/src/views/Root/getViewFromConfig.ts +++ b/packages/next/src/views/Root/getViewFromConfig.ts @@ -92,7 +92,6 @@ export const getViewFromConfig = ({ } templateClassName = 'dashboard' templateType = 'default' - initPageOptions.redirectUnauthenticatedUser = true } break } @@ -132,7 +131,6 @@ export const getViewFromConfig = ({ templateType = 'minimal' if (viewKey === 'account') { - initPageOptions.redirectUnauthenticatedUser = true templateType = 'default' } } @@ -150,7 +148,6 @@ export const getViewFromConfig = ({ if (isCollection) { // --> /collections/:collectionSlug - initPageOptions.redirectUnauthenticatedUser = true ViewToRender = { Component: ListView, @@ -160,7 +157,6 @@ export const getViewFromConfig = ({ templateType = 'default' } else if (isGlobal) { // --> /globals/:globalSlug - initPageOptions.redirectUnauthenticatedUser = true ViewToRender = { Component: DocumentView, @@ -187,7 +183,6 @@ export const getViewFromConfig = ({ // --> /collections/:collectionSlug/:id/versions // --> /collections/:collectionSlug/:id/versions/:versionId // --> /collections/:collectionSlug/:id/api - initPageOptions.redirectUnauthenticatedUser = true ViewToRender = { Component: DocumentView, @@ -201,7 +196,6 @@ export const getViewFromConfig = ({ // --> /globals/:globalSlug/preview // --> /globals/:globalSlug/versions/:versionId // --> /globals/:globalSlug/api - initPageOptions.redirectUnauthenticatedUser = true ViewToRender = { Component: DocumentView, diff --git a/packages/next/src/views/Root/index.tsx b/packages/next/src/views/Root/index.tsx index 7a9ed17e57..db3cfa53c4 100644 --- a/packages/next/src/views/Root/index.tsx +++ b/packages/next/src/views/Root/index.tsx @@ -72,6 +72,10 @@ export const RootPage = async ({ const initPageResult = await initPage(initPageOptions) + if (typeof initPageResult?.redirectTo === 'string') { + redirect(initPageResult.redirectTo) + } + if (initPageResult) { dbHasUser = await initPageResult?.req.payload.db .findOne({ @@ -137,8 +141,8 @@ export const RootPage = async ({ visibleEntities={{ // The reason we are not passing in initPageResult.visibleEntities directly is due to a "Cannot assign to read only property of object '#" error introduced in React 19 // which this caused as soon as initPageResult.visibleEntities is passed in - collections: initPageResult.visibleEntities?.collections, - globals: initPageResult.visibleEntities?.globals, + collections: initPageResult?.visibleEntities?.collections, + globals: initPageResult?.visibleEntities?.globals, }} > {RenderedView} diff --git a/packages/next/src/views/Unauthorized/index.scss b/packages/next/src/views/Unauthorized/index.scss index 697c9b9975..125ffe9e08 100644 --- a/packages/next/src/views/Unauthorized/index.scss +++ b/packages/next/src/views/Unauthorized/index.scss @@ -2,37 +2,8 @@ @layer payload-default { .unauthorized { - margin-top: var(--base); - - & > * { - &:first-child { - margin-top: 0; - } - &:last-child { - margin-bottom: 0; - } - } - &__button { margin: 0; } - - &--margin-top-large { - margin-top: calc(var(--base) * 2); - } - - @include large-break { - &--margin-top-large { - margin-top: var(--base); - } - } - - @include small-break { - margin-top: calc(var(--base) / 2); - - &--margin-top-large { - margin-top: calc(var(--base) / 2); - } - } } } diff --git a/packages/next/src/views/Unauthorized/index.tsx b/packages/next/src/views/Unauthorized/index.tsx index 2940156246..5ace45cf22 100644 --- a/packages/next/src/views/Unauthorized/index.tsx +++ b/packages/next/src/views/Unauthorized/index.tsx @@ -1,9 +1,11 @@ import type { AdminViewComponent, PayloadServerReactComponent } from 'payload' -import { Button, Gutter } from '@payloadcms/ui' +import { Button } from '@payloadcms/ui' +import { formatAdminURL } from '@payloadcms/ui/shared' import LinkImport from 'next/link.js' import React from 'react' +import { FormHeader } from '../../elements/FormHeader/index.js' import './index.scss' const Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default @@ -23,24 +25,31 @@ export const UnauthorizedView: PayloadServerReactComponent = admin: { routes: { logout: logoutRoute }, }, + routes: { admin: adminRoute }, }, }, }, } = initPageResult return ( - -

{i18n.t('error:unauthorized')}

-

{i18n.t('error:notAllowedToAccessPage')}

+
+ + - +
) } diff --git a/packages/next/src/views/Verify/index.client.tsx b/packages/next/src/views/Verify/index.client.tsx new file mode 100644 index 0000000000..889e3bf389 --- /dev/null +++ b/packages/next/src/views/Verify/index.client.tsx @@ -0,0 +1,32 @@ +'use client' +import { toast } from '@payloadcms/ui' +import { useRouter } from 'next/navigation.js' +import React, { useEffect } from 'react' + +type Props = { + message: string + redirectTo: string +} +export function ToastAndRedirect({ message, redirectTo }: Props) { + const router = useRouter() + const hasToastedRef = React.useRef(false) + + useEffect(() => { + let timeoutID + if (toast) { + timeoutID = setTimeout(() => { + toast.success(message) + hasToastedRef.current = true + router.push(redirectTo) + }, 100) + } + + return () => { + if (timeoutID) { + clearTimeout(timeoutID) + } + } + }, [router, redirectTo, message]) + + return null +} diff --git a/packages/next/src/views/Verify/index.tsx b/packages/next/src/views/Verify/index.tsx index 19edad0c81..cee82f0e8d 100644 --- a/packages/next/src/views/Verify/index.tsx +++ b/packages/next/src/views/Verify/index.tsx @@ -1,10 +1,10 @@ import type { AdminViewProps } from 'payload' import { formatAdminURL } from '@payloadcms/ui/shared' -import { redirect } from 'next/navigation.js' import React from 'react' import { Logo } from '../../elements/Logo/index.js' +import { ToastAndRedirect } from './index.client.js' import './index.scss' export const verifyBaseClass = 'verify' @@ -33,6 +33,7 @@ export const Verify: React.FC = async ({ } = config let textToRender + let isVerified = false try { await req.payload.verifyEmail({ @@ -40,15 +41,21 @@ export const Verify: React.FC = async ({ token, }) - return redirect(formatAdminURL({ adminRoute, path: '/login' })) + isVerified = true + textToRender = req.t('authentication:emailVerified') } catch (e) { - // already verified - if (e?.status === 202) { - redirect(formatAdminURL({ adminRoute, path: '/login' })) - } textToRender = req.t('authentication:unableToVerify') } + if (isVerified) { + return ( + + ) + } + return (
diff --git a/packages/payload/src/admin/views/types.ts b/packages/payload/src/admin/views/types.ts index 85650010ba..cda94b4780 100644 --- a/packages/payload/src/admin/views/types.ts +++ b/packages/payload/src/admin/views/types.ts @@ -53,6 +53,7 @@ export type InitPageResult = { languageOptions: LanguageOptions locale?: Locale permissions: Permissions + redirectTo?: string req: PayloadRequest translations: ClientTranslationsObject visibleEntities: VisibleEntities diff --git a/packages/payload/src/auth/cookies.ts b/packages/payload/src/auth/cookies.ts index 31d6f24c09..67e69dfdb1 100644 --- a/packages/payload/src/auth/cookies.ts +++ b/packages/payload/src/auth/cookies.ts @@ -1,4 +1,3 @@ -import type { Payload } from '../index.js' import type { SanitizedCollectionConfig } from './../collections/config/types.js' type CookieOptions = { @@ -125,63 +124,63 @@ export const getCookieExpiration = ({ seconds = 7200 }: GetCookieExpirationArgs) type GeneratePayloadCookieArgs = { /* The auth collection config */ - collectionConfig: SanitizedCollectionConfig - /* An instance of payload */ - payload: Payload + collectionAuthConfig: SanitizedCollectionConfig['auth'] + /* Prefix to scope the cookie */ + cookiePrefix: string /* The returnAs value */ returnCookieAsObject?: boolean /* The token to be stored in the cookie */ token: string } export const generatePayloadCookie = ({ - collectionConfig, - payload, + collectionAuthConfig, + cookiePrefix, returnCookieAsObject = false, token, }: T): T['returnCookieAsObject'] extends true ? CookieObject : string => { const sameSite = - typeof collectionConfig.auth.cookies.sameSite === 'string' - ? collectionConfig.auth.cookies.sameSite - : collectionConfig.auth.cookies.sameSite + typeof collectionAuthConfig.cookies.sameSite === 'string' + ? collectionAuthConfig.cookies.sameSite + : collectionAuthConfig.cookies.sameSite ? 'Strict' : undefined return generateCookie({ - name: `${payload.config.cookiePrefix}-token`, - domain: collectionConfig.auth.cookies.domain ?? undefined, - expires: getCookieExpiration({ seconds: collectionConfig.auth.tokenExpiration }), + name: `${cookiePrefix}-token`, + domain: collectionAuthConfig.cookies.domain ?? undefined, + expires: getCookieExpiration({ seconds: collectionAuthConfig.tokenExpiration }), httpOnly: true, path: '/', returnCookieAsObject, sameSite, - secure: collectionConfig.auth.cookies.secure, + secure: collectionAuthConfig.cookies.secure, value: token, }) } export const generateExpiredPayloadCookie = >({ - collectionConfig, - payload, + collectionAuthConfig, + cookiePrefix, returnCookieAsObject = false, }: T): T['returnCookieAsObject'] extends true ? CookieObject : string => { const sameSite = - typeof collectionConfig.auth.cookies.sameSite === 'string' - ? collectionConfig.auth.cookies.sameSite - : collectionConfig.auth.cookies.sameSite + typeof collectionAuthConfig.cookies.sameSite === 'string' + ? collectionAuthConfig.cookies.sameSite + : collectionAuthConfig.cookies.sameSite ? 'Strict' : undefined const expires = new Date(Date.now() - 1000) return generateCookie({ - name: `${payload.config.cookiePrefix}-token`, - domain: collectionConfig.auth.cookies.domain ?? undefined, + name: `${cookiePrefix}-token`, + domain: collectionAuthConfig.cookies.domain ?? undefined, expires, httpOnly: true, path: '/', returnCookieAsObject, sameSite, - secure: collectionConfig.auth.cookies.secure, + secure: collectionAuthConfig.cookies.secure, }) } diff --git a/packages/payload/src/auth/operations/resetPassword.ts b/packages/payload/src/auth/operations/resetPassword.ts index ac430e42a0..ea31e55121 100644 --- a/packages/payload/src/auth/operations/resetPassword.ts +++ b/packages/payload/src/auth/operations/resetPassword.ts @@ -81,7 +81,7 @@ export const resetPasswordOperation = async (args: Arguments): Promise = user.resetPasswordExpiration = new Date().toISOString() if (collectionConfig.auth.verify) { - user._verified = true + user._verified = Boolean(user._verified) } const doc = await payload.db.updateOne({ diff --git a/packages/payload/src/auth/operations/verifyEmail.ts b/packages/payload/src/auth/operations/verifyEmail.ts index 0ae94c1f13..fff5d842ea 100644 --- a/packages/payload/src/auth/operations/verifyEmail.ts +++ b/packages/payload/src/auth/operations/verifyEmail.ts @@ -34,9 +34,6 @@ export const verifyEmailOperation = async (args: Args): Promise => { if (!user) { throw new APIError('Verification token is invalid.', httpStatus.FORBIDDEN) } - if (user && user._verified === true) { - throw new APIError('This account has already been activated.', httpStatus.ACCEPTED) - } await req.payload.db.updateOne({ id: user.id, diff --git a/packages/payload/src/exports/shared.ts b/packages/payload/src/exports/shared.ts index 74fcb9ef40..510c6dc98e 100644 --- a/packages/payload/src/exports/shared.ts +++ b/packages/payload/src/exports/shared.ts @@ -1,5 +1,13 @@ +export { + generateCookie, + generateExpiredPayloadCookie, + generatePayloadCookie, + getCookieExpiration, + parseCookies, +} from '../auth/cookies.js' export { parsePayloadComponent } from '../bin/generateImportMap/parsePayloadComponent.js' export { defaults as collectionDefaults } from '../collections/config/defaults.js' + export { serverProps } from '../config/types.js' export { @@ -20,19 +28,19 @@ export { tabHasName, valueIsValueWithRelation, } from '../fields/config/types.js' - export * from '../fields/validations.js' + export { validOperators } from '../types/constants.js' export { formatFilesize } from '../uploads/formatFilesize.js' export { isImage } from '../uploads/isImage.js' - export { deepCopyObject, deepCopyObjectComplex, deepCopyObjectSimple, } from '../utilities/deepCopyObject.js' + export { deepMerge, deepMergeWithCombinedArrays, @@ -41,8 +49,8 @@ export { } from '../utilities/deepMerge.js' export { fieldSchemaToJSON } from '../utilities/fieldSchemaToJSON.js' - export { getDataByPath } from '../utilities/getDataByPath.js' + export { getSiblingData } from '../utilities/getSiblingData.js' export { getUniqueListBy } from '../utilities/getUniqueListBy.js' @@ -66,6 +74,5 @@ export { unflatten } from '../utilities/unflatten.js' export { wait } from '../utilities/wait.js' export { default as wordBoundariesRegex } from '../utilities/wordBoundariesRegex.js' - export { versionDefaults } from '../versions/defaults.js' export { deepMergeSimple } from '@payloadcms/translations/utilities' diff --git a/packages/translations/src/languages/ar.ts b/packages/translations/src/languages/ar.ts index 9fc249f6c5..f3e355cef9 100644 --- a/packages/translations/src/languages/ar.ts +++ b/packages/translations/src/languages/ar.ts @@ -184,7 +184,7 @@ export const arTranslations: DefaultTranslationsObject = { backToDashboard: 'العودة للوحة التّحكّم', cancel: 'إلغاء', changesNotSaved: 'لم يتمّ حفظ التّغييرات. إن غادرت الآن ، ستفقد تغييراتك.', - clearAll: undefined, + clearAll: 'امسح الكل', close: 'إغلاق', collapse: 'طيّ', collections: 'المجموعات', @@ -407,7 +407,7 @@ export const arTranslations: DefaultTranslationsObject = { lastSavedAgo: 'تم الحفظ آخر مرة قبل {{distance}}', noFurtherVersionsFound: 'لم يتمّ العثور على نسخات أخرى', noRowsFound: 'لم يتمّ العثور على {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'لم يتم اختيار {{label}}', preview: 'معاينة', previouslyPublished: 'نشر سابقا', problemRestoringVersion: 'حدث خطأ في استعادة هذه النّسخة', diff --git a/packages/translations/src/languages/az.ts b/packages/translations/src/languages/az.ts index 14dd927217..f60668c88d 100644 --- a/packages/translations/src/languages/az.ts +++ b/packages/translations/src/languages/az.ts @@ -186,7 +186,7 @@ export const azTranslations: DefaultTranslationsObject = { cancel: 'Ləğv et', changesNotSaved: 'Dəyişiklikləriniz saxlanılmayıb. İndi çıxsanız, dəyişikliklərinizi itirəcəksiniz.', - clearAll: undefined, + clearAll: 'Hamısını təmizlə', close: 'Bağla', collapse: 'Bağla', collections: 'Kolleksiyalar', @@ -414,7 +414,7 @@ export const azTranslations: DefaultTranslationsObject = { lastSavedAgo: '{{distance}} əvvəl son yadda saxlanıldı', noFurtherVersionsFound: 'Başqa versiyalar tapılmadı', noRowsFound: 'Heç bir {{label}} tapılmadı', - noRowsSelected: undefined, + noRowsSelected: 'Heç bir {{label}} seçilməyib', preview: 'Öncədən baxış', previouslyPublished: 'Daha əvvəl nəşr olunmuş', problemRestoringVersion: 'Bu versiyanın bərpasında problem yaşandı', diff --git a/packages/translations/src/languages/bg.ts b/packages/translations/src/languages/bg.ts index 83e684e359..1494370e2b 100644 --- a/packages/translations/src/languages/bg.ts +++ b/packages/translations/src/languages/bg.ts @@ -185,7 +185,7 @@ export const bgTranslations: DefaultTranslationsObject = { backToDashboard: 'Обратно към таблото', cancel: 'Отмени', changesNotSaved: 'Промените ти не са запазени. Ако напуснеш сега, ще ги загубиш.', - clearAll: undefined, + clearAll: 'Изчисти всичко', close: 'Затвори', collapse: 'Свий', collections: 'Колекции', @@ -413,7 +413,7 @@ export const bgTranslations: DefaultTranslationsObject = { lastSavedAgo: 'последно запазено преди {{distance}}', noFurtherVersionsFound: 'Не са открити повече версии', noRowsFound: 'Не е открит {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Не е избран {{label}}', preview: 'Предварителен преглед', previouslyPublished: 'Предишно публикувано', problemRestoringVersion: 'Имаше проблем при възстановяването на тази версия', diff --git a/packages/translations/src/languages/cs.ts b/packages/translations/src/languages/cs.ts index 3da8072bd9..5b83192f28 100644 --- a/packages/translations/src/languages/cs.ts +++ b/packages/translations/src/languages/cs.ts @@ -185,7 +185,7 @@ export const csTranslations: DefaultTranslationsObject = { backToDashboard: 'Zpět na nástěnku', cancel: 'Zrušit', changesNotSaved: 'Vaše změny nebyly uloženy. Pokud teď odejdete, ztratíte své změny.', - clearAll: undefined, + clearAll: 'Vymazat vše', close: 'Zavřít', collapse: 'Sbalit', collections: 'Kolekce', @@ -412,7 +412,7 @@ export const csTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Naposledy uloženo před {{distance}}', noFurtherVersionsFound: 'Nenalezeny další verze', noRowsFound: 'Nenalezen {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Nebyl vybrán žádný {{label}}', preview: 'Náhled', previouslyPublished: 'Dříve publikováno', problemRestoringVersion: 'Při obnovování této verze došlo k problému', diff --git a/packages/translations/src/languages/de.ts b/packages/translations/src/languages/de.ts index 3f9353b8c5..5a94770b85 100644 --- a/packages/translations/src/languages/de.ts +++ b/packages/translations/src/languages/de.ts @@ -190,7 +190,7 @@ export const deTranslations: DefaultTranslationsObject = { cancel: 'Abbrechen', changesNotSaved: 'Deine Änderungen wurden nicht gespeichert. Wenn du diese Seite verlässt, gehen deine Änderungen verloren.', - clearAll: undefined, + clearAll: 'Alles löschen', close: 'Schließen', collapse: 'Einklappen', collections: 'Sammlungen', @@ -418,7 +418,7 @@ export const deTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Zuletzt vor {{distance}} gespeichert', noFurtherVersionsFound: 'Keine weiteren Versionen vorhanden', noRowsFound: 'Kein {{label}} gefunden', - noRowsSelected: undefined, + noRowsSelected: 'Kein {{label}} ausgewählt', preview: 'Vorschau', previouslyPublished: 'Zuvor Veröffentlicht', problemRestoringVersion: 'Es gab ein Problem bei der Wiederherstellung dieser Version', diff --git a/packages/translations/src/languages/en.ts b/packages/translations/src/languages/en.ts index 9b91245aea..312db967a4 100644 --- a/packages/translations/src/languages/en.ts +++ b/packages/translations/src/languages/en.ts @@ -66,9 +66,8 @@ export const enTranslations = { successfullyRegisteredFirstUser: 'Successfully registered first user.', successfullyUnlocked: 'Successfully unlocked', tokenRefreshSuccessful: 'Token refresh successful.', - username: 'Username', - unableToVerify: 'Unable to Verify', + username: 'Username', verified: 'Verified', verifiedSuccessfully: 'Verified Successfully', verify: 'Verify', diff --git a/packages/translations/src/languages/es.ts b/packages/translations/src/languages/es.ts index 41e5d351f4..fa123ff028 100644 --- a/packages/translations/src/languages/es.ts +++ b/packages/translations/src/languages/es.ts @@ -190,7 +190,7 @@ export const esTranslations: DefaultTranslationsObject = { cancel: 'Cancelar', changesNotSaved: 'Tus cambios no han sido guardados. Si te sales ahora, se perderán tus cambios.', - clearAll: undefined, + clearAll: 'Borrar todo', close: 'Cerrar', collapse: 'Colapsar', collections: 'Colecciones', @@ -418,7 +418,7 @@ export const esTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Guardado por última vez hace {{distance}}', noFurtherVersionsFound: 'No se encontraron más versiones', noRowsFound: 'No encontramos {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'No se ha seleccionado ninguna {{etiqueta}}', preview: 'Previsualizar', previouslyPublished: 'Publicado Anteriormente', problemRestoringVersion: 'Ocurrió un problema al restaurar esta versión', diff --git a/packages/translations/src/languages/fa.ts b/packages/translations/src/languages/fa.ts index e8360788dc..49e61bb8e4 100644 --- a/packages/translations/src/languages/fa.ts +++ b/packages/translations/src/languages/fa.ts @@ -185,7 +185,7 @@ export const faTranslations: DefaultTranslationsObject = { cancel: 'لغو', changesNotSaved: 'تغییرات شما ذخیره نشده، اگر این برگه را ترک کنید. تمام تغییرات از دست خواهد رفت.', - clearAll: undefined, + clearAll: 'همه را پاک کنید', close: 'بستن', collapse: 'بستن', collections: 'مجموعه‌ها', @@ -411,7 +411,7 @@ export const faTranslations: DefaultTranslationsObject = { lastSavedAgo: 'آخرین بار {{distance}} پیش ذخیره شد', noFurtherVersionsFound: 'نگارش دیگری یافت نشد', noRowsFound: 'هیچ {{label}} یافت نشد', - noRowsSelected: undefined, + noRowsSelected: 'هیچ {{label}} ای انتخاب نشده است', preview: 'پیش‌نمایش', previouslyPublished: 'قبلا منتشر شده', problemRestoringVersion: 'مشکلی در بازیابی این نگارش وجود دارد', diff --git a/packages/translations/src/languages/fr.ts b/packages/translations/src/languages/fr.ts index bdd460a903..14b38f6e82 100644 --- a/packages/translations/src/languages/fr.ts +++ b/packages/translations/src/languages/fr.ts @@ -193,7 +193,7 @@ export const frTranslations: DefaultTranslationsObject = { cancel: 'Annuler', changesNotSaved: 'Vos modifications n’ont pas été enregistrées. Vous perdrez vos modifications si vous quittez maintenant.', - clearAll: undefined, + clearAll: 'Tout effacer', close: 'Fermer', collapse: 'Réduire', collections: 'Collections', @@ -425,7 +425,7 @@ export const frTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Dernière sauvegarde il y a {{distance}}', noFurtherVersionsFound: 'Aucune autre version trouvée', noRowsFound: 'Aucun(e) {{label}} trouvé(e)', - noRowsSelected: undefined, + noRowsSelected: 'Aucune {{étiquette}} sélectionnée', preview: 'Aperçu', previouslyPublished: 'Précédemment publié', problemRestoringVersion: 'Un problème est survenu lors de la restauration de cette version', diff --git a/packages/translations/src/languages/he.ts b/packages/translations/src/languages/he.ts index 8a8c46ec8e..1acdb4305c 100644 --- a/packages/translations/src/languages/he.ts +++ b/packages/translations/src/languages/he.ts @@ -181,7 +181,7 @@ export const heTranslations: DefaultTranslationsObject = { backToDashboard: 'חזרה ללוח המחוונים', cancel: 'ביטול', changesNotSaved: 'השינויים שלך לא נשמרו. אם תצא כעת, תאבד את השינויים שלך.', - clearAll: undefined, + clearAll: 'נקה הכל', close: 'סגור', collapse: 'כווץ', collections: 'אוספים', @@ -260,7 +260,7 @@ export const heTranslations: DefaultTranslationsObject = { nothingFound: 'לא נמצא כלום', noValue: 'אין ערך', of: 'מתוך', - only: undefined, + only: 'רק', open: 'פתח', or: 'או', order: 'סדר', @@ -401,7 +401,7 @@ export const heTranslations: DefaultTranslationsObject = { lastSavedAgo: 'נשמר לאחרונה לפני {{distance}}', noFurtherVersionsFound: 'לא נמצאו עוד גרסאות', noRowsFound: 'לא נמצאו {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'לא נבחר {{תווית}}', preview: 'תצוגה מקדימה', previouslyPublished: 'פורסם בעבר', problemRestoringVersion: 'הייתה בעיה בשחזור הגרסה הזו', diff --git a/packages/translations/src/languages/hr.ts b/packages/translations/src/languages/hr.ts index 2fd03b066f..3d60e33324 100644 --- a/packages/translations/src/languages/hr.ts +++ b/packages/translations/src/languages/hr.ts @@ -34,7 +34,6 @@ export const hrTranslations: DefaultTranslationsObject = { generateNewAPIKey: 'Generiraj novi API ključ', generatingNewAPIKeyWillInvalidate: 'Generiranje novog API ključa će <1>poništiti prethodni ključ. Jeste li sigurni da želite nastaviti?', - newAPIKeyGenerated: 'New API ključ generiran.', lockUntil: 'Zaključaj dok', logBackIn: 'Ponovno se prijavite', loggedIn: 'Za prijavu s drugim korisničkim računom potrebno je prvo <0>odjaviti se', @@ -53,7 +52,8 @@ export const hrTranslations: DefaultTranslationsObject = { logoutSuccessful: 'Odjava uspješna.', logoutUser: 'Odjava korisnika', newAccountCreated: - 'Novi račun je izrađen. Pristupite računu klikom na: {{serverURL}}. Molimo kliknite na sljedeću poveznicu ili zalijepite URL, koji se nalazi ispod, u preglednik da biste potvrdili svoju e-mail adresu: {{verificationURL}}
Nakon što potvrdite e-mail adresu, moći ćete se prijaviti.', + 'Novi račun je izrađen. Pristupite računu klikom na: {{serverURL}}. Molimo kliknite na sljedeću poveznicu ili zalijepite URL, koji se nalazi ispod, u preglednik da biste potvrdili svoju e-mail adresu: {{verificationURL}}
Nakon što potvrdite e-mail adresu, moći ćete se prijaviti.', + newAPIKeyGenerated: 'New API ključ generiran.', newPassword: 'Nova lozinka', passed: 'Autentifikacija je prošla', passwordResetSuccessfully: 'Lozinka uspješno resetirana.', @@ -111,11 +111,11 @@ export const hrTranslations: DefaultTranslationsObject = { problemUploadingFile: 'Došlo je do problema pri učitavanju datoteke.', tokenInvalidOrExpired: 'Token je neispravan ili je istekao.', tokenNotProvided: 'Token nije pružen.', - unPublishingDocument: 'Došlo je do problema pri poništavanju objave ovog dokumenta.', unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', unauthorized: 'Neovlašteno, morate biti prijavljeni da biste uputili ovaj zahtjev.', unknown: 'Došlo je do nepoznate pogreške.', + unPublishingDocument: 'Došlo je do problema pri poništavanju objave ovog dokumenta.', unspecific: 'Došlo je do pogreške.', userEmailAlreadyRegistered: 'Korisnik s navedenom e-mail adresom je već registriran.', userLocked: 'Ovaj korisnik je zaključan zbog previše neuspješnih pokušaja prijave.', @@ -186,7 +186,7 @@ export const hrTranslations: DefaultTranslationsObject = { backToDashboard: 'Natrag na nadzornu ploču', cancel: 'Otkaži', changesNotSaved: 'Vaše promjene nisu spremljene. Ako izađete sada, izgubit ćete promjene.', - clearAll: undefined, + clearAll: 'Očisti sve', close: 'Zatvori', collapse: 'Sažmi', collections: 'Kolekcije', @@ -258,11 +258,12 @@ export const hrTranslations: DefaultTranslationsObject = { next: 'Sljedeće', noFiltersSet: 'Nema postavljenih filtera', noLabel: '', - notFound: 'Nije pronađeno', - nothingFound: 'Ništa nije pronađeno', none: 'Nijedan', noOptions: 'Nema opcija', - noResults: 'Nije pronađen nijedan {{label}}. Ili {{label}} još uvijek ne postoji ili nijedan od odgovara postavljenim filterima.', + noResults: + 'Nije pronađen nijedan {{label}}. Ili {{label}} još uvijek ne postoji ili nijedan od odgovara postavljenim filterima.', + notFound: 'Nije pronađeno', + nothingFound: 'Ništa nije pronađeno', noValue: 'Bez vrijednosti', of: 'od', only: 'Samo', @@ -410,14 +411,14 @@ export const hrTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Zadnji put spremljeno prije {{distance}', noFurtherVersionsFound: 'Nisu pronađene daljnje verzije', noRowsFound: '{{label}} nije pronađeno', - noRowsSelected: undefined, + noRowsSelected: 'Nije odabrana {{oznaka}}', preview: 'Pregled', previouslyPublished: 'Prethodno objavljeno', problemRestoringVersion: 'Nastao je problem pri vraćanju ove verzije', publish: 'Objaviti', publishChanges: 'Objavi promjene', published: 'Objavljeno', - publishIn: undefined, + publishIn: 'Objavi na {{locale}}', publishing: 'Objavljivanje', restoreAsDraft: 'Vrati kao skicu', restoredSuccessfully: 'Uspješno vraćeno.', diff --git a/packages/translations/src/languages/hu.ts b/packages/translations/src/languages/hu.ts index a779520ebb..ebdc487137 100644 --- a/packages/translations/src/languages/hu.ts +++ b/packages/translations/src/languages/hu.ts @@ -188,7 +188,7 @@ export const huTranslations: DefaultTranslationsObject = { cancel: 'Mégsem', changesNotSaved: 'A módosítások nem lettek mentve. Ha most távozik, elveszíti a változtatásokat.', - clearAll: undefined, + clearAll: 'Törölj mindent', close: 'Bezárás', collapse: 'Összecsukás', collections: 'Gyűjtemények', @@ -418,7 +418,7 @@ export const huTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Utoljára mentve {{distance}} órája', noFurtherVersionsFound: 'További verziók nem találhatók', noRowsFound: 'Nem található {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Nincs {{címke}} kiválasztva', preview: 'Előnézet', previouslyPublished: 'Korábban Közzétéve', problemRestoringVersion: 'Hiba történt a verzió visszaállításakor', diff --git a/packages/translations/src/languages/it.ts b/packages/translations/src/languages/it.ts index 49288a2721..de8a0d105f 100644 --- a/packages/translations/src/languages/it.ts +++ b/packages/translations/src/languages/it.ts @@ -189,7 +189,7 @@ export const itTranslations: DefaultTranslationsObject = { backToDashboard: 'Torna alla Dashboard', cancel: 'Cancella', changesNotSaved: 'Le tue modifiche non sono state salvate. Se esci ora, verranno perse.', - clearAll: undefined, + clearAll: 'Cancella Tutto', close: 'Chiudere', collapse: 'Comprimi', collections: 'Collezioni', @@ -418,7 +418,7 @@ export const itTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Ultimo salvataggio {{distance}} fa', noFurtherVersionsFound: 'Non sono state trovate ulteriori versioni', noRowsFound: 'Nessun {{label}} trovato', - noRowsSelected: undefined, + noRowsSelected: 'Nessuna {{etichetta}} selezionata', preview: 'Anteprima', previouslyPublished: 'Precedentemente Pubblicato', problemRestoringVersion: 'Si è verificato un problema durante il ripristino di questa versione', diff --git a/packages/translations/src/languages/ja.ts b/packages/translations/src/languages/ja.ts index 3be5e90fe8..98c1cb0b35 100644 --- a/packages/translations/src/languages/ja.ts +++ b/packages/translations/src/languages/ja.ts @@ -186,7 +186,7 @@ export const jaTranslations: DefaultTranslationsObject = { backToDashboard: 'ダッシュボードに戻る', cancel: 'キャンセル', changesNotSaved: '未保存の変更があります。このまま画面を離れると内容が失われます。', - clearAll: undefined, + clearAll: 'すべてクリア', close: '閉じる', collapse: '閉じる', collections: 'コレクション', @@ -412,7 +412,7 @@ export const jaTranslations: DefaultTranslationsObject = { lastSavedAgo: '{{distance}}前に最後に保存されました', noFurtherVersionsFound: 'その他のバージョンは見つかりませんでした。', noRowsFound: '{{label}} は未設定です', - noRowsSelected: undefined, + noRowsSelected: '選択された{{label}}はありません', preview: 'プレビュー', previouslyPublished: '以前に公開された', problemRestoringVersion: 'このバージョンの復元に問題がありました。', diff --git a/packages/translations/src/languages/ko.ts b/packages/translations/src/languages/ko.ts index 6d1c7a2eb3..771d100667 100644 --- a/packages/translations/src/languages/ko.ts +++ b/packages/translations/src/languages/ko.ts @@ -185,7 +185,7 @@ export const koTranslations: DefaultTranslationsObject = { backToDashboard: '대시보드로 돌아가기', cancel: '취소', changesNotSaved: '변경 사항이 저장되지 않았습니다. 지금 떠나면 변경 사항을 잃게 됩니다.', - clearAll: undefined, + clearAll: '모두 지우기', close: '닫기', collapse: '접기', collections: '컬렉션', @@ -408,7 +408,7 @@ export const koTranslations: DefaultTranslationsObject = { lastSavedAgo: '마지막으로 저장한지 {{distance}} 전', noFurtherVersionsFound: '더 이상의 버전을 찾을 수 없습니다.', noRowsFound: '{{label}}을(를) 찾을 수 없음', - noRowsSelected: undefined, + noRowsSelected: '선택된 {{label}} 없음', preview: '미리보기', previouslyPublished: '이전에 발표된', problemRestoringVersion: '이 버전을 복원하는 중 문제가 발생했습니다.', diff --git a/packages/translations/src/languages/my.ts b/packages/translations/src/languages/my.ts index c957f98de6..90896b7264 100644 --- a/packages/translations/src/languages/my.ts +++ b/packages/translations/src/languages/my.ts @@ -188,7 +188,7 @@ export const myTranslations: DefaultTranslationsObject = { cancel: 'မလုပ်တော့ပါ။', changesNotSaved: 'သင်၏ပြောင်းလဲမှုများကို မသိမ်းဆည်းရသေးပါ။ ယခု စာမျက်နှာက ထွက်လိုက်ပါက သင်၏ပြောင်းလဲမှုများ အကုန် ဆုံးရှုံးသွားပါမည်။ အကုန်နော်။', - clearAll: undefined, + clearAll: 'အားလုံးကိုရှင်းလင်းပါ', close: 'ပိတ်', collapse: 'ခေါက်သိမ်းပါ။', collections: 'စုစည်းမှူများ', @@ -420,7 +420,7 @@ export const myTranslations: DefaultTranslationsObject = { lastSavedAgo: 'နောက်ဆုံး သိမ်းချက် {{distance}} ကြာပြီး', noFurtherVersionsFound: 'နောက်ထပ်ဗားရှင်းများ မတွေ့ပါ။', noRowsFound: '{{label}} အားမတွေ့ပါ။', - noRowsSelected: undefined, + noRowsSelected: 'Tiada {{label}} yang dipilih', preview: 'နမူနာပြရန်', previouslyPublished: 'တိုင်းရင်းသားထုတ်ဝေခဲ့', problemRestoringVersion: 'ဤဗားရှင်းကို ပြန်လည်ရယူရာတွင် ပြဿနာရှိနေသည်။', diff --git a/packages/translations/src/languages/nb.ts b/packages/translations/src/languages/nb.ts index 4e2cf2dc2e..558d7e16c8 100644 --- a/packages/translations/src/languages/nb.ts +++ b/packages/translations/src/languages/nb.ts @@ -186,7 +186,7 @@ export const nbTranslations: DefaultTranslationsObject = { cancel: 'Avbryt', changesNotSaved: 'Endringene dine er ikke lagret. Hvis du forlater nå, vil du miste endringene dine.', - clearAll: undefined, + clearAll: 'Tøm alt', close: 'Lukk', collapse: 'Skjul', collections: 'Samlinger', @@ -266,7 +266,7 @@ export const nbTranslations: DefaultTranslationsObject = { nothingFound: 'Ingenting funnet', noValue: 'Ingen verdi', of: 'av', - only: undefined, + only: 'Bare', open: 'Åpne', or: 'Eller', order: 'Rekkefølge', @@ -414,7 +414,7 @@ export const nbTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Sist lagret {{distance}} siden', noFurtherVersionsFound: 'Ingen flere versjoner funnet', noRowsFound: 'Ingen {{label}} funnet', - noRowsSelected: undefined, + noRowsSelected: 'Ingen {{label}} valgt', preview: 'Forhåndsvisning', previouslyPublished: 'Tidligere Publisert', problemRestoringVersion: 'Det oppstod et problem med gjenoppretting av denne versjonen', diff --git a/packages/translations/src/languages/nl.ts b/packages/translations/src/languages/nl.ts index 371bc61e4c..8aabe0a9ac 100644 --- a/packages/translations/src/languages/nl.ts +++ b/packages/translations/src/languages/nl.ts @@ -188,7 +188,7 @@ export const nlTranslations: DefaultTranslationsObject = { cancel: 'Annuleren', changesNotSaved: 'Uw wijzigingen zijn niet bewaard. Als u weggaat zullen de wijzigingen verloren gaan.', - clearAll: undefined, + clearAll: 'Alles wissen', close: 'Dichtbij', collapse: 'Samenvouwen', collections: 'Collecties', @@ -417,7 +417,7 @@ export const nlTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Laatst opgeslagen {{distance}} geleden', noFurtherVersionsFound: 'Geen verdere versies gevonden', noRowsFound: 'Geen {{label}} gevonden', - noRowsSelected: undefined, + noRowsSelected: 'Geen {{label}} geselecteerd', preview: 'Voorbeeld', previouslyPublished: 'Eerder gepubliceerd', problemRestoringVersion: 'Er was een probleem bij het herstellen van deze versie', diff --git a/packages/translations/src/languages/pl.ts b/packages/translations/src/languages/pl.ts index 2a9491b0fb..f8ff36c5fe 100644 --- a/packages/translations/src/languages/pl.ts +++ b/packages/translations/src/languages/pl.ts @@ -186,7 +186,7 @@ export const plTranslations: DefaultTranslationsObject = { cancel: 'Anuluj', changesNotSaved: 'Twoje zmiany nie zostały zapisane. Jeśli teraz wyjdziesz, stracisz swoje zmiany.', - clearAll: undefined, + clearAll: 'Wyczyść wszystko', close: 'Zamknij', collapse: 'Zwiń', collections: 'Kolekcje', @@ -414,14 +414,14 @@ export const plTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Ostatnio zapisane {{distance}} temu', noFurtherVersionsFound: 'Nie znaleziono dalszych wersji', noRowsFound: 'Nie znaleziono {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Nie wybrano {{etykieta}}', preview: 'Podgląd', previouslyPublished: 'Wcześniej opublikowane', problemRestoringVersion: 'Wystąpił problem podczas przywracania tej wersji', publish: 'Publikuj', publishChanges: 'Opublikuj zmiany', published: 'Opublikowano', - publishIn: undefined, + publishIn: 'Opublikuj w {{locale}}', publishing: 'Publikacja', restoreAsDraft: 'Przywróć jako szkic', restoredSuccessfully: 'Przywrócono pomyślnie.', diff --git a/packages/translations/src/languages/pt.ts b/packages/translations/src/languages/pt.ts index f8ae147c03..7849984db4 100644 --- a/packages/translations/src/languages/pt.ts +++ b/packages/translations/src/languages/pt.ts @@ -187,7 +187,7 @@ export const ptTranslations: DefaultTranslationsObject = { cancel: 'Cancelar', changesNotSaved: 'Suas alterações não foram salvas. Se você sair agora, essas alterações serão perdidas.', - clearAll: undefined, + clearAll: 'Limpar Tudo', close: 'Fechar', collapse: 'Recolher', collections: 'Coleções', @@ -267,7 +267,7 @@ export const ptTranslations: DefaultTranslationsObject = { nothingFound: 'Nada encontrado', noValue: 'Nenhum valor', of: 'de', - only: undefined, + only: 'Apenas', open: 'Abrir', or: 'Ou', order: 'Ordem', @@ -415,14 +415,14 @@ export const ptTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Última gravação há {{distance}}', noFurtherVersionsFound: 'Nenhuma outra versão encontrada', noRowsFound: 'Nenhum(a) {{label}} encontrado(a)', - noRowsSelected: undefined, + noRowsSelected: 'Nenhum {{rótulo}} selecionado', preview: 'Pré-visualização', previouslyPublished: 'Publicado Anteriormente', problemRestoringVersion: 'Ocorreu um problema ao restaurar essa versão', publish: 'Publicar', publishChanges: 'Publicar alterações', published: 'Publicado', - publishIn: undefined, + publishIn: 'Publicar em {{locale}}', publishing: 'Publicação', restoreAsDraft: 'Restaurar como rascunho', restoredSuccessfully: 'Restaurado com sucesso.', diff --git a/packages/translations/src/languages/ro.ts b/packages/translations/src/languages/ro.ts index e2b73f02aa..c4d3624124 100644 --- a/packages/translations/src/languages/ro.ts +++ b/packages/translations/src/languages/ro.ts @@ -190,7 +190,7 @@ export const roTranslations: DefaultTranslationsObject = { cancel: 'Anulați', changesNotSaved: 'Modificările dvs. nu au fost salvate. Dacă plecați acum, vă veți pierde modificările.', - clearAll: undefined, + clearAll: 'Șterge tot', close: 'Închide', collapse: 'Colaps', collections: 'Colecții', @@ -422,7 +422,7 @@ export const roTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Ultima salvare acum {{distance}}', noFurtherVersionsFound: 'Nu s-au găsit alte versiuni', noRowsFound: 'Nu s-a găsit niciun {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Niciun {{etichetă}} selectat', preview: 'Previzualizare', previouslyPublished: 'Publicat anterior', problemRestoringVersion: 'A existat o problemă la restaurarea acestei versiuni', diff --git a/packages/translations/src/languages/rs.ts b/packages/translations/src/languages/rs.ts index 32e6b1ff61..dcde3aeae8 100644 --- a/packages/translations/src/languages/rs.ts +++ b/packages/translations/src/languages/rs.ts @@ -185,7 +185,7 @@ export const rsTranslations: DefaultTranslationsObject = { backToDashboard: 'Назад на контролни панел', cancel: 'Откажи', changesNotSaved: 'Ваше промене нису сачуване. Ако изађете сада, изгубићете промене.', - clearAll: undefined, + clearAll: 'Obriši sve', close: 'Затвори', collapse: 'Скупи', collections: 'Колекције', @@ -265,7 +265,7 @@ export const rsTranslations: DefaultTranslationsObject = { nothingFound: 'Ништа није пронађено', noValue: 'Без вредности', of: 'Од', - only: undefined, + only: 'Samo', open: 'Отвори', or: 'Или', order: 'Редослед', @@ -409,14 +409,14 @@ export const rsTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Задњи пут сачувано пре {{distance}', noFurtherVersionsFound: 'Нису пронађене наредне верзије', noRowsFound: '{{label}} није пронађено', - noRowsSelected: undefined, + noRowsSelected: 'Nije odabrana {{label}}', preview: 'Преглед', previouslyPublished: 'Prethodno objavljeno', problemRestoringVersion: 'Настао је проблем при враћању ове верзије', publish: 'Објавити', publishChanges: 'Објави промене', published: 'Објављено', - publishIn: undefined, + publishIn: 'Objavi na {{locale}}', publishing: 'Objavljivanje', restoreAsDraft: 'Vrati kao nacrt', restoredSuccessfully: 'Успешно враћено.', diff --git a/packages/translations/src/languages/rsLatin.ts b/packages/translations/src/languages/rsLatin.ts index a569053a8d..0eeb567366 100644 --- a/packages/translations/src/languages/rsLatin.ts +++ b/packages/translations/src/languages/rsLatin.ts @@ -185,7 +185,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = { backToDashboard: 'Nazad na kontrolni panel', cancel: 'Otkaži', changesNotSaved: 'Vaše promene nisu sačuvane. Ako izađete sada, izgubićete promene.', - clearAll: undefined, + clearAll: 'Očisti sve', close: 'Zatvori', collapse: 'Skupi', collections: 'Kolekcije', @@ -265,7 +265,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = { nothingFound: 'Ništa nije pronađeno', noValue: 'Bez vrednosti', of: 'Od', - only: undefined, + only: 'Samo', open: 'Otvori', or: 'Ili', order: 'Redosled', @@ -410,7 +410,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Zadnji put sačuvano pre {{distance}', noFurtherVersionsFound: 'Nisu pronađene naredne verzije', noRowsFound: '{{label}} nije pronađeno', - noRowsSelected: undefined, + noRowsSelected: 'Nije odabrana {{label}}', preview: 'Pregled', previouslyPublished: 'Prethodno objavljeno', problemRestoringVersion: 'Nastao je problem pri vraćanju ove verzije', diff --git a/packages/translations/src/languages/ru.ts b/packages/translations/src/languages/ru.ts index 176c1514cb..c505d0d1ae 100644 --- a/packages/translations/src/languages/ru.ts +++ b/packages/translations/src/languages/ru.ts @@ -188,7 +188,7 @@ export const ruTranslations: DefaultTranslationsObject = { cancel: 'Отмена', changesNotSaved: 'Ваши изменения не были сохранены. Если вы сейчас уйдете, то потеряете свои изменения.', - clearAll: undefined, + clearAll: 'Очистить все', close: 'Закрыть', collapse: 'Свернуть', collections: 'Коллекции', @@ -416,7 +416,7 @@ export const ruTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Последний раз сохранено {{distance}} назад', noFurtherVersionsFound: 'Другие версии не найдены', noRowsFound: 'Не найдено {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Не выбран {{label}}', preview: 'Предпросмотр', previouslyPublished: 'Ранее опубликовано', problemRestoringVersion: 'Возникла проблема с восстановлением этой версии', diff --git a/packages/translations/src/languages/sk.ts b/packages/translations/src/languages/sk.ts index 2a6468b9cf..95d81cc8fd 100644 --- a/packages/translations/src/languages/sk.ts +++ b/packages/translations/src/languages/sk.ts @@ -187,7 +187,7 @@ export const skTranslations: DefaultTranslationsObject = { backToDashboard: 'Späť na nástenku', cancel: 'Zrušiť', changesNotSaved: 'Vaše zmeny neboli uložené. Ak teraz odídete, stratíte svoje zmeny.', - clearAll: undefined, + clearAll: 'Vymazať všetko', close: 'Zavrieť', collapse: 'Zbaliť', collections: 'Kolekcia', @@ -267,7 +267,7 @@ export const skTranslations: DefaultTranslationsObject = { nothingFound: 'Nič nenájdené', noValue: 'Žiadna hodnota', of: 'z', - only: undefined, + only: 'Iba', open: 'Otvoriť', or: 'Alebo', order: 'Poradie', @@ -414,7 +414,7 @@ export const skTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Naposledy uložené pred {{distance}}', noFurtherVersionsFound: 'Nenájdené ďalšie verzie', noRowsFound: 'Nenájdené {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Nie je vybraté žiadne {{označenie}}', preview: 'Náhľad', previouslyPublished: 'Predtým publikované', problemRestoringVersion: 'Pri obnovovaní tejto verzie došlo k problému', diff --git a/packages/translations/src/languages/sv.ts b/packages/translations/src/languages/sv.ts index 038484eeff..f57df90f5d 100644 --- a/packages/translations/src/languages/sv.ts +++ b/packages/translations/src/languages/sv.ts @@ -186,7 +186,7 @@ export const svTranslations: DefaultTranslationsObject = { cancel: 'Avbryt', changesNotSaved: 'Dina ändringar har inte sparats. Om du lämnar nu kommer du att förlora dina ändringar.', - clearAll: undefined, + clearAll: 'Rensa alla', close: 'Stänga', collapse: 'Kollapsa', collections: 'Samlingar', @@ -413,7 +413,7 @@ export const svTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Senast sparad för {{distance}} sedan', noFurtherVersionsFound: 'Inga fler versioner hittades', noRowsFound: 'Inga {{label}} hittades', - noRowsSelected: undefined, + noRowsSelected: 'Inget {{etikett}} valt', preview: 'Förhandsvisa', previouslyPublished: 'Tidigare publicerad', problemRestoringVersion: 'Det uppstod ett problem när den här versionen skulle återställas', diff --git a/packages/translations/src/languages/th.ts b/packages/translations/src/languages/th.ts index b0ac549e4c..f85be73b86 100644 --- a/packages/translations/src/languages/th.ts +++ b/packages/translations/src/languages/th.ts @@ -182,7 +182,7 @@ export const thTranslations: DefaultTranslationsObject = { backToDashboard: 'กลับไปหน้าแดชบอร์ด', cancel: 'ยกเลิก', changesNotSaved: 'การเปลี่ยนแปลงยังไม่ได้ถูกบันทึก ถ้าคุณออกตอนนี้ สิ่งที่แก้ไขไว้จะหายไป', - clearAll: undefined, + clearAll: 'ล้างทั้งหมด', close: 'ปิด', collapse: 'ยุบ', collections: 'Collections', @@ -405,7 +405,7 @@ export const thTranslations: DefaultTranslationsObject = { lastSavedAgo: 'บันทึกครั้งล่าสุด {{distance}} ที่ผ่านมา', noFurtherVersionsFound: 'ไม่พบเวอร์ชันอื่น ๆ', noRowsFound: 'ไม่พบ {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'ไม่มี {{label}} ที่ถูกเลือก', preview: 'ตัวอย่าง', previouslyPublished: 'เผยแพร่ก่อนหน้านี้', problemRestoringVersion: 'เกิดปัญหาระหว่างการกู้คืนเวอร์ชันนี้', diff --git a/packages/translations/src/languages/tr.ts b/packages/translations/src/languages/tr.ts index 35a08fdc9c..7fac9e7e89 100644 --- a/packages/translations/src/languages/tr.ts +++ b/packages/translations/src/languages/tr.ts @@ -189,7 +189,7 @@ export const trTranslations: DefaultTranslationsObject = { cancel: 'İptal', changesNotSaved: 'Değişiklikleriniz henüz kaydedilmedi. Eğer bu sayfayı terk ederseniz değişiklikleri kaybedeceksiniz.', - clearAll: undefined, + clearAll: 'Hepsini Temizle', close: 'Kapat', collapse: 'Daralt', collections: 'Koleksiyonlar', @@ -415,7 +415,7 @@ export const trTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Son kaydedildi {{distance}} önce', noFurtherVersionsFound: 'Başka sürüm bulunamadı.', noRowsFound: '{{label}} bulunamadı', - noRowsSelected: undefined, + noRowsSelected: 'Seçilen {{label}} yok', preview: 'Önizleme', previouslyPublished: 'Daha Önce Yayınlanmış', problemRestoringVersion: 'Bu sürüme geri döndürürken bir hatayla karşılaşıldı.', diff --git a/packages/translations/src/languages/uk.ts b/packages/translations/src/languages/uk.ts index 5ef3ec4432..3cf4410e01 100644 --- a/packages/translations/src/languages/uk.ts +++ b/packages/translations/src/languages/uk.ts @@ -186,7 +186,7 @@ export const ukTranslations: DefaultTranslationsObject = { backToDashboard: 'Повернутись до головної сторінки', cancel: 'Скасувати', changesNotSaved: 'Ваши зміни не були збережені. Якщо ви вийдете зараз, то втратите свої зміни.', - clearAll: undefined, + clearAll: 'Очистити все', close: 'Закрити', collapse: 'Згорнути', collections: 'Колекції', @@ -413,7 +413,7 @@ export const ukTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Востаннє збережено {{distance}} тому', noFurtherVersionsFound: 'Інших версій не знайдено', noRowsFound: 'Не знайдено {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Не вибрано {{label}}', preview: 'Попередній перегляд', previouslyPublished: 'Раніше опубліковано', problemRestoringVersion: 'Виникла проблема з відновленням цієї версії', diff --git a/packages/translations/src/languages/vi.ts b/packages/translations/src/languages/vi.ts index 4b0f5b4ba3..229c1b5f35 100644 --- a/packages/translations/src/languages/vi.ts +++ b/packages/translations/src/languages/vi.ts @@ -184,7 +184,7 @@ export const viTranslations: DefaultTranslationsObject = { backToDashboard: 'Quay lại bảng điều khiển', cancel: 'Hủy', changesNotSaved: 'Thay đổi chưa được lưu lại. Bạn sẽ mất bản chỉnh sửa nếu thoát bây giờ.', - clearAll: undefined, + clearAll: 'Xóa tất cả', close: 'Gần', collapse: 'Thu gọn', collections: 'Collections', @@ -264,7 +264,7 @@ export const viTranslations: DefaultTranslationsObject = { nothingFound: 'Không tìm thấy', noValue: 'Không có giá trị', of: 'trong số', - only: undefined, + only: 'Chỉ', open: 'Mở', or: 'hoặc', order: 'Thứ tự', @@ -408,7 +408,7 @@ export const viTranslations: DefaultTranslationsObject = { lastSavedAgo: 'Lần lưu cuối cùng {{distance}} trước đây', noFurtherVersionsFound: 'Không tìm thấy phiên bản cũ hơn', noRowsFound: 'Không tìm thấy: {{label}}', - noRowsSelected: undefined, + noRowsSelected: 'Không có {{label}} được chọn', preview: 'Bản xem trước', previouslyPublished: 'Đã xuất bản trước đây', problemRestoringVersion: 'Đã xảy ra vấn đề khi khôi phục phiên bản này', diff --git a/packages/translations/src/languages/zh.ts b/packages/translations/src/languages/zh.ts index 00082a3cfd..32d76d7d9d 100644 --- a/packages/translations/src/languages/zh.ts +++ b/packages/translations/src/languages/zh.ts @@ -179,7 +179,7 @@ export const zhTranslations: DefaultTranslationsObject = { backToDashboard: '返回到仪表板', cancel: '取消', changesNotSaved: '您的更改尚未保存。您确定要离开吗?', - clearAll: undefined, + clearAll: '清除全部', close: '关闭', collapse: '折叠', collections: '集合', @@ -258,7 +258,7 @@ export const zhTranslations: DefaultTranslationsObject = { nothingFound: '没有找到任何东西', noValue: '没有值', of: '的', - only: undefined, + only: '仅', open: '打开', or: '或', order: '排序', @@ -398,14 +398,14 @@ export const zhTranslations: DefaultTranslationsObject = { lastSavedAgo: '上次保存{{distance}}之前', noFurtherVersionsFound: '没有发现其他版本', noRowsFound: '没有发现{{label}}', - noRowsSelected: undefined, + noRowsSelected: '未选择{{label}}', preview: '预览', previouslyPublished: '先前发布过的', problemRestoringVersion: '恢复这个版本时发生了问题', publish: '发布', publishChanges: '发布修改', published: '已发布', - publishIn: undefined, + publishIn: '在{{locale}}发布', publishing: '发布', restoreAsDraft: '恢复为草稿', restoredSuccessfully: '恢复成功。', diff --git a/packages/translations/src/languages/zhTw.ts b/packages/translations/src/languages/zhTw.ts index 0bc3985b4c..bdace266ac 100644 --- a/packages/translations/src/languages/zhTw.ts +++ b/packages/translations/src/languages/zhTw.ts @@ -179,7 +179,7 @@ export const zhTwTranslations: DefaultTranslationsObject = { backToDashboard: '返回到控制面板', cancel: '取消', changesNotSaved: '您還有尚未儲存的變更。您確定要離開嗎?', - clearAll: undefined, + clearAll: '清除全部', close: '關閉', collapse: '折疊', collections: '集合', @@ -398,14 +398,14 @@ export const zhTwTranslations: DefaultTranslationsObject = { lastSavedAgo: '上次儲存在{{distance}}之前', noFurtherVersionsFound: '沒有發現其他版本', noRowsFound: '沒有發現{{label}}', - noRowsSelected: undefined, + noRowsSelected: '未選擇 {{label}}', preview: '預覽', previouslyPublished: '先前出版過的', problemRestoringVersion: '回復這個版本時發生了問題', publish: '發佈', publishChanges: '發佈修改', published: '已發佈', - publishIn: undefined, + publishIn: '在 {{locale}} 發佈', publishing: '發布', restoreAsDraft: '恢復為草稿', restoredSuccessfully: '回復成功。', diff --git a/packages/ui/src/providers/Auth/index.tsx b/packages/ui/src/providers/Auth/index.tsx index 8b82623c9d..fa5b902902 100644 --- a/packages/ui/src/providers/Auth/index.tsx +++ b/packages/ui/src/providers/Auth/index.tsx @@ -1,5 +1,5 @@ 'use client' -import type { ClientUser, MeOperationResult, Permissions } from 'payload' +import type { ClientUser, MeOperationResult, Permissions, User } from 'payload' import { useModal } from '@faceless-ui/modal' import { usePathname, useRouter } from 'next/navigation.js' @@ -15,7 +15,7 @@ import { formatAdminURL } from '../../utilities/formatAdminURL.js' import { useConfig } from '../Config/index.js' export type AuthContext = { - fetchFullUser: () => Promise + fetchFullUser: () => Promise logOut: () => Promise permissions?: Permissions refreshCookie: (forceRefresh?: boolean) => void @@ -227,6 +227,7 @@ export function AuthProvider({ const fetchFullUser = React.useCallback(async () => { try { const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, { + credentials: 'include', headers: { 'Accept-Language': i18n.language, }, @@ -234,9 +235,11 @@ export function AuthProvider({ if (request.status === 200) { const json: MeOperationResult = await request.json() + let user = null if (json?.user) { setUser(json.user) + user = json.user if (json?.token) { setTokenAndExpiration(json) @@ -245,10 +248,14 @@ export function AuthProvider({ setUser(null) revokeTokenAndExpire() } + + return user } } catch (e) { toast.error(`Fetching user failed: ${e.message}`) } + + return null }, [serverURL, apiRoute, userSlug, i18n.language, setTokenAndExpiration, revokeTokenAndExpire]) // On mount, get user and set diff --git a/test/access-control/e2e.spec.ts b/test/access-control/e2e.spec.ts index ea9857e2f4..984d7baeeb 100644 --- a/test/access-control/e2e.spec.ts +++ b/test/access-control/e2e.spec.ts @@ -482,7 +482,7 @@ describe('access control', () => { serverURL, }) - await expect(page.locator('.next-error-h1')).toBeVisible() + await expect(page.locator('.unauthorized')).toBeVisible() await page.goto(logoutURL) await page.waitForURL(logoutURL) @@ -500,6 +500,7 @@ describe('access control', () => { test('should block admin access to non-admin user', async () => { const adminURL = `${serverURL}/admin` + const unauthorizedURL = `${serverURL}/admin/unauthorized` await page.goto(adminURL) await page.waitForURL(adminURL) @@ -527,9 +528,9 @@ describe('access control', () => { ]) await page.goto(adminURL) - await page.waitForURL(adminURL) + await page.waitForURL(unauthorizedURL) - await expect(page.locator('.next-error-h1')).toBeVisible() + await expect(page.locator('.unauthorized')).toBeVisible() }) }) diff --git a/test/helpers.ts b/test/helpers.ts index ba71c86813..66ad582d4d 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -310,6 +310,7 @@ export function initPageConsoleErrorCatch(page: Page) { !msg.text().includes('the server responded with a status of') && !msg.text().includes('Failed to fetch RSC payload for') && !msg.text().includes('Error: NEXT_NOT_FOUND') && + !msg.text().includes('Error: NEXT_REDIRECT') && !msg.text().includes('Error getting document data') ) { // "Failed to fetch RSC payload for" happens seemingly randomly. There are lots of issues in the next.js repository for this. Causes e2e tests to fail and flake. Will ignore for now From 7e2f4e62de3b22b3d18cd11cededc79e49df2e8e Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Tue, 8 Oct 2024 09:50:31 -0400 Subject: [PATCH 004/110] chore(templates): more next.js promises (#8599) Continuation of #8547 . Missed some type updates. --- .../src/app/(payload)/admin/[[...segments]]/not-found.tsx | 8 ++++---- .../src/app/(payload)/admin/[[...segments]]/page.tsx | 8 ++++---- .../src/app/(payload)/admin/[[...segments]]/page.tsx | 8 ++++---- .../src/app/(payload)/admin/[[...segments]]/page.tsx | 8 ++++---- .../src/app/(payload)/admin/[[...segments]]/page.tsx | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/templates/_template/src/app/(payload)/admin/[[...segments]]/not-found.tsx b/templates/_template/src/app/(payload)/admin/[[...segments]]/not-found.tsx index ade432a48d..64108365fd 100644 --- a/templates/_template/src/app/(payload)/admin/[[...segments]]/not-found.tsx +++ b/templates/_template/src/app/(payload)/admin/[[...segments]]/not-found.tsx @@ -7,12 +7,12 @@ import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views' import { importMap } from '../importMap' type Args = { - params: { + params: Promise<{ segments: string[] - } - searchParams: { + }> + searchParams: Promise<{ [key: string]: string | string[] - } + }> } export const generateMetadata = ({ params, searchParams }: Args): Promise => diff --git a/templates/with-payload-cloud/src/app/(payload)/admin/[[...segments]]/page.tsx b/templates/with-payload-cloud/src/app/(payload)/admin/[[...segments]]/page.tsx index 75241971d5..0de685cd62 100644 --- a/templates/with-payload-cloud/src/app/(payload)/admin/[[...segments]]/page.tsx +++ b/templates/with-payload-cloud/src/app/(payload)/admin/[[...segments]]/page.tsx @@ -7,12 +7,12 @@ import { RootPage, generatePageMetadata } from '@payloadcms/next/views' import { importMap } from '../importMap' type Args = { - params: { + params: Promise<{ segments: string[] - } - searchParams: { + }> + searchParams: Promise<{ [key: string]: string | string[] - } + }> } export const generateMetadata = ({ params, searchParams }: Args): Promise => diff --git a/templates/with-postgres/src/app/(payload)/admin/[[...segments]]/page.tsx b/templates/with-postgres/src/app/(payload)/admin/[[...segments]]/page.tsx index 75241971d5..0de685cd62 100644 --- a/templates/with-postgres/src/app/(payload)/admin/[[...segments]]/page.tsx +++ b/templates/with-postgres/src/app/(payload)/admin/[[...segments]]/page.tsx @@ -7,12 +7,12 @@ import { RootPage, generatePageMetadata } from '@payloadcms/next/views' import { importMap } from '../importMap' type Args = { - params: { + params: Promise<{ segments: string[] - } - searchParams: { + }> + searchParams: Promise<{ [key: string]: string | string[] - } + }> } export const generateMetadata = ({ params, searchParams }: Args): Promise => diff --git a/templates/with-vercel-mongodb/src/app/(payload)/admin/[[...segments]]/page.tsx b/templates/with-vercel-mongodb/src/app/(payload)/admin/[[...segments]]/page.tsx index 75241971d5..0de685cd62 100644 --- a/templates/with-vercel-mongodb/src/app/(payload)/admin/[[...segments]]/page.tsx +++ b/templates/with-vercel-mongodb/src/app/(payload)/admin/[[...segments]]/page.tsx @@ -7,12 +7,12 @@ import { RootPage, generatePageMetadata } from '@payloadcms/next/views' import { importMap } from '../importMap' type Args = { - params: { + params: Promise<{ segments: string[] - } - searchParams: { + }> + searchParams: Promise<{ [key: string]: string | string[] - } + }> } export const generateMetadata = ({ params, searchParams }: Args): Promise => diff --git a/templates/with-vercel-postgres/src/app/(payload)/admin/[[...segments]]/page.tsx b/templates/with-vercel-postgres/src/app/(payload)/admin/[[...segments]]/page.tsx index 75241971d5..0de685cd62 100644 --- a/templates/with-vercel-postgres/src/app/(payload)/admin/[[...segments]]/page.tsx +++ b/templates/with-vercel-postgres/src/app/(payload)/admin/[[...segments]]/page.tsx @@ -7,12 +7,12 @@ import { RootPage, generatePageMetadata } from '@payloadcms/next/views' import { importMap } from '../importMap' type Args = { - params: { + params: Promise<{ segments: string[] - } - searchParams: { + }> + searchParams: Promise<{ [key: string]: string | string[] - } + }> } export const generateMetadata = ({ params, searchParams }: Args): Promise => From ca779441a3a4b1eedfe65c6cfdd9567885364337 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Tue, 8 Oct 2024 10:32:28 -0400 Subject: [PATCH 005/110] fix(db-vercel-postgres): add pg dep (#8598) --- packages/db-vercel-postgres/package.json | 4 ++-- pnpm-lock.yaml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 428907d446..b21982ec57 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -52,6 +52,7 @@ "console-table-printer": "2.11.2", "drizzle-kit": "0.23.2-df9e596", "drizzle-orm": "0.32.1", + "pg": "8.11.3", "prompts": "2.4.2", "to-snake-case": "1.0.0", "uuid": "10.0.0" @@ -62,8 +63,7 @@ "@types/pg": "8.10.2", "@types/to-snake-case": "1.0.0", "esbuild": "0.23.1", - "payload": "workspace:*", - "pg": "8.11.3" + "payload": "workspace:*" }, "peerDependencies": { "payload": "workspace:*" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be88bd8a80..5dda476ded 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -400,6 +400,9 @@ importers: drizzle-orm: specifier: 0.32.1 version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + pg: + specifier: 8.11.3 + version: 8.11.3 prompts: specifier: 2.4.2 version: 2.4.2 @@ -428,9 +431,6 @@ importers: payload: specifier: workspace:* version: link:../payload - pg: - specifier: 8.11.3 - version: 8.11.3 packages/drizzle: dependencies: From 1bf580fac379547f203e0686960081a01fbc6a09 Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Tue, 8 Oct 2024 11:40:34 -0400 Subject: [PATCH 006/110] feat: join field works with hasMany relationships (#8493) Join field works on relationships and uploads having `hasMany: true` --------- Co-authored-by: Sasha <64744993+r1tsuu@users.noreply.github.com> --- packages/db-sqlite/src/init.ts | 1 + packages/db-sqlite/src/schema/build.ts | 5 +- .../db-sqlite/src/schema/traverseFields.ts | 21 +++- .../drizzle/src/find/buildFindManyArgs.ts | 2 + packages/drizzle/src/find/traverseFields.ts | 119 ++++++++++++++---- packages/drizzle/src/postgres/init.ts | 1 + packages/drizzle/src/postgres/schema/build.ts | 5 +- .../src/postgres/schema/traverseFields.ts | 21 +++- packages/drizzle/src/queries/buildQuery.ts | 1 + .../src/transform/read/traverseFields.ts | 11 +- .../payload/src/collections/config/types.ts | 3 +- .../src/fields/config/sanitizeJoinField.ts | 12 +- packages/payload/src/index.ts | 1 + test/joins/collections/Categories.ts | 6 + test/joins/collections/Posts.ts | 6 + test/joins/int.spec.ts | 48 +++++++ test/joins/payload-types.ts | 5 + test/relationships/int.spec.ts | 47 +++++++ 18 files changed, 275 insertions(+), 40 deletions(-) diff --git a/packages/db-sqlite/src/init.ts b/packages/db-sqlite/src/init.ts index 4a2abfcb33..1a3b40a994 100644 --- a/packages/db-sqlite/src/init.ts +++ b/packages/db-sqlite/src/init.ts @@ -70,6 +70,7 @@ export const init: Init = async function init(this: SQLiteAdapter) { disableNotNull: !!collection?.versions?.drafts, disableUnique: false, fields: collection.fields, + joins: collection.joins, locales, tableName, timestamps: collection.timestamps, diff --git a/packages/db-sqlite/src/schema/build.ts b/packages/db-sqlite/src/schema/build.ts index 6b6a34d400..0883984f0b 100644 --- a/packages/db-sqlite/src/schema/build.ts +++ b/packages/db-sqlite/src/schema/build.ts @@ -7,7 +7,7 @@ import type { SQLiteTableWithColumns, UniqueConstraintBuilder, } from 'drizzle-orm/sqlite-core' -import type { Field } from 'payload' +import type { Field, SanitizedJoins } from 'payload' import { createTableName } from '@payloadcms/drizzle' import { relations, sql } from 'drizzle-orm' @@ -58,6 +58,7 @@ type Args = { disableNotNull: boolean disableUnique: boolean fields: Field[] + joins?: SanitizedJoins locales?: [string, ...string[]] rootRelationships?: Set rootRelationsToBuild?: RelationMap @@ -89,6 +90,7 @@ export const buildTable = ({ disableNotNull, disableUnique = false, fields, + joins, locales, rootRelationships, rootRelationsToBuild, @@ -134,6 +136,7 @@ export const buildTable = ({ disableUnique, fields, indexes, + joins, locales, localesColumns, localesIndexes, diff --git a/packages/db-sqlite/src/schema/traverseFields.ts b/packages/db-sqlite/src/schema/traverseFields.ts index 727abdabbf..1241ea6260 100644 --- a/packages/db-sqlite/src/schema/traverseFields.ts +++ b/packages/db-sqlite/src/schema/traverseFields.ts @@ -1,6 +1,6 @@ import type { Relation } from 'drizzle-orm' import type { IndexBuilder, SQLiteColumnBuilder } from 'drizzle-orm/sqlite-core' -import type { Field, TabAsField } from 'payload' +import type { Field, SanitizedJoins, TabAsField } from 'payload' import { createTableName, @@ -41,6 +41,7 @@ type Args = { fields: (Field | TabAsField)[] forceLocalized?: boolean indexes: Record IndexBuilder> + joins?: SanitizedJoins locales: [string, ...string[]] localesColumns: Record localesIndexes: Record IndexBuilder> @@ -78,6 +79,7 @@ export const traverseFields = ({ fields, forceLocalized, indexes, + joins, locales, localesColumns, localesIndexes, @@ -651,6 +653,7 @@ export const traverseFields = ({ fields: field.fields, forceLocalized, indexes, + joins, locales, localesColumns, localesIndexes, @@ -705,6 +708,7 @@ export const traverseFields = ({ fields: field.fields, forceLocalized: field.localized, indexes, + joins, locales, localesColumns, localesIndexes, @@ -760,6 +764,7 @@ export const traverseFields = ({ fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })), forceLocalized, indexes, + joins, locales, localesColumns, localesIndexes, @@ -815,6 +820,7 @@ export const traverseFields = ({ fields: field.fields, forceLocalized, indexes, + joins, locales, localesColumns, localesIndexes, @@ -905,9 +911,18 @@ export const traverseFields = ({ case 'join': { // fieldName could be 'posts' or 'group_posts' - // using on as the key for the relation + // using `on` as the key for the relation const localized = adapter.payload.config.localization && field.localized - const target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}` + const fieldSchemaPath = `${fieldPrefix || ''}${field.name}` + let target: string + const joinConfig = joins[field.collection].find( + ({ schemaPath }) => fieldSchemaPath === schemaPath, + ) + if (joinConfig.targetField.hasMany) { + target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}` + } else { + target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}` + } relationsToBuild.set(fieldName, { type: 'many', // joins are not localized on the parent table diff --git a/packages/drizzle/src/find/buildFindManyArgs.ts b/packages/drizzle/src/find/buildFindManyArgs.ts index 278bfcd780..63239975ca 100644 --- a/packages/drizzle/src/find/buildFindManyArgs.ts +++ b/packages/drizzle/src/find/buildFindManyArgs.ts @@ -36,6 +36,7 @@ export const buildFindManyArgs = ({ tableName, }: BuildFindQueryArgs): Record => { const result: Result = { + extras: {}, with: {}, } @@ -44,6 +45,7 @@ export const buildFindManyArgs = ({ id: false, _parentID: false, }, + extras: {}, with: {}, } diff --git a/packages/drizzle/src/find/traverseFields.ts b/packages/drizzle/src/find/traverseFields.ts index 148bf6f87c..e4b4f9506f 100644 --- a/packages/drizzle/src/find/traverseFields.ts +++ b/packages/drizzle/src/find/traverseFields.ts @@ -1,14 +1,15 @@ -import type { DBQueryConfig } from 'drizzle-orm' +import type { LibSQLDatabase } from 'drizzle-orm/libsql' import type { Field, JoinQuery } from 'payload' +import { and, type DBQueryConfig, eq, sql } from 'drizzle-orm' import { fieldAffectsData, fieldIsVirtual, tabHasName } from 'payload/shared' import toSnakeCase from 'to-snake-case' -import type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js' +import type { BuildQueryJoinAliases, ChainedMethods, DrizzleAdapter } from '../types.js' import type { Result } from './buildFindManyArgs.js' -import { buildOrderBy } from '../queries/buildOrderBy.js' import buildQuery from '../queries/buildQuery.js' +import { chainMethods } from './chainMethods.js' type TraverseFieldArgs = { _locales: Result @@ -241,24 +242,93 @@ export const traverseFields = ({ // get an additional document and slice it later to determine if there is a next page limit += 1 } + const fields = adapter.payload.collections[field.collection].config.fields + const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection)) const joinTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${ field.localized && adapter.payload.config.localization ? adapter.localesSuffix : '' }` + + if (!adapter.tables[joinTableName][field.on]) { + const db = adapter.drizzle as LibSQLDatabase + const joinTable = `${joinTableName}${adapter.relationshipsSuffix}` + + const joins: BuildQueryJoinAliases = [ + { + type: 'innerJoin', + condition: and( + eq(adapter.tables[joinTable].parent, adapter.tables[joinTableName].id), + eq( + sql.raw(`"${joinTable}"."${topLevelTableName}_id"`), + adapter.tables[currentTableName].id, + ), + ), + table: adapter.tables[joinTable], + }, + ] + + const { orderBy, where: subQueryWhere } = buildQuery({ + adapter, + fields, + joins, + locale, + sort, + tableName: joinCollectionTableName, + where: {}, + }) + + const chainedMethods: ChainedMethods = [] + + joins.forEach(({ type, condition, table }) => { + chainedMethods.push({ + args: [table, condition], + method: type ?? 'leftJoin', + }) + }) + + const subQuery = chainMethods({ + methods: chainedMethods, + query: db + .select({ + id: adapter.tables[joinTableName].id, + }) + .from(adapter.tables[joinTableName]) + .where(subQueryWhere) + .orderBy(orderBy.order(orderBy.column)) + .limit(11), + }) + + const columnName = `${path.replaceAll('.', '_')}${field.name}` + + const extras = field.localized ? _locales.extras : currentArgs.extras + + if (adapter.name === 'sqlite') { + extras[columnName] = sql` + COALESCE(( + SELECT json_group_array("id") + FROM ( + ${subQuery} + ) AS ${sql.raw(`${columnName}_sub`)} + ), '[]') + `.as(columnName) + } else { + extras[columnName] = sql` + COALESCE(( + SELECT json_agg("id") + FROM ( + ${subQuery} + ) AS ${sql.raw(`${columnName}_sub`)} + ), '[]'::json) + `.as(columnName) + } + + break + } + const selectFields = {} - const orderBy = buildOrderBy({ - adapter, - fields, - joins: [], - locale, - selectFields, - sort, - tableName: joinTableName, - }) const withJoin: DBQueryConfig<'many', true, any, any> = { columns: selectFields, - orderBy: () => [orderBy.order(orderBy.column)], } if (limit) { withJoin.limit = limit @@ -269,20 +339,21 @@ export const traverseFields = ({ withJoin.columns._parentID = true } else { withJoin.columns.id = true + withJoin.columns.parent = true } - - if (where) { - const { where: joinWhere } = buildQuery({ - adapter, - fields, - joins, - locale, - sort, - tableName: joinTableName, - where, - }) + const { orderBy, where: joinWhere } = buildQuery({ + adapter, + fields, + joins, + locale, + sort, + tableName: joinTableName, + where, + }) + if (joinWhere) { withJoin.where = () => joinWhere } + withJoin.orderBy = orderBy.order(orderBy.column) currentArgs.with[`${path.replaceAll('.', '_')}${field.name}`] = withJoin break } diff --git a/packages/drizzle/src/postgres/init.ts b/packages/drizzle/src/postgres/init.ts index c76f4d9457..c9ed8996d6 100644 --- a/packages/drizzle/src/postgres/init.ts +++ b/packages/drizzle/src/postgres/init.ts @@ -57,6 +57,7 @@ export const init: Init = async function init(this: BasePostgresAdapter) { disableNotNull: !!collection?.versions?.drafts, disableUnique: false, fields: collection.fields, + joins: collection.joins, tableName, timestamps: collection.timestamps, versions: false, diff --git a/packages/drizzle/src/postgres/schema/build.ts b/packages/drizzle/src/postgres/schema/build.ts index 8aab6c058f..91132443a4 100644 --- a/packages/drizzle/src/postgres/schema/build.ts +++ b/packages/drizzle/src/postgres/schema/build.ts @@ -5,7 +5,7 @@ import type { PgColumnBuilder, PgTableWithColumns, } from 'drizzle-orm/pg-core' -import type { Field } from 'payload' +import type { Field, SanitizedJoins } from 'payload' import { relations } from 'drizzle-orm' import { @@ -47,6 +47,7 @@ type Args = { disableNotNull: boolean disableUnique: boolean fields: Field[] + joins?: SanitizedJoins rootRelationships?: Set rootRelationsToBuild?: RelationMap rootTableIDColType?: string @@ -77,6 +78,7 @@ export const buildTable = ({ disableNotNull, disableUnique = false, fields, + joins, rootRelationships, rootRelationsToBuild, rootTableIDColType, @@ -121,6 +123,7 @@ export const buildTable = ({ disableUnique, fields, indexes, + joins, localesColumns, localesIndexes, newTableName: tableName, diff --git a/packages/drizzle/src/postgres/schema/traverseFields.ts b/packages/drizzle/src/postgres/schema/traverseFields.ts index 40c942260a..777e428899 100644 --- a/packages/drizzle/src/postgres/schema/traverseFields.ts +++ b/packages/drizzle/src/postgres/schema/traverseFields.ts @@ -1,6 +1,6 @@ import type { Relation } from 'drizzle-orm' import type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core' -import type { Field, TabAsField } from 'payload' +import type { Field, SanitizedJoins, TabAsField } from 'payload' import { relations } from 'drizzle-orm' import { @@ -48,6 +48,7 @@ type Args = { fields: (Field | TabAsField)[] forceLocalized?: boolean indexes: Record IndexBuilder> + joins?: SanitizedJoins localesColumns: Record localesIndexes: Record IndexBuilder> newTableName: string @@ -84,6 +85,7 @@ export const traverseFields = ({ fields, forceLocalized, indexes, + joins, localesColumns, localesIndexes, newTableName, @@ -658,6 +660,7 @@ export const traverseFields = ({ fields: field.fields, forceLocalized, indexes, + joins, localesColumns, localesIndexes, newTableName, @@ -711,6 +714,7 @@ export const traverseFields = ({ fields: field.fields, forceLocalized: field.localized, indexes, + joins, localesColumns, localesIndexes, newTableName: `${parentTableName}_${columnName}`, @@ -765,6 +769,7 @@ export const traverseFields = ({ fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })), forceLocalized, indexes, + joins, localesColumns, localesIndexes, newTableName, @@ -819,6 +824,7 @@ export const traverseFields = ({ fields: field.fields, forceLocalized, indexes, + joins, localesColumns, localesIndexes, newTableName, @@ -908,9 +914,18 @@ export const traverseFields = ({ case 'join': { // fieldName could be 'posts' or 'group_posts' - // using on as the key for the relation + // using `on` as the key for the relation const localized = adapter.payload.config.localization && field.localized - const target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}` + const fieldSchemaPath = `${fieldPrefix || ''}${field.name}` + let target: string + const joinConfig = joins[field.collection].find( + ({ schemaPath }) => fieldSchemaPath === schemaPath, + ) + if (joinConfig.targetField.hasMany) { + target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}` + } else { + target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}` + } relationsToBuild.set(fieldName, { type: 'many', // joins are not localized on the parent table diff --git a/packages/drizzle/src/queries/buildQuery.ts b/packages/drizzle/src/queries/buildQuery.ts index dff3f9fc43..9873b399a3 100644 --- a/packages/drizzle/src/queries/buildQuery.ts +++ b/packages/drizzle/src/queries/buildQuery.ts @@ -10,6 +10,7 @@ import { parseParams } from './parseParams.js' export type BuildQueryJoinAliases = { condition: SQL table: GenericTable | PgTableWithColumns + type?: 'innerJoin' | 'leftJoin' | 'rightJoin' }[] type BuildQueryArgs = { diff --git a/packages/drizzle/src/transform/read/traverseFields.ts b/packages/drizzle/src/transform/read/traverseFields.ts index 42cc7889d7..b680e6e73b 100644 --- a/packages/drizzle/src/transform/read/traverseFields.ts +++ b/packages/drizzle/src/transform/read/traverseFields.ts @@ -137,7 +137,7 @@ export const traverseFields = >({ } const fieldName = `${fieldPrefix || ''}${field.name}` - const fieldData = table[fieldName] + let fieldData = table[fieldName] const localizedFieldData = {} const valuesToTransform: { ref: Record @@ -422,6 +422,11 @@ export const traverseFields = >({ if (field.type === 'join') { const { limit = 10 } = joinQuery?.[`${fieldPrefix.replaceAll('_', '.')}${field.name}`] || {} + // raw hasMany results from SQLite + if (typeof fieldData === 'string') { + fieldData = JSON.parse(fieldData) + } + let fieldResult: | { docs: unknown[]; hasNextPage: boolean } | Record @@ -447,7 +452,9 @@ export const traverseFields = >({ } else { const hasNextPage = limit !== 0 && fieldData.length > limit fieldResult = { - docs: hasNextPage ? fieldData.slice(0, limit) : fieldData, + docs: (hasNextPage ? fieldData.slice(0, limit) : fieldData).map((objOrID) => ({ + id: typeof objOrID === 'object' ? objOrID.id : objOrID, + })), hasNextPage, } } diff --git a/packages/payload/src/collections/config/types.ts b/packages/payload/src/collections/config/types.ts index 14e5765707..5fe12a4f32 100644 --- a/packages/payload/src/collections/config/types.ts +++ b/packages/payload/src/collections/config/types.ts @@ -31,7 +31,7 @@ import type { StaticLabel, } from '../../config/types.js' import type { DBIdentifierName } from '../../database/types.js' -import type { Field, JoinField } from '../../fields/config/types.js' +import type { Field, JoinField, RelationshipField, UploadField } from '../../fields/config/types.js' import type { CollectionSlug, JsonObject, @@ -485,6 +485,7 @@ export type SanitizedJoin = { * The schemaPath of the join field in dot notation */ schemaPath: string + targetField: RelationshipField | UploadField } export type SanitizedJoins = { diff --git a/packages/payload/src/fields/config/sanitizeJoinField.ts b/packages/payload/src/fields/config/sanitizeJoinField.ts index 632fbd09a5..9da7bc372b 100644 --- a/packages/payload/src/fields/config/sanitizeJoinField.ts +++ b/packages/payload/src/fields/config/sanitizeJoinField.ts @@ -1,4 +1,4 @@ -import type { SanitizedJoins } from '../../collections/config/types.js' +import type { SanitizedJoin, SanitizedJoins } from '../../collections/config/types.js' import type { Config } from '../../config/types.js' import type { JoinField, RelationshipField, UploadField } from './types.js' @@ -23,9 +23,10 @@ export const sanitizeJoinField = ({ if (!field.maxDepth) { field.maxDepth = 1 } - const join = { + const join: SanitizedJoin = { field, schemaPath: `${schemaPath || ''}${schemaPath ? '.' : ''}${field.name}`, + targetField: undefined, } const joinCollection = config.collections.find( (collection) => collection.slug === field.collection, @@ -73,11 +74,12 @@ export const sanitizeJoinField = ({ if (!joinRelationship) { throw new InvalidFieldJoin(join.field) } - - if (joinRelationship.hasMany) { - throw new APIError('Join fields cannot be used with hasMany relationships.') + if (Array.isArray(joinRelationship.relationTo)) { + throw new APIError('Join fields cannot be used with polymorphic relationships.') } + join.targetField = joinRelationship + // override the join field localized property to use whatever the relationship field has field.localized = joinRelationship.localized diff --git a/packages/payload/src/index.ts b/packages/payload/src/index.ts index 8907386b50..ece0e1de7e 100644 --- a/packages/payload/src/index.ts +++ b/packages/payload/src/index.ts @@ -725,6 +725,7 @@ export type { RequiredDataFromCollection, RequiredDataFromCollectionSlug, SanitizedCollectionConfig, + SanitizedJoins, TypeWithID, TypeWithTimestamps, } from './collections/config/types.js' diff --git a/test/joins/collections/Categories.ts b/test/joins/collections/Categories.ts index cb353f943f..5780405ef2 100644 --- a/test/joins/collections/Categories.ts +++ b/test/joins/collections/Categories.ts @@ -49,6 +49,12 @@ export const Categories: CollectionConfig = { collection: postsSlug, on: 'category', }, + { + name: 'hasManyPosts', + type: 'join', + collection: postsSlug, + on: 'categories', + }, { name: 'group', type: 'group', diff --git a/test/joins/collections/Posts.ts b/test/joins/collections/Posts.ts index a78ab3ea9c..edfaf546e0 100644 --- a/test/joins/collections/Posts.ts +++ b/test/joins/collections/Posts.ts @@ -23,6 +23,12 @@ export const Posts: CollectionConfig = { type: 'relationship', relationTo: categoriesSlug, }, + { + name: 'categories', + type: 'relationship', + relationTo: categoriesSlug, + hasMany: true, + }, { name: 'group', type: 'group', diff --git a/test/joins/int.spec.ts b/test/joins/int.spec.ts index e6da3572c8..ade2ec6a06 100644 --- a/test/joins/int.spec.ts +++ b/test/joins/int.spec.ts @@ -23,6 +23,7 @@ const { email, password } = devUser describe('Joins Field', () => { let category: Category + let otherCategory: Category let categoryID // --__--__--__--__--__--__--__--__--__ // Boilerplate test setup/teardown @@ -49,6 +50,14 @@ describe('Joins Field', () => { }, }) + otherCategory = await payload.create({ + collection: categoriesSlug, + data: { + name: 'otherCategory', + group: {}, + }, + }) + // create an upload const imageFilePath = path.resolve(dirname, './image.png') const imageFile = await getFileByPath(imageFilePath) @@ -62,10 +71,15 @@ describe('Joins Field', () => { categoryID = idToString(category.id, payload) for (let i = 0; i < 15; i++) { + let categories = [category.id] + if (i % 2 === 0) { + categories = [category.id, otherCategory.id] + } await createPost({ title: `test ${i}`, category: category.id, upload: uploadedImage, + categories, group: { category: category.id, camelCaseCategory: category.id, @@ -90,6 +104,15 @@ describe('Joins Field', () => { }, collection: 'categories', }) + // const sortCategoryWithPosts = await payload.findByID({ + // id: category.id, + // joins: { + // 'group.relatedPosts': { + // sort: 'title', + // }, + // }, + // collection: 'categories', + // }) expect(categoryWithPosts.group.relatedPosts.docs).toHaveLength(10) expect(categoryWithPosts.group.relatedPosts.docs[0]).toHaveProperty('id') @@ -164,6 +187,31 @@ describe('Joins Field', () => { expect(categoryWithPosts.group.relatedPosts.docs[0].title).toBe('test 14') }) + it('should populate joins using find with hasMany relationships', async () => { + const result = await payload.find({ + collection: 'categories', + where: { + id: { equals: category.id }, + }, + }) + const otherResult = await payload.find({ + collection: 'categories', + where: { + id: { equals: otherCategory.id }, + }, + }) + + const [categoryWithPosts] = result.docs + const [otherCategoryWithPosts] = otherResult.docs + + expect(categoryWithPosts.hasManyPosts.docs).toHaveLength(10) + expect(categoryWithPosts.hasManyPosts.docs[0]).toHaveProperty('title') + expect(categoryWithPosts.hasManyPosts.docs[0].title).toBe('test 14') + expect(otherCategoryWithPosts.hasManyPosts.docs).toHaveLength(8) + expect(otherCategoryWithPosts.hasManyPosts.docs[0]).toHaveProperty('title') + expect(otherCategoryWithPosts.hasManyPosts.docs[0].title).toBe('test 14') + }) + it('should not error when deleting documents with joins', async () => { const category = await payload.create({ collection: 'categories', diff --git a/test/joins/payload-types.ts b/test/joins/payload-types.ts index a9f83397cd..ae89d82ef8 100644 --- a/test/joins/payload-types.ts +++ b/test/joins/payload-types.ts @@ -57,6 +57,7 @@ export interface Post { title?: string | null; upload?: (string | null) | Upload; category?: (string | null) | Category; + categories?: (string | Category)[] | null; group?: { category?: (string | null) | Category; camelCaseCategory?: (string | null) | Category; @@ -97,6 +98,10 @@ export interface Category { docs?: (string | Post)[] | null; hasNextPage?: boolean | null; } | null; + hasManyPosts?: { + docs?: (string | Post)[] | null; + hasNextPage?: boolean | null; + } | null; group?: { relatedPosts?: { docs?: (string | Post)[] | null; diff --git a/test/relationships/int.spec.ts b/test/relationships/int.spec.ts index 3386ed978c..7b889ca190 100644 --- a/test/relationships/int.spec.ts +++ b/test/relationships/int.spec.ts @@ -17,6 +17,7 @@ import type { } from './payload-types.js' import { initPayloadInt } from '../helpers/initPayloadInt.js' +import { isMongoose } from '../helpers/isMongoose.js' import { chainedRelSlug, customIdNumberSlug, @@ -397,6 +398,52 @@ describe('Relationships', () => { expect(query2.totalDocs).toStrictEqual(2) }) + it('should sort by a property of a hasMany relationship', async () => { + // no support for sort by relation in mongodb + if (isMongoose(payload)) { + return + } + + const movie1 = await payload.create({ + collection: 'movies', + data: { + name: 'Pulp Fiction', + }, + }) + + const movie2 = await payload.create({ + collection: 'movies', + data: { + name: 'Inception', + }, + }) + + await payload.delete({ collection: 'directors', where: {} }) + + const director1 = await payload.create({ + collection: 'directors', + data: { + name: 'Quentin Tarantino', + movies: [movie1.id], + }, + }) + const director2 = await payload.create({ + collection: 'directors', + data: { + name: 'Christopher Nolan', + movies: [movie2.id], + }, + }) + + const result = await payload.find({ + collection: 'directors', + depth: 0, + sort: '-movies.name', + }) + + expect(result.docs[0].id).toStrictEqual(director1.id) + }) + it('should query using "in" by hasMany relationship field', async () => { const tree1 = await payload.create({ collection: treeSlug, From f6e5244204b9f74a27500af0191ab5aa954efcd4 Mon Sep 17 00:00:00 2001 From: Jessica Chowdhury <67977755+JessChowdhury@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:45:43 -0400 Subject: [PATCH 007/110] chore(templates): hide admin bar for website template on small screens (#8601) Hides the admin bar component for website template on mobile. --- templates/website/src/components/AdminBar/index.scss | 7 +++++++ templates/website/src/components/AdminBar/index.tsx | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 templates/website/src/components/AdminBar/index.scss diff --git a/templates/website/src/components/AdminBar/index.scss b/templates/website/src/components/AdminBar/index.scss new file mode 100644 index 0000000000..54060c5ba4 --- /dev/null +++ b/templates/website/src/components/AdminBar/index.scss @@ -0,0 +1,7 @@ +@import '~@payloadcms/ui/scss'; + +.admin-bar { + @include small-break { + display: none; + } +} diff --git a/templates/website/src/components/AdminBar/index.tsx b/templates/website/src/components/AdminBar/index.tsx index 452e9c24bf..923e495fdb 100644 --- a/templates/website/src/components/AdminBar/index.tsx +++ b/templates/website/src/components/AdminBar/index.tsx @@ -8,6 +8,10 @@ import { PayloadAdminBar } from 'payload-admin-bar' import React, { useState } from 'react' import { useRouter } from 'next/navigation' +import './index.scss' + +const baseClass = 'admin-bar' + const collectionLabels = { pages: { plural: 'Pages', @@ -40,7 +44,7 @@ export const AdminBar: React.FC<{ return (
Date: Tue, 8 Oct 2024 11:49:18 -0400 Subject: [PATCH 008/110] chore!: improve auth provider setting user and user cookie (#8600) ### Improvements - Uses overlay modal for "logging out..." display on logout view - If user manually logs out it takes them directly to the login page after logout, if caused by inactivity then they will see the logout page that explains that they were logged out due to inactivity - Fixes issue with cookie refresh triggering even after the user logs out - Cleans up auth provider timeouts for refresh and force logout - `setUser` now expects the result similar to the response from the `/me` endpoint, which includes the token, exp, and user ### BREAKING CHANGE If you are using the `setUser` function exposed from the `useAuth()` provider, then you will need to make some adjustments. `setUser` now expects the response data from auth enabled endpoints, ie the `/me` route. This is so the cookie and expiration can be properly set in sync when a new user is set on the provider. ```ts // before setUser({ id: 670524817048be0fa222fc01, email: dev@payloadcms.com, // ... other user properties }) // new setUser({ user: { id: 670524817048be0fa222fc01, email: dev@payloadcms.com, // ... other user properties }, exp: 1728398351, token: "....eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVC...." }) ``` --- .../views/CreateFirstUser/index.client.tsx | 6 +- .../next/src/views/Login/LoginForm/index.tsx | 6 +- .../next/src/views/Logout/LogoutClient.tsx | 57 +++++--- packages/ui/src/providers/Auth/index.tsx | 136 ++++++++---------- 4 files changed, 99 insertions(+), 106 deletions(-) diff --git a/packages/next/src/views/CreateFirstUser/index.client.tsx b/packages/next/src/views/CreateFirstUser/index.client.tsx index 4a88484f95..037431e989 100644 --- a/packages/next/src/views/CreateFirstUser/index.client.tsx +++ b/packages/next/src/views/CreateFirstUser/index.client.tsx @@ -1,9 +1,9 @@ 'use client' import type { ClientCollectionConfig, - ClientUser, FormState, LoginWithUsernameOptions, + MeOperationResult, } from 'payload' import { @@ -57,8 +57,8 @@ export const CreateFirstUserClient: React.FC<{ [apiRoute, userSlug, serverURL], ) - const handleFirstRegister = (data: { user: ClientUser }) => { - setUser(data.user) + const handleFirstRegister = (data: MeOperationResult) => { + setUser(data) } return ( diff --git a/packages/next/src/views/Login/LoginForm/index.tsx b/packages/next/src/views/Login/LoginForm/index.tsx index dfda6e81f1..f3ef1edeb8 100644 --- a/packages/next/src/views/Login/LoginForm/index.tsx +++ b/packages/next/src/views/Login/LoginForm/index.tsx @@ -6,7 +6,7 @@ import React from 'react' const baseClass = 'login__form' const Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default -import type { ClientUser, FormState } from 'payload' +import type { ClientUser, FormState, MeOperationResult } from 'payload' import { Form, FormSubmit, PasswordField, useAuth, useConfig, useTranslation } from '@payloadcms/ui' import { formatAdminURL } from '@payloadcms/ui/shared' @@ -74,8 +74,8 @@ export const LoginForm: React.FC<{ } } - const handleLogin = (data: { user: ClientUser }) => { - setUser(data.user) + const handleLogin = (data: MeOperationResult) => { + setUser(data) } return ( diff --git a/packages/next/src/views/Logout/LogoutClient.tsx b/packages/next/src/views/Logout/LogoutClient.tsx index c9cbc2956c..43cee5044f 100644 --- a/packages/next/src/views/Logout/LogoutClient.tsx +++ b/packages/next/src/views/Logout/LogoutClient.tsx @@ -1,8 +1,9 @@ 'use client' -import { Button, useAuth, useTranslation } from '@payloadcms/ui' +import { Button, LoadingOverlay, toast, useAuth, useTranslation } from '@payloadcms/ui' import { formatAdminURL } from '@payloadcms/ui/shared' import LinkImport from 'next/link.js' -import React, { Fragment, useEffect } from 'react' +import { useRouter } from 'next/navigation.js' +import React, { useEffect } from 'react' import './index.scss' @@ -17,39 +18,49 @@ export const LogoutClient: React.FC<{ }> = (props) => { const { adminRoute, inactivity, redirect } = props - const [isLoggingOut, setIsLoggingOut] = React.useState(undefined) + const [isLoggedOut, setIsLoggedOut] = React.useState(undefined) + const logOutSuccessRef = React.useRef(false) + const [loginRoute] = React.useState(() => + formatAdminURL({ + adminRoute, + path: `/login${ + inactivity && redirect && redirect.length > 0 + ? `?redirect=${encodeURIComponent(redirect)}` + : '' + }`, + }), + ) const { logOut } = useAuth() const { t } = useTranslation() + const router = useRouter() + + const handleLogOut = React.useCallback(async () => { + const loggedOut = await logOut() + setIsLoggedOut(loggedOut) + if (!inactivity && loggedOut && !logOutSuccessRef.current) { + toast.success(t('authentication:loggedOutSuccessfully')) + logOutSuccessRef.current = true + router.push(loginRoute) + return + } + }, [inactivity, logOut, loginRoute, router, t]) useEffect(() => { - if (!isLoggingOut) { - setIsLoggingOut(true) - void logOut() + if (!isLoggedOut) { + void handleLogOut() } - }, [isLoggingOut, logOut]) + }, [handleLogOut, isLoggedOut]) - if (isLoggingOut) { + if (isLoggedOut && inactivity) { return (
- {inactivity &&

{t('authentication:loggedOutInactivity')}

} - {!inactivity &&

{t('authentication:loggedOutSuccessfully')}

} -
) } - return {t('authentication:loggingOut')} + return } diff --git a/packages/ui/src/providers/Auth/index.tsx b/packages/ui/src/providers/Auth/index.tsx index fa5b902902..7107caf488 100644 --- a/packages/ui/src/providers/Auth/index.tsx +++ b/packages/ui/src/providers/Auth/index.tsx @@ -14,19 +14,21 @@ import { requests } from '../../utilities/api.js' import { formatAdminURL } from '../../utilities/formatAdminURL.js' import { useConfig } from '../Config/index.js' -export type AuthContext = { +export type UserResponse = MeOperationResult | null + +export type AuthContext = { fetchFullUser: () => Promise - logOut: () => Promise + logOut: () => Promise permissions?: Permissions refreshCookie: (forceRefresh?: boolean) => void refreshCookieAsync: () => Promise refreshPermissions: () => Promise setPermissions: (permissions: Permissions) => void - setUser: (user: T) => void + setUser: (user: UserResponse) => void strategy?: string token?: string tokenExpiration?: number - user?: null | T + user?: null | UserResponse['user'] } const Context = createContext({} as AuthContext) @@ -43,7 +45,7 @@ export function AuthProvider({ permissions: initialPermissions, user: initialUser, }: Props) { - const [user, setUser] = useState(initialUser) + const [user, setUserInMemory] = useState(initialUser) const [tokenInMemory, setTokenInMemory] = useState() const [tokenExpiration, setTokenExpiration] = useState() const pathname = usePathname() @@ -66,6 +68,7 @@ export function AuthProvider({ const { closeAllModals, openModal } = useModal() const [lastLocationChange, setLastLocationChange] = useState(0) const debouncedLocationChange = useDebounce(lastLocationChange, 10000) + const refreshTokenTimeoutRef = React.useRef>(null) const id = user?.id @@ -92,15 +95,17 @@ export function AuthProvider({ const revokeTokenAndExpire = useCallback(() => { setTokenInMemory(undefined) setTokenExpiration(undefined) + clearTimeout(refreshTokenTimeoutRef.current) }, []) - const setTokenAndExpiration = useCallback( - (json) => { - const token = json?.token || json?.refreshedToken - if (token && json?.exp) { - setTokenInMemory(token) - setTokenExpiration(json.exp) + const setNewUser = useCallback( + (userResponse: UserResponse) => { + if (userResponse?.user) { + setUserInMemory(userResponse.user) + setTokenInMemory(userResponse.token) + setTokenExpiration(userResponse.exp) } else { + setUserInMemory(null) revokeTokenAndExpire() } }, @@ -113,11 +118,11 @@ export function AuthProvider({ const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now if (forceRefresh || (tokenExpiration && remainingTime < 120)) { - setTimeout(() => { + refreshTokenTimeoutRef.current = setTimeout(() => { async function refresh() { try { const request = await requests.post( - `${serverURL}${apiRoute}/${userSlug}/refresh-token`, + `${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`, { headers: { 'Accept-Language': i18n.language, @@ -127,11 +132,9 @@ export function AuthProvider({ if (request.status === 200) { const json = await request.json() - setUser(json.user) - - setTokenAndExpiration(json) + setNewUser(json) } else { - setUser(null) + setNewUser(null) redirectToInactivityRoute() } } catch (e) { @@ -142,15 +145,19 @@ export function AuthProvider({ void refresh() }, 1000) } + + return () => { + clearTimeout(refreshTokenTimeoutRef.current) + } }, [ - tokenExpiration, - serverURL, apiRoute, - userSlug, - i18n, + i18n.language, redirectToInactivityRoute, - setTokenAndExpiration, + serverURL, + setNewUser, + tokenExpiration, + userSlug, ], ) @@ -166,13 +173,12 @@ export function AuthProvider({ if (request.status === 200) { const json = await request.json() if (!skipSetUser) { - setUser(json.user) - setTokenAndExpiration(json) + setNewUser(json) } return json.user } - setUser(null) + setNewUser(null) redirectToInactivityRoute() return null } catch (e) { @@ -180,18 +186,20 @@ export function AuthProvider({ return null } }, - [serverURL, apiRoute, userSlug, i18n, redirectToInactivityRoute, setTokenAndExpiration], + [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, userSlug], ) const logOut = useCallback(async () => { - setUser(null) - revokeTokenAndExpire() try { await requests.post(`${serverURL}${apiRoute}/${userSlug}/logout`) + setNewUser(null) + revokeTokenAndExpire() + return true } catch (e) { toast.error(`Logging out failed: ${e.message}`) + return false } - }, [serverURL, apiRoute, userSlug, revokeTokenAndExpire]) + }, [apiRoute, revokeTokenAndExpire, serverURL, setNewUser, userSlug]) const refreshPermissions = useCallback( async ({ locale }: { locale?: string } = {}) => { @@ -235,20 +243,9 @@ export function AuthProvider({ if (request.status === 200) { const json: MeOperationResult = await request.json() - let user = null - - if (json?.user) { - setUser(json.user) - user = json.user - - if (json?.token) { - setTokenAndExpiration(json) - } - } else { - setUser(null) - revokeTokenAndExpire() - } + const user = null + setNewUser(json) return user } } catch (e) { @@ -256,7 +253,7 @@ export function AuthProvider({ } return null - }, [serverURL, apiRoute, userSlug, i18n.language, setTokenAndExpiration, revokeTokenAndExpire]) + }, [serverURL, apiRoute, userSlug, i18n.language, setNewUser]) // On mount, get user and set useEffect(() => { @@ -270,58 +267,43 @@ export function AuthProvider({ } }, [debouncedLocationChange, refreshCookie, id]) - // When initialUser changes, reset in state - useEffect(() => { - setUser(initialUser) - }, [initialUser]) - useEffect(() => { setLastLocationChange(Date.now()) }, [pathname]) useEffect(() => { let reminder: ReturnType + let forceLogOut: ReturnType const now = Math.round(new Date().getTime() / 1000) const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0 + const remindInTimeFromNow = Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime), 0) + const forceLogOutInTimeFromNow = Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0) + + if (!user) { + clearTimeout(reminder) + clearTimeout(forceLogOut) + return + } if (remainingTime > 0) { - reminder = setTimeout( - () => { - openModal(stayLoggedInModalSlug) - }, - Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime)), - ) + reminder = setTimeout(() => { + openModal(stayLoggedInModalSlug) + }, remindInTimeFromNow) + + forceLogOut = setTimeout(() => { + setNewUser(null) + }, forceLogOutInTimeFromNow) } return () => { if (reminder) { clearTimeout(reminder) } - } - }, [tokenExpiration, openModal]) - - useEffect(() => { - let forceLogOut: ReturnType - const now = Math.round(new Date().getTime() / 1000) - const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0 - - if (remainingTime > 0) { - forceLogOut = setTimeout( - () => { - setUser(null) - revokeTokenAndExpire() - redirectToInactivityRoute() - }, - Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0), - ) - } - - return () => { if (forceLogOut) { clearTimeout(forceLogOut) } } - }, [tokenExpiration, closeAllModals, i18n, redirectToInactivityRoute, revokeTokenAndExpire]) + }, [tokenExpiration, openModal, i18n, setNewUser, user]) return ( (): AuthContext => useContext(Context) as AuthContext +export const useAuth = (): AuthContext => useContext(Context) From 9a0568c72eaa95e921e90305012eee50a9adc566 Mon Sep 17 00:00:00 2001 From: Patrik Date: Tue, 8 Oct 2024 14:40:41 -0400 Subject: [PATCH 009/110] fix(payload): applies resize after cropping if `resizeOptions` are defined (#8528) Fixes #7592 --- .../payload/src/uploads/generateFileData.ts | 65 ++++++++++++++----- test/uploads/e2e.spec.ts | 29 +++++++++ 2 files changed, 79 insertions(+), 15 deletions(-) diff --git a/packages/payload/src/uploads/generateFileData.ts b/packages/payload/src/uploads/generateFileData.ts index 7c62ddd1f1..ed7acdb542 100644 --- a/packages/payload/src/uploads/generateFileData.ts +++ b/packages/payload/src/uploads/generateFileData.ts @@ -236,23 +236,58 @@ export const generateFileData = async ({ withMetadata, }) - filesToSave.push({ - buffer: croppedImage, - path: `${staticPath}/${fsSafeName}`, - }) + // Apply resize after cropping to ensure it conforms to resizeOptions + if (resizeOptions) { + const resizedAfterCrop = await sharp(croppedImage) + .resize({ + fit: resizeOptions?.fit || 'cover', + height: resizeOptions?.height, + position: resizeOptions?.position || 'center', + width: resizeOptions?.width, + }) + .toBuffer({ resolveWithObject: true }) - fileForResize = { - ...file, - data: croppedImage, - size: info.size, + filesToSave.push({ + buffer: resizedAfterCrop.data, + path: `${staticPath}/${fsSafeName}`, + }) + + fileForResize = { + ...fileForResize, + data: resizedAfterCrop.data, + size: resizedAfterCrop.info.size, + } + + fileData.width = resizedAfterCrop.info.width + fileData.height = resizedAfterCrop.info.height + if (fileIsAnimatedType) { + const metadata = await sharpFile.metadata() + fileData.height = metadata.pages + ? resizedAfterCrop.info.height / metadata.pages + : resizedAfterCrop.info.height + } + fileData.filesize = resizedAfterCrop.info.size + } else { + // If resizeOptions is not present, just save the cropped image + filesToSave.push({ + buffer: croppedImage, + path: `${staticPath}/${fsSafeName}`, + }) + + fileForResize = { + ...file, + data: croppedImage, + size: info.size, + } + + fileData.width = info.width + fileData.height = info.height + if (fileIsAnimatedType) { + const metadata = await sharpFile.metadata() + fileData.height = metadata.pages ? info.height / metadata.pages : info.height + } + fileData.filesize = info.size } - fileData.width = info.width - fileData.height = info.height - if (fileIsAnimatedType) { - const metadata = await sharpFile.metadata() - fileData.height = metadata.pages ? info.height / metadata.pages : info.height - } - fileData.filesize = info.size if (file.tempFilePath) { await fs.promises.writeFile(file.tempFilePath, croppedImage) // write fileBuffer to the temp path diff --git a/test/uploads/e2e.spec.ts b/test/uploads/e2e.spec.ts index 686123fc81..60eb1ec888 100644 --- a/test/uploads/e2e.spec.ts +++ b/test/uploads/e2e.spec.ts @@ -619,6 +619,35 @@ describe('uploads', () => { // without focal point update this generated size was equal to 1736 expect(redDoc.sizes.focalTest.filesize).toEqual(1598) }) + + test('should resize image after crop if resizeOptions defined', async () => { + await page.goto(animatedTypeMediaURL.create) + await page.waitForURL(animatedTypeMediaURL.create) + + const fileChooserPromise = page.waitForEvent('filechooser') + await page.getByText('Select a file').click() + const fileChooser = await fileChooserPromise + await wait(1000) + await fileChooser.setFiles(path.join(dirname, 'test-image.jpg')) + + await page.locator('.file-field__edit').click() + + // set crop + await page.locator('.edit-upload__input input[name="Width (px)"]').fill('400') + await page.locator('.edit-upload__input input[name="Height (px)"]').fill('800') + // set focal point + await page.locator('.edit-upload__input input[name="X %"]').fill('75') // init left focal point + await page.locator('.edit-upload__input input[name="Y %"]').fill('50') // init top focal point + + await page.locator('button:has-text("Apply Changes")').click() + await page.waitForSelector('button#action-save') + await page.locator('button#action-save').click() + await expect(page.locator('.payload-toast-container')).toContainText('successfully') + await wait(1000) // Wait for the save + + const resizeOptionMedia = page.locator('.file-meta .file-meta__size-type') + await expect(resizeOptionMedia).toContainText('200x200') + }) }) test('should see upload previews in relation list if allowed in config', async () => { From c14c4298e2270c97e3f4e57ea880bfa6d29eedc3 Mon Sep 17 00:00:00 2001 From: Patrik Date: Tue, 8 Oct 2024 14:45:51 -0400 Subject: [PATCH 010/110] fix(payload): calculates correct aspect ratio dimensions on sharp based files (#8537) v2 PR [here](https://github.com/payloadcms/payload/pull/8510) --- packages/payload/src/uploads/imageResizer.ts | 14 +++++++++++++- test/uploads/e2e.spec.ts | 12 ++++++++++++ test/uploads/ios-image.jpeg | Bin 0 -> 1129639 bytes 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/uploads/ios-image.jpeg diff --git a/packages/payload/src/uploads/imageResizer.ts b/packages/payload/src/uploads/imageResizer.ts index cc91694958..8bd2682a7a 100644 --- a/packages/payload/src/uploads/imageResizer.ts +++ b/packages/payload/src/uploads/imageResizer.ts @@ -291,6 +291,18 @@ export async function resizeAndTransformImageSizes({ const sharpBase: Sharp | undefined = sharp(file.tempFilePath || file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081 const originalImageMeta = await sharpBase.metadata() + let adjustedDimensions = { ...dimensions } + + // Images with an exif orientation of 5, 6, 7, or 8 are auto-rotated by sharp + // Need to adjust the dimensions to match the original image + if ([5, 6, 7, 8].includes(originalImageMeta.orientation)) { + adjustedDimensions = { + ...dimensions, + height: dimensions.width, + width: dimensions.height, + } + } + const resizeImageMeta = { height: extractHeightFromImage(originalImageMeta), width: originalImageMeta.width, @@ -315,7 +327,7 @@ export async function resizeAndTransformImageSizes({ if (resizeAction === 'resizeWithFocalPoint') { let { height: resizeHeight, width: resizeWidth } = imageResizeConfig - const originalAspectRatio = dimensions.width / dimensions.height + const originalAspectRatio = adjustedDimensions.width / adjustedDimensions.height // Calculate resizeWidth based on original aspect ratio if it's undefined if (resizeHeight && !resizeWidth) { diff --git a/test/uploads/e2e.spec.ts b/test/uploads/e2e.spec.ts index 60eb1ec888..9541748e55 100644 --- a/test/uploads/e2e.spec.ts +++ b/test/uploads/e2e.spec.ts @@ -141,6 +141,18 @@ describe('uploads', () => { await saveDocAndAssert(page) }) + test('should properly create IOS file upload', async () => { + await page.goto(mediaURL.create) + + await page.setInputFiles('input[type="file"]', path.resolve(dirname, './ios-image.jpeg')) + + const filename = page.locator('.file-field__filename') + + await expect(filename).toHaveValue('ios-image.jpeg') + + await saveDocAndAssert(page) + }) + test('should create animated file upload', async () => { await page.goto(animatedTypeMediaURL.create) diff --git a/test/uploads/ios-image.jpeg b/test/uploads/ios-image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..59cbb094f2f433ecb9426af1bc2e3ccc5c849e29 GIT binary patch literal 1129639 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

dhHB`Nrp+1kSM+y!_MO23TY?Qe`GD9K7fbYBdk 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 z zM=mSL9$;xE#fsMSR*o$71a3UW)Bc1oyJP2>arlZ+Mw#NZ&mSvvM8@HNEPW3-I_2@p zDl~~BrwKim?JDNpfG7H`Zr-{$wZ-qJ&EYD;o1iM$DoL8dgSAl?rG(90pb!w>S@9o{qyhW0nvS;0fpr>@;& z3DblxSnfoJG0kwDdfA87ind-^;F=osw3o2;5nrcZH;FR{#c`hUR0i}H5tZk>7g zD58|Z@E54+YMbsjUNdHS)uf2m$Zb2Fj(vs{9{=cw$LTqeL1N{wDK`}=iCI?@chlJG zn;E*L*vFpv&+4t+EwDxkjZF1951lLp5V-6`sezD#)HPf-%W=xmf2}e}M{w=Ff`~==z0Mt>j*FgJw}yR5Hi~JpA)@(zd6+Tp_a0zkI+S6YN-Q zMQ!NkdLLQmu-hBpE(A;Rm*nyfoD+kAgNt?AD}>NdQo+VG)Bn1 zWGxyLzJlHge)q(jpXvMceG-;M#>i`xbdx=VDAlRb4s3RphUQea>Y>q!BOe}fa~aA< zJC2!`s~3QzgkWG2S4nmx)SNxn!UX_(Z2GT5B=Mz&;WmocO~n04@RnGK!RsWgF^lMR zBp_8nzD01yesQHzx4_TD!Zsbw%e^#kynQye)iEQ1 zFz6ru;QWrCl@Jv?*LqsNFf1)A zyXnMwudK=Kpu}n}5nx6gJcxbNfQs(WvZ&EYD$HPEAZ5$1#v#GA{+w_#4EAV&8iJ%! zSe>C!1VE(~Qb%`MmZ6|@j2G3$miJwIP)Y2GD4vx2xI0s|vvUY;h6ldD`_&wY{DH%# zzJdVhT$ z1Bi$2!^kIV@!e6<_|2lNBeuZZp;sud^hr5aVeGx8fnFL+=`8wO^OkJzFpq~dH)Sbq z=xUBX!)%4dOV?C1<`Ka)$4;QfPDkG|srcBYTJboz-w5BcVguVcJhZ@wkmy_)7na)o@yK@`f2T2Sbsa-VQ(&7f z*L8|NX^Y{_j$tLJi}DnQpx05%w44PFIu>=;)LJ<7M#buj!{2CGEhx6;J(9O@?2 znVl6yS}ND}eru#FU(ozSnqD2hg_tz+xm0JE*L#>^Y42o3>y}NH&svZa+S#0sNGi#QmLDtw;_zkaZPIXm zv6sK`iaWWdFMkIPO#pOq+^HwpVQ_p}R!JoCJ|14&$YFozE8UWYHKHB)6fF0RfO5QM z0fDnHjelC%)e;B1IX)Niw%Hi3d-i)yLaVAX#a4q<=AcOcm!U~;&aJ&NqS{9O(L~r+ z{0*jy@xAf}UFAlf#()LOnvR27aaMP|VqOT7K*6j{g;47-4RVpVU=-Z%%s-p?(;{j6 z89%{NAZ+X2JCG^+u35jduCMT`;E&9^wVU-kP--MOm{dlwYs&Qu-ZxP5gC8%q?jeu% zXTBqh_|RsTTaC;j%_m{%fooMrANrIyT`TkTFFd{hVy1(x;Apn2)oto$$d<; zvPBF3EABqQqs{41L0Kc*4EarYXVaUyV*zzTmcYu@j@aTp={l%cr-UDEOPCVQv?M7OyYM>+ zUnr>T0BWZ_8!y1rI4%k!TK1Kc_5%ggCZB#^Sl5H~ zA4I($iR-YL+HCflJ5t(LI;8)Jul%d#h4Z6$k_cg+X(mOtIXA}9QCIshYh-1^DB^3* z?`29Mtnpi(=BBZ-ReUoKQXMZ)Bs2q{?k46nSJspA@to}tw(k-r4WMJNKVMHUxtsPj zl>RbyKa=-%USR`MgZUaOYQ3k@1}rY&OE~ega~98vfbN}+fB1R z{T!1i`LQ<6)@v3LltzWMyC)oWDuq4-4xd16a~RCv+oI$$ZlcRUIXjxLK|fI2Dhw9f zzR7o**1Vhjh9`u+VH}n#=2i9p=X31?)6;)b#D3AwS~Dh2Jxbqw-z{j59~@D`e$6pY zA6^KZqI}ozNm>*S={&8Y#iZl=r8KB=caEkNQoPT-ojiVd`vN+Pg#IZ8K^d5b(CEti z@~!<0mDi-t^mPjyXCv_e7vyWdYrR{XWn{^{zu&r>T;E|9H9M4XrST+5CQ?HeZ*yR5 z^)wd3hHLGk&kfhD65ImkQ#L|asgLy_)AXXFsyrnkEePTG=#J0rRrTmF*raZvX)<$O zg|u8I*~WeO1^pz;5P;bri*>>=7GpYkf$yKD*)S}x-Sekulx6rUuH9Q_oL=c`_pcES zac%h3BnEUu3lMBfCYB{1&1yaGA#h@7M_g|-vhSK6aDC!l)dY9=vzh;pq*qlj2IkpXK^%fE z>n?u*xTLDBE!rC}HdSygSI;S*P_^QZ!oXARz_l&OUCKN8N&b|rtFf(KCB^w=aOk#X zFCi#B5Ka+Wc)kk19dCxX<~OLi9}$XKHQ$$7ZW?Vze`GSIm=|kWr$)JMR*nxm{ckG; z2gR4iRlZ5$Z&gD)n(;@xw768l3$`#U5$}I3f=Ag7n6Eeuid3Wbrt4Z3Ba~uG3CO3f zZ?fE#PKwlw^#3MH+5D-33fd=e+Y7zVR1KCUMl)NH$3G#+YnBb>N#yhTENV_=WD?y9W5LJawL(G9-i^A{iw&ZMm=j7+9*M z^ugibs_*nLoX}hy5RNaZr_d6cKMZA45k+CvhJ%pKi|gD*Fi70XLDF_+3+(7&W(A&O zu@W`Rv`L;&lPvj&(|SqC5?v(5uX|_Dv`wEa7VjgeWzzVfw!TD1qI0ktYHV)SEAU)T zkWX+MG9n;wYjW*+Yu!~Q{xZ3y(k1Jx6;;w{jB zBhJjfSVR(f-P)*(q~I^*FeIO^b>ME*IRx4+o&28>zMwi-Fd$gLehC-f=K@j@UTH2Z z+xfRs96PqB>?w@v8|{oh&sHG2fJnrvcE7R(`S#l1|5n>q^VUU#jQz4nl#0gap+Qep zuWm==usKBLdQJHF)lEZi9=rvS@eM;N4UbnhT;xeX*R{iKTXzS#zlS2K0UN`({O&>U zP{ANW4a=}T_cn!w8cfe%_#mYb7wGC6-Vr=Ee3QLnd+T52P~s{!|0#QaD_w4wzwef< z2evPlqw8)k$I$e7Zcvu(XL4k}oBvU+9En~J^OWnNsSVw31Q*-{>AU;D6Sr5_i2ik~T^-8%QX4Et63#G$02an9Lli^tU;CD}7{GV$l@riifX zW<^oN0O{Mg8WvzyZ<)W_^`?%NF#L6|Vewn~E#mR|$3K{T#7C;CurQlV=AN=crz5=2 z=`c@ayfGOsX!SH63l^({1W$D*%Dw!v)1F$EJ$n8KRz>~H=xmT5p|p!C{bbm*!GBHe zX==eU@+xE6ZN4HzCaGK~h#y6&h#?*`VNLV$M=AlaKqty-^n8-~tBt!vA+gdR|0SbB z$H~qKP{AmSva^hKbNc*LJ}*);y{OfYSRQvA?t-+LZS?%i^;Qp5mWgWbZS)G66D0eu z#oe6i?<;+^_7SLV=zO%*d5ms#+c!Ivg7Dbsk)SXr$GGWd(u$CbN89|IudXw{6!*0v zgjKwA?*Z2ibJ%y)^tqF z`2h*t(%%1>^Q!CiEQP?_1{W}r=wS4emmSsQiX<)pi>B_mL@a8rTZr;S7HpQ5U_dRm z(sK6Op%*zIb9ETcaY;*6UL)%;h_JFg2e2ufvRw`fX}m(ghRIgyt+b`jw60VY%El~H zjrQ5y`OHD4*2p{SzATQ)C(<2=9y78rrBgWfA;6)fs6{u3y?W|9Lm;zeZL8O|ObRHz z0&LtD8lHmE_^nTLuCaV9N23TTS!M0uu6$LFlZwjo@Q2(1eeL%7hp^HSPhhgI;LIW@ zmvFFE$1<4im&6%*_3;&(Z-aP8O1}Dc#|-lJ8HAvlOw8o|R!0eWj3Pnc#H=emiU38a^tcgRe)$hc;LrJZYitcsa)j7xLxO~xKXI~@u@@Zt+s9w^ zH@P|OnUU$9%=koTym5@hn55dIx>tq|TY}j~68ODx*b8%BsPnlzXgU&4Rgk22odA>z zU4@Mzm>mKlyUU~PZWB>8oFK>Y_R`{rOkoruswK43Dxo67=zlNY?u{sHk}LXGm^{tW zpRYlL?+5D2@IpwO) zdaSs!Xuln|Pc+*_PN1`MsXDvd7K-vWkxwb+#6t-bX@qkTq=$wUQg_6H65pOi*{{60 zdH&a5v!ty{GR$YHI>JJZwuOsXih975L9A<}HB_D828?_K9R!q) zbazCR*i=a1Qv2$+zChmy?xBUPK$HUMvfdrk-*9(*_h}k3u7m^I67KG3VWrw*fcKwR z7?KQw1h`vE#GJDq{O5Wh$zg!tRz~fM6R8W%9Dwsrmfvp^1!s!)TEH|% zZ-l)PxRM}bAY&=;NU74}v@ZPEM69GvBhBNsbq@`?>h#$WRN5KGO472qGNVEVL)-p8 zI0br2QLflUIA5K`-ks)wj2kb&T%${?MBjghwj?JB@*Yfcn{S{cF$@btn;k&EWEUk#5JxW3y!9b}dvD>`ODUU5g{l&sk4o|u(KlFWEn9bM3|Jpa( zA=lj&g^5-f@_vxyUtpH&_qH1mTMGGp5rm^E?P3@jw`5c2TpfB5>!Jc-jBPj2XJ=<< zYG49jw^6NYbIfiosLk|{iPiLWHjfwV2!)q2+`EdJlp&LfC~#Sknp8%STlJ%(Mta3jchnDmq!#ow`e`3o$cec8fny)m* zij?i6qRi#KNturS@CvY89z^G|v#98=u!b4A-v~ovI6_z1O${txSaWcjJNh{DYYHvr zH)OVuakhmGh^NW{2n+ymGQK|MGfP)COgiu)^o&5#x*eN^-+&<-5Tg9IJxi1%UKd2G zid1EXy9>`Ec+u%{5#<~O=BEh%ApGSIz1>mI9pm=z{Zi5gAu~SiaKW!UXdLG!kmLoUpLgg{^4Du zzU|`zFOzJ%I6TAnd}`vjOoXg3$?mWb>lT|HO@A$0=bMr@@l~Xx`1T#t4DI4x37v~! z*c%c%TD|!{{|8CYFfaa`S8&b-%xvp{e0Xr^hdzm)zRwHnVm)C z_R?M0FJZ8j$OHsN>~g&^7`;T_t0(`)XnV8`3I-gSiMjllS=yaOfp1@tZmwW(m4IGA z;&{-NPRy2%Fp#qn$OZP?SVYoL~z`bC@BGU+25lj;_BtHYm}RU%bOI{)hj zrkaY!;>q+K7bUA-ai)P%hwY~7G<);rF@ z-W68FFOo`)VKvE&R{fCs zaJ4i+Tk+RlCm!dIrO!>=!&x<%F8RFB{X-2Gj}mRFW@*1n2xuzN&-{0ZA z0$g0R{Cz)FhH4&}1bu(LHx7x0cAEO`xV8bt@T_ zjV0M9N>&(PY6(M0k(`LIClL)8UH!5EtYWDYiGuTiE#2Z=JH!UAlm_ zd_5C+rmzflcRq{BOTTA&s}WbbyS^xGUJT>v3y>=_fHxHE12bKegv=^3MN@YS(x$py z_goch=zNMxCXz57@tEEkQ8L^mH;iKzmbQ z=JoP&^g`~7+f|A+ybO6w(xV`MgstS)Rf#U_LV3y9nFXhT-r-V<%*Py@X{y8Vwk6_5zR>y;QLUvoWgy`EtAQF6+*$X#BUqN3A`P z&uxkx_=kRiKzQKTa58pdq0_sh^9i^#uJ1wl?}jdlIyCfm%;scf$(a$3GKu3KUz(A5 zE#n=+C}M&aHe`1nKWH{ZmW^LOH{=iYQN|s^4XMdIYQ}jac}b!)NH!~`6{h|p03z3& zx^Oex_BFHiRQVx^#MJzi-y}quP>3Po1-aN`Kah`kBvUNbzuv`(nKlcyTH=G?Exu?@ zuvvYH{swY00xoQvdnDY$QuX;+l=nXI(yd-lYLU6SSi zOf#UtubTuSP6s{crK=BXH{L(2b9da45U-vfN8Ih>Y&!h=zBst#u`-@R`Wfyao4tQ4 zPd+-uG4V-^Oq(x%&{SB>Lmy)~CjXAl9(G^}K*T?M-x}IG{~d2Vp%`o(hF z9dC?cQQlChi^ufPRf|Pr9X83oqN2sAkb>g7ty!xQ)AN=AH|3nfNYzgu4e&*b+#YA( zu_`~K2nLZE0}9gVQM#3N^WpZB<0avG1>ZFX+#7}+&#$y%MV{uz1P>O$skP>suSDK8cw}{4s(z zu%;p&M(Mg6E^@f3ga9=`0{jNTY#@Psna1cIgue08KIQ;yt;b#v z?hDob+q__{3!mLZ5TR5j_OR^KGJpH8PxQ}FhGTW}?J4j2wkSt}NBhaKUPS3J1u|Ez zYfCF1vOgm7xWH~BE*!m0L^wT?0LQuIULhx(q_mBS_ZaOrg?W6m&WwPV8^PzNZtK+D z7!mTi*qJ%o?Ffu=w|6FXC#7iG`G0yxGRohny)qncm^QP=i*>0>)(Y)PI&OgPe2U#K zVa<-kii76U+pG`3Oe&Xt^EG8w&yP)$TK(37nita_0b~1R@<2dxJZPJFrT)Wien?E~ z_PomwcHs8@sHO^P*rtW-em?!_Wlc~w^l`x_TQP2m@IkvHjtMS7{4@Uz0GQ@jN|hE+e42ZK&UDr!9-i(d6b z5FO6hJO&(q_9^jvBk&DP$78d5msTUjJ1_x``_yB9~)FcX+Ss=xFn5@^{MH{5$F3cv&ZYn%fctWwq4)NKDDJl;rscCvB%6`3 z%&!(9(vM~SgWnkC^k>-wNk84S?$S>pK<}*2G0k>5lDIgG4<#ZeaeCDpg#=pU!EPTrHe(6#NY~g6zBXYc!ev)z(PCG+m9tDdkq!V1y* zZ0^R(?KV--EH{?7{%5(r-6Q zBRlOy$r(+b#Bxhw?oh#Ou7EgH7Tiqw%+pI<{*Ot&Z}t$uWBKpZ788yhutv&mGNh9q z3I33JZl-wq@_NJ_$ki|k?fqM*I&>9x`$wfqlh4~l?HY$uOML6t0YwnaxYj8A-G4}tUf=DZ#Gd@psSCo}_f8(K~ z?*nBm5<9TPq`PcI7e(|2Aki9|Fw?v;Tu1Zl-uovb$8Xvv_)&Rpuj;Ev_A0UZj)hL^ znq8@(E4vRD*)vMk3BTY?FMVajE|>osHxC}1ce9YX#-~4gWz+m(8cEv;ALWN?uGQ-V z50grsZh7SZ^JSFh$Mn=%Kbt6iTefx&X3TwF5aW?qBcwmmSL#Pw$Bo~y%B?2U$1LjV z1=bV5`m62{?>V-7)5X->TDT}aWl4G;VQ{C;%w`GsIT$VoftRLl&}%P8tY@)hQi6O5 zeW|W4vKD$wO^~A-IyDD+SC6m!9R_WZ-%$xkcFx+IG%)NS9%FmYQ!bJ~%~aVKJP|^_b^qGt8b`?w#u+ze#pO(Q4RW={I`D_;#lEt#vxZPdve4Q4$)H z%d|tZQ#ciWj|Cq$o-{MIn;T%?aX%h#{fI-~Fe9~_ z=lA|DuZ5V~1oH39tAiSY#>sTtXhVadF2Zu(LQj?GS>{@ZS9Q^Es zJaZropNgbheAKiy@ zs@nrM?zOLX2yU_<28_PAv0twnqa}u1^{ps4@*O0lafbhV?}v8jy~=;7I;)^Ixc1<` zw4)9`2|m6CPUmuVrYkB*0Q61WcKAif)!mdR$BNoU`-ay5X|mVrLTW|yU@NrOMLY5% zVOKVBzPR)1V-0C$~i!yac*`aV65U%&-c#Le_ zm)TiZKZ`+kU7G3nGSCv_u>5NylzKR_DDTbKqMTMV5#-iilN>-DVQCiULmsvjxxGn# zOfIA8@n(@+N;Dy)}R{MpsIMj<1&U%Ip<}1N=X*M{eyX zP@UkI!{$ZDw3EM<=WQOn9f9jjCvOi}bJYs%Ur<$etHq7!YouEu=+Z}6IAU;WG<|sgSjjK6qWn$e*0O#Ml;r{Ih3nCHK zxcIlbqcG;f0E7u!=O&i*Y?hi|Fnm6(dw6Yd0+JW&(=#GGDMG!Cw-3GJ_2d&am=~uo zB6TN7uXIL2L?dyS(ottF*ZYuDzTY=EA$U0ON_*O(ce%7s#uo*(;wp)P z^LGfuReU@Xjzuall~{)7d9{3vQE;O9^pV9ON`WQ{Kq^uPAo){ghS^4D{Qm5{cjqNE=P|5i{<2oVVkdqC8Ft zFkdC~Uj8+37nZpy6+k@xLUoeGo_i9@N{-Vd?Cl zi%s8zt)$u)tb!=O$OZV&izb2dE zH!vDq5HWD+9pRXYTy!J1YQ{r)WSpZruoa(?B=oNO5BHJ2NdbbJ8o$(L76Iln)X!iBjyC;bPC#3@CQ74AS>scwIWw zpz&cRE=89lfFxN)|Lc95`f)1vuk8FW&4`_x^A5{mmqCN(N=yB7sHh~cOPv`_Tl1zC zf3U(0U!f%d3W8s9m7>PMXQ>*bTqld1?Y1(q9zC~nck zbWU+5sb|3j_-rtQXthy4*{1BFIx)wk{(e?

&>eh@QJNT0TYHa2FxLbJ9{lQIyIK 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%0DG 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%0AKcl8;^()0d;a20MRETA4vQUMIwX9+w=Q8|$ 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 z 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 !>1}Jmt);Lox6h#y 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⁡zwOo2(;OJ7E0BD=`C= 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%0Dexa$zT-W^PEh+D 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

>1==SqPimPLQDr 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%0D?T69$QrfQ-|ZQUD4u;cEB7egWM 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%0At|Q6a!K_$CnaEks>CySwDX}obLIyyZYIh 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

9BfQ~`gvQ-__zxhs1O$cy3w40u&lXebkW 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 Date: Tue, 8 Oct 2024 15:45:50 -0400 Subject: [PATCH 011/110] chore(next): adds export for `mergeHeaders` utility function (#8609) Need this utility function exported for this PR: #8490 --- packages/next/src/exports/utilities.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/next/src/exports/utilities.ts b/packages/next/src/exports/utilities.ts index a333611fc4..041bc67e0d 100644 --- a/packages/next/src/exports/utilities.ts +++ b/packages/next/src/exports/utilities.ts @@ -4,3 +4,4 @@ export { createPayloadRequest } from '../utilities/createPayloadRequest.js' export { getNextRequestI18n } from '../utilities/getNextRequestI18n.js' export { getPayloadHMR, reload } from '../utilities/getPayloadHMR.js' export { headersWithCors } from '../utilities/headersWithCors.js' +export { mergeHeaders } from '../utilities/mergeHeaders.js' From 39825dfce5f37bfda3aae2479cc62486936bd08b Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Wed, 9 Oct 2024 09:56:36 -0400 Subject: [PATCH 012/110] chore(release): v3.0.0-beta.112 [skip ci] --- package.json | 2 +- packages/create-payload-app/package.json | 2 +- packages/db-mongodb/package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- packages/drizzle/package.json | 2 +- packages/email-nodemailer/package.json | 2 +- packages/email-resend/package.json | 2 +- packages/graphql/package.json | 2 +- packages/live-preview-react/package.json | 2 +- packages/live-preview-vue/package.json | 2 +- packages/live-preview/package.json | 2 +- packages/next/package.json | 2 +- packages/payload/package.json | 2 +- packages/plugin-cloud-storage/package.json | 2 +- packages/plugin-cloud/package.json | 2 +- packages/plugin-form-builder/package.json | 2 +- packages/plugin-nested-docs/package.json | 2 +- packages/plugin-redirects/package.json | 2 +- packages/plugin-search/package.json | 2 +- packages/plugin-seo/package.json | 2 +- packages/plugin-stripe/package.json | 2 +- packages/richtext-lexical/package.json | 2 +- packages/richtext-slate/package.json | 2 +- packages/storage-azure/package.json | 2 +- packages/storage-gcs/package.json | 2 +- packages/storage-s3/package.json | 2 +- packages/storage-uploadthing/package.json | 2 +- packages/storage-vercel-blob/package.json | 2 +- packages/translations/package.json | 2 +- packages/ui/package.json | 2 +- 32 files changed, 32 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 1b54e29d14..19f55e7178 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "private": true, "type": "module", "scripts": { diff --git a/packages/create-payload-app/package.json b/packages/create-payload-app/package.json index 57fa6e0812..9ad3a34ce5 100644 --- a/packages/create-payload-app/package.json +++ b/packages/create-payload-app/package.json @@ -1,6 +1,6 @@ { "name": "create-payload-app", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index 90a87a6f0c..b6fa8eed58 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The officially supported MongoDB database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index 0e7bc34546..2dca598f94 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The officially supported Postgres database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index c47a98a591..c40701d5a8 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-sqlite", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The officially supported SQLite database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index b21982ec57..5c30b764c5 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-vercel-postgres", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Vercel Postgres adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index 6ef9550330..92148b0c8a 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/drizzle", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "A library of shared functions used by different payload database adapters", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-nodemailer/package.json b/packages/email-nodemailer/package.json index 07636793ce..24aabbd8a6 100644 --- a/packages/email-nodemailer/package.json +++ b/packages/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-nodemailer", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Payload Nodemailer Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-resend/package.json b/packages/email-resend/package.json index 66ddf12eb5..1e9c98f2c7 100644 --- a/packages/email-resend/package.json +++ b/packages/email-resend/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-resend", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Payload Resend Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/graphql/package.json b/packages/graphql/package.json index 750006bfbe..7a939c6963 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index 05d6485080..9a1a50908a 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-react", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The official React SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview-vue/package.json b/packages/live-preview-vue/package.json index a238d45274..0912f53e5f 100644 --- a/packages/live-preview-vue/package.json +++ b/packages/live-preview-vue/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-vue", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The official Vue SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview/package.json b/packages/live-preview/package.json index 083f41ec23..d78f7b3723 100644 --- a/packages/live-preview/package.json +++ b/packages/live-preview/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The official live preview JavaScript SDK for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/next/package.json b/packages/next/package.json index 99997d3e07..2209620106 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/payload/package.json b/packages/payload/package.json index 6ec84c32d4..ab56455254 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Node, React, Headless CMS and Application Framework built on Next.js", "keywords": [ "admin panel", diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index 8627d6bd6c..62e4c256b6 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud-storage", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The official cloud storage plugin for Payload CMS", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index c4491ac0ed..7dfb563935 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The official Payload Cloud plugin", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index 9d09326d1d..adce91910c 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-form-builder", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Form builder plugin for Payload CMS", "keywords": [ "payload", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index df124bfaf6..e40c53cec1 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The official Nested Docs plugin for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index 8c908a4038..a5a689070d 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Redirects plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index d5fa35c0f1..9b3a7b974b 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Search plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index 7f15e140df..310a1bd3e2 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "SEO plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-stripe/package.json b/packages/plugin-stripe/package.json index e16e41dbad..d51285f5fd 100644 --- a/packages/plugin-stripe/package.json +++ b/packages/plugin-stripe/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-stripe", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Stripe plugin for Payload", "keywords": [ "payload", diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index d3ea631302..bb34bdf041 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The officially supported Lexical richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index fe9d37921d..8f679e6e9b 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "The officially supported Slate richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-azure/package.json b/packages/storage-azure/package.json index ca55de8089..c6a4cd2f45 100644 --- a/packages/storage-azure/package.json +++ b/packages/storage-azure/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-azure", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Payload storage adapter for Azure Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-gcs/package.json b/packages/storage-gcs/package.json index ca1ce5ddd1..863016a573 100644 --- a/packages/storage-gcs/package.json +++ b/packages/storage-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-gcs", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Payload storage adapter for Google Cloud Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-s3/package.json b/packages/storage-s3/package.json index c2fec733ea..f515572f94 100644 --- a/packages/storage-s3/package.json +++ b/packages/storage-s3/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-s3", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Payload storage adapter for Amazon S3", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-uploadthing/package.json b/packages/storage-uploadthing/package.json index 1c62c6e9ee..cafb8b2574 100644 --- a/packages/storage-uploadthing/package.json +++ b/packages/storage-uploadthing/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-uploadthing", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Payload storage adapter for uploadthing", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-vercel-blob/package.json b/packages/storage-vercel-blob/package.json index c81952cd10..2c93a94ae2 100644 --- a/packages/storage-vercel-blob/package.json +++ b/packages/storage-vercel-blob/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-vercel-blob", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "description": "Payload storage adapter for Vercel Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/translations/package.json b/packages/translations/package.json index 6de4d33fae..c015dd003c 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/ui/package.json b/packages/ui/package.json index 446c9d146f..a761a4c76b 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.112", "homepage": "https://payloadcms.com", "repository": { "type": "git", From f5075302141c895206677809e43cba962bf2ae49 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 9 Oct 2024 12:00:03 -0600 Subject: [PATCH 013/110] fix(ui): react select fields not increasing height when items overflow (#8618) Fixes this instance ![image](https://github.com/user-attachments/assets/b2acc493-727e-4a26-8623-de28ff1dbe3c) --- packages/ui/src/elements/ReactSelect/index.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/elements/ReactSelect/index.scss b/packages/ui/src/elements/ReactSelect/index.scss index 4d13427d82..4c96cb55c9 100644 --- a/packages/ui/src/elements/ReactSelect/index.scss +++ b/packages/ui/src/elements/ReactSelect/index.scss @@ -8,7 +8,8 @@ .react-select { .rs__control { @include formInput; - padding: base(0.4) base(0.6); + height: auto; + padding: base(0.35) base(0.6); flex-wrap: nowrap; } From 769c94b4fd121ceb738d4f6fdbde065dc45d2b99 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Wed, 9 Oct 2024 14:15:45 -0400 Subject: [PATCH 014/110] chore: clarifies i18n docs (#8619) Fixes https://github.com/payloadcms/payload/issues/8562 Removes `debug` option from i18n docs - never existed. Corrects hallucinations in the docs and lays out exactly how custom translations should be used when you want to use them in custom components. --- docs/configuration/i18n.mdx | 64 ++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 19 deletions(-) diff --git a/docs/configuration/i18n.mdx b/docs/configuration/i18n.mdx index 0fa9192ba8..caad145500 100644 --- a/docs/configuration/i18n.mdx +++ b/docs/configuration/i18n.mdx @@ -51,7 +51,6 @@ The following options are available: | Option | Description | | --------------------- | --------------------------------| | **`fallbackLanguage`** | The language to fall back to if the user's preferred language is not supported. Default is `'en'`. | -| **`debug`** | Whether to log debug information to the console. Default is `false`. | | **`translations`** | An object containing the translations. The keys are the language codes and the values are the translations. | | **`supportedLanguages`** | An object containing the supported languages. The keys are the language codes and the values are the translations. | @@ -178,22 +177,54 @@ Anywhere in your Payload app that you have access to the `req` object, you can a In order to use custom translations in your project, you need to provide the types for the translations. -Here is an example of how you can define the types for the custom translations in a [Custom Component](../admin/components): +Here we create a shareable translations object. We will import this in both our custom components and in our Payload config. ```ts +// /custom-translations.ts + +import type { Config } from 'payload' + +export customTranslations: Config['i18n']['translations'] = { + en: { + general: { + myCustomKey: 'My custom english translation', + }, + fields: { + addLabel: 'Add!', + } + }, +} +``` + +We import the shared translations object into our Payload config so they are available for use: + +```ts +// /payload.config.ts + +import { buildConfig } from 'payload' + +import { customTranslations } from './custom-translations' + +export default buildConfig({ + //... + i18n: { + translations: customTranslations, + }, + //... +}) +``` + +We import the shared translations and use it to create types to use in a [Custom Component](../admin/components): + +```ts +// /components/MyComponent.tsx + 'use client' import type { NestedKeysStripped } from '@payloadcms/translations' import type React from 'react' - import { useTranslation } from '@payloadcms/ui/providers/Translation' -const customTranslations = { - en: { - general: { - test: 'Custom Translation', - }, - }, -} +import { customTranslations } from '../custom-translations' type CustomTranslationObject = typeof customTranslations.en type CustomTranslationKeys = NestedKeysStripped @@ -201,14 +232,15 @@ type CustomTranslationKeys = NestedKeysStripped export const MyComponent: React.FC = () => { const { i18n, t } = useTranslation() // These generics merge your custom translations with the default client translations - return t('general:test') + return t('general:myCustomKey') } - ``` Additionally, Payload exposes the `t` function in various places, for example in labels. Here is how you would type those: ```ts +// /fields/myField.ts + import type { DefaultTranslationKeys, NestedKeysStripped, @@ -216,13 +248,7 @@ import type { } from '@payloadcms/translations' import type { Field } from 'payload' -const customTranslations = { - en: { - general: { - test: 'Custom Translation', - }, - }, -} +import { customTranslations } from '../custom-translations' type CustomTranslationObject = typeof customTranslations.en type CustomTranslationKeys = NestedKeysStripped From 0b2a7a360600e3b6d2971b1fd6dc888d68416dc1 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Wed, 9 Oct 2024 21:26:58 +0300 Subject: [PATCH 015/110] feat(plugin-sentry): update plugin to 3.0 (#8613) Updates the plugin to 3.0 Test: ```sh NEXT_PUBLIC_SENTRY_DSN= pnpm dev plugin-sentry ``` Example: ```ts sentryPlugin({ options: { captureErrors: [400, 403], context: ({ defaultContext, req }) => { return { ...defaultContext, tags: { locale: req.locale, }, } }, debug: true, }, Sentry, }) ``` --- app/global-error.tsx | 27 + docs/plugins/sentry.mdx | 60 +- instrumentation.ts | 5 + next.config.mjs | 13 +- package.json | 2 + packages/plugin-form-builder/package.json | 1 - packages/plugin-redirects/package.json | 9 +- packages/plugin-search/package.json | 1 - packages/plugin-sentry/package.json | 30 +- .../plugin-sentry/src/captureException.ts | 5 - packages/plugin-sentry/src/exports/client.ts | 1 + packages/plugin-sentry/src/index.ts | 96 +- packages/plugin-sentry/src/mocks/mockFile.js | 4 - packages/plugin-sentry/src/plugin.spec.ts | 77 +- packages/plugin-sentry/src/plugin.ts | 35 - .../src/providers/AdminErrorBoundary.tsx | 12 + packages/plugin-sentry/src/startSentry.ts | 63 - packages/plugin-sentry/src/types.ts | 40 +- packages/plugin-sentry/tsconfig.json | 4 +- packages/plugin-stripe/package.json | 1 - pnpm-lock.yaml | 1707 ++++++++++++++--- sentry.client.config.ts | 26 + sentry.server.config.ts | 18 + test/package.json | 1 + .../{components.tsx => TestErrors.tsx} | 25 +- test/plugin-sentry/config.ts | 22 +- test/plugin-sentry/payload-types.ts | 24 + tsconfig.json | 8 +- 28 files changed, 1867 insertions(+), 450 deletions(-) create mode 100644 app/global-error.tsx create mode 100644 instrumentation.ts delete mode 100644 packages/plugin-sentry/src/captureException.ts create mode 100644 packages/plugin-sentry/src/exports/client.ts delete mode 100644 packages/plugin-sentry/src/mocks/mockFile.js delete mode 100644 packages/plugin-sentry/src/plugin.ts create mode 100644 packages/plugin-sentry/src/providers/AdminErrorBoundary.tsx delete mode 100644 packages/plugin-sentry/src/startSentry.ts create mode 100644 sentry.client.config.ts create mode 100644 sentry.server.config.ts rename test/plugin-sentry/{components.tsx => TestErrors.tsx} (83%) diff --git a/app/global-error.tsx b/app/global-error.tsx new file mode 100644 index 0000000000..5171ecbd54 --- /dev/null +++ b/app/global-error.tsx @@ -0,0 +1,27 @@ +/* eslint-disable no-restricted-exports */ +'use client' + +import * as Sentry from '@sentry/nextjs' +import NextError from 'next/error.js' +import { useEffect } from 'react' + +export default function GlobalError({ error }: { error: { digest?: string } & Error }) { + useEffect(() => { + if (process.env.NEXT_PUBLIC_SENTRY_DSN) { + Sentry.captureException(error) + } + }, [error]) + + return ( + + + {/* `NextError` is the default Next.js error page component. Its type + definition requires a `statusCode` prop. However, since the App Router + does not expose status codes for errors, we simply pass 0 to render a + generic error message. */} + {/* @ts-expect-error types repo */} + + + + ) +} diff --git a/docs/plugins/sentry.mdx b/docs/plugins/sentry.mdx index 6e81088924..0ac5263564 100644 --- a/docs/plugins/sentry.mdx +++ b/docs/plugins/sentry.mdx @@ -31,7 +31,7 @@ This multi-faceted software offers a range of features that will help you manage - **Integrations**: Connects with various tools and services for enhanced workflow and issue management - This plugin is completely open-source and the [source code can be found here](https://github.com/payloadcms/payload/tree/main/packages/plugin-sentry). If you need help, check out our [Community Help](https://payloadcms.com/community-help). If you think you've found a bug, please [open a new issue](https://github.com/payloadcms/payload/issues/new?assignees=&labels=plugin%3A%20seo&template=bug_report.md&title=plugin-seo%3A) with as much detail as possible. + This plugin is completely open-source and the [source code can be found here](https://github.com/payloadcms/payload/tree/beta/packages/plugin-sentry). If you need help, check out our [Community Help](https://payloadcms.com/community-help). If you think you've found a bug, please [open a new issue](https://github.com/payloadcms/payload/issues/new?assignees=&labels=plugin%3A%20seo&template=bug_report.md&title=plugin-sentry%3A) with as much detail as possible. ## Installation @@ -42,6 +42,15 @@ Install the plugin using any JavaScript package manager like [Yarn](https://yarn pnpm add @payloadcms/plugin-sentry ``` +## Sentry for Next.js setup +This plugin requires to complete the [Sentry + Next.js setup](https://docs.sentry.io/platforms/javascript/guides/nextjs/) before. + +You can use either the [automatic setup](https://docs.sentry.io/platforms/javascript/guides/nextjs/#install) with the installation wizard: +```sh +npx @sentry/wizard@latest -i nextjs +``` +Or the [Manual Setup](https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/) + ## Basic Usage In the `plugins` array of your [Payload Config](https://payloadcms.com/docs/configuration/overview), call the plugin and pass in your Sentry DSN as an option. @@ -51,11 +60,13 @@ import { buildConfig } from 'payload' import { sentryPlugin } from '@payloadcms/plugin-sentry' import { Pages, Media } from './collections' +import * as Sentry from '@sentry/nextjs' + const config = buildConfig({ collections: [Pages, Media], plugins: [ sentryPlugin({ - dsn: 'https://61edebas776889984d323d777@o4505289711681536.ingest.sentry.io/4505357433352176', + Sentry, }), ], }) @@ -65,58 +76,55 @@ export default config ## Options -- `dsn` : string | **required** +- `Sentry` : Sentry | **required** - Sentry automatically assigns a DSN when you create a project, the unique DSN informs Sentry where to send events so they are associated with the correct project. + The `Sentry` instance - You can find your project DSN (Data Source Name) by visiting [sentry.io](sentry.io) and navigating to your [Project] > Settings > Client Keys (DSN). + Make sure to complete the [Sentry for Next.js Setup](#sentry-for-nextjs-setup) before. - `enabled`: boolean | optional - Set to false to disable the plugin. Defaults to true. + Set to false to disable the plugin. Defaults to `true`. -- `init` : ClientOptions | optional +- `context`: `(args: ContextArgs) => Partial | Promise>` - Sentry allows a variety of options to be passed into the Sentry.init() function, see the full list of options [here](https://docs.sentry.io/platforms/node/guides/express/configuration/options). - -- `requestHandler` : RequestHandlerOptions | optional - - Accepts options that let you decide what data should be included in the event sent to Sentry, checkout the options [here](https://docs.sentry.io/platforms/node/guides/express/configuration/options). + Pass additional [contextual data](https://docs.sentry.io/platforms/javascript/enriching-events/context/#passing-context-directly) to Sentry - `captureErrors`: number[] | optional By default, `Sentry.errorHandler` will capture only errors with a status code of 500 or higher. To capture additional error codes, pass the values as numbers in an array. -To see all options available, visit the [Sentry Docs](https://docs.sentry.io/platforms/node/guides/express/configuration/options). - ### Example Configure any of these options by passing them to the plugin: ```ts import { buildConfig } from 'payload' -import { sentry } from '@payloadcms/plugin-sentry' +import { sentryPlugin } from '@payloadcms/plugin-sentry' + +import * as Sentry from '@sentry/nextjs' + import { Pages, Media } from './collections' const config = buildConfig({ collections: [Pages, Media], plugins: [ - sentry({ - dsn: 'https://61edebas777689984d323d777@o4505289711681536.ingest.sentry.io/4505357433352176', + sentryPlugin({ options: { - init: { - debug: true, - environment: 'development', - tracesSampleRate: 1.0, + captureErrors: [400, 403], + context: ({ defaultContext, req }) => { + return { + ...defaultContext, + tags: { + locale: req.locale, + }, + } }, - requestHandler: { - serverName: false, - user: ['email'], - }, - captureErrors: [400, 403, 404], + debug: true, }, + Sentry, }), ], }) diff --git a/instrumentation.ts b/instrumentation.ts new file mode 100644 index 0000000000..41a4d932dc --- /dev/null +++ b/instrumentation.ts @@ -0,0 +1,5 @@ +export async function register() { + if (process.env.NEXT_RUNTIME === 'nodejs') { + await import('./sentry.server.config.js') + } +} diff --git a/next.config.mjs b/next.config.mjs index e994553195..fcaddd3b38 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,6 +1,6 @@ import bundleAnalyzer from '@next/bundle-analyzer' - -import withPayload from './packages/next/src/withPayload.js' +import { withSentryConfig } from '@sentry/nextjs' +import { withPayload } from './packages/next/src/withPayload.js' import path from 'path' import { fileURLToPath } from 'url' @@ -11,8 +11,7 @@ const withBundleAnalyzer = bundleAnalyzer({ enabled: process.env.ANALYZE === 'true', }) -// eslint-disable-next-line no-restricted-exports -export default withBundleAnalyzer( +const config = withBundleAnalyzer( withPayload({ eslint: { ignoreDuringBuilds: true, @@ -23,7 +22,6 @@ export default withBundleAnalyzer( env: { PAYLOAD_CORE_DEV: 'true', ROOT_DIR: path.resolve(dirname), - PAYLOAD_CI_DEPENDENCY_CHECKER: 'true', }, async redirects() { return [ @@ -48,3 +46,8 @@ export default withBundleAnalyzer( }, }), ) + +export default withSentryConfig(config, { + telemetry: false, + tunnelRoute: '/monitoring-tunnel', +}) diff --git a/package.json b/package.json index 19f55e7178..ccbd05fef5 100644 --- a/package.json +++ b/package.json @@ -111,6 +111,8 @@ "@payloadcms/eslint-plugin": "workspace:*", "@payloadcms/live-preview-react": "workspace:*", "@playwright/test": "1.46.0", + "@sentry/nextjs": "^8.33.1", + "@sentry/node": "^8.33.1", "@swc-node/register": "1.10.9", "@swc/cli": "0.4.0", "@swc/jest": "0.2.36", diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index adce91910c..c5990ac5d0 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -60,7 +60,6 @@ "devDependencies": { "@payloadcms/eslint-config": "workspace:*", "@types/escape-html": "^1.0.4", - "@types/express": "^4.17.21", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "copyfiles": "^2.4.1", diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index a5a689070d..0f88f41992 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -50,9 +50,6 @@ }, "devDependencies": { "@payloadcms/eslint-config": "workspace:*", - "@types/express": "^4.17.9", - "@types/react": "npm:types-react@19.0.0-rc.1", - "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "payload": "workspace:*" }, "peerDependencies": { @@ -74,9 +71,5 @@ "main": "./dist/index.js", "types": "./dist/index.d.ts" }, - "homepage:": "https://payloadcms.com", - "overrides": { - "@types/react": "npm:types-react@19.0.0-rc.1", - "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1" - } + "homepage:": "https://payloadcms.com" } diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index 9b3a7b974b..b9e9dbbe52 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -55,7 +55,6 @@ }, "devDependencies": { "@payloadcms/eslint-config": "workspace:*", - "@types/express": "^4.17.9", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "payload": "workspace:*" diff --git a/packages/plugin-sentry/package.json b/packages/plugin-sentry/package.json index 14500ed4b7..93391c328d 100644 --- a/packages/plugin-sentry/package.json +++ b/packages/plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-sentry", - "version": "0.0.6", + "version": "3.0.0-beta.111", "description": "Sentry plugin for Payload", "keywords": [ "payload", @@ -23,6 +23,11 @@ "import": "./src/index.ts", "types": "./src/index.ts", "default": "./src/index.ts" + }, + "./client": { + "import": "./src/exports/client.ts", + "types": "./src/exports/client.ts", + "default": "./src/exports/client.ts" } }, "main": "./src/index.ts", @@ -31,32 +36,24 @@ "dist" ], "scripts": { - "build": "echo \"Build temporarily disabled.\" && exit 0", + "build": "pnpm copyfiles && pnpm build:types && pnpm build:swc", "build:swc": "swc ./src -d ./dist --config-file .swcrc-build --strip-leading-paths", "build:types": "tsc --emitDeclarationOnly --outDir dist", "clean": "rimraf {dist,*.tsbuildinfo}", + "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/", "lint": "eslint .", "lint:fix": "eslint . --fix", "prepublishOnly": "pnpm clean && pnpm turbo build" }, "dependencies": { - "@sentry/node": "^7.55.2", - "@sentry/types": "^7.54.0", - "express": "^4.18.2" + "@sentry/nextjs": "^8.33.1", + "@sentry/types": "^8.33.1" }, "devDependencies": { "@payloadcms/eslint-config": "workspace:*", - "@types/express": "^4.17.9", - "@types/jest": "29.5.12", - "@types/node": "22.5.4", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", - "copyfiles": "^2.4.1", - "cross-env": "^7.0.3", - "jest": "^29.7.0", - "nodemon": "3.0.3", - "payload": "workspace:*", - "ts-jest": "^29.1.0" + "payload": "workspace:*" }, "peerDependencies": { "payload": "workspace:*", @@ -69,6 +66,11 @@ "import": "./dist/index.js", "types": "./dist/index.d.ts", "default": "./dist/index.js" + }, + "./client": { + "import": "./dist/exports/client.js", + "types": "./dist/exports/client.d.ts", + "default": "./dist/exports/client.js" } }, "main": "./dist/index.js", diff --git a/packages/plugin-sentry/src/captureException.ts b/packages/plugin-sentry/src/captureException.ts deleted file mode 100644 index 1882c36547..0000000000 --- a/packages/plugin-sentry/src/captureException.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as Sentry from '@sentry/node' - -export const captureException = (err: Error): void => { - Sentry.captureException(err) -} diff --git a/packages/plugin-sentry/src/exports/client.ts b/packages/plugin-sentry/src/exports/client.ts new file mode 100644 index 0000000000..058835124e --- /dev/null +++ b/packages/plugin-sentry/src/exports/client.ts @@ -0,0 +1 @@ +export { AdminErrorBoundary } from '../providers/AdminErrorBoundary.js' diff --git a/packages/plugin-sentry/src/index.ts b/packages/plugin-sentry/src/index.ts index ed640820b5..9a214571e2 100644 --- a/packages/plugin-sentry/src/index.ts +++ b/packages/plugin-sentry/src/index.ts @@ -1,2 +1,94 @@ -export { sentryPlugin } from './plugin.js' -export type { PluginOptions } from './types.js' +import type { ScopeContext } from '@sentry/types' +import type { APIError, Config } from 'payload' + +import type { PluginOptions } from './types.js' + +export { PluginOptions } +/** + * @example + * ```ts + * import * as Sentry from '@sentry/nextjs' + * + * sentryPlugin({ + * options: { + * captureErrors: [400, 403], + * context: ({ defaultContext, req }) => { + * return { + * ...defaultContext, + * tags: { + * locale: req.locale, + * }, + * } + * }, + * debug: true, + * }, + * Sentry, + * }) + * ``` + */ +export const sentryPlugin = + (pluginOptions: PluginOptions) => + (config: Config): Config => { + const { enabled = true, options = {}, Sentry } = pluginOptions + + if (!enabled || !Sentry) { + return config + } + + const { captureErrors = [], debug = false } = options + + return { + ...config, + admin: { + ...config.admin, + components: { + ...config.admin?.components, + providers: [ + ...(config.admin?.components?.providers ?? []), + '@payloadcms/plugin-sentry/client#AdminErrorBoundary', + ], + }, + }, + hooks: { + afterError: [ + ...(config.hooks?.afterError ?? []), + async (args) => { + if ('status' in args.error) { + const apiError = args.error as APIError + if (apiError.status >= 500 || captureErrors.includes(apiError.status)) { + let context: Partial = { + extra: { + errorCollectionSlug: args.collection?.slug, + }, + ...(args.req.user && { + user: { + id: args.req.user.id, + collection: args.req.user.collection, + email: args.req.user.email, + ip_address: args.req.headers?.get('X-Forwarded-For') ?? undefined, + username: args.req.user.username, + }, + }), + } + + if (options?.context) { + context = await options.context({ + ...args, + defaultContext: context, + }) + } + + const id = Sentry.captureException(args.error, context) + + if (debug) { + args.req.payload.logger.info( + `Captured exception ${id} to Sentry, error msg: ${args.error.message}`, + ) + } + } + } + }, + ], + }, + } + } diff --git a/packages/plugin-sentry/src/mocks/mockFile.js b/packages/plugin-sentry/src/mocks/mockFile.js deleted file mode 100644 index 6da9278115..0000000000 --- a/packages/plugin-sentry/src/mocks/mockFile.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - captureException: () => {}, - startSentry: () => {}, -} diff --git a/packages/plugin-sentry/src/plugin.spec.ts b/packages/plugin-sentry/src/plugin.spec.ts index 9c6dd96f7e..48df70e271 100644 --- a/packages/plugin-sentry/src/plugin.spec.ts +++ b/packages/plugin-sentry/src/plugin.spec.ts @@ -1,47 +1,96 @@ -import type { Config } from 'payload' +import type { AfterErrorHook, AfterErrorHookArgs, Config, PayloadRequest } from 'payload' -import { defaults } from 'payload' +import { APIError, defaults } from 'payload' -import { sentryPlugin } from './plugin' +import { sentryPlugin } from './index' +import { randomUUID } from 'crypto' -describe('plugin', () => { +const mockExceptionID = randomUUID() + +const mockSentry = { + captureException() { + return mockExceptionID + }, +} + +describe('@payloadcms/plugin-sentry - unit', () => { it('should run the plugin', () => { - const plugin = sentryPlugin({ dsn: 'asdf', enabled: true }) + const plugin = sentryPlugin({ Sentry: mockSentry, enabled: true }) const config = plugin(createConfig()) assertPluginRan(config) }) - it('should default enable: true', () => { - const plugin = sentryPlugin({ dsn: 'asdf' }) + it('should default enabled: true', () => { + const plugin = sentryPlugin({ Sentry: mockSentry }) const config = plugin(createConfig()) assertPluginRan(config) }) - it('should not run if dsn is not provided', () => { - const plugin = sentryPlugin({ dsn: null, enabled: true }) + it('should not run if Sentry is not provided', () => { + const plugin = sentryPlugin({ enabled: true }) const config = plugin(createConfig()) assertPluginDidNotRun(config) }) it('should respect enabled: false', () => { - const plugin = sentryPlugin({ dsn: null, enabled: false }) + const plugin = sentryPlugin({ Sentry: mockSentry, enabled: false }) const config = plugin(createConfig()) assertPluginDidNotRun(config) }) + + it('should execute Sentry.captureException with correct errors / args', async () => { + const hintTimestamp = Date.now() + + const plugin = sentryPlugin({ + Sentry: mockSentry, + options: { + context: ({ defaultContext }) => ({ + ...defaultContext, + extra: { + ...defaultContext.extra, + hintTimestamp, + }, + }), + }, + }) + const config = plugin(createConfig()) + + const hook = config.hooks?.afterError?.[0] as AfterErrorHook + + const error = new APIError('ApiError', 500) + + const afterErrorHookArgs: AfterErrorHookArgs = { + req: {} as PayloadRequest, + context: {}, + error, + collection: { slug: 'mock-slug' } as any, + } + + const captureExceptionSpy = jest.spyOn(mockSentry, 'captureException') + + await hook(afterErrorHookArgs) + + expect(captureExceptionSpy).toHaveBeenCalledTimes(1) + expect(captureExceptionSpy).toHaveBeenCalledWith(error, { + extra: { + errorCollectionSlug: 'mock-slug', + hintTimestamp, + }, + }) + expect(captureExceptionSpy).toHaveReturnedWith(mockExceptionID) + }) }) function assertPluginRan(config: Config) { - expect(config.hooks?.afterError).toBeDefined() - expect(config.onInit).toBeDefined() + expect(config.hooks?.afterError?.[0]).toBeDefined() } function assertPluginDidNotRun(config: Config) { - expect(config.hooks?.afterError).toBeUndefined() - expect(config.onInit).toBeUndefined() + expect(config.hooks?.afterError?.[0]).toBeUndefined() } function createConfig(overrides?: Partial): Config { diff --git a/packages/plugin-sentry/src/plugin.ts b/packages/plugin-sentry/src/plugin.ts deleted file mode 100644 index bf31a93d90..0000000000 --- a/packages/plugin-sentry/src/plugin.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { Config } from 'payload' - -import type { PluginOptions } from './types.js' - -import { captureException } from './captureException.js' -import { startSentry } from './startSentry.js' - -export const sentryPlugin = - (pluginOptions: PluginOptions) => - (incomingConfig: Config): Config => { - const config = { ...incomingConfig } - - if (pluginOptions.enabled === false || !pluginOptions.dsn) { - return config - } - - config.hooks = { - ...(incomingConfig.hooks || {}), - - afterError: [ - ({ error }) => { - captureException(error) - }, - ], - } - - config.onInit = async (payload) => { - if (incomingConfig.onInit) { - await incomingConfig.onInit(payload) - } - startSentry(pluginOptions, payload) - } - - return config - } diff --git a/packages/plugin-sentry/src/providers/AdminErrorBoundary.tsx b/packages/plugin-sentry/src/providers/AdminErrorBoundary.tsx new file mode 100644 index 0000000000..869e89dbf4 --- /dev/null +++ b/packages/plugin-sentry/src/providers/AdminErrorBoundary.tsx @@ -0,0 +1,12 @@ +'use client' + +import type { ReactNode } from 'react' + +import { ErrorBoundary } from '@sentry/nextjs' + +/** + * Captures errored components to Sentry + */ +export const AdminErrorBoundary = ({ children }: { children: ReactNode }) => { + return {children} +} diff --git a/packages/plugin-sentry/src/startSentry.ts b/packages/plugin-sentry/src/startSentry.ts deleted file mode 100644 index abd7322364..0000000000 --- a/packages/plugin-sentry/src/startSentry.ts +++ /dev/null @@ -1,63 +0,0 @@ -import type { NextFunction, Request, Response } from 'express' -import type express from 'express' -import type { Payload } from 'payload' - -/* eslint-disable no-console */ -import * as Sentry from '@sentry/node' - -import type { PluginOptions } from './types' - -export const startSentry = (pluginOptions: PluginOptions, payload: Payload): void => { - const { dsn, options } = pluginOptions - const { express: app } = payload - - if (!dsn || !app) { - return - } - - try { - Sentry.init({ - ...options?.init, - dsn, - integrations: [ - ...(options?.init?.integrations || []), - new Sentry.Integrations.Http({ tracing: true }), - new Sentry.Integrations.Express({ app }), - ...Sentry.autoDiscoverNodePerformanceMonitoringIntegrations(), - ], - }) - - app.use(Sentry.Handlers.requestHandler(options?.requestHandler || {}) as express.RequestHandler) - app.use(Sentry.Handlers.tracingHandler()) - - app.use( - Sentry.Handlers.errorHandler({ - shouldHandleError(error) { - if (error.status === 500) { - return true - } - if ( - options?.captureErrors && - typeof error.status === 'number' && - options.captureErrors.includes(error.status) - ) { - return true - } - return false - }, - }) as express.ErrorRequestHandler, - ) - - app.use(function onError( - _err: unknown, - _req: Request, - res: { sentry?: string } & Response, - _next: NextFunction, - ) { - res.statusCode = 500 - res.end(res.sentry + '\n') - }) - } catch (err: unknown) { - console.log('There was an error initializing Sentry, please ensure you entered a valid DSN') - } -} diff --git a/packages/plugin-sentry/src/types.ts b/packages/plugin-sentry/src/types.ts index bba085f7ae..ad327811ac 100644 --- a/packages/plugin-sentry/src/types.ts +++ b/packages/plugin-sentry/src/types.ts @@ -1,36 +1,46 @@ -import type { RequestHandlerOptions } from '@sentry/node/types/handlers' -import type { ClientOptions } from '@sentry/types' +import type { ScopeContext } from '@sentry/types' +import type { AfterErrorHookArgs } from 'payload' + +type SentryInstance = { + captureException: (err: Error, hint: any) => string +} + +type ContextArgs = { + defaultContext: Partial +} & AfterErrorHookArgs export interface PluginOptions { - /** - * Sentry DSN (Data Source Name) - * This is required unless enabled is set to false. - * Sentry automatically assigns a DSN when you create a project. - * If you don't have a DSN yet, you can create a new project here: https://sentry.io - */ - dsn: null | string /** * Enable or disable Sentry plugin - * @default false + * @default true */ enabled?: boolean /** * Options passed directly to Sentry - * @default false */ options?: { /** * Sentry will only capture 500 errors by default. * If you want to capture other errors, you can add them as an array here. + * @default [] */ captureErrors?: number[] /** - * Passes any valid options to Sentry.init() + * Set `ScopeContext` for `Sentry.captureException` which includes `user` and other info. */ - init?: Partial + context?: (args: ContextArgs) => Partial | Promise> /** - * Passes any valid options to Sentry.Handlers.requestHandler() + * Log captured exceptions, + * @default false */ - requestHandler?: RequestHandlerOptions + debug?: boolean } + /** + * Instance of Sentry from + * ```ts + * import * as Sentry from '@sentry/nextjs' + * ``` + * This is required unless enabled is set to false. + */ + Sentry?: SentryInstance } diff --git a/packages/plugin-sentry/tsconfig.json b/packages/plugin-sentry/tsconfig.json index b8c565b374..2b3fd0af7a 100644 --- a/packages/plugin-sentry/tsconfig.json +++ b/packages/plugin-sentry/tsconfig.json @@ -5,8 +5,8 @@ "noEmit": false /* Do not emit outputs. */, "emitDeclarationOnly": true, "outDir": "./dist" /* Specify an output folder for all emitted files. */, - "rootDir": "./src" /* Specify the root folder within your source files. */, - "strict": true + "rootDir": "./src", /* Specify the root folder within your source files. */ + "jsx": "react-jsx" }, "exclude": [ "dist", diff --git a/packages/plugin-stripe/package.json b/packages/plugin-stripe/package.json index d51285f5fd..f230580525 100644 --- a/packages/plugin-stripe/package.json +++ b/packages/plugin-stripe/package.json @@ -63,7 +63,6 @@ "devDependencies": { "@payloadcms/eslint-config": "workspace:*", "@payloadcms/next": "workspace:*", - "@types/express": "^4.17.9", "@types/lodash.get": "^4.4.7", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5dda476ded..9c6ceb4956 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,6 +45,12 @@ importers: '@playwright/test': specifier: 1.46.0 version: 1.46.0 + '@sentry/nextjs': + specifier: ^8.33.1 + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + '@sentry/node': + specifier: ^8.33.1 + version: 8.33.1 '@swc-node/register': specifier: 1.10.9 version: 1.10.9(@swc/core@1.7.10(@swc/helpers@0.5.13))(@swc/types@0.1.12)(typescript@5.6.2) @@ -107,7 +113,7 @@ importers: version: 0.23.2-df9e596 drizzle-orm: specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) escape-html: specifier: ^1.0.3 version: 1.0.3 @@ -143,7 +149,7 @@ importers: version: 9.4.1(@aws-sdk/credential-providers@3.630.0(@aws-sdk/client-sso-oidc@3.629.0(@aws-sdk/client-sts@3.629.0))) next: specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) open: specifier: ^10.1.0 version: 10.1.0 @@ -313,7 +319,7 @@ importers: version: 0.23.2-df9e596 drizzle-orm: specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) pg: specifier: 8.11.3 version: 8.11.3 @@ -359,7 +365,7 @@ importers: version: 0.23.2-df9e596 drizzle-orm: specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) prompts: specifier: 2.4.2 version: 2.4.2 @@ -399,7 +405,7 @@ importers: version: 0.23.2-df9e596 drizzle-orm: specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) pg: specifier: 8.11.3 version: 8.11.3 @@ -439,7 +445,7 @@ importers: version: 2.11.2 drizzle-orm: specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) prompts: specifier: 2.4.2 version: 2.4.2 @@ -717,7 +723,7 @@ importers: version: 1.6.2 next: specifier: ^15.0.0-canary.173 - version: 15.0.0-canary.173(@babel/core@7.25.2)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4) + version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4) path-to-regexp: specifier: ^6.2.1 version: 6.2.2 @@ -1017,9 +1023,6 @@ importers: '@types/escape-html': specifier: ^1.0.4 version: 1.0.4 - '@types/express': - specifier: ^4.17.21 - version: 4.17.21 '@types/react': specifier: npm:types-react@19.0.0-rc.1 version: types-react@19.0.0-rc.1 @@ -1050,15 +1053,6 @@ importers: '@payloadcms/eslint-config': specifier: workspace:* version: link:../eslint-config - '@types/express': - specifier: ^4.17.9 - version: 4.17.21 - '@types/react': - specifier: npm:types-react@19.0.0-rc.1 - version: types-react@19.0.0-rc.1 - '@types/react-dom': - specifier: npm:types-react-dom@19.0.0-rc.1 - version: types-react-dom@19.0.0-rc.1 payload: specifier: workspace:* version: link:../payload @@ -1078,9 +1072,6 @@ importers: '@payloadcms/eslint-config': specifier: workspace:* version: link:../eslint-config - '@types/express': - specifier: ^4.17.9 - version: 4.17.21 '@types/react': specifier: npm:types-react@19.0.0-rc.1 version: types-react@19.0.0-rc.1 @@ -1093,15 +1084,12 @@ importers: packages/plugin-sentry: dependencies: - '@sentry/node': - specifier: ^7.55.2 - version: 7.118.0 + '@sentry/nextjs': + specifier: ^8.33.1 + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/types': - specifier: ^7.54.0 - version: 7.118.0 - express: - specifier: ^4.18.2 - version: 4.19.2 + specifier: ^8.33.1 + version: 8.33.1 react: specifier: 19.0.0-rc-3edc000d-20240926 version: 19.0.0-rc-3edc000d-20240926 @@ -1112,39 +1100,15 @@ importers: '@payloadcms/eslint-config': specifier: workspace:* version: link:../eslint-config - '@types/express': - specifier: ^4.17.9 - version: 4.17.21 - '@types/jest': - specifier: 29.5.12 - version: 29.5.12 - '@types/node': - specifier: 22.5.4 - version: 22.5.4 '@types/react': specifier: npm:types-react@19.0.0-rc.1 version: types-react@19.0.0-rc.1 '@types/react-dom': specifier: npm:types-react-dom@19.0.0-rc.1 version: types-react-dom@19.0.0-rc.1 - copyfiles: - specifier: 2.4.1 - version: 2.4.1 - cross-env: - specifier: 7.0.3 - version: 7.0.3 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0) - nodemon: - specifier: 3.0.3 - version: 3.0.3 payload: specifier: workspace:* version: link:../payload - ts-jest: - specifier: ^29.1.0 - version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) packages/plugin-seo: dependencies: @@ -1201,9 +1165,6 @@ importers: '@payloadcms/next': specifier: workspace:* version: link:../next - '@types/express': - specifier: ^4.17.9 - version: 4.17.21 '@types/lodash.get': specifier: ^4.4.7 version: 4.4.9 @@ -1457,7 +1418,7 @@ importers: version: link:../plugin-cloud-storage uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) devDependencies: payload: specifier: workspace:* @@ -1544,7 +1505,7 @@ importers: version: 2.3.0 next: specifier: ^15.0.0-canary.173 - version: 15.0.0-canary.173(@babel/core@7.25.2)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) object-to-formdata: specifier: 4.5.1 version: 4.5.1 @@ -1741,6 +1702,9 @@ importers: '@payloadcms/ui': specifier: workspace:* version: link:../packages/ui + '@sentry/nextjs': + specifier: ^8.33.1 + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/react': specifier: ^7.77.0 version: 7.118.0(react@19.0.0-rc-3edc000d-20240926) @@ -1785,7 +1749,7 @@ importers: version: 0.18.0 next: specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) payload: specifier: workspace:* version: link:../packages/payload @@ -1815,7 +1779,7 @@ importers: version: 5.6.2 uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) uuid: specifier: 10.0.0 version: 10.0.0 @@ -3582,6 +3546,9 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -3836,6 +3803,206 @@ packages: '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + '@opentelemetry/api-logs@0.52.1': + resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==} + engines: {node: '>=14'} + + '@opentelemetry/api-logs@0.53.0': + resolution: {integrity: sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@1.26.0': + resolution: {integrity: sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.26.0': + resolution: {integrity: sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/instrumentation-amqplib@0.42.0': + resolution: {integrity: sha512-fiuU6OKsqHJiydHWgTRQ7MnIrJ2lEqsdgFtNIH4LbAUJl/5XmrIeoDzDnox+hfkgWK65jsleFuQDtYb5hW1koQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-connect@0.39.0': + resolution: {integrity: sha512-pGBiKevLq7NNglMgqzmeKczF4XQMTOUOTkK8afRHMZMnrK3fcETyTH7lVaSozwiOM3Ws+SuEmXZT7DYrrhxGlg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dataloader@0.12.0': + resolution: {integrity: sha512-pnPxatoFE0OXIZDQhL2okF//dmbiWFzcSc8pUg9TqofCLYZySSxDCgQc69CJBo5JnI3Gz1KP+mOjS4WAeRIH4g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-express@0.42.0': + resolution: {integrity: sha512-YNcy7ZfGnLsVEqGXQPT+S0G1AE46N21ORY7i7yUQyfhGAL4RBjnZUqefMI0NwqIl6nGbr1IpF0rZGoN8Q7x12Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fastify@0.39.0': + resolution: {integrity: sha512-SS9uSlKcsWZabhBp2szErkeuuBDgxOUlllwkS92dVaWRnMmwysPhcEgHKB8rUe3BHg/GnZC1eo1hbTZv4YhfoA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fs@0.15.0': + resolution: {integrity: sha512-JWVKdNLpu1skqZQA//jKOcKdJC66TWKqa2FUFq70rKohvaSq47pmXlnabNO+B/BvLfmidfiaN35XakT5RyMl2Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-generic-pool@0.39.0': + resolution: {integrity: sha512-y4v8Y+tSfRB3NNBvHjbjrn7rX/7sdARG7FuK6zR8PGb28CTa0kHpEGCJqvL9L8xkTNvTXo+lM36ajFGUaK1aNw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-graphql@0.43.0': + resolution: {integrity: sha512-aI3YMmC2McGd8KW5du1a2gBA0iOMOGLqg4s9YjzwbjFwjlmMNFSK1P3AIg374GWg823RPUGfVTIgZ/juk9CVOA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-hapi@0.41.0': + resolution: {integrity: sha512-jKDrxPNXDByPlYcMdZjNPYCvw0SQJjN+B1A+QH+sx+sAHsKSAf9hwFiJSrI6C4XdOls43V/f/fkp9ITkHhKFbQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.53.0': + resolution: {integrity: sha512-H74ErMeDuZfj7KgYCTOFGWF5W9AfaPnqLQQxeFq85+D29wwV2yqHbz2IKLYpkOh7EI6QwDEl7rZCIxjJLyc/CQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-ioredis@0.43.0': + resolution: {integrity: sha512-i3Dke/LdhZbiUAEImmRG3i7Dimm/BD7t8pDDzwepSvIQ6s2X6FPia7561gw+64w+nx0+G9X14D7rEfaMEmmjig==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.3.0': + resolution: {integrity: sha512-UnkZueYK1ise8FXQeKlpBd7YYUtC7mM8J0wzUSccEfc/G8UqHQqAzIyYCUOUPUKp8GsjLnWOOK/3hJc4owb7Jg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-koa@0.43.0': + resolution: {integrity: sha512-lDAhSnmoTIN6ELKmLJBplXzT/Jqs5jGZehuG22EdSMaTwgjMpxMDI1YtlKEhiWPWkrz5LUsd0aOO0ZRc9vn3AQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-lru-memoizer@0.40.0': + resolution: {integrity: sha512-21xRwZsEdMPnROu/QsaOIODmzw59IYpGFmuC4aFWvMj6stA8+Ei1tX67nkarJttlNjoM94um0N4X26AD7ff54A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongodb@0.47.0': + resolution: {integrity: sha512-yqyXRx2SulEURjgOQyJzhCECSh5i1uM49NUaq9TqLd6fA7g26OahyJfsr9NE38HFqGRHpi4loyrnfYGdrsoVjQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongoose@0.42.0': + resolution: {integrity: sha512-AnWv+RaR86uG3qNEMwt3plKX1ueRM7AspfszJYVkvkehiicC3bHQA6vWdb6Zvy5HAE14RyFbu9+2hUUjR2NSyg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql2@0.41.0': + resolution: {integrity: sha512-REQB0x+IzVTpoNgVmy5b+UnH1/mDByrneimP6sbDHkp1j8QOl1HyWOrBH/6YWR0nrbU3l825Em5PlybjT3232g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql@0.41.0': + resolution: {integrity: sha512-jnvrV6BsQWyHS2qb2fkfbfSb1R/lmYwqEZITwufuRl37apTopswu9izc0b1CYRp/34tUG/4k/V39PND6eyiNvw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-nestjs-core@0.40.0': + resolution: {integrity: sha512-WF1hCUed07vKmf5BzEkL0wSPinqJgH7kGzOjjMAiTGacofNXjb/y4KQ8loj2sNsh5C/NN7s1zxQuCgbWbVTGKg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pg@0.44.0': + resolution: {integrity: sha512-oTWVyzKqXud1BYEGX1loo2o4k4vaU1elr3vPO8NZolrBtFvQ34nx4HgUaexUDuEog00qQt+MLR5gws/p+JXMLQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis-4@0.42.0': + resolution: {integrity: sha512-NaD+t2JNcOzX/Qa7kMy68JbmoVIV37fT/fJYzLKu2Wwd+0NCxt+K2OOsOakA8GVg8lSpFdbx4V/suzZZ2Pvdjg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-undici@0.6.0': + resolution: {integrity: sha512-ABJBhm5OdhGmbh0S/fOTE4N69IZ00CsHC5ijMYfzbw3E5NwLgpQk5xsljaECrJ8wz1SfXbO03FiSuu5AyRAkvQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation@0.52.1': + resolution: {integrity: sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.53.0': + resolution: {integrity: sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/redis-common@0.36.2': + resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} + engines: {node: '>=14'} + + '@opentelemetry/resources@1.26.0': + resolution: {integrity: sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.26.0': + resolution: {integrity: sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.26.0': + resolution: {integrity: sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.27.0': + resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==} + engines: {node: '>=14'} + + '@opentelemetry/sql-common@0.40.1': + resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@oxc-resolver/binding-darwin-arm64@1.10.2': resolution: {integrity: sha512-aOCZYXqmFL+2sXlaVkYbAOtICGGeTFtmdul8OimQfOXHJods6YHJ2nR6+rEeBcJzaXyXPP18ne1IsEc4AYL1IA==} cpu: [arm64] @@ -3903,40 +4070,159 @@ packages: '@polka/url@1.0.0-next.25': resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + '@prisma/instrumentation@5.19.1': + resolution: {integrity: sha512-VLnzMQq7CWroL5AeaW0Py2huiNKeoMfCH3SUxstdzPrlWQi6UQ9UrfcbUkNHlVFqOMacqy8X/8YtE0kuKDpD9w==} + '@react-email/render@0.0.7': resolution: {integrity: sha512-hMMhxk6TpOcDC5qnKzXPVJoVGEwfm+U5bGOPH+MyTTlx0F02RLQygcATBKsbP7aI/mvkmBAZoFbgPIHop7ovug==} engines: {node: '>=16.0.0'} + '@rollup/plugin-commonjs@26.0.1': + resolution: {integrity: sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@5.1.2': + resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@selderee/plugin-htmlparser2@0.10.0': resolution: {integrity: sha512-gW69MEamZ4wk1OsOq1nG1jcyhXIQcnrsX5JwixVw/9xaiav8TCyjESAruu1Rz9yyInhgBXxkNwMeygKnN2uxNA==} + '@sentry-internal/browser-utils@8.33.1': + resolution: {integrity: sha512-TW6/r+Gl5jiXv54iK1xZ3mlVgTS/jaBp4vcQ0xGMdgiQ3WchEPcFSeYovL+YHT3tSud0GZqVtDQCz+5i76puqA==} + engines: {node: '>=14.18'} + '@sentry-internal/feedback@7.118.0': resolution: {integrity: sha512-IYOGRcqIqKJJpMwBBv+0JTu0FPpXnakJYvOx/XEa/SNyF5+l7b9gGEjUVWh1ok50kTLW/XPnpnXNAGQcoKHg+w==} engines: {node: '>=12'} + '@sentry-internal/feedback@8.33.1': + resolution: {integrity: sha512-qauMRTm3qDaLqZ3ibI03cj4gLF40y0ij65nj+cns6iWxGCtPrO8tjvXFWuQsE7Aye9dGMnBgmv7uN+NTUtC3RA==} + engines: {node: '>=14.18'} + '@sentry-internal/replay-canvas@7.118.0': resolution: {integrity: sha512-XxHlCClvrxmVKpiZetFYyiBaPQNiojoBGFFVgbbWBIAPc+fWeLJ2BMoQEBjn/0NA/8u8T6lErK5YQo/eIx9+XQ==} engines: {node: '>=12'} + '@sentry-internal/replay-canvas@8.33.1': + resolution: {integrity: sha512-nsxTFTPCT10Ty/v6+AiST3+yotGP1sUb8xqfKB9fPnS1hZHFryp0NnEls7xFjBsBbZPU1GpFkzrk/E6JFzixDQ==} + engines: {node: '>=14.18'} + + '@sentry-internal/replay@8.33.1': + resolution: {integrity: sha512-fm4coIOjmanU29NOVN9MyaP4fUCOYytbtFqVSKRFNZQ/xAgNeySiBIbUd6IjujMmnOk9bY0WEUMcdm3Uotjdog==} + engines: {node: '>=14.18'} + '@sentry-internal/tracing@7.118.0': resolution: {integrity: sha512-dERAshKlQLrBscHSarhHyUeGsu652bDTUN1FK0m4e3X48M3I5/s+0N880Qjpe5MprNLcINlaIgdQ9jkisvxjfw==} engines: {node: '>=8'} + '@sentry/babel-plugin-component-annotate@2.22.3': + resolution: {integrity: sha512-OlHA+i+vnQHRIdry4glpiS/xTOtgjmpXOt6IBOUqynx5Jd/iK1+fj+t8CckqOx9wRacO/hru2wfW/jFq0iViLg==} + engines: {node: '>= 14'} + '@sentry/browser@7.118.0': resolution: {integrity: sha512-8onDOFV1VLEoBuqA5yaJeR3FF1JNuxr5C7p1oN3OwY724iTVqQnOLmZKZaSnHV3RkY67wKDGQkQIie14sc+42g==} engines: {node: '>=8'} + '@sentry/browser@8.33.1': + resolution: {integrity: sha512-c6zI/igexkLwZuGk+u8Rj26ChjxGgkhe6ZbKFsXCYaKAp5ep5X7HQRkkqgbxApiqlC0LduHdd/ymzh139JLg8w==} + engines: {node: '>=14.18'} + + '@sentry/bundler-plugin-core@2.22.3': + resolution: {integrity: sha512-DeoUl0WffcqZZRl5Wy9aHvX4WfZbbWt0QbJ7NJrcEViq+dRAI2FQTYECFLwdZi5Gtb3oyqZICO+P7k8wDnzsjQ==} + engines: {node: '>= 14'} + + '@sentry/cli-darwin@2.37.0': + resolution: {integrity: sha512-CsusyMvO0eCPSN7H+sKHXS1pf637PWbS4rZak/7giz/z31/6qiXmeMlcL3f9lLZKtFPJmXVFO9uprn1wbBVF8A==} + engines: {node: '>=10'} + os: [darwin] + + '@sentry/cli-linux-arm64@2.37.0': + resolution: {integrity: sha512-2vzUWHLZ3Ct5gpcIlfd/2Qsha+y9M8LXvbZE26VxzYrIkRoLAWcnClBv8m4XsHLMURYvz3J9QSZHMZHSO7kAzw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd] + + '@sentry/cli-linux-arm@2.37.0': + resolution: {integrity: sha512-Dz0qH4Yt+gGUgoVsqVt72oDj4VQynRF1QB1/Sr8g76Vbi+WxWZmUh0iFwivYVwWxdQGu/OQrE0tx946HToCRyA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd] + + '@sentry/cli-linux-i686@2.37.0': + resolution: {integrity: sha512-MHRLGs4t/CQE1pG+mZBQixyWL6xDZfNalCjO8GMcTTbZFm44S3XRHfYJZNVCgdtnUP7b6OHGcu1v3SWE10LcwQ==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd] + + '@sentry/cli-linux-x64@2.37.0': + resolution: {integrity: sha512-k76ClefKZaDNJZU/H3mGeR8uAzAGPzDRG/A7grzKfBeyhP3JW09L7Nz9IQcSjCK+xr399qLhM2HFCaPWQ6dlMw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd] + + '@sentry/cli-win32-i686@2.37.0': + resolution: {integrity: sha512-FFyi5RNYQQkEg4GkP2f3BJcgQn0F4fjFDMiWkjCkftNPXQG+HFUEtrGsWr6mnHPdFouwbYg3tEPUWNxAoypvTw==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + + '@sentry/cli-win32-x64@2.37.0': + resolution: {integrity: sha512-nSMj4OcfQmyL+Tu/jWCJwhKCXFsCZW1MUk6wjjQlRt9SDLfgeapaMlK1ZvT1eZv5ZH6bj3qJfefwj4U8160uOA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@sentry/cli@2.37.0': + resolution: {integrity: sha512-fM3V4gZRJR/s8lafc3O07hhOYRnvkySdPkvL/0e0XW0r+xRwqIAgQ5ECbsZO16A5weUiXVSf03ztDL1FcmbJCQ==} + engines: {node: '>= 10'} + hasBin: true + '@sentry/core@7.118.0': resolution: {integrity: sha512-ol0xBdp3/K11IMAYSQE0FMxBOOH9hMsb/rjxXWe0hfM5c72CqYWL3ol7voPci0GELJ5CZG+9ImEU1V9r6gK64g==} engines: {node: '>=8'} + '@sentry/core@8.33.1': + resolution: {integrity: sha512-3SS41suXLFzxL3OQvTMZ6q92ZapELVq2l2SoWlZopcamWhog2Ru0dp2vkunq97kFHb2TzKRTlFH4+4gbT8SJug==} + engines: {node: '>=14.18'} + '@sentry/integrations@7.118.0': resolution: {integrity: sha512-C2rR4NvIMjokF8jP5qzSf1o2zxDx7IeYnr8u15Kb2+HdZtX559owALR0hfgwnfeElqMhGlJBaKUWZ48lXJMzCQ==} engines: {node: '>=8'} - '@sentry/node@7.118.0': - resolution: {integrity: sha512-79N63DvYKkNPqzmc0cjO+vMZ/nU7+CbE3K3COQNiV7gk58+666G9mRZQJuZVOVebatq5wM5UR0G4LPkwD+J84g==} - engines: {node: '>=8'} + '@sentry/nextjs@8.33.1': + resolution: {integrity: sha512-XLUyib6bCv2iynKaoYIotVKzLsGc9lr6QI4ZV3/PstiiXKwtTm1TPdBfIlrDJMGIMxH7Z/DmkvJNSESV19Ui6Q==} + engines: {node: '>=14.18'} + peerDependencies: + next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 + webpack: '>=5.0.0' + peerDependenciesMeta: + webpack: + optional: true + + '@sentry/node@8.33.1': + resolution: {integrity: sha512-0Xmlrl5nU5Bx6YybaIfztyOIiIXW5X64vcK0u94Sg4uHcDO7YvEbhflKjp669ds2I6ZQ/czqxnaAY8gM6P2SCA==} + engines: {node: '>=14.18'} + + '@sentry/opentelemetry@8.33.1': + resolution: {integrity: sha512-D2aE2G0DUHLLnfbOXrTjiNJKAs/RZfOBJMidI4fC2AIwqCmrp55Aex4dRq4hxd8MPLR92Kt/ikHeJxlzWB15KA==} + engines: {node: '>=14.18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.25.1 + '@opentelemetry/instrumentation': ^0.53.0 + '@opentelemetry/sdk-trace-base': ^1.26.0 + '@opentelemetry/semantic-conventions': ^1.27.0 '@sentry/react@7.118.0': resolution: {integrity: sha512-oEYe5TGk8S7YzPsFqDf4xDHjfzs35/QFE+dou3S2d24OYpso8Tq4C5f1VzYmnOOyy85T7JNicYLSo0n0NSJvQg==} @@ -3944,6 +4230,12 @@ packages: peerDependencies: react: 19.0.0-rc-3edc000d-20240926 + '@sentry/react@8.33.1': + resolution: {integrity: sha512-SsEX05xfcfOvo7/pK1UyeyTAYWH8iSIsXXlsjvnSRsbuJkjb0c+q6yiZpj3A2PRdbcx43nTVE1n0lSpgaqj2HA==} + engines: {node: '>=14.18'} + peerDependencies: + react: 19.0.0-rc-3edc000d-20240926 + '@sentry/replay@7.118.0': resolution: {integrity: sha512-boQfCL+1L/tSZ9Huwi00+VtU+Ih1Lcg8HtxBuAsBCJR9pQgUL5jp7ECYdTeeHyCh/RJO7JqV1CEoGTgohe10mA==} engines: {node: '>=12'} @@ -3952,10 +4244,28 @@ packages: resolution: {integrity: sha512-2drqrD2+6kgeg+W/ycmiti3G4lJrV3hGjY9PpJ3bJeXrh6T2+LxKPzlgSEnKFaeQWkXdZ4eaUbtTXVebMjb5JA==} engines: {node: '>=8'} + '@sentry/types@8.33.1': + resolution: {integrity: sha512-GjoAMvwtpIemoF/IiwZ7A60g4nQv3qwzR21GvJqDVUoKD0e8pv9OLX+HyXoUat4wEDGSuDUcUyUKD2G+od73QA==} + engines: {node: '>=14.18'} + '@sentry/utils@7.118.0': resolution: {integrity: sha512-43qItc/ydxZV1Zb3Kn2M54RwL9XXFa3IAYBO8S82Qvq5YUYmU2AmJ1jgg7DabXlVSWgMA1HntwqnOV3JLaEnTQ==} engines: {node: '>=8'} + '@sentry/utils@8.33.1': + resolution: {integrity: sha512-uzuYpiiJuFY3N4WNHMBWUQX5oNv2t/TbG0OHRp3Rr7yeu+HSfD542TIp9/gMZ+G0Cxd8AmVO3wkKIFbk0TL4Qg==} + engines: {node: '>=14.18'} + + '@sentry/vercel-edge@8.33.1': + resolution: {integrity: sha512-YKAsFAm4ctsKRdoS3LkYF4oG5BD1chT4Uqy4AaBhlz0s5iHxBI7YzZFbcW4YiNnDWT80tdF+FS7AvUAjy+npoA==} + engines: {node: '>=14.18'} + + '@sentry/webpack-plugin@2.22.3': + resolution: {integrity: sha512-Sq1S6bL3nuoTP5typkj+HPjQ13dqftIE8kACAq4tKkXOpWO9bf6HtqcruEQCxMekbWDTdljsrknQ17ZBx2q66Q==} + engines: {node: '>= 14'} + peerDependencies: + webpack: '>=4.40.0' + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -4317,9 +4627,6 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - '@types/body-scroll-lock@3.1.2': resolution: {integrity: sha512-ELhtuphE/YbhEcpBf/rIV9Tl3/O0A0gpCVD+oYFSS8bWstHFJUgA4nNw1ZakVlRC38XaQEIsBogUZKWIPBvpfQ==} @@ -4332,8 +4639,8 @@ packages: '@types/caseless@0.12.5': resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.36': + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} '@types/escape-html@1.0.4': resolution: {integrity: sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==} @@ -4350,12 +4657,6 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/express-serve-static-core@4.19.5': - resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} - - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - '@types/find-node-modules@2.1.2': resolution: {integrity: sha512-5hRcqDclY6MTkHXJBc5q79z5luG+IJRlGR01wluMVMM9lYogYc2sfclXTVU5Edp0Ja4viIOCDI1lXhFRlsNTKA==} @@ -4374,9 +4675,6 @@ packages: '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/is-hotkey@0.1.10': resolution: {integrity: sha512-RvC8KMw5BCac1NvRRyaHgMMEtBaZ6wh0pyPTBu7izn4Sj/AX9Y4aXU5c7rX8PnM/knsuUpC1IeoBkANtxBypsQ==} @@ -4416,9 +4714,6 @@ packages: '@types/lodash@4.17.7': resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -4431,6 +4726,9 @@ packages: '@types/mongoose-aggregate-paginate-v2@1.0.6': resolution: {integrity: sha512-EXkgB/nJ1x3UcoEk1pD67+uXtijveHZtbg2H3wtZk2SnCFBB5cMw7MQRu9/GgyEP/KKXuWFt1JABv7m+Kls0ug==} + '@types/mysql@2.15.26': + resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} + '@types/node@22.5.4': resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} @@ -4440,21 +4738,24 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/pg-pool@2.0.6': + resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} + '@types/pg@8.10.2': resolution: {integrity: sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw==} '@types/pg@8.11.6': resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==} + '@types/pg@8.6.1': + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + '@types/pluralize@0.0.33': resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==} '@types/prompts@2.4.9': resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==} - '@types/qs@6.9.15': - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -4473,15 +4774,12 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - '@types/shelljs@0.8.15': resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -4612,6 +4910,57 @@ packages: '@vue/shared@3.4.37': resolution: {integrity: sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==} + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead @@ -4631,6 +4980,11 @@ packages: acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -4657,6 +5011,11 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -5034,6 +5393,10 @@ packages: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -5068,6 +5431,10 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -5644,6 +6011,10 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -5678,6 +6049,9 @@ packages: resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -5898,6 +6272,10 @@ packages: peerDependencies: eslint: '>=8.44.0' + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + eslint-scope@8.0.2: resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5942,6 +6320,10 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -6302,6 +6684,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -6310,6 +6695,10 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} @@ -6516,9 +6905,6 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore-by-default@1.0.1: - resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -6541,6 +6927,9 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-in-the-middle@1.11.2: + resolution: {integrity: sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==} + import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} @@ -6736,6 +7125,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -6980,6 +7372,10 @@ packages: resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + jest-worker@29.7.0: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7175,6 +7571,10 @@ packages: resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} engines: {node: '>=18.0.0'} + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + localforage@1.10.0: resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} @@ -7249,6 +7649,10 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -7354,6 +7758,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.1: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} @@ -7369,6 +7777,10 @@ packages: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} @@ -7401,6 +7813,9 @@ packages: mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + monaco-editor@0.38.0: resolution: {integrity: sha512-11Fkh6yzEmwx7O0YoLxeae0qEGFwmyPRlVxpg7oF9czOOCB/iCjdJrG5I67da5WiXK3YJCxoz9TJFE8Tfq/v9A==} @@ -7495,6 +7910,9 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + new-find-package-json@2.0.0: resolution: {integrity: sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==} engines: {node: '>=12.22.0'} @@ -7568,11 +7986,6 @@ packages: resolution: {integrity: sha512-qtoKfGFhvIFW5kLfrkw2R6Nm6Ur4LNUMykyqu6n9BRKJuyQrqEGwdXXUAbwWEKt33dlWUGXb7rzmJP/p4+O+CA==} engines: {node: '>=6.0.0'} - nodemon@3.0.3: - resolution: {integrity: sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==} - engines: {node: '>=10'} - hasBin: true - noms@0.0.0: resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} @@ -8012,6 +8425,10 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -8035,9 +8452,6 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - pstree.remy@1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} @@ -8079,6 +8493,9 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -8251,6 +8668,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-in-the-middle@7.4.0: + resolution: {integrity: sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==} + engines: {node: '>=8.6.0'} + requireindex@1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} @@ -8322,6 +8743,11 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true + rollup@3.29.5: + resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -8500,6 +8926,10 @@ packages: scheduler@0.25.0-rc-5dcb0097-20240918: resolution: {integrity: sha512-Sr3CaLDHJIA1p7wzNF8EyZ/JzetrV21S0sY6byC3AhREQMoEuKol8BSmXM5gd8Aoxo92uW9WCjWL0hwdb2DtqQ==} + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + scmp@2.1.0: resolution: {integrity: sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==} @@ -8544,6 +8974,9 @@ packages: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -8591,6 +9024,9 @@ packages: engines: {node: '>=4'} hasBin: true + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + short-unique-id@5.2.0: resolution: {integrity: sha512-cMGfwNyfDZ/nzJ2k2M+ClthBIh//GlZl1JEf47Uoa9XR11bz8Pa2T2wQO4bVrRdH48LrIDWJahQziKo3MjhsWg==} hasBin: true @@ -8618,10 +9054,6 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - simple-wcswidth@1.0.1: resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} @@ -8746,6 +9178,10 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} @@ -8921,6 +9357,10 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} @@ -8958,6 +9398,27 @@ packages: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.34.1: + resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -9020,10 +9481,6 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - touch@3.1.1: - resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} - hasBin: true - tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -9160,6 +9617,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + type-fest@3.13.0: resolution: {integrity: sha512-Gur3yQGM9qiLNs0KPP7LPgeRbio2QTt4xXouobMCarR0/wyW3F+F/+OWwshg3NG0Adon7uQfSZBpB46NfhoF1A==} engines: {node: '>=14.16'} @@ -9214,9 +9675,6 @@ packages: unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undefsafe@2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -9259,6 +9717,9 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unplugin@1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} + untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -9370,6 +9831,10 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -9386,6 +9851,23 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + + webpack@5.95.0: + resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -10304,7 +10786,7 @@ snapshots: '@babel/traverse': 7.25.3 '@babel/types': 7.25.2 convert-source-map: 2.0.0 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -10370,7 +10852,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -11128,7 +11610,7 @@ snapshots: '@babel/parser': 7.25.3 '@babel/template': 7.25.0 '@babel/types': 7.25.2 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11630,7 +12112,7 @@ snapshots: '@eslint/config-array@0.18.0': dependencies: '@eslint/object-schema': 2.1.4 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -11638,7 +12120,7 @@ snapshots: '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 espree: 10.1.0 globals: 14.0.0 ignore: 5.3.2 @@ -12032,6 +12514,11 @@ snapshots: '@jridgewell/set-array@1.2.1': {} + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': @@ -12360,6 +12847,267 @@ snapshots: '@one-ini/wasm@0.1.1': {} + '@opentelemetry/api-logs@0.52.1': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api-logs@0.53.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/context-async-hooks@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/instrumentation-amqplib@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-connect@0.39.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@types/connect': 3.4.36 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dataloader@0.12.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-express@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fastify@0.39.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fs@0.15.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-generic-pool@0.39.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-graphql@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-hapi@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-ioredis@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.3.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-koa@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-lru-memoizer@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongodb@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongoose@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql2@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@types/mysql': 2.15.26 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-nestjs-core@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-pg@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.6 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-redis-4@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-undici@0.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.11.2 + require-in-the-middle: 7.4.0 + semver: 7.6.3 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.53.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.11.2 + require-in-the-middle: 7.4.0 + semver: 7.6.3 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/redis-common@0.36.2': {} + + '@opentelemetry/resources@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/sdk-metrics@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/semantic-conventions@1.27.0': {} + + '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@oxc-resolver/binding-darwin-arm64@1.10.2': optional: true @@ -12404,6 +13152,14 @@ snapshots: '@polka/url@1.0.0-next.25': {} + '@prisma/instrumentation@5.19.1': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@react-email/render@0.0.7': dependencies: html-to-text: 9.0.3 @@ -12411,17 +13167,48 @@ snapshots: react: 19.0.0-rc-3edc000d-20240926 react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + '@rollup/plugin-commonjs@26.0.1(rollup@3.29.5)': + dependencies: + '@rollup/pluginutils': 5.1.2(rollup@3.29.5) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 10.4.5 + is-reference: 1.2.1 + magic-string: 0.30.11 + optionalDependencies: + rollup: 3.29.5 + + '@rollup/pluginutils@5.1.2(rollup@3.29.5)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 3.29.5 + '@selderee/plugin-htmlparser2@0.10.0': dependencies: domhandler: 5.0.3 selderee: 0.10.0 + '@sentry-internal/browser-utils@8.33.1': + dependencies: + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + '@sentry-internal/feedback@7.118.0': dependencies: '@sentry/core': 7.118.0 '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 + '@sentry-internal/feedback@8.33.1': + dependencies: + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + '@sentry-internal/replay-canvas@7.118.0': dependencies: '@sentry/core': 7.118.0 @@ -12429,12 +13216,28 @@ snapshots: '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 + '@sentry-internal/replay-canvas@8.33.1': + dependencies: + '@sentry-internal/replay': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry-internal/replay@8.33.1': + dependencies: + '@sentry-internal/browser-utils': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + '@sentry-internal/tracing@7.118.0': dependencies: '@sentry/core': 7.118.0 '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 + '@sentry/babel-plugin-component-annotate@2.22.3': {} + '@sentry/browser@7.118.0': dependencies: '@sentry-internal/feedback': 7.118.0 @@ -12446,11 +13249,80 @@ snapshots: '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 + '@sentry/browser@8.33.1': + dependencies: + '@sentry-internal/browser-utils': 8.33.1 + '@sentry-internal/feedback': 8.33.1 + '@sentry-internal/replay': 8.33.1 + '@sentry-internal/replay-canvas': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry/bundler-plugin-core@2.22.3': + dependencies: + '@babel/core': 7.25.2 + '@sentry/babel-plugin-component-annotate': 2.22.3 + '@sentry/cli': 2.37.0 + dotenv: 16.4.5 + find-up: 5.0.0 + glob: 9.3.5 + magic-string: 0.30.8 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/cli-darwin@2.37.0': + optional: true + + '@sentry/cli-linux-arm64@2.37.0': + optional: true + + '@sentry/cli-linux-arm@2.37.0': + optional: true + + '@sentry/cli-linux-i686@2.37.0': + optional: true + + '@sentry/cli-linux-x64@2.37.0': + optional: true + + '@sentry/cli-win32-i686@2.37.0': + optional: true + + '@sentry/cli-win32-x64@2.37.0': + optional: true + + '@sentry/cli@2.37.0': + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.37.0 + '@sentry/cli-linux-arm': 2.37.0 + '@sentry/cli-linux-arm64': 2.37.0 + '@sentry/cli-linux-i686': 2.37.0 + '@sentry/cli-linux-x64': 2.37.0 + '@sentry/cli-win32-i686': 2.37.0 + '@sentry/cli-win32-x64': 2.37.0 + transitivePeerDependencies: + - encoding + - supports-color + '@sentry/core@7.118.0': dependencies: '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 + '@sentry/core@8.33.1': + dependencies: + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + '@sentry/integrations@7.118.0': dependencies: '@sentry/core': 7.118.0 @@ -12458,13 +13330,86 @@ snapshots: '@sentry/utils': 7.118.0 localforage: 1.10.0 - '@sentry/node@7.118.0': + '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': dependencies: - '@sentry-internal/tracing': 7.118.0 - '@sentry/core': 7.118.0 - '@sentry/integrations': 7.118.0 - '@sentry/types': 7.118.0 - '@sentry/utils': 7.118.0 + '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@rollup/plugin-commonjs': 26.0.1(rollup@3.29.5) + '@sentry-internal/browser-utils': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/node': 8.33.1 + '@sentry/opentelemetry': 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0) + '@sentry/react': 8.33.1(react@19.0.0-rc-3edc000d-20240926) + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + '@sentry/vercel-edge': 8.33.1 + '@sentry/webpack-plugin': 2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + chalk: 3.0.0 + next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + resolve: 1.22.8 + rollup: 3.29.5 + stacktrace-parser: 0.1.10 + optionalDependencies: + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/core' + - '@opentelemetry/instrumentation' + - '@opentelemetry/sdk-trace-base' + - encoding + - react + - supports-color + + '@sentry/node@8.33.1': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.12.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.15.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.3.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@prisma/instrumentation': 5.19.1 + '@sentry/core': 8.33.1 + '@sentry/opentelemetry': 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0) + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + import-in-the-middle: 1.11.2 + transitivePeerDependencies: + - supports-color + + '@sentry/opentelemetry@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 '@sentry/react@7.118.0(react@19.0.0-rc-3edc000d-20240926)': dependencies: @@ -12475,6 +13420,15 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.0.0-rc-3edc000d-20240926 + '@sentry/react@8.33.1(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + '@sentry/browser': 8.33.1 + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + hoist-non-react-statics: 3.3.2 + react: 19.0.0-rc-3edc000d-20240926 + '@sentry/replay@7.118.0': dependencies: '@sentry-internal/tracing': 7.118.0 @@ -12484,10 +13438,32 @@ snapshots: '@sentry/types@7.118.0': {} + '@sentry/types@8.33.1': {} + '@sentry/utils@7.118.0': dependencies: '@sentry/types': 7.118.0 + '@sentry/utils@8.33.1': + dependencies: + '@sentry/types': 8.33.1 + + '@sentry/vercel-edge@8.33.1': + dependencies: + '@sentry/core': 8.33.1 + '@sentry/types': 8.33.1 + '@sentry/utils': 8.33.1 + + '@sentry/webpack-plugin@2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': + dependencies: + '@sentry/bundler-plugin-core': 2.22.3 + unplugin: 1.0.1 + uuid: 9.0.0 + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) + transitivePeerDependencies: + - encoding + - supports-color + '@sinclair/typebox@0.27.8': {} '@sindresorhus/is@4.6.0': {} @@ -12850,7 +13826,7 @@ snapshots: '@swc-node/sourcemap-support': 0.5.1 '@swc/core': 1.7.10(@swc/helpers@0.5.13) colorette: 2.0.20 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 oxc-resolver: 1.10.2 pirates: 4.0.6 tslib: 2.6.3 @@ -12977,11 +13953,6 @@ snapshots: dependencies: '@babel/types': 7.25.2 - '@types/body-parser@1.19.5': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 22.5.4 - '@types/body-scroll-lock@3.1.2': {} '@types/busboy@1.5.4': @@ -12997,7 +13968,7 @@ snapshots: '@types/caseless@0.12.5': {} - '@types/connect@3.4.38': + '@types/connect@3.4.36': dependencies: '@types/node': 22.5.4 @@ -13018,20 +13989,6 @@ snapshots: '@types/estree@1.0.5': {} - '@types/express-serve-static-core@4.19.5': - dependencies: - '@types/node': 22.5.4 - '@types/qs': 6.9.15 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - - '@types/express@4.17.21': - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.5 - '@types/qs': 6.9.15 - '@types/serve-static': 1.15.7 - '@types/find-node-modules@2.1.2': {} '@types/fs-extra@11.0.4': @@ -13054,8 +14011,6 @@ snapshots: '@types/http-cache-semantics@4.0.4': {} - '@types/http-errors@2.0.4': {} - '@types/is-hotkey@0.1.10': {} '@types/istanbul-lib-coverage@2.0.6': {} @@ -13104,8 +14059,6 @@ snapshots: '@types/lodash@4.17.7': {} - '@types/mime@1.3.5': {} - '@types/minimatch@5.1.2': {} '@types/minimist@1.2.2': {} @@ -13120,6 +14073,10 @@ snapshots: - aws-crt - supports-color + '@types/mysql@2.15.26': + dependencies: + '@types/node': 22.5.4 + '@types/node@22.5.4': dependencies: undici-types: 6.19.8 @@ -13130,6 +14087,10 @@ snapshots: '@types/parse-json@4.0.2': {} + '@types/pg-pool@2.0.6': + dependencies: + '@types/pg': 8.10.2 + '@types/pg@8.10.2': dependencies: '@types/node': 22.5.4 @@ -13142,6 +14103,12 @@ snapshots: pg-protocol: 1.6.1 pg-types: 4.0.2 + '@types/pg@8.6.1': + dependencies: + '@types/node': 22.5.4 + pg-protocol: 1.6.1 + pg-types: 2.2.0 + '@types/pluralize@0.0.33': {} '@types/prompts@2.4.9': @@ -13149,8 +14116,6 @@ snapshots: '@types/node': 22.5.4 kleur: 3.0.3 - '@types/qs@6.9.15': {} - '@types/range-parser@1.2.7': {} '@types/react-datepicker@6.2.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': @@ -13188,22 +14153,13 @@ snapshots: '@types/semver@7.5.8': {} - '@types/send@0.17.4': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 22.5.4 - - '@types/serve-static@1.15.7': - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 22.5.4 - '@types/send': 0.17.4 - '@types/shelljs@0.8.15': dependencies: '@types/glob': 7.2.0 '@types/node': 22.5.4 + '@types/shimmer@1.2.0': {} + '@types/stack-utils@2.0.3': {} '@types/to-snake-case@1.0.0': {} @@ -13257,7 +14213,7 @@ snapshots: '@typescript-eslint/types': 8.3.0 '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.2) '@typescript-eslint/visitor-keys': 8.3.0 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 eslint: 9.9.1(jiti@1.21.6) optionalDependencies: typescript: 5.6.2 @@ -13273,7 +14229,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.2) '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: typescript: 5.6.2 @@ -13287,7 +14243,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.3.0 '@typescript-eslint/visitor-keys': 8.3.0 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -13390,6 +14346,86 @@ snapshots: '@vue/shared@3.4.37': {} + '@webassemblyjs/ast@1.12.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + + '@webassemblyjs/helper-api-error@1.11.6': {} + + '@webassemblyjs/helper-buffer@1.12.1': {} + + '@webassemblyjs/helper-numbers@1.11.6': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + + '@webassemblyjs/helper-wasm-section@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + + '@webassemblyjs/ieee754@1.11.6': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.11.6': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.11.6': {} + + '@webassemblyjs/wasm-edit@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + + '@webassemblyjs/wasm-gen@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wasm-opt@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + + '@webassemblyjs/wasm-parser@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wast-printer@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + abab@2.0.6: {} abbrev@2.0.0: {} @@ -13402,12 +14438,17 @@ snapshots: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 + optional: true acorn-globals@7.0.1: dependencies: acorn: 8.12.1 acorn-walk: 8.3.3 + acorn-import-attributes@1.9.5(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 @@ -13420,13 +14461,13 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 transitivePeerDependencies: - supports-color agent-base@7.1.1: dependencies: - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -13435,6 +14476,10 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -13509,7 +14554,8 @@ snapshots: call-bind: 1.0.7 is-array-buffer: 3.0.4 - array-flatten@1.1.1: {} + array-flatten@1.1.1: + optional: true array-includes@3.1.8: dependencies: @@ -13771,6 +14817,7 @@ snapshots: unpipe: 1.0.0 transitivePeerDependencies: - supports-color + optional: true body-scroll-lock@4.0.0-beta.0: {} @@ -13914,6 +14961,11 @@ snapshots: escape-string-regexp: 1.0.5 supports-color: 5.5.0 + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -13963,6 +15015,8 @@ snapshots: chownr@3.0.0: {} + chrome-trace-event@1.0.4: {} + ci-info@3.9.0: {} ci-info@4.0.0: {} @@ -14089,7 +15143,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 - content-type@1.0.5: {} + content-type@1.0.5: + optional: true convert-gitmoji@0.1.5: {} @@ -14097,9 +15152,11 @@ snapshots: convert-source-map@2.0.0: {} - cookie-signature@1.0.6: {} + cookie-signature@1.0.6: + optional: true - cookie@0.6.0: {} + cookie@0.6.0: + optional: true copyfiles@2.4.1: dependencies: @@ -14211,16 +15268,15 @@ snapshots: debug@2.6.9: dependencies: ms: 2.0.0 + optional: true debug@3.2.7: dependencies: ms: 2.1.3 - debug@4.3.6(supports-color@5.5.0): + debug@4.3.6: dependencies: ms: 2.1.2 - optionalDependencies: - supports-color: 5.5.0 decimal.js@10.4.3: {} @@ -14309,13 +15365,15 @@ snapshots: delayed-stream@1.0.0: {} - depd@2.0.0: {} + depd@2.0.0: + optional: true dequal@2.0.3: {} destr@2.0.3: {} - destroy@1.2.0: {} + destroy@1.2.0: + optional: true detect-file@1.0.0: {} @@ -14381,20 +15439,22 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + drizzle-orm@0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): optionalDependencies: '@libsql/client': 0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@neondatabase/serverless': 0.9.4 + '@opentelemetry/api': 1.9.0 '@types/pg': 8.10.2 '@types/react': types-react@19.0.0-rc.1 '@vercel/postgres': 0.9.0 pg: 8.11.3 react: 19.0.0-rc-3edc000d-20240926 - drizzle-orm@0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + drizzle-orm@0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): optionalDependencies: '@libsql/client': 0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@neondatabase/serverless': 0.9.4 + '@opentelemetry/api': 1.9.0 '@types/pg': 8.11.6 '@types/react': types-react@19.0.0-rc.1 '@vercel/postgres': 0.9.0 @@ -14423,7 +15483,8 @@ snapshots: minimatch: 9.0.1 semver: 7.6.3 - ee-first@1.1.1: {} + ee-first@1.1.1: + optional: true effect@3.4.5: {} @@ -14441,12 +15502,18 @@ snapshots: emoji-regex@9.2.2: {} - encodeurl@1.0.2: {} + encodeurl@1.0.2: + optional: true end-of-stream@1.4.4: dependencies: once: 1.4.0 + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + entities@4.5.0: {} entities@5.0.0: {} @@ -14541,6 +15608,8 @@ snapshots: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 + es-module-lexer@1.5.4: {} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -14563,7 +15632,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.19.12): dependencies: - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 esbuild: 0.19.12 transitivePeerDependencies: - supports-color @@ -14690,7 +15759,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.2) '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 doctrine: 3.0.0 eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 @@ -14906,6 +15975,11 @@ snapshots: regexp-ast-analysis: 0.7.1 scslre: 0.3.0 + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + eslint-scope@8.0.2: dependencies: esrecurse: 4.3.0 @@ -14928,7 +16002,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 escape-string-regexp: 4.0.0 eslint-scope: 8.0.2 eslint-visitor-keys: 4.0.0 @@ -14974,13 +16048,16 @@ snapshots: dependencies: estraverse: 5.3.0 + estraverse@4.3.0: {} + estraverse@5.3.0: {} estree-walker@2.0.2: {} esutils@2.0.3: {} - etag@1.8.1: {} + etag@1.8.1: + optional: true event-target-shim@5.0.1: {} @@ -15089,6 +16166,7 @@ snapshots: vary: 1.1.2 transitivePeerDependencies: - supports-color + optional: true ext-list@2.2.2: dependencies: @@ -15207,6 +16285,7 @@ snapshots: unpipe: 1.0.0 transitivePeerDependencies: - supports-color + optional: true find-cache-dir@3.3.2: dependencies: @@ -15255,7 +16334,7 @@ snapshots: follow-redirects@1.15.6(debug@4.3.6): optionalDependencies: - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 for-each@0.3.3: dependencies: @@ -15288,9 +16367,11 @@ snapshots: dependencies: fetch-blob: 3.2.0 - forwarded@0.2.0: {} + forwarded@0.2.0: + optional: true - fresh@0.5.2: {} + fresh@0.5.2: + optional: true fs-constants@1.0.0: {} @@ -15412,6 +16493,8 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + glob@10.4.5: dependencies: foreground-child: 3.3.0 @@ -15430,6 +16513,13 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + global-modules@1.0.0: dependencies: global-prefix: 1.0.2 @@ -15609,19 +16699,20 @@ snapshots: setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 + optional: true http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -15635,14 +16726,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -15657,6 +16748,7 @@ snapshots: iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 + optional: true iconv-lite@0.6.3: dependencies: @@ -15664,8 +16756,6 @@ snapshots: ieee754@1.2.1: {} - ignore-by-default@1.0.1: {} - ignore@5.3.2: {} image-size@1.1.1: @@ -15683,6 +16773,13 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@1.11.2: + dependencies: + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + cjs-module-lexer: 1.3.1 + module-details-from-path: 1.0.3 + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 @@ -15718,7 +16815,8 @@ snapshots: jsbn: 1.1.0 sprintf-js: 1.1.3 - ipaddr.js@1.9.1: {} + ipaddr.js@1.9.1: + optional: true is-arguments@1.1.1: dependencies: @@ -15839,6 +16937,10 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-reference@1.2.1: + dependencies: + '@types/estree': 1.0.5 + is-regex@1.1.4: dependencies: call-bind: 1.0.7 @@ -15940,7 +17042,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -16276,6 +17378,12 @@ snapshots: jest-util: 29.7.0 string-length: 4.0.2 + jest-worker@27.5.1: + dependencies: + '@types/node': 22.5.4 + merge-stream: 2.0.0 + supports-color: 8.1.1 + jest-worker@29.7.0: dependencies: '@types/node': 22.5.4 @@ -16502,7 +17610,7 @@ snapshots: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 execa: 8.0.1 lilconfig: 3.1.2 listr2: 8.2.4 @@ -16522,6 +17630,8 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 + loader-runner@4.3.0: {} + localforage@1.10.0: dependencies: lie: 3.1.1 @@ -16589,6 +17699,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -16614,14 +17728,16 @@ snapshots: crypt: 0.0.2 is-buffer: 1.1.6 - media-typer@0.3.0: {} + media-typer@0.3.0: + optional: true memoize-one@6.0.0: {} memory-pager@1.5.0: optional: true - merge-descriptors@1.0.1: {} + merge-descriptors@1.0.1: + optional: true merge-stream@2.0.0: {} @@ -16629,7 +17745,8 @@ snapshots: merge@2.1.1: {} - methods@1.1.2: {} + methods@1.1.2: + optional: true micromatch@4.0.7: dependencies: @@ -16644,7 +17761,8 @@ snapshots: dependencies: mime-db: 1.52.0 - mime@1.6.0: {} + mime@1.6.0: + optional: true mime@3.0.0: {} @@ -16670,6 +17788,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.1: dependencies: brace-expansion: 2.0.1 @@ -16684,6 +17806,8 @@ snapshots: dependencies: yallist: 4.0.0 + minipass@4.2.8: {} + minipass@5.0.0: {} minipass@7.1.2: {} @@ -16711,6 +17835,8 @@ snapshots: pkg-types: 1.1.3 ufo: 1.5.4 + module-details-from-path@1.0.3: {} + monaco-editor@0.38.0: {} mongodb-connection-string-url@2.6.0: @@ -16722,7 +17848,7 @@ snapshots: dependencies: async-mutex: 0.4.1 camelcase: 6.3.0 - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 find-cache-dir: 3.3.2 follow-redirects: 1.15.6(debug@4.3.6) https-proxy-agent: 7.0.5 @@ -16795,7 +17921,7 @@ snapshots: mquery@4.0.3: dependencies: - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -16803,7 +17929,8 @@ snapshots: mrmime@2.0.0: {} - ms@2.0.0: {} + ms@2.0.0: + optional: true ms@2.1.2: {} @@ -16817,15 +17944,18 @@ snapshots: natural-compare@1.4.0: {} - negotiator@0.6.3: {} + negotiator@0.6.3: + optional: true + + neo-async@2.6.2: {} new-find-package-json@2.0.0: dependencies: - debug: 4.3.6(supports-color@5.5.0) + debug: 4.3.6 transitivePeerDependencies: - supports-color - next@15.0.0-canary.173(@babel/core@7.25.2)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): + next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): dependencies: '@next/env': 15.0.0-canary.173 '@swc/counter': 0.1.3 @@ -16846,6 +17976,7 @@ snapshots: '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 '@next/swc-win32-x64-msvc': 15.0.0-canary.173 + '@opentelemetry/api': 1.9.0 '@playwright/test': 1.46.0 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 sass: 1.77.4 @@ -16854,7 +17985,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.0.0-canary.173(@babel/core@7.25.2)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4): + next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4): dependencies: '@next/env': 15.0.0-canary.173 '@swc/counter': 0.1.3 @@ -16875,6 +18006,7 @@ snapshots: '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 '@next/swc-win32-x64-msvc': 15.0.0-canary.173 + '@opentelemetry/api': 1.9.0 '@playwright/test': 1.46.0 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 sass: 1.77.4 @@ -16883,7 +18015,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.0.0-canary.173(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): + next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): dependencies: '@next/env': 15.0.0-canary.173 '@swc/counter': 0.1.3 @@ -16904,6 +18036,7 @@ snapshots: '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 '@next/swc-win32-x64-msvc': 15.0.0-canary.173 + '@opentelemetry/api': 1.9.0 '@playwright/test': 1.46.0 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 sass: 1.77.4 @@ -16949,19 +18082,6 @@ snapshots: nodemailer@6.9.10: {} - nodemon@3.0.3: - dependencies: - chokidar: 3.6.0 - debug: 4.3.6(supports-color@5.5.0) - ignore-by-default: 1.0.1 - minimatch: 3.1.2 - pstree.remy: 1.1.8 - semver: 7.6.3 - simple-update-notifier: 2.0.0 - supports-color: 5.5.0 - touch: 3.1.1 - undefsafe: 2.0.5 - noms@0.0.0: dependencies: inherits: 2.0.4 @@ -17046,6 +18166,7 @@ snapshots: on-finished@2.4.1: dependencies: ee-first: 1.1.1 + optional: true once@1.4.0: dependencies: @@ -17162,7 +18283,8 @@ snapshots: leac: 0.6.0 peberminta: 0.8.0 - parseurl@1.3.3: {} + parseurl@1.3.3: + optional: true path-exists@4.0.0: {} @@ -17181,7 +18303,8 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.7: {} + path-to-regexp@0.1.7: + optional: true path-to-regexp@6.2.2: {} @@ -17406,6 +18529,8 @@ snapshots: process@0.11.10: {} + progress@2.0.3: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -17423,6 +18548,7 @@ snapshots: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 + optional: true proxy-from-env@1.1.0: {} @@ -17430,8 +18556,6 @@ snapshots: psl@1.9.0: {} - pstree.remy@1.1.8: {} - pump@3.0.0: dependencies: end-of-stream: 1.4.4 @@ -17446,6 +18570,7 @@ snapshots: qs@6.11.0: dependencies: side-channel: 1.0.6 + optional: true qs@6.13.0: dependencies: @@ -17465,6 +18590,10 @@ snapshots: quick-lru@5.1.1: {} + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + range-parser@1.2.1: {} raw-body@2.5.2: @@ -17473,6 +18602,7 @@ snapshots: http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 + optional: true rc9@2.1.2: dependencies: @@ -17685,6 +18815,14 @@ snapshots: require-from-string@2.0.2: {} + require-in-the-middle@7.4.0: + dependencies: + debug: 4.3.6 + module-details-from-path: 1.0.3 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + requireindex@1.2.0: {} requires-port@1.0.0: {} @@ -17754,6 +18892,10 @@ snapshots: dependencies: glob: 10.4.5 + rollup@3.29.5: + optionalDependencies: + fsevents: 2.3.3 + run-applescript@5.0.0: dependencies: execa: 5.1.1 @@ -17889,6 +19031,12 @@ snapshots: scheduler@0.25.0-rc-5dcb0097-20240918: {} + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + scmp@2.1.0: {} scroll-into-view-if-needed@2.2.31: @@ -17938,6 +19086,11 @@ snapshots: statuses: 2.0.1 transitivePeerDependencies: - supports-color + optional: true + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 serve-static@1.15.0: dependencies: @@ -17947,6 +19100,7 @@ snapshots: send: 0.18.0 transitivePeerDependencies: - supports-color + optional: true server-only@0.0.1: {} @@ -17966,7 +19120,8 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - setprototypeof@1.2.0: {} + setprototypeof@1.2.0: + optional: true sharp@0.32.6: dependencies: @@ -18024,6 +19179,8 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 + shimmer@1.2.1: {} + short-unique-id@5.2.0: {} side-channel@1.0.6: @@ -18051,10 +19208,6 @@ snapshots: dependencies: is-arrayish: 0.3.2 - simple-update-notifier@2.0.0: - dependencies: - semver: 7.6.3 - simple-wcswidth@1.0.1: {} sirv@2.0.4: @@ -18189,9 +19342,14 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stacktrace-parser@0.1.10: + dependencies: + type-fest: 0.7.1 + state-local@1.0.7: {} - statuses@2.0.1: {} + statuses@2.0.1: + optional: true std-env@3.7.0: {} @@ -18365,6 +19523,8 @@ snapshots: tabbable@6.2.0: {} + tapable@2.2.1: {} + tar-fs@2.1.1: dependencies: chownr: 1.1.4 @@ -18438,6 +19598,24 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 + terser-webpack-plugin@5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.34.1 + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) + optionalDependencies: + '@swc/core': 1.7.10(@swc/helpers@0.5.13) + + terser@5.34.1: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -18483,7 +19661,8 @@ snapshots: dependencies: to-no-case: 1.0.2 - toidentifier@1.0.1: {} + toidentifier@1.0.1: + optional: true token-types@5.0.1: dependencies: @@ -18497,8 +19676,6 @@ snapshots: totalist@3.0.1: {} - touch@3.1.1: {} - tough-cookie@4.1.4: dependencies: psl: 1.9.0 @@ -18610,12 +19787,15 @@ snapshots: type-fest@0.21.3: {} + type-fest@0.7.1: {} + type-fest@3.13.0: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 + optional: true typed-array-buffer@1.0.2: dependencies: @@ -18681,8 +19861,6 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undefsafe@2.0.5: {} - undici-types@6.19.8: {} undici@5.28.4: @@ -18710,7 +19888,15 @@ snapshots: universalify@2.0.1: {} - unpipe@1.0.0: {} + unpipe@1.0.0: + optional: true + + unplugin@1.0.1: + dependencies: + acorn: 8.12.1 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 untildify@4.0.0: {} @@ -18720,7 +19906,7 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 - uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): + uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): dependencies: '@effect/schema': 0.68.12(effect@3.4.5) '@uploadthing/mime-types': 0.2.10 @@ -18730,7 +19916,7 @@ snapshots: std-env: 3.7.0 optionalDependencies: express: 4.19.2 - next: 15.0.0-canary.173(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) uri-js@4.4.1: dependencies: @@ -18760,7 +19946,8 @@ snapshots: util-deprecate@1.0.2: {} - utils-merge@1.0.1: {} + utils-merge@1.0.1: + optional: true uuid@10.0.0: {} @@ -18778,7 +19965,8 @@ snapshots: varint@6.0.0: {} - vary@1.1.2: {} + vary@1.1.2: + optional: true vue@3.4.37(typescript@5.6.2): dependencies: @@ -18798,6 +19986,11 @@ snapshots: dependencies: makeerror: 1.0.12 + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} @@ -18823,6 +20016,40 @@ snapshots: - bufferutil - utf-8-validate + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.5.0: {} + + webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)): + dependencies: + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.23.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 diff --git a/sentry.client.config.ts b/sentry.client.config.ts new file mode 100644 index 0000000000..2e6cd580d0 --- /dev/null +++ b/sentry.client.config.ts @@ -0,0 +1,26 @@ +import * as Sentry from '@sentry/nextjs' + +const dsn = process.env.NEXT_PUBLIC_SENTRY_DSN + +Sentry.init({ + dsn, + // Replay may only be enabled for the client-side + integrations: [Sentry.replayIntegration()], + + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for tracing. + // We recommend adjusting this value in production + tracesSampleRate: 1.0, + + // Capture Replay for 10% of all sessions, + // plus for 100% of sessions with an error + enabled: !!dsn, + replaysOnErrorSampleRate: 1.0, + replaysSessionSampleRate: 0.1, + + // ... + + // Note: if you want to override the automatic release value, do not set a + // `release` value here - use the environment variable `SENTRY_RELEASE`, so + // that it will also get attached to your source maps +}) diff --git a/sentry.server.config.ts b/sentry.server.config.ts new file mode 100644 index 0000000000..0271baa468 --- /dev/null +++ b/sentry.server.config.ts @@ -0,0 +1,18 @@ +import * as Sentry from '@sentry/nextjs' +const dsn = process.env.NEXT_PUBLIC_SENTRY_DSN + +const enabled = !!dsn + +Sentry.init({ + dsn, + enabled, + skipOpenTelemetrySetup: true, + tracesSampleRate: 1.0, +}) + +if (enabled) { + // eslint-disable-next-line no-console + console.log('Sentry inited') +} + +export {} diff --git a/test/package.json b/test/package.json index 23185e6b38..34f56bd24d 100644 --- a/test/package.json +++ b/test/package.json @@ -56,6 +56,7 @@ "@payloadcms/storage-vercel-blob": "workspace:*", "@payloadcms/translations": "workspace:*", "@payloadcms/ui": "workspace:*", + "@sentry/nextjs": "^8.33.1", "@sentry/react": "^7.77.0", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", diff --git a/test/plugin-sentry/components.tsx b/test/plugin-sentry/TestErrors.tsx similarity index 83% rename from test/plugin-sentry/components.tsx rename to test/plugin-sentry/TestErrors.tsx index 8f00a44181..a244808719 100644 --- a/test/plugin-sentry/components.tsx +++ b/test/plugin-sentry/TestErrors.tsx @@ -1,7 +1,10 @@ 'use client' -import * as Sentry from '@sentry/react' -import React from 'react' -export const testErrors = () => { + +import { useState } from 'react' + +export const TestErrors = () => { + const [throwClientSide, setThrowClientSide] = useState(false) + const notFound = async () => { const req = await fetch('http://localhost:3000/api/users/notFound', { method: 'GET', @@ -60,8 +63,12 @@ export const testErrors = () => { }) } + const ThrowClientSide = () => { + throw new Error('client side error') + } + return ( - + <>

Test Errors

+ + {throwClientSide && }
- + ) } diff --git a/test/plugin-sentry/config.ts b/test/plugin-sentry/config.ts index beb811903f..4f902b6305 100644 --- a/test/plugin-sentry/config.ts +++ b/test/plugin-sentry/config.ts @@ -3,6 +3,8 @@ import path from 'path' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) import { sentryPlugin } from '@payloadcms/plugin-sentry' +import * as Sentry from '@sentry/nextjs' +import { APIError } from 'payload' import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js' import { devUser } from '../credentials.js' @@ -12,7 +14,7 @@ import { Users } from './collections/Users.js' export default buildConfigWithDefaults({ admin: { components: { - beforeDashboard: ['/components.js#testErrors'], + beforeDashboard: ['/TestErrors.js#TestErrors'], }, importMap: { baseDir: path.resolve(dirname), @@ -29,17 +31,21 @@ export default buildConfigWithDefaults({ }, }) }, + endpoints: [ + { + path: '/exception', + handler: () => { + throw new APIError('Test Plugin-Sentry Exception', 500) + }, + method: 'get', + }, + ], plugins: [ sentryPlugin({ - dsn: 'https://61edebe5ee6d4d38a9d6459c7323d777@o4505289711681536.ingest.sentry.io/4505357688242176', + Sentry, options: { + debug: true, captureErrors: [400, 403, 404], - init: { - debug: true, - }, - requestHandler: { - serverName: false, - }, }, }), ], diff --git a/test/plugin-sentry/payload-types.ts b/test/plugin-sentry/payload-types.ts index 70c5e03ee4..22ba068560 100644 --- a/test/plugin-sentry/payload-types.ts +++ b/test/plugin-sentry/payload-types.ts @@ -13,6 +13,7 @@ export interface Config { collections: { posts: Post; users: User; + 'payload-locked-documents': PayloadLockedDocument; 'payload-preferences': PayloadPreference; 'payload-migrations': PayloadMigration; }; @@ -70,6 +71,29 @@ export interface User { lockUntil?: string | null; password?: string | null; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents". + */ +export interface PayloadLockedDocument { + id: string; + document?: + | ({ + relationTo: 'posts'; + value: string | Post; + } | null) + | ({ + relationTo: 'users'; + value: string | User; + } | null); + globalSlug?: string | null; + user: { + relationTo: 'users'; + value: string | User; + }; + updatedAt: string; + createdAt: string; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-preferences". diff --git a/tsconfig.json b/tsconfig.json index ae27597fb0..d28ddbca63 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -78,6 +78,9 @@ "@payloadcms/plugin-seo/client": [ "./packages/plugin-seo/src/exports/client.ts" ], + "@payloadcms/plugin-sentry/client": [ + "./packages/plugin-sentry/src/exports/client.ts" + ], "@payloadcms/plugin-stripe/client": [ "./packages/plugin-stripe/src/exports/client.ts" ], @@ -171,6 +174,9 @@ "app", "next-env.d.ts", ".next/types/**/*.ts", - "scripts/**/*.ts" + "scripts/**/*.ts", + "instrumentation.ts", + "sentry.server.config.ts", + "sentry.client.config.ts" ] } From 4343b970ebbd5d0ac452e57a9ef1a662f5ca4bc5 Mon Sep 17 00:00:00 2001 From: Patrik Date: Wed, 9 Oct 2024 14:32:48 -0400 Subject: [PATCH 016/110] chore(examples): adds optional tenant-based cookie handling by domain in `multi-tenant` example (#8490) - Adds optional tenant-based cookie handling based by domain (commented out to leave functionality out by default) - Removes 2.0 multi-tenant example - Updates `examples/multi-tenant-single-domain` --> `examples/multi-tenant` --- .../multi-tenant-single-domain/.env.example | 3 - .../multi-tenant-single-domain/.eslintrc.cjs | 4 - .../multi-tenant-single-domain/.gitignore | 5 - examples/multi-tenant-single-domain/README.md | 79 - .../multi-tenant-single-domain/package.json | 55 - .../src/collections/Pages/index.ts | 44 - .../src/collections/Tenants/index.ts | 43 - .../src/collections/Users/index.ts | 67 - .../src/payload-types.ts | 142 - .../src/payload.config.ts | 33 - .../multi-tenant-single-domain/tsconfig.json | 47 - examples/multi-tenant-single-domain/yarn.lock | 6243 ------------ examples/multi-tenant/.env.example | 2 - examples/multi-tenant/.npmrc | 1 - .../.swcrc | 0 examples/multi-tenant/README.md | 87 +- .../next-env.d.ts | 2 +- .../next.config.mjs | 0 examples/multi-tenant/nodemon.json | 5 - examples/multi-tenant/package.json | 82 +- examples/multi-tenant/pnpm-lock.yaml | 7316 ++++++++++++++ examples/multi-tenant/src/access/anyone.ts | 3 - .../src/access/isSuperAdmin.ts | 4 +- .../multi-tenant/src/access/superAdmins.ts | 9 - .../src/app/(app)/[tenant]/[...slug]/page.tsx | 6 +- .../src/app/(app)/[tenant]/login/page.tsx | 0 .../src/app/(app)/[tenant]/page.tsx | 0 .../src/app/(app)/index.scss | 0 .../src/app/(app)/layout.tsx | 0 .../admin/[[...segments]]/not-found.tsx | 0 .../(payload)/admin/[[...segments]]/page.tsx | 0 .../src/app/(payload)/admin/importMap.js | 0 .../src/app/(payload)/api/[...slug]/route.ts | 0 .../(payload)/api/graphql-playground/route.ts | 0 .../src/app/(payload)/api/graphql/route.ts | 0 .../src/app/(payload)/custom.scss | 0 .../src/app/(payload)/layout.tsx | 0 .../src/app/components/Login/client.page.tsx | 2 +- .../src/app/components/Login/index.scss | 0 .../src/app/components/RenderPage/index.tsx | 0 .../src/collections/Pages/access/byTenant.ts | 8 +- .../Pages/access/externalReadAccess.ts | 0 .../Pages/access/lastLoggedInTenant.ts | 4 - .../src/collections/Pages/access/loggedIn.ts | 5 - .../collections/Pages/access/tenantAdmins.ts | 21 - .../src/collections/Pages/access/tenants.ts | 13 - .../Pages/hooks/ensureUniqueSlug.ts | 2 +- .../src/collections/Pages/hooks/formatSlug.ts | 27 - .../src/collections/Pages/index.ts | 47 +- .../collections/Tenants/access/byTenant.ts | 12 +- .../src/collections/Tenants/access/read.ts | 2 +- .../Tenants/access/tenantAdmins.ts | 21 - .../src/collections/Tenants/index.ts | 56 +- .../collections/Users/access/adminsAndSelf.ts | 54 - .../src/collections/Users/access/create.ts | 6 +- .../Users/access/isAccessingSelf.ts | 2 +- .../Users/access/isSuperAdminOrSelf.ts | 0 .../src/collections/Users/access/read.ts | 8 +- .../collections/Users/access/tenantAdmins.ts | 19 - .../Users/access/updateAndDelete.ts | 4 +- .../Users/endpoints/externalUsersLogin.ts | 0 .../Users/hooks/ensureUniqueUsername.ts | 2 +- .../Users/hooks/loginAfterCreate.ts | 29 - .../Users/hooks/recordLastLoggedInTenant.ts | 34 - .../Users/hooks/setCookieBasedOnDomain.ts | 40 + .../src/collections/Users/index.ts | 110 +- .../Users/utilities/checkTenantRoles.ts | 23 - .../Users/utilities/isSuperOrTenantAdmin.ts | 71 - .../TenantSelector/index.client.tsx | 4 +- .../src/components/TenantSelector/index.scss | 0 .../src/components/TenantSelector/index.tsx | 4 +- examples/multi-tenant/src/dotenv.js | 3 - .../src/fields/TenantField/access/update.ts | 0 .../TenantField/components/Field.client.tsx | 0 .../fields/TenantField/components/Field.tsx | 4 +- .../TenantField/hooks/autofillTenant.ts | 2 +- .../src/fields/TenantField/index.ts | 2 +- examples/multi-tenant/src/fields/link.ts | 145 - .../src/fields/richText/elements.ts | 5 - .../multi-tenant/src/fields/richText/index.ts | 92 - .../src/fields/richText/leaves.ts | 5 - .../src/fields/tenant/access/tenantAdmins.ts | 16 - .../multi-tenant/src/fields/tenant/index.ts | 42 - .../src/migrations/seed.ts | 10 + .../src/mocks/emptyObject.js | 0 examples/multi-tenant/src/payload-types.ts | 215 +- examples/multi-tenant/src/payload.config.ts | 44 +- examples/multi-tenant/src/seed/index.ts | 119 - examples/multi-tenant/src/server.ts | 37 - .../src/utilities/checkUserRoles.ts | 16 - .../multi-tenant/src/utilities/deepMerge.ts | 32 - .../src/utilities/getTenantAccessIDs.ts | 8 +- .../src/utilities/isPayloadAdminPanel.ts | 0 .../src/utilities/isSuperAdmin.ts | 4 - examples/multi-tenant/tsconfig.json | 47 +- examples/multi-tenant/yarn.lock | 8464 ----------------- 96 files changed, 7773 insertions(+), 16451 deletions(-) delete mode 100644 examples/multi-tenant-single-domain/.env.example delete mode 100644 examples/multi-tenant-single-domain/.eslintrc.cjs delete mode 100644 examples/multi-tenant-single-domain/.gitignore delete mode 100644 examples/multi-tenant-single-domain/README.md delete mode 100644 examples/multi-tenant-single-domain/package.json delete mode 100644 examples/multi-tenant-single-domain/src/collections/Pages/index.ts delete mode 100644 examples/multi-tenant-single-domain/src/collections/Tenants/index.ts delete mode 100644 examples/multi-tenant-single-domain/src/collections/Users/index.ts delete mode 100644 examples/multi-tenant-single-domain/src/payload-types.ts delete mode 100644 examples/multi-tenant-single-domain/src/payload.config.ts delete mode 100644 examples/multi-tenant-single-domain/tsconfig.json delete mode 100644 examples/multi-tenant-single-domain/yarn.lock delete mode 100644 examples/multi-tenant/.npmrc rename examples/{multi-tenant-single-domain => multi-tenant}/.swcrc (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/next-env.d.ts (53%) rename examples/{multi-tenant-single-domain => multi-tenant}/next.config.mjs (100%) delete mode 100644 examples/multi-tenant/nodemon.json create mode 100644 examples/multi-tenant/pnpm-lock.yaml delete mode 100644 examples/multi-tenant/src/access/anyone.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/access/isSuperAdmin.ts (78%) delete mode 100644 examples/multi-tenant/src/access/superAdmins.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(app)/[tenant]/[...slug]/page.tsx (95%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(app)/[tenant]/login/page.tsx (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(app)/[tenant]/page.tsx (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(app)/index.scss (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(app)/layout.tsx (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(payload)/admin/[[...segments]]/not-found.tsx (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(payload)/admin/[[...segments]]/page.tsx (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(payload)/admin/importMap.js (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(payload)/api/[...slug]/route.ts (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(payload)/api/graphql-playground/route.ts (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(payload)/api/graphql/route.ts (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(payload)/custom.scss (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/(payload)/layout.tsx (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/components/Login/client.page.tsx (99%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/components/Login/index.scss (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/app/components/RenderPage/index.tsx (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Pages/access/byTenant.ts (95%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Pages/access/externalReadAccess.ts (100%) delete mode 100644 examples/multi-tenant/src/collections/Pages/access/lastLoggedInTenant.ts delete mode 100644 examples/multi-tenant/src/collections/Pages/access/loggedIn.ts delete mode 100644 examples/multi-tenant/src/collections/Pages/access/tenantAdmins.ts delete mode 100644 examples/multi-tenant/src/collections/Pages/access/tenants.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Pages/hooks/ensureUniqueSlug.ts (97%) delete mode 100644 examples/multi-tenant/src/collections/Pages/hooks/formatSlug.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Tenants/access/byTenant.ts (89%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Tenants/access/read.ts (94%) delete mode 100644 examples/multi-tenant/src/collections/Tenants/access/tenantAdmins.ts delete mode 100644 examples/multi-tenant/src/collections/Users/access/adminsAndSelf.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Users/access/create.ts (76%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Users/access/isAccessingSelf.ts (79%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Users/access/isSuperAdminOrSelf.ts (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Users/access/read.ts (94%) delete mode 100644 examples/multi-tenant/src/collections/Users/access/tenantAdmins.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Users/access/updateAndDelete.ts (85%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Users/endpoints/externalUsersLogin.ts (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/collections/Users/hooks/ensureUniqueUsername.ts (97%) delete mode 100644 examples/multi-tenant/src/collections/Users/hooks/loginAfterCreate.ts delete mode 100644 examples/multi-tenant/src/collections/Users/hooks/recordLastLoggedInTenant.ts create mode 100644 examples/multi-tenant/src/collections/Users/hooks/setCookieBasedOnDomain.ts delete mode 100644 examples/multi-tenant/src/collections/Users/utilities/checkTenantRoles.ts delete mode 100644 examples/multi-tenant/src/collections/Users/utilities/isSuperOrTenantAdmin.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/components/TenantSelector/index.client.tsx (97%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/components/TenantSelector/index.scss (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/components/TenantSelector/index.tsx (71%) delete mode 100644 examples/multi-tenant/src/dotenv.js rename examples/{multi-tenant-single-domain => multi-tenant}/src/fields/TenantField/access/update.ts (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/fields/TenantField/components/Field.client.tsx (100%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/fields/TenantField/components/Field.tsx (90%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/fields/TenantField/hooks/autofillTenant.ts (87%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/fields/TenantField/index.ts (93%) delete mode 100644 examples/multi-tenant/src/fields/link.ts delete mode 100644 examples/multi-tenant/src/fields/richText/elements.ts delete mode 100644 examples/multi-tenant/src/fields/richText/index.ts delete mode 100644 examples/multi-tenant/src/fields/richText/leaves.ts delete mode 100644 examples/multi-tenant/src/fields/tenant/access/tenantAdmins.ts delete mode 100644 examples/multi-tenant/src/fields/tenant/index.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/migrations/seed.ts (85%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/mocks/emptyObject.js (100%) delete mode 100644 examples/multi-tenant/src/seed/index.ts delete mode 100644 examples/multi-tenant/src/server.ts delete mode 100644 examples/multi-tenant/src/utilities/checkUserRoles.ts delete mode 100644 examples/multi-tenant/src/utilities/deepMerge.ts rename examples/{multi-tenant-single-domain => multi-tenant}/src/utilities/getTenantAccessIDs.ts (74%) rename examples/{multi-tenant-single-domain => multi-tenant}/src/utilities/isPayloadAdminPanel.ts (100%) delete mode 100644 examples/multi-tenant/src/utilities/isSuperAdmin.ts delete mode 100644 examples/multi-tenant/yarn.lock diff --git a/examples/multi-tenant-single-domain/.env.example b/examples/multi-tenant-single-domain/.env.example deleted file mode 100644 index 519d692e0b..0000000000 --- a/examples/multi-tenant-single-domain/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -DATABASE_URI=mongodb://127.0.0.1/payload-example-multi-tenant-single-domain -PAYLOAD_SECRET=PAYLOAD_MULTI_TENANT_EXAMPLE_SECRET_KEY -PAYLOAD_PUBLIC_SERVER_URL=http://localhost:3000 diff --git a/examples/multi-tenant-single-domain/.eslintrc.cjs b/examples/multi-tenant-single-domain/.eslintrc.cjs deleted file mode 100644 index b69f00e730..0000000000 --- a/examples/multi-tenant-single-domain/.eslintrc.cjs +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ['@payloadcms'], -} diff --git a/examples/multi-tenant-single-domain/.gitignore b/examples/multi-tenant-single-domain/.gitignore deleted file mode 100644 index d1247e70cc..0000000000 --- a/examples/multi-tenant-single-domain/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -build -dist -node_modules -package-lock.json -.env diff --git a/examples/multi-tenant-single-domain/README.md b/examples/multi-tenant-single-domain/README.md deleted file mode 100644 index d51957274c..0000000000 --- a/examples/multi-tenant-single-domain/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# Payload Multi-Tenant Example (Single Domain) - -This example demonstrates how to achieve a multi-tenancy in [Payload](https://github.com/payloadcms/payload) on a single domain. Tenants are separated by a `Tenants` collection. - -## Quick Start - -To spin up this example locally, follow these steps: - -1. Clone this repo -1. `cd` into this directory and run `pnpm i --ignore-workspace`\*, `yarn`, or `npm install` - - > \*If you are running using pnpm within the Payload Monorepo, the `--ignore-workspace` flag is needed so that pnpm generates a lockfile in this example's directory despite the fact that one exists in root. - -1. `pnpm dev`, `yarn dev` or `npm run dev` to start the server - - Press `y` when prompted to seed the database -1. `open http://localhost:3000` to access the home page -1. `open http://localhost:3000/admin` to access the admin panel - - Login with email `demo@payloadcms.com` and password `demo` - -## How it works - -A multi-tenant Payload application is a single server that hosts multiple "tenants". Examples of tenants may be your agency's clients, your business conglomerate's organizations, or your SaaS customers. - -Each tenant has its own set of users, pages, and other data that is scoped to that tenant. This means that your application will be shared across tenants but the data will be scoped to each tenant. - -### Collections - -See the [Collections](https://payloadcms.com/docs/configuration/collections) docs for details on how to extend any of this functionality. - -- #### Users - - The `users` collection is auth-enabled and encompass both app-wide and tenant-scoped users based on the value of their `roles` and `tenants` fields. Users with the role `super-admin` can manage your entire application, while users with the _tenant role_ of `admin` have limited access to the platform and can manage only the tenant(s) they are assigned to, see [Tenants](#tenants) for more details. - - For additional help with authentication, see the official [Auth Example](https://github.com/payloadcms/payload/tree/main/examples/auth/cms#readme) or the [Authentication](https://payloadcms.com/docs/authentication/overview#authentication-overview) docs. - -- #### Tenants - - A `tenants` collection is used to achieve tenant-based access control. Each user is assigned an array of `tenants` which includes a relationship to a `tenant` and their `roles` within that tenant. You can then scope any document within your application to any of your tenants using a simple [relationship](https://payloadcms.com/docs/fields/relationship) field on the `users` or `pages` collections, or any other collection that your application needs. The value of this field is used to filter documents in the admin panel and API to ensure that users can only access documents that belong to their tenant and are within their role. See [Access Control](#access-control) for more details. - - For more details on how to extend this functionality, see the [Payload Access Control](https://payloadcms.com/docs/access-control/overview) docs. - -- #### Pages - - Each page is assigned a `tenant` which is used to control access and scope API requests. Pages that are created by tenants are automatically assigned that tenant based on that user's `lastLoggedInTenant` field. - -## Access control - -Basic role-based access control is setup to determine what users can and cannot do based on their roles, which are: - -- `super-admin`: They can access the Payload admin panel to manage your multi-tenant application. They can see all tenants and make all operations. -- `user`: They can only access the Payload admin panel if they are a tenant-admin, in which case they have a limited access to operations based on their tenant (see below). - -This applies to each collection in the following ways: - -- `users`: Only super-admins, tenant-admins, and the user themselves can access their profile. Anyone can create a user, but only these admins can delete users. See [Users](#users) for more details. -- `tenants`: Only super-admins and tenant-admins can read, create, update, or delete tenants. See [Tenants](#tenants) for more details. -- `pages`: Everyone can access pages, but only super-admins and tenant-admins can create, update, or delete them. - -When a user logs in, a `lastLoggedInTenant` field is saved to their profile. This is done by reading the value of `req.headers.host`, querying for a tenant with a matching `domain`, and verifying that the user is a member of that tenant. This field is then used to automatically assign the tenant to any documents that the user creates, such as pages. Super-admins can also use this field to browse the admin panel as a specific tenant. - -> If you have versions and drafts enabled on your pages, you will need to add additional read access control condition to check the user's tenants that prevents them from accessing draft documents of other tenants. - -For more details on how to extend this functionality, see the [Payload Access Control](https://payloadcms.com/docs/access-control/overview#access-control) docs. - -## CORS - -This multi-tenant setup requires an open CORS policy. Since each tenant contains a dynamic list of domains, there's no way to know specifically which domains to whitelist at runtime without significant performance implications. This also means that the `serverURL` is not set, as this scopes all requests to a single domain. - -Alternatively, if you know the domains of your tenants ahead of time and these values won't change often, you could simply remove the `domains` field altogether and instead use static values. - -For more details on this, see the [CORS](https://payloadcms.com/docs/production/preventing-abuse#cross-origin-resource-sharing-cors) docs. - -## Front-end - -The frontend is scaffolded out in this example directory. You can view the code for rendering pages at `/src/app/(app)/[tenant]/[...slug]/page.tsx`. This is a starter template, you may need to adjust the app to better fit your needs. - -## Questions - -If you have any issues or questions, reach out to us on [Discord](https://discord.com/invite/payload) or start a [GitHub discussion](https://github.com/payloadcms/payload/discussions). diff --git a/examples/multi-tenant-single-domain/package.json b/examples/multi-tenant-single-domain/package.json deleted file mode 100644 index 200910ef75..0000000000 --- a/examples/multi-tenant-single-domain/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "multi-tenant-single-domain", - "version": "1.0.0", - "description": "An example of a multi tenant application, using a single domain", - "license": "MIT", - "type": "module", - "scripts": { - "_dev": "cross-env NODE_OPTIONS=--no-deprecation next dev", - "build": "cross-env NODE_OPTIONS=--no-deprecation next build", - "dev": "cross-env NODE_OPTIONS=--no-deprecation && pnpm seed && next dev --turbo", - "generate:schema": "payload-graphql generate:schema", - "generate:types": "payload generate:types", - "payload": "cross-env NODE_OPTIONS=--no-deprecation payload", - "seed": "npm run payload migrate:fresh", - "start": "cross-env NODE_OPTIONS=--no-deprecation next start" - }, - "dependencies": { - "@payloadcms/db-mongodb": "3.0.0-beta.58", - "@payloadcms/next": "3.0.0-beta.58", - "@payloadcms/richtext-lexical": "3.0.0-beta.58", - "@payloadcms/ui": "3.0.0-beta.58", - "cross-env": "^7.0.3", - "dotenv": "^8.2.0", - "graphql": "^16.9.0", - "next": "15.0.0-rc.0", - "payload": "3.0.0-beta.58", - "qs": "^6.12.1", - "react": "19.0.0-rc-f994737d14-20240522", - "react-dom": "19.0.0-rc-f994737d14-20240522", - "sharp": "0.32.6" - }, - "devDependencies": { - "@payloadcms/graphql": "3.0.0-beta.58", - "@swc/core": "^1.6.13", - "@types/react": "npm:types-react@19.0.0-beta.2", - "@types/react-dom": "npm:types-react-dom@19.0.0-beta.2", - "eslint": "^8.57.0", - "eslint-config-next": "15.0.0-rc.0", - "tsx": "^4.16.2", - "typescript": "5.5.2" - }, - "engines": { - "node": "^18.20.2 || >=20.9.0" - }, - "pnpm": { - "overrides": { - "@types/react": "npm:types-react@19.0.0-beta.2", - "@types/react-dom": "npm:types-react-dom@19.0.0-beta.2" - } - }, - "overrides": { - "@types/react": "npm:types-react@19.0.0-beta.2", - "@types/react-dom": "npm:types-react-dom@19.0.0-beta.2" - } -} diff --git a/examples/multi-tenant-single-domain/src/collections/Pages/index.ts b/examples/multi-tenant-single-domain/src/collections/Pages/index.ts deleted file mode 100644 index ecfabfb632..0000000000 --- a/examples/multi-tenant-single-domain/src/collections/Pages/index.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { CollectionConfig } from 'payload' - -import { tenantField } from '../../fields/TenantField' -import { isPayloadAdminPanel } from '../../utilities/isPayloadAdminPanel' -import { canMutatePage, filterByTenantRead } from './access/byTenant' -import { externalReadAccess } from './access/externalReadAccess' -import { ensureUniqueSlug } from './hooks/ensureUniqueSlug' - -export const Pages: CollectionConfig = { - slug: 'pages', - access: { - create: canMutatePage, - delete: canMutatePage, - read: (args) => { - // when viewing pages inside the admin panel - // restrict access to the ones your user has access to - if (isPayloadAdminPanel(args.req)) return filterByTenantRead(args) - - // when viewing pages from outside the admin panel - // you should be able to see your tenants and public tenants - return externalReadAccess(args) - }, - update: canMutatePage, - }, - admin: { - useAsTitle: 'title', - }, - fields: [ - { - name: 'title', - type: 'text', - }, - { - name: 'slug', - type: 'text', - defaultValue: 'home', - hooks: { - beforeValidate: [ensureUniqueSlug], - }, - index: true, - }, - tenantField, - ], -} diff --git a/examples/multi-tenant-single-domain/src/collections/Tenants/index.ts b/examples/multi-tenant-single-domain/src/collections/Tenants/index.ts deleted file mode 100644 index a65fcde329..0000000000 --- a/examples/multi-tenant-single-domain/src/collections/Tenants/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { CollectionConfig } from 'payload' - -import { isSuperAdmin } from '../../access/isSuperAdmin' -import { canMutateTenant, filterByTenantRead } from './access/byTenant' - -export const Tenants: CollectionConfig = { - slug: 'tenants', - access: { - create: isSuperAdmin, - delete: canMutateTenant, - read: filterByTenantRead, - update: canMutateTenant, - }, - admin: { - useAsTitle: 'name', - }, - fields: [ - { - name: 'name', - type: 'text', - required: true, - }, - { - name: 'slug', - type: 'text', - admin: { - description: 'Used for url paths, example: /tenant-slug/page-slug', - }, - index: true, - required: true, - }, - { - name: 'public', - type: 'checkbox', - admin: { - description: 'If checked, logging in is not required.', - position: 'sidebar', - }, - defaultValue: false, - index: true, - }, - ], -} diff --git a/examples/multi-tenant-single-domain/src/collections/Users/index.ts b/examples/multi-tenant-single-domain/src/collections/Users/index.ts deleted file mode 100644 index c6393ede83..0000000000 --- a/examples/multi-tenant-single-domain/src/collections/Users/index.ts +++ /dev/null @@ -1,67 +0,0 @@ -import type { CollectionConfig } from 'payload' - -import type { User } from '../../payload-types' - -import { getTenantAdminTenantAccessIDs } from '../../utilities/getTenantAccessIDs' -import { createAccess } from './access/create' -import { readAccess } from './access/read' -import { updateAndDeleteAccess } from './access/updateAndDelete' -import { externalUsersLogin } from './endpoints/externalUsersLogin' -import { ensureUniqueUsername } from './hooks/ensureUniqueUsername' - -const Users: CollectionConfig = { - slug: 'users', - access: { - create: createAccess, - delete: updateAndDeleteAccess, - read: readAccess, - update: updateAndDeleteAccess, - }, - admin: { - useAsTitle: 'email', - }, - auth: true, - endpoints: [externalUsersLogin], - fields: [ - { - name: 'roles', - type: 'select', - defaultValue: ['user'], - hasMany: true, - options: ['super-admin', 'user'], - }, - { - name: 'tenants', - type: 'array', - fields: [ - { - name: 'tenant', - type: 'relationship', - index: true, - relationTo: 'tenants', - required: true, - saveToJWT: true, - }, - { - name: 'roles', - type: 'select', - defaultValue: ['tenant-viewer'], - hasMany: true, - options: ['tenant-admin', 'tenant-viewer'], - required: true, - }, - ], - saveToJWT: true, - }, - { - name: 'username', - type: 'text', - hooks: { - beforeValidate: [ensureUniqueUsername], - }, - index: true, - }, - ], -} - -export default Users diff --git a/examples/multi-tenant-single-domain/src/payload-types.ts b/examples/multi-tenant-single-domain/src/payload-types.ts deleted file mode 100644 index 6e0e98999f..0000000000 --- a/examples/multi-tenant-single-domain/src/payload-types.ts +++ /dev/null @@ -1,142 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * This file was automatically generated by Payload. - * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, - * and re-run `payload generate:types` to regenerate this file. - */ - -export interface Config { - auth: { - users: UserAuthOperations; - }; - collections: { - pages: Page; - users: User; - tenants: Tenant; - 'payload-preferences': PayloadPreference; - 'payload-migrations': PayloadMigration; - }; - db: { - defaultIDType: string; - }; - globals: {}; - locale: null; - user: User & { - collection: 'users'; - }; -} -export interface UserAuthOperations { - forgotPassword: { - email: string; - password: string; - }; - login: { - email: string; - password: string; - }; - registerFirstUser: { - email: string; - password: string; - }; - unlock: { - email: string; - password: string; - }; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "pages". - */ -export interface Page { - id: string; - title?: string | null; - slug?: string | null; - tenant: string | Tenant; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "tenants". - */ -export interface Tenant { - id: string; - name: string; - slug: string; - public?: boolean | null; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "users". - */ -export interface User { - id: string; - roles?: ('super-admin' | 'user')[] | null; - tenants?: - | { - tenant: string | Tenant; - roles: ('tenant-admin' | 'tenant-viewer')[]; - id?: string | null; - }[] - | null; - username?: string | null; - updatedAt: string; - createdAt: string; - email: string; - resetPasswordToken?: string | null; - resetPasswordExpiration?: string | null; - salt?: string | null; - hash?: string | null; - loginAttempts?: number | null; - lockUntil?: string | null; - password?: string | null; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-preferences". - */ -export interface PayloadPreference { - id: string; - user: { - relationTo: 'users'; - value: string | User; - }; - key?: string | null; - value?: - | { - [k: string]: unknown; - } - | unknown[] - | string - | number - | boolean - | null; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "payload-migrations". - */ -export interface PayloadMigration { - id: string; - name?: string | null; - batch?: number | null; - updatedAt: string; - createdAt: string; -} -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "auth". - */ -export interface Auth { - [k: string]: unknown; -} - - -declare module 'payload' { - export interface GeneratedTypes extends Config {} -} \ No newline at end of file diff --git a/examples/multi-tenant-single-domain/src/payload.config.ts b/examples/multi-tenant-single-domain/src/payload.config.ts deleted file mode 100644 index c872d8bc68..0000000000 --- a/examples/multi-tenant-single-domain/src/payload.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { mongooseAdapter } from '@payloadcms/db-mongodb' -import { lexicalEditor } from '@payloadcms/richtext-lexical' -import path from 'path' -import { buildConfig } from 'payload' -import { fileURLToPath } from 'url' - -import { Pages } from './collections/Pages' -import { Tenants } from './collections/Tenants' -import Users from './collections/Users' - -const filename = fileURLToPath(import.meta.url) -const dirname = path.dirname(filename) - -export default buildConfig({ - admin: { - components: { - afterNavLinks: ['@/components/TenantSelector#TenantSelectorRSC'], - }, - user: 'users', - }, - collections: [Pages, Users, Tenants], - db: mongooseAdapter({ - url: process.env.DATABASE_URI as string, - }), - editor: lexicalEditor({}), - graphQL: { - schemaOutputFile: path.resolve(dirname, 'generated-schema.graphql'), - }, - secret: process.env.PAYLOAD_SECRET as string, - typescript: { - outputFile: path.resolve(dirname, 'payload-types.ts'), - }, -}) diff --git a/examples/multi-tenant-single-domain/tsconfig.json b/examples/multi-tenant-single-domain/tsconfig.json deleted file mode 100644 index c4b132d04c..0000000000 --- a/examples/multi-tenant-single-domain/tsconfig.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": [ - "./src/*" - ], - "@payload-config": [ - "src/payload.config.ts" - ], - "@payload-types": [ - "src/payload-types.ts" - ] - }, - "target": "ES2017" - }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - ".next/types/**/*.ts" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/examples/multi-tenant-single-domain/yarn.lock b/examples/multi-tenant-single-domain/yarn.lock deleted file mode 100644 index dd42a09cc0..0000000000 --- a/examples/multi-tenant-single-domain/yarn.lock +++ /dev/null @@ -1,6243 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-crypto/sha256-browser@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" - integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== - dependencies: - "@aws-crypto/sha256-js" "^5.2.0" - "@aws-crypto/supports-web-crypto" "^5.2.0" - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" - integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/supports-web-crypto@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" - integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== - dependencies: - tslib "^2.6.2" - -"@aws-crypto/util@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" - integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-cognito-identity@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.614.0.tgz#6b1556d9fdf2874828733013c8aa73d04ec6a236" - integrity sha512-nydN0TVIMkYhYcCABkCcllmhLakzD4aN8r6ROWWG83+XFtBGgnvY2cxj2uFx+Vp7THAVnG2r6GVGKzEwvAH3pA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.614.0" - "@aws-sdk/client-sts" "3.614.0" - "@aws-sdk/core" "3.614.0" - "@aws-sdk/credential-provider-node" "3.614.0" - "@aws-sdk/middleware-host-header" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.614.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.2.6" - "@smithy/fetch-http-handler" "^3.2.1" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.3" - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.9" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.2" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.9" - "@smithy/util-defaults-mode-node" "^3.0.9" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.614.0.tgz#61d20af829a17aa15664bcb7a1b4aed165191435" - integrity sha512-BI1NWcpppbHg/28zbUg54dZeckork8BItZIcjls12vxasy+p3iEzrJVG60jcbUTTsk3Qc1tyxNfrdcVqx0y7Ww== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.614.0" - "@aws-sdk/credential-provider-node" "3.614.0" - "@aws-sdk/middleware-host-header" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.614.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.2.6" - "@smithy/fetch-http-handler" "^3.2.1" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.3" - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.9" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.2" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.9" - "@smithy/util-defaults-mode-node" "^3.0.9" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.614.0.tgz#bf578a579c477e41cea61368fef5394f6ccae45a" - integrity sha512-p5pyYaxRzBttjBkqfc8i3K7DzBdTg3ECdVgBo6INIUxfvDy0J8QUE8vNtCgvFIkq+uPw/8M+Eo4zzln7anuO0Q== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.614.0" - "@aws-sdk/middleware-host-header" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.614.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.2.6" - "@smithy/fetch-http-handler" "^3.2.1" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.3" - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.9" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.2" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.9" - "@smithy/util-defaults-mode-node" "^3.0.9" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.614.0.tgz#bb688944e54f147c8093e2d79b618263ee43cb19" - integrity sha512-i6QmaVA1KHHYNnI2VYQy/sc31rLm4+jSp8b/YbQpFnD0w3aXsrEEHHlxek45uSkHb4Nrj1omFBVy/xp1WVYx2Q== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.614.0" - "@aws-sdk/core" "3.614.0" - "@aws-sdk/credential-provider-node" "3.614.0" - "@aws-sdk/middleware-host-header" "3.609.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.609.0" - "@aws-sdk/middleware-user-agent" "3.614.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.2.6" - "@smithy/fetch-http-handler" "^3.2.1" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.3" - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.9" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.2" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.9" - "@smithy/util-defaults-mode-node" "^3.0.9" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.614.0.tgz#7d4ce96cd98f85eb2dd0627586581296b6a26662" - integrity sha512-BUuS5/1YkgmKc4J0bg83XEtMyDHVyqG2QDzfmhYe8gbOIZabUl1FlrFVwhCAthtrrI6MPGTQcERB4BtJKUSplw== - dependencies: - "@smithy/core" "^2.2.6" - "@smithy/protocol-http" "^4.0.3" - "@smithy/signature-v4" "^3.1.2" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - fast-xml-parser "4.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-cognito-identity@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.614.0.tgz#a5793ce802c3568fde945a6bb1d06be43d0aafa9" - integrity sha512-Y89x4RKUlggxtCU07OhQRhvsiBBOzt0ep7OyxnnkhgPrbmY+N4tfMk3sEo02sxetqTuirLz4hRbfxwlsM5scpw== - dependencies: - "@aws-sdk/client-cognito-identity" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz#b3f32e5a8ff8b541e151eadadfb60283aa3d835e" - integrity sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.614.0.tgz#2cdc07e029447182ada8ee18dcdb6bccddc57da5" - integrity sha512-YIEjlNUKb3Vo/iTnGAPdsiDC3FUUnNoex2OwU8LmR7AkYZiWdB8nx99DfgkkY+OFMUpw7nKD2PCOtuFONelfGA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/fetch-http-handler" "^3.2.1" - "@smithy/node-http-handler" "^3.1.2" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.0.6" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.614.0.tgz#5c3e514d09d37aad167ab3571d10fb18c182ba5e" - integrity sha512-KfLuLFGwlvFSZ2MuzYwWGPb1y5TeiwX5okIDe0aQ1h10oD3924FXbN+mabOnUHQ8EFcGAtCaWbrC86mI7ktC6A== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.614.0" - "@aws-sdk/credential-provider-process" "3.614.0" - "@aws-sdk/credential-provider-sso" "3.614.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.614.0.tgz#5faf5e3bf02ccb891769e4a28c784a80be42dcfc" - integrity sha512-4J6gPEuFZP0mkWq5E//oMS1vrmMM88iNNcv7TEljYnsc6JTAlKejCyFwx6CN+nkIhmIZsl06SXIhBemzBdBPfg== - dependencies: - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.614.0" - "@aws-sdk/credential-provider-ini" "3.614.0" - "@aws-sdk/credential-provider-process" "3.614.0" - "@aws-sdk/credential-provider-sso" "3.614.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.614.0.tgz#b6b9382346dfe51c8fb448595ae55b930532c897" - integrity sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.614.0.tgz#926de80b2f9288469604442bf2a395c5f2bf913d" - integrity sha512-55+gp0JY4451cWI1qXmVMFM0GQaBKiQpXv2P0xmd9P3qLDyeFUSEW8XPh0d2lb1ICr6x4s47ynXVdGCIv2mXMg== - dependencies: - "@aws-sdk/client-sso" "3.614.0" - "@aws-sdk/token-providers" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz#d29222d6894347ee89c781ea090d388656df1d2a" - integrity sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-providers@^3.186.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.614.0.tgz#44b017db21cff7b706f4a884ced73b1c8c56b32e" - integrity sha512-mgb6bcLiOig9ZWxuAF4g0QwLGuqSleYFAyPWyWo30XafCAGB2MfCwxksVWRH+cuX86fCnAF8XgYnaSs38fBOXA== - dependencies: - "@aws-sdk/client-cognito-identity" "3.614.0" - "@aws-sdk/client-sso" "3.614.0" - "@aws-sdk/client-sts" "3.614.0" - "@aws-sdk/credential-provider-cognito-identity" "3.614.0" - "@aws-sdk/credential-provider-env" "3.609.0" - "@aws-sdk/credential-provider-http" "3.614.0" - "@aws-sdk/credential-provider-ini" "3.614.0" - "@aws-sdk/credential-provider-node" "3.614.0" - "@aws-sdk/credential-provider-process" "3.614.0" - "@aws-sdk/credential-provider-sso" "3.614.0" - "@aws-sdk/credential-provider-web-identity" "3.609.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.609.0.tgz#844302cb905e4d09b9a1ea4bfa96729833068913" - integrity sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz#ed44d201f091b8bac908cbf14724c7a4d492553f" - integrity sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.609.0.tgz#b7b869aaeac021a43dbea1435eaea81e5d2460b1" - integrity sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.614.0.tgz#e6e3b5952db26a0452875c864d39d17707e4eccd" - integrity sha512-xUxh0UPQiMTG6E31Yvu6zVYlikrIcFDKljM11CaatInzvZubGTGiX0DjpqRlfGzUNsuPc/zNrKwRP2+wypgqIw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" - integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" - integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.609.0", "@aws-sdk/types@^3.222.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.609.0.tgz#06b39d799c9f197a7b43670243e8e78a3bf7d6a5" - integrity sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" - integrity sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - "@smithy/util-endpoints" "^2.0.5" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.568.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz#2acc4b2236af0d7494f7e517401ba6b3c4af11ff" - integrity sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz#aa15421b2e32ae8bc589dac2bd6e8969832ce588" - integrity sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" - integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== - dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" - integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== - dependencies: - "@babel/types" "^7.24.7" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-environment-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" - integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-hoist-variables@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-module-imports@^7.16.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-split-export-declaration@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" - integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" - integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== - -"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" - integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" - integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/traverse@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" - integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" - integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== - dependencies: - "@babel/helper-string-parser" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" - -"@bcherny/json-schema-ref-parser@9.0.9": - version "9.0.9" - resolved "https://registry.yarnpkg.com/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#09899d405bc708c0acac0066ae8db5b94d465ca4" - integrity sha512-vmEmnJCfpkLdas++9OYg6riIezTYqTHpqUTODJzHLzs5UnXujbOJW9VwcVCnyo1mVRt32FRr23iXBx/sX8YbeQ== - dependencies: - "@jsdevtools/ono" "^7.1.3" - "@types/json-schema" "^7.0.6" - call-me-maybe "^1.0.1" - js-yaml "^4.1.0" - -"@dnd-kit/accessibility@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz#1054e19be276b5f1154ced7947fc0cb5d99192e0" - integrity sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ== - dependencies: - tslib "^2.0.0" - -"@dnd-kit/core@6.0.8": - version "6.0.8" - resolved "https://registry.yarnpkg.com/@dnd-kit/core/-/core-6.0.8.tgz#040ae13fea9787ee078e5f0361f3b49b07f3f005" - integrity sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA== - dependencies: - "@dnd-kit/accessibility" "^3.0.0" - "@dnd-kit/utilities" "^3.2.1" - tslib "^2.0.0" - -"@dnd-kit/sortable@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@dnd-kit/sortable/-/sortable-7.0.2.tgz#791d550872457f3f3c843e00d159b640f982011c" - integrity sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA== - dependencies: - "@dnd-kit/utilities" "^3.2.0" - tslib "^2.0.0" - -"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@dnd-kit/utilities/-/utilities-3.2.2.tgz#5a32b6af356dc5f74d61b37d6f7129a4040ced7b" - integrity sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg== - dependencies: - tslib "^2.0.0" - -"@emnapi/runtime@^1.1.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.2.0.tgz#71d018546c3a91f3b51106530edbc056b9f2f2e3" - integrity sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ== - dependencies: - tslib "^2.4.0" - -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@^11.11.0", "@emotion/cache@^11.4.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - -"@emotion/css@^11.10.5": - version "11.11.2" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.11.2.tgz#e5fa081d0c6e335352e1bc2b05953b61832dca5a" - integrity sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew== - dependencies: - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/react@^11.8.1": - version "11.11.4" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" - integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.4.tgz#fc8f6d80c492cfa08801d544a05331d1cc7cd451" - integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== - -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/aix-ppc64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" - integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" - integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-arm@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" - integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/android-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" - integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" - integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/darwin-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" - integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" - integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/freebsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" - integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" - integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-arm@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" - integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-ia32@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" - integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-loong64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" - integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-mips64el@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" - integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-ppc64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" - integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-riscv64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" - integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-s390x@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" - integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/linux-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" - integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/netbsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" - integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== - -"@esbuild/openbsd-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" - integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/openbsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" - integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/sunos-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" - integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" - integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-ia32@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" - integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== - -"@esbuild/win32-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" - integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.6.1": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== - -"@faceless-ui/modal@3.0.0-beta.2": - version "3.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@faceless-ui/modal/-/modal-3.0.0-beta.2.tgz#67ea3ab9814715fabea4a3fbe338e25ff3656f96" - integrity sha512-UmXvz7Iw3KMO4Pm3llZczU4uc5pPQDb6rdqwoBvYDFgWvkraOAHKx0HxSZgwqQvqOhn8joEFBfFp6/Do2562ow== - dependencies: - body-scroll-lock "4.0.0-beta.0" - focus-trap "7.5.4" - react-transition-group "4.4.5" - -"@faceless-ui/scroll-info@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@faceless-ui/scroll-info/-/scroll-info-2.0.0-beta.0.tgz#ac2d86a8b221f7a8d75452b9f0024da94e1d18bf" - integrity sha512-pUBhQP8vduA7rVndNsjhaCcds1BykA/Q4iV23JWijU6ZFL/M3Fm9P3ypDS+0VVxolqemNhw8S3FXPwZGgjH4Rw== - -"@faceless-ui/window-info@3.0.0-beta.0": - version "3.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@faceless-ui/window-info/-/window-info-3.0.0-beta.0.tgz#628c2c46b2fdddd17916153ca41c4dbe1340c1cf" - integrity sha512-Qs8xRA+fl4sU2aFVe9xawxfi5TVZ9VTPuhdQpx9aSv7U5a2F0AXwT61lJfnaJ9Flm8tOcxzq67p8cVZsXNCVeQ== - -"@floating-ui/core@^1.6.0": - version "1.6.4" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.4.tgz#0140cf5091c8dee602bff9da5ab330840ff91df6" - integrity sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA== - dependencies: - "@floating-ui/utils" "^0.2.4" - -"@floating-ui/dom@^1.0.0", "@floating-ui/dom@^1.0.1": - version "1.6.7" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.7.tgz#85d22f731fcc5b209db504478fb1df5116a83015" - integrity sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng== - dependencies: - "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.4" - -"@floating-ui/react-dom@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.1.tgz#cca58b6b04fc92b4c39288252e285e0422291fb0" - integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg== - dependencies: - "@floating-ui/dom" "^1.0.0" - -"@floating-ui/react@^0.26.2": - version "0.26.19" - resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.19.tgz#e3c713bec8a7264caa6f8195e0865f9210f483a1" - integrity sha512-Jk6zITdjjIvjO/VdQFvpRaD3qPwOHH6AoDHxjhpy+oK4KFgaSP871HYWUAPdnLmx1gQ+w/pB312co3tVml+BXA== - dependencies: - "@floating-ui/react-dom" "^2.1.1" - "@floating-ui/utils" "^0.2.4" - tabbable "^6.0.0" - -"@floating-ui/utils@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.4.tgz#1d459cee5031893a08a0e064c406ad2130cced7c" - integrity sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA== - -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@img/sharp-darwin-arm64@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz#a1cf4a7febece334f16e0328b9689f05797d7aec" - integrity sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA== - optionalDependencies: - "@img/sharp-libvips-darwin-arm64" "1.0.2" - -"@img/sharp-darwin-x64@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz#f77be2d7c3609d3e77cd337b199a772e07b87bd2" - integrity sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw== - optionalDependencies: - "@img/sharp-libvips-darwin-x64" "1.0.2" - -"@img/sharp-libvips-darwin-arm64@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz#b69f49fecbe9572378675769b189410721b0fa53" - integrity sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA== - -"@img/sharp-libvips-darwin-x64@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz#5665da7360d8e5ed7bee314491c8fe736b6a3c39" - integrity sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw== - -"@img/sharp-libvips-linux-arm64@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz#8a05e5e9e9b760ff46561e32f19bd5e035fa881c" - integrity sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw== - -"@img/sharp-libvips-linux-arm@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz#0fd33b9bf3221948ce0ca7a5a725942626577a03" - integrity sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw== - -"@img/sharp-libvips-linux-s390x@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz#4b89150ec91b256ee2cbb5bb125321bf029a4770" - integrity sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog== - -"@img/sharp-libvips-linux-x64@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz#947ccc22ca5bc8c8cfe921b39a5fdaebc5e39f3f" - integrity sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ== - -"@img/sharp-libvips-linuxmusl-arm64@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz#821d58ce774f0f8bed065b69913a62f65d512f2f" - integrity sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ== - -"@img/sharp-libvips-linuxmusl-x64@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz#4309474bd8b728a61af0b3b4fad0c476b5f3ccbe" - integrity sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw== - -"@img/sharp-linux-arm64@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz#bd390113e256487041411b988ded13a26cfc5f95" - integrity sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q== - optionalDependencies: - "@img/sharp-libvips-linux-arm64" "1.0.2" - -"@img/sharp-linux-arm@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz#14ecc81f38f75fb4cd7571bc83311746d6745fca" - integrity sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ== - optionalDependencies: - "@img/sharp-libvips-linux-arm" "1.0.2" - -"@img/sharp-linux-s390x@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz#119e8081e2c6741b5ac908fe02244e4c559e525f" - integrity sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ== - optionalDependencies: - "@img/sharp-libvips-linux-s390x" "1.0.2" - -"@img/sharp-linux-x64@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz#21d4c137b8da9a313b069ff5c920ded709f853d7" - integrity sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw== - optionalDependencies: - "@img/sharp-libvips-linux-x64" "1.0.2" - -"@img/sharp-linuxmusl-arm64@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz#f3fde68fd67b85a32da6f1155818c3b58b8e7ae0" - integrity sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ== - optionalDependencies: - "@img/sharp-libvips-linuxmusl-arm64" "1.0.2" - -"@img/sharp-linuxmusl-x64@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz#44373724aecd7b69900e0578228144e181db7892" - integrity sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw== - optionalDependencies: - "@img/sharp-libvips-linuxmusl-x64" "1.0.2" - -"@img/sharp-wasm32@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz#88e3f18d7e7cd8cfe1af98e9963db4d7b6491435" - integrity sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ== - dependencies: - "@emnapi/runtime" "^1.1.1" - -"@img/sharp-win32-ia32@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz#b1c772dd2952e983980b1eb85808fa8129484d46" - integrity sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw== - -"@img/sharp-win32-x64@0.33.4": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz#106f911134035b4157ec92a0c154a6b6f88fa4c1" - integrity sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - -"@lexical/clipboard@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/clipboard/-/clipboard-0.17.0.tgz#5fdc3340545cbebe427e41dceae86a902af39a7c" - integrity sha512-wYtC6VJhuSxUZc69VTU+vBgzB4HQqhve2hLrr3v+3tR2aimx3KnKphCCP1TexCntxpEnOTPXafEgpOW/EVQE+Q== - dependencies: - "@lexical/html" "0.17.0" - "@lexical/list" "0.17.0" - "@lexical/selection" "0.17.0" - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/code@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/code/-/code-0.17.0.tgz#5f371fb829d4b91890b7f7376d52562cad5d3916" - integrity sha512-8zrgHzf27aYySfUVeSKw8YP/LkRlXHSwD03BKlkSZAb4HX/WC60SGmdXUhtyTIBucqe0pnuGsRYfR9euD0/tfw== - dependencies: - "@lexical/utils" "0.17.0" - lexical "0.17.0" - prismjs "^1.27.0" - -"@lexical/devtools-core@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/devtools-core/-/devtools-core-0.17.0.tgz#c3606e9868c2fe542d6c56c039bbd61966f6986a" - integrity sha512-0ftqWsoCb96oTc8Ok+uvjGAXZpsN9oc6ml3d46BdufdZyxHXC4qU3YVoPfLkgAHzH+4fQlNypu7u3Ym3dZ2rJg== - dependencies: - "@lexical/html" "0.17.0" - "@lexical/link" "0.17.0" - "@lexical/mark" "0.17.0" - "@lexical/table" "0.17.0" - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/dragon@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/dragon/-/dragon-0.17.0.tgz#df97280b11a812903f3fd9de9d4445c8f87f1c86" - integrity sha512-XSsrHVwhjBIVF9VN9MFm6Go8fquj5H/jlYuyNzemHq0tOli8NaoSovGc5q0LwXr88RPsuIt1jluazR7Q1+kxTQ== - dependencies: - lexical "0.17.0" - -"@lexical/hashtag@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/hashtag/-/hashtag-0.17.0.tgz#2e14a3dd642eac4ba1d1e7b6019b60825d98f98d" - integrity sha512-E6nSoz9haB6JypQtYxG5OYr36AHgam/FBMu77OWNl1KsJbkP8nInm+P22QFsNnEvs4Hk6/0FJ5g42+lTEnGmIg== - dependencies: - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/headless@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/headless/-/headless-0.17.0.tgz#f6fd4a15a1c6759b7589022365a77c8c9ed191dd" - integrity sha512-yKvXcq2F6S1lwDLcwv+bHht/al1LcFmidPT3rjISRxLX+/YjUcUT8MmvV773Du4piV4rFPbVlBPFBZfHJkDxXw== - dependencies: - lexical "0.17.0" - -"@lexical/history@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/history/-/history-0.17.0.tgz#112e12d5e10c8b5ad3aabe8f62eb6da15b95d8e2" - integrity sha512-SfeUKAXf9pZpqee9rMOTt33V0J0p/AS9TZLT9Un9dU6wAaHfv6NFax1ND0JoG1a9YkTc539mufxVLNjsNRc0ag== - dependencies: - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/html@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/html/-/html-0.17.0.tgz#506b98634cc96cf1e6de11fa4769aa3641de099d" - integrity sha512-sI458CEP/j+Gd2YEo1+vTax31ZAjdq5jmRJMgSKxzKlkVYAUY9eH5u3Y3awPLwLVXJHiIopMX02GeZytibuTiw== - dependencies: - "@lexical/selection" "0.17.0" - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/link@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/link/-/link-0.17.0.tgz#c4c2cd7975b613d3cc7f20b45c53ce95432f9f98" - integrity sha512-Kux6yvPit6y0ksPpwimv3seVrXAsggkqB6oT6oAVBaDpYuygVEwNDqg/rCTtB3mHQ4eeuU33mdK7MSXZ34bZRQ== - dependencies: - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/list@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/list/-/list-0.17.0.tgz#29903085e1839760cfddbd0cd99d58568dd6ae2f" - integrity sha512-anDuSUykTv+lqyCwl1m+sThrB15OKCa00Eo68/d2HQSHDD3KNWgSx709dcR17bD9oT204yOhMJbQGywuzcEyGQ== - dependencies: - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/mark@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/mark/-/mark-0.17.0.tgz#1d1e68d5c88e9ca7d86b3658ee716f044e4df77c" - integrity sha512-Ynqh9KHXUcB9qLOTGC9s+bbWtawOwRStkeIeAugTqrwckyYWeDaePpyJ6IhBBJy1E1CfpiZn71NDeP+FuRjnXQ== - dependencies: - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/markdown@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/markdown/-/markdown-0.17.0.tgz#129d350261d44f7453118723797ecc892c13eec1" - integrity sha512-6IuJ2l5p/Ma+VBUIStIRXwTC01GEzx21gvqqywuqBUzAOiMr1oRM+DGsQgrzZrcjX+LzUlZ5ZgjuWtK8XKVAZw== - dependencies: - "@lexical/code" "0.17.0" - "@lexical/link" "0.17.0" - "@lexical/list" "0.17.0" - "@lexical/rich-text" "0.17.0" - "@lexical/text" "0.17.0" - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/offset@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/offset/-/offset-0.17.0.tgz#5904b4c2027d43961af398fc945bbb0b11c954e8" - integrity sha512-onE6SD2mIAwBLTT5v5fVBVtRg/NpQj+o10vTWJ1ImvEUERpSoCyHMTy3IMoSMuCRwuOG9C0cFEret2u+QS8Icw== - dependencies: - lexical "0.17.0" - -"@lexical/overflow@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/overflow/-/overflow-0.17.0.tgz#c6fa6b21597acee71465fa84a8a5c30ce382d21f" - integrity sha512-dh+nQAmeobKvZFodWyzNh1ZjX043Patk/1Lwct9XmtAGMUdXL+tB0bbguWVcDfY8OYu1CTQGfbdq2oMEJYzwsg== - dependencies: - lexical "0.17.0" - -"@lexical/plain-text@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/plain-text/-/plain-text-0.17.0.tgz#b4c77dccba55ceac59aae0cb0dd856d1d2fbfa32" - integrity sha512-AEk+3ttbRyRi7m9UbU1CdLUtGsXh4FFZkBC12twV3U82lZHOdHocLlTutP+lcbYlGjeq6UF43NxOSGzsYEunsA== - dependencies: - "@lexical/clipboard" "0.17.0" - "@lexical/selection" "0.17.0" - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/react@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/react/-/react-0.17.0.tgz#08d7f2352f485d0ef542f27c33afeb9a66824b96" - integrity sha512-HZ3joq+5g2++2vo/6scTd60Y2bsu8ya8EUdopyudnmGZGKAcAPue9pLOlBaEpsYZ7vqTuGjiPgtEBfFzDy9rlg== - dependencies: - "@lexical/clipboard" "0.17.0" - "@lexical/code" "0.17.0" - "@lexical/devtools-core" "0.17.0" - "@lexical/dragon" "0.17.0" - "@lexical/hashtag" "0.17.0" - "@lexical/history" "0.17.0" - "@lexical/link" "0.17.0" - "@lexical/list" "0.17.0" - "@lexical/mark" "0.17.0" - "@lexical/markdown" "0.17.0" - "@lexical/overflow" "0.17.0" - "@lexical/plain-text" "0.17.0" - "@lexical/rich-text" "0.17.0" - "@lexical/selection" "0.17.0" - "@lexical/table" "0.17.0" - "@lexical/text" "0.17.0" - "@lexical/utils" "0.17.0" - "@lexical/yjs" "0.17.0" - lexical "0.17.0" - react-error-boundary "^3.1.4" - -"@lexical/rich-text@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/rich-text/-/rich-text-0.17.0.tgz#86e515a0469c895cf836bfdf15e9a8b2907b7029" - integrity sha512-XJc8gQBSwppCkESQaNcGtyTaPXZaeCQDcUVpnDjDK0vM/ZZN8TErxbujwbSqA3kO2dBds9N8WxNboSwuncMBcQ== - dependencies: - "@lexical/clipboard" "0.17.0" - "@lexical/selection" "0.17.0" - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/selection@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/selection/-/selection-0.17.0.tgz#bb14cab3a3fa2dfac54c88a2e9acab1ccffbe601" - integrity sha512-UTjlvyhFY/lmHtBaIaVRwYnRfO9gR4I32+PT7vHQr4v3VfcgS63YEGSgEZy3Gh1pfeJqaZATN58+jCuMAQXlWQ== - dependencies: - lexical "0.17.0" - -"@lexical/table@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/table/-/table-0.17.0.tgz#fe84fa8b53e61bebd300ea093c87f9ae1c3aa382" - integrity sha512-RQF7IG0rGL2/bPaPFUIMgDA3QMdDflvXSnE7Udgbj9yMqSKhYkaERVfNyoLckDUSuusGJd6XV+qum6JWn0nSNA== - dependencies: - "@lexical/utils" "0.17.0" - lexical "0.17.0" - -"@lexical/text@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/text/-/text-0.17.0.tgz#1116a0503f89f5f31ed14bd7ab93dacc11b53131" - integrity sha512-kFH0V6yjW8YswmoY7vHT4zHFDflGfamuUxTPHROpdnq/JMjHeaVwtmFBdrP0gknaC8XMRXdr3EsemQ7cbOoDPA== - dependencies: - lexical "0.17.0" - -"@lexical/utils@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/utils/-/utils-0.17.0.tgz#b98d8e448deeb18dd7eeab2b95ccd3a28f567cf8" - integrity sha512-B/n0rRGDmdMrqi2qnprLt6SntC6jb4JItLmPl8zDDdg7/HxMdLq3F93vogeiXQJn0mlNqgiENWHvLAy5K2C2uQ== - dependencies: - "@lexical/list" "0.17.0" - "@lexical/selection" "0.17.0" - "@lexical/table" "0.17.0" - lexical "0.17.0" - -"@lexical/yjs@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@lexical/yjs/-/yjs-0.17.0.tgz#8687c349c3151c32c54e4d55dc3e07a7b48431ad" - integrity sha512-xJv3frcK/jskssLbzdY4yfBaM7+LWaZD4YjYkJ/bvRDTey2w+McF+SvsJ/yBA8YF1oaL3rT+0aIQJ7rfH+AxjA== - dependencies: - "@lexical/offset" "0.17.0" - lexical "0.17.0" - -"@monaco-editor/loader@^1.3.3": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558" - integrity sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg== - dependencies: - state-local "^1.0.6" - -"@monaco-editor/react@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.5.1.tgz#fbc76c692aee9a33b9ab24ae0c5f219b8f002fdb" - integrity sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ== - dependencies: - "@monaco-editor/loader" "^1.3.3" - -"@mongodb-js/saslprep@^1.1.0": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz#d1700facfd6916c50c2c88fd6d48d363a56c702f" - integrity sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q== - dependencies: - sparse-bitfield "^3.0.3" - -"@next/env@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/env/-/env-15.0.0-canary.104.tgz#227924bdaddddb45eca22a563b580ae905c769dc" - integrity sha512-7wOJhe62uL4ViZOumMwuPev4IxQaXJ4g97iMsXelOF+Q5QuuFXzbxIXh4OJMVAHZJMYkM5VyD2zxV66iYU01DQ== - -"@next/env@^15.0.0-canary.104": - version "15.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-15.0.0-rc.0.tgz#c772c9261dad10b1a1e72693c7dadfe2e35e6c5a" - integrity sha512-6W0ndQvHR9sXcqcKeR/inD2UTRCs9+VkSK3lfaGmEuZs7EjwwXMO2BPYjz9oBrtfPL3xuTjtXsHKSsalYQ5l1Q== - -"@next/eslint-plugin-next@15.0.0-rc.0": - version "15.0.0-rc.0" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.0-rc.0.tgz#56850feb4961e82596947c5150106fe4cd92dc6d" - integrity sha512-/rQXrN47qxlFHtZg77LdcCYbL54ogQuLeqIGV/6HMGnZH8iL81XEFOITO8GZjOukR5i3BbwyfrsmIqFl/scg+w== - dependencies: - glob "10.3.10" - -"@next/swc-darwin-arm64@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.0-canary.104.tgz#e859550038e0f46aff573c9bb875ccb9b6d2db0f" - integrity sha512-tLrkGDlVAch+dwLr0lwZt6t//KQhwJQamTt86bFeSEgmuWg8escVD5608XjIicpy4oYUeTG2e7EDjvW1/9C7+Q== - -"@next/swc-darwin-x64@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.0-canary.104.tgz#f9011534e9e37b147130d3bcb1ac43d695f03742" - integrity sha512-NokpzlJHGzldMdx5ALJi9w8sZbFVQj3KPjMg1EKutvkX8Z0TgZguoj0Hb+0Dh7o6fBK0CqH1mYQd/IgYeqvYew== - -"@next/swc-linux-arm64-gnu@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.0-canary.104.tgz#f826d8763a2d367350a18e02c579fc68c5d02e49" - integrity sha512-U9P1bXaxMyGrY7HdJ1fdtS5vy2yfWF7z1Qt/8OBcZi5y6WWHloZmJ/jRMXxoHJ1lcLSsC1EcubYHgV5ys1NDcA== - -"@next/swc-linux-arm64-musl@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.0-canary.104.tgz#6e50dff77482ea3f9d5816347f9ced3e9881dd5a" - integrity sha512-PDOS3ySD0/YBVvKn/JhQ8xjh4HU4v2MCvqFHaoahu9v1ydmUOeuDRjQk4hUliXgvKuE/ZZksP3a9TrzpbDScsA== - -"@next/swc-linux-x64-gnu@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.0-canary.104.tgz#ec9d7fd88436a51481b79e9f16f3c8e06289f99f" - integrity sha512-jYNKOIkqL4puFpeNjIZ/riK0+adDyjENjACMlU3HyuG7A0xCYAFxBIbmwjbGmpSv99+PPB/gAbGnB0TT2PDHUQ== - -"@next/swc-linux-x64-musl@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.0-canary.104.tgz#f82bac66b12b6a1626e5e3ac226f3ec87cdb9e33" - integrity sha512-xX3ZUWM4syINdEqsUhvQWBjoFa2P8PL96adQUfph4cpUrkrUbnBQbWA2vSdSvwoC6a80wSX+buuhJptvxzEl3A== - -"@next/swc-win32-arm64-msvc@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.0-canary.104.tgz#2a584d64f7dcc80a85365cfba88e73b1f01ea5aa" - integrity sha512-kUMeZOhueb5wXZTQTPvdl4V4wtJKh49TcVAHS7kcDTU9m8jrIQ3beKURWtzjD4iizgl/iar8CHuYS5CAnCGqAw== - -"@next/swc-win32-ia32-msvc@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-15.0.0-canary.104.tgz#41698f85ccf33b20110ad4b912e04ab01d911dab" - integrity sha512-6q5HYiACa6GH7+RyTlLMdUlivwi75bw2L9PRYRBuw4C0SvLYMwBf7SlshbrCrNYbIAaGajYJLZjv3IXFnsZBjA== - -"@next/swc-win32-x64-msvc@15.0.0-canary.104": - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.0-canary.104.tgz#bbc841124716f6a70f41ff5cb51e41fedf4ef1de" - integrity sha512-OeY5GRHRv5qMPwK2e1ipX+EeTDPmRITM9OBeaeIllubWprLGeLxnC1NbKYKCt6IfCboX+wanZKQcbuyH5RMtlg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@payloadcms/db-mongodb@3.0.0-beta.94": - version "3.0.0-beta.94" - resolved "https://registry.yarnpkg.com/@payloadcms/db-mongodb/-/db-mongodb-3.0.0-beta.94.tgz#44d0aa286d9f32edadd557f09c4ed517b9f043fd" - integrity sha512-jnuG4EfsIsBzwK+gZP0QrnpWubdFlAnWV9EV3pKpiQZpZDFP8EvkG6DVeL2VPlQYr/mVxTkDhkftxba2rOG41w== - dependencies: - bson-objectid "2.0.4" - http-status "1.6.2" - mongoose "6.12.3" - mongoose-paginate-v2 "1.7.22" - prompts "2.4.2" - uuid "10.0.0" - -"@payloadcms/graphql@3.0.0-beta.94": - version "3.0.0-beta.94" - resolved "https://registry.yarnpkg.com/@payloadcms/graphql/-/graphql-3.0.0-beta.94.tgz#fdfb3190d0eb15c12816cd6e2cf837d2d25aa656" - integrity sha512-g7AYrw1L5LsGsLkG3lMM3uNjFg9iPJjMsgah+BlDHLHkHWR715Qz/R54sOZ5cH+oFpDBewT/AOuSVofps4KGXw== - dependencies: - graphql-scalars "1.22.2" - pluralize "8.0.0" - ts-essentials "7.0.3" - tsx "4.17.0" - -"@payloadcms/next@3.0.0-beta.94": - version "3.0.0-beta.94" - resolved "https://registry.yarnpkg.com/@payloadcms/next/-/next-3.0.0-beta.94.tgz#fa74d3ec6fd12dc3aca9bc095946930c9fb110f5" - integrity sha512-0aDquhlIVF7rCOVtxZ0VMnVsAD0ZeN6zSlK0VaMY5KHMDEdn4R8QifWcBoeo5JAxmNqR/LxYKrUlg+lI+KmhOQ== - dependencies: - "@dnd-kit/core" "6.0.8" - "@payloadcms/graphql" "3.0.0-beta.94" - "@payloadcms/translations" "3.0.0-beta.94" - "@payloadcms/ui" "3.0.0-beta.94" - busboy "^1.6.0" - file-type "17.1.6" - graphql-http "^1.22.0" - graphql-playground-html "1.6.30" - http-status "1.6.2" - path-to-regexp "^6.2.1" - qs-esm "7.0.2" - react-diff-viewer-continued "3.2.6" - sass "1.77.4" - sonner "^1.5.0" - uuid "10.0.0" - ws "^8.16.0" - -"@payloadcms/richtext-lexical@3.0.0-beta.94": - version "3.0.0-beta.94" - resolved "https://registry.yarnpkg.com/@payloadcms/richtext-lexical/-/richtext-lexical-3.0.0-beta.94.tgz#5d93ab6097133bf7b29931073f565d44970dbf8f" - integrity sha512-/xEXLfnOp3JweNEOa9boS7ueP8UWvpaXFK95rKN/XbnxoE2gRFTCr2vdPdF4lurLQuGY92JE6+JYbq6FTgA6cA== - dependencies: - "@lexical/headless" "0.17.0" - "@lexical/link" "0.17.0" - "@lexical/list" "0.17.0" - "@lexical/mark" "0.17.0" - "@lexical/markdown" "0.17.0" - "@lexical/react" "0.17.0" - "@lexical/rich-text" "0.17.0" - "@lexical/selection" "0.17.0" - "@lexical/utils" "0.17.0" - "@types/uuid" "10.0.0" - bson-objectid "2.0.4" - dequal "2.0.3" - lexical "0.17.0" - react-error-boundary "4.0.13" - uuid "10.0.0" - -"@payloadcms/translations@3.0.0-beta.94": - version "3.0.0-beta.94" - resolved "https://registry.yarnpkg.com/@payloadcms/translations/-/translations-3.0.0-beta.94.tgz#3218524d914a41e57466a7c7e0d1766f129117d4" - integrity sha512-9vx9+Mq11/otJHY01/Tvz/B769apEEKtUj5Adc2/FmNz+YcLAb2Lr2N26GMIUx0v6OOTGQR4TpGvik2FWqTK7A== - dependencies: - date-fns "3.3.1" - -"@payloadcms/ui@3.0.0-beta.94": - version "3.0.0-beta.94" - resolved "https://registry.yarnpkg.com/@payloadcms/ui/-/ui-3.0.0-beta.94.tgz#fc9f4fc26b5e8e77db4fbd1903ac216c275f3d25" - integrity sha512-+Yxw3iEm5rXzZn/P52lC067JaE5XcIDVUN0hxA3NRNqh9i6d4DCO855dgQ6BXgd/dqrBQxWLB2wF3Su8TuA3Cg== - dependencies: - "@dnd-kit/core" "6.0.8" - "@dnd-kit/sortable" "7.0.2" - "@faceless-ui/modal" "3.0.0-beta.2" - "@faceless-ui/scroll-info" "2.0.0-beta.0" - "@faceless-ui/window-info" "3.0.0-beta.0" - "@monaco-editor/react" "4.5.1" - "@payloadcms/translations" "3.0.0-beta.94" - body-scroll-lock "4.0.0-beta.0" - bson-objectid "2.0.4" - date-fns "3.3.1" - dequal "2.0.3" - md5 "2.3.0" - object-to-formdata "4.5.1" - qs-esm "7.0.2" - react-animate-height "2.1.2" - react-datepicker "6.9.0" - react-image-crop "10.1.8" - react-select "5.8.0" - scheduler "0.25.0-rc-f994737d14-20240522" - sonner "^1.5.0" - ts-essentials "7.0.3" - use-context-selector "2.0.0" - uuid "10.0.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@rushstack/eslint-patch@^1.3.3": - version "1.10.3" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz#391d528054f758f81e53210f1a1eebcf1a8b1d20" - integrity sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg== - -"@smithy/abort-controller@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.1.tgz#291210611ff6afecfc198d0ca72d5771d8461d16" - integrity sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/config-resolver@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.5.tgz#727978bba7ace754c741c259486a19d3083431fd" - integrity sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@smithy/core@^2.2.6": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.6.tgz#05e3482079fff7522077e0f3ce2ee6cc507f461c" - integrity sha512-tBbVIv/ui7/lLTKayYJJvi8JLVL2SwOQTbNFEOrvzSE3ktByvsa1erwBOnAMo8N5Vu30g7lN4lLStrU75oDGuw== - dependencies: - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-retry" "^3.0.9" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.4.tgz#797116f68cc3ffa658469558cc014f25d9febe09" - integrity sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.1.tgz#04ba6804cdf2b1cb783229eede6b9cd8653c5543" - integrity sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg== - dependencies: - "@smithy/protocol-http" "^4.0.3" - "@smithy/querystring-builder" "^3.0.3" - "@smithy/types" "^3.3.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-node@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.3.tgz#82c5cb7b0f1a29ee7319081853d2d158c07dff24" - integrity sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw== - dependencies: - "@smithy/types" "^3.3.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz#8d9fd70e3a94b565a4eba4ffbdc95238e1930528" - integrity sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/is-array-buffer@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" - integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== - dependencies: - tslib "^2.6.2" - -"@smithy/is-array-buffer@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" - integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== - dependencies: - tslib "^2.6.2" - -"@smithy/middleware-content-length@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz#426a7f907cc3c0a5d81deb84e16d38303e5a9ad8" - integrity sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ== - dependencies: - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.5.tgz#76e8a559e891282d3ede9ab8e228e66cbee89b21" - integrity sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA== - dependencies: - "@smithy/middleware-serde" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.9.tgz#3d5c33b49ad372bf02c8525931febc5cc246815c" - integrity sha512-Mrv9omExU1gA7Y0VEJG2LieGfPYtwwcEiOnVGZ54a37NEMr66TJ0glFslOJFuKWG6izg5DpKIUmDV9rRxjm47Q== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.0.3" - "@smithy/service-error-classification" "^3.0.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz#74d974460f74d99f38c861e6862984543a880a66" - integrity sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz#91845c7e61e6f137fa912b623b6def719a4f6ce7" - integrity sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz#05647bed666aa8036a1ad72323c1942e5d421be1" - integrity sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.2.tgz#2d753c07f11e7a3da3534b156320d1e0e9401617" - integrity sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw== - dependencies: - "@smithy/abort-controller" "^3.1.1" - "@smithy/protocol-http" "^4.0.3" - "@smithy/querystring-builder" "^3.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/property-provider@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.3.tgz#afd57ea82a3f6c79fbda95e3cb85c0ee0a79f39a" - integrity sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.3.tgz#acf16058504e3cce2dbe8abf94f7b544cd09d3f4" - integrity sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz#6b0e566f885bb84938d077c69e8f8555f686af13" - integrity sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw== - dependencies: - "@smithy/types" "^3.3.0" - "@smithy/util-uri-escape" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz#272a6b83f88dfcbbec8283d72a6bde850cc00091" - integrity sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz#73484255060a094aa9372f6cd972dcaf97e3ce80" - integrity sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ== - dependencies: - "@smithy/types" "^3.3.0" - -"@smithy/shared-ini-file-loader@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz#7dceaf5a5307a2ee347ace8aba17312a1a3ede15" - integrity sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.2.tgz#63fc0d4f9a955e902138fb0a57fafc96b9d4e8bb" - integrity sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/types" "^3.3.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.1.7": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.7.tgz#56c1eee68b903053e246fb141253a567cc4d9930" - integrity sha512-nZbJZB0XI3YnaFBWGDBr7kjaew6O0oNYNmopyIz6gKZEbxzrtH7rwvU1GcVxcSFoOwWecLJEe79fxEMljHopFQ== - dependencies: - "@smithy/middleware-endpoint" "^3.0.5" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/protocol-http" "^4.0.3" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.0.6" - tslib "^2.6.2" - -"@smithy/types@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.3.0.tgz#fae037c733d09bc758946a01a3de0ef6e210b16b" - integrity sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.3.tgz#e8a060d9810b24b1870385fc2b02485b8a6c5955" - integrity sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A== - dependencies: - "@smithy/querystring-parser" "^3.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-base64@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" - integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== - dependencies: - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" - integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" - integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-buffer-from@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" - integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - tslib "^2.6.2" - -"@smithy/util-buffer-from@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" - integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-config-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" - integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.9.tgz#a7035ca57f359810f52d828c68ad8746b0120113" - integrity sha512-WKPcElz92MAQG09miBdb0GxEH/MwD5GfE8g07WokITq5g6J1ROQfYCKC1wNnkqAGfrSywT7L0rdvvqlBplqiyA== - dependencies: - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.9.tgz#d31cd62e9bcc005f92923fc7b6bc0366c3b0478a" - integrity sha512-dQLrUqFxqpf0GvEKEuFdgXcdZwz6oFm752h4d6C7lQz+RLddf761L2r7dSwGWzESMMB3wKj0jL+skRhEGlecjw== - dependencies: - "@smithy/config-resolver" "^3.0.5" - "@smithy/credential-provider-imds" "^3.1.4" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/smithy-client" "^3.1.7" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz#e3a7a4d1c41250bfd2b2d890d591273a7d8934be" - integrity sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg== - dependencies: - "@smithy/node-config-provider" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" - integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.3.tgz#07bf9602682f5a6c55bc2f0384303f85fc68c87e" - integrity sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw== - dependencies: - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-retry@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.3.tgz#9b2ac0dbb1c81f69812a8affa4d772bebfc0e049" - integrity sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w== - dependencies: - "@smithy/service-error-classification" "^3.0.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@smithy/util-stream@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.6.tgz#233624e0e024f5846cf1fdbfb2a2ab5352d724ee" - integrity sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA== - dependencies: - "@smithy/fetch-http-handler" "^3.2.1" - "@smithy/node-http-handler" "^3.1.2" - "@smithy/types" "^3.3.0" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" - integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.0.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" - integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - tslib "^2.6.2" - -"@smithy/util-utf8@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" - integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== - dependencies: - "@smithy/util-buffer-from" "^3.0.0" - tslib "^2.6.2" - -"@swc/core-darwin-arm64@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.6.13.tgz#dba8f8f747ad32fdb58d5b3aec4f740354d32d1b" - integrity sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ== - -"@swc/core-darwin-x64@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.6.13.tgz#c120207a9ced298f7382ff711bac10f6541c1c82" - integrity sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag== - -"@swc/core-linux-arm-gnueabihf@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.6.13.tgz#7b15a1fd32c18dfaf76706632cf8d19146df0d5f" - integrity sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg== - -"@swc/core-linux-arm64-gnu@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.6.13.tgz#066b6e3c805110edb98e5125a222e3d866bf8f68" - integrity sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg== - -"@swc/core-linux-arm64-musl@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.6.13.tgz#43a08bc118f117e485e8a9a23d3cb51fe8b4e301" - integrity sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg== - -"@swc/core-linux-x64-gnu@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.6.13.tgz#0f7358c95f566db6ed8a4249a190043497f41323" - integrity sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ== - -"@swc/core-linux-x64-musl@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.6.13.tgz#6e11994ccf858edb3e70d2e8d700a5b1907a68fb" - integrity sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA== - -"@swc/core-win32-arm64-msvc@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.6.13.tgz#b9744644f02eb6519b0fe09031080cbf32174fb1" - integrity sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg== - -"@swc/core-win32-ia32-msvc@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.6.13.tgz#047302065096883f52b90052d93f9c7e63cdc67b" - integrity sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA== - -"@swc/core-win32-x64-msvc@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.6.13.tgz#efd9706c38aa7dc3515acfa823b8ffa9f4a3c1a6" - integrity sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ== - -"@swc/core@^1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.6.13.tgz#a583f614203d2350e6bb7f7c3c9c36c0e6f2a1da" - integrity sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw== - dependencies: - "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.9" - optionalDependencies: - "@swc/core-darwin-arm64" "1.6.13" - "@swc/core-darwin-x64" "1.6.13" - "@swc/core-linux-arm-gnueabihf" "1.6.13" - "@swc/core-linux-arm64-gnu" "1.6.13" - "@swc/core-linux-arm64-musl" "1.6.13" - "@swc/core-linux-x64-gnu" "1.6.13" - "@swc/core-linux-x64-musl" "1.6.13" - "@swc/core-win32-arm64-msvc" "1.6.13" - "@swc/core-win32-ia32-msvc" "1.6.13" - "@swc/core-win32-x64-msvc" "1.6.13" - -"@swc/counter@0.1.3", "@swc/counter@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" - integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== - -"@swc/helpers@0.5.12": - version "0.5.12" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.12.tgz#37aaca95284019eb5d2207101249435659709f4b" - integrity sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g== - dependencies: - tslib "^2.4.0" - -"@swc/types@^0.1.9": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.9.tgz#e67cdcc2e4dd74a3cef4474b465eb398e7ae83e2" - integrity sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg== - dependencies: - "@swc/counter" "^0.1.3" - -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - -"@types/glob@^7.1.3": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/json-schema@^7.0.11", "@types/json-schema@^7.0.6": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/lodash@^4.14.182": - version "4.17.6" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.6.tgz#193ced6a40c8006cfc1ca3f4553444fb38f0e543" - integrity sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/node@*": - version "20.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" - integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== - dependencies: - undici-types "~5.26.4" - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/prettier@^2.6.1": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*": - version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== - -"@types/react-dom@npm:types-react-dom@19.0.0-beta.2": - version "19.0.0-beta.2" - resolved "https://registry.yarnpkg.com/types-react-dom/-/types-react-dom-19.0.0-beta.2.tgz#6bf262d6aeb2116141795453cc41ab2dec41dbbb" - integrity sha512-U1qAZtPiPsv7R6BJlxeXFZsPre2jBG/DtzWJ0tAqqZfwuySo+0pT0df39wn+42OaHvXNDterwC4O0uw8el5BXQ== - dependencies: - "@types/react" "*" - -"@types/react-transition-group@^4.4.0": - version "4.4.10" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" - integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.3.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" - integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/react@npm:types-react@19.0.0-beta.2": - version "19.0.0-beta.2" - resolved "https://registry.yarnpkg.com/types-react/-/types-react-19.0.0-beta.2.tgz#036a2f95c63a242f7f5d35f30eaeba323572a049" - integrity sha512-bcE50h2P/Ajmf3jMPIqL01PDqxo8lwqRIy3idjyadaLKF9vcXbma2CsJkKj0KHBAFllQZkXLTJ8ZpwmUnTv5EQ== - dependencies: - csstype "^3.0.2" - -"@types/uuid@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" - integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== - -"@types/webidl-conversions@*": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz#1306dbfa53768bcbcfc95a1c8cde367975581859" - integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA== - -"@types/whatwg-url@^8.2.1": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" - integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== - dependencies: - "@types/node" "*" - "@types/webidl-conversions" "*" - -"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" - integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== - dependencies: - "@typescript-eslint/scope-manager" "7.2.0" - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/typescript-estree" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" - integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== - dependencies: - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - -"@typescript-eslint/types@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" - integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== - -"@typescript-eslint/typescript-estree@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" - integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== - dependencies: - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/visitor-keys@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" - integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== - dependencies: - "@typescript-eslint/types" "7.2.0" - eslint-visitor-keys "^3.4.1" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.9.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - -ajv@8.14.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.14.0.tgz#f514ddfd4756abb200e1704414963620a625ebbb" - integrity sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA== - dependencies: - fast-deep-equal "^3.1.3" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.4.1" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" - -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlast@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" - integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.findlastindex@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.toreversed@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" - integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" - integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" - es-shim-unscopables "^1.0.2" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - -ast-types-flow@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" - integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -axe-core@^4.9.1: - version "4.9.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" - integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== - -axobject-query@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" - integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== - dependencies: - deep-equal "^2.0.5" - -b4a@^1.6.4: - version "1.6.6" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" - integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== - -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -bare-events@^2.0.0, bare-events@^2.2.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.4.2.tgz#3140cca7a0e11d49b3edc5041ab560659fd8e1f8" - integrity sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q== - -bare-fs@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.1.tgz#cdbd63dac7a552dfb2b87d18c822298d1efd213d" - integrity sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA== - dependencies: - bare-events "^2.0.0" - bare-path "^2.0.0" - bare-stream "^2.0.0" - -bare-os@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.4.0.tgz#5de5e3ba7704f459c9656629edca7cc736e06608" - integrity sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg== - -bare-path@^2.0.0, bare-path@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" - integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== - dependencies: - bare-os "^2.1.0" - -bare-stream@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.1.3.tgz#070b69919963a437cc9e20554ede079ce0a129b2" - integrity sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ== - dependencies: - streamx "^2.18.0" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-scroll-lock@4.0.0-beta.0: - version "4.0.0-beta.0" - resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz#4f78789d10e6388115c0460cd6d7d4dd2bbc4f7e" - integrity sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ== - -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -bson-objectid@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/bson-objectid/-/bson-objectid-2.0.4.tgz#339211572ef97dc98f2d68eaee7b99b7be59a089" - integrity sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ== - -bson@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/bson/-/bson-4.7.2.tgz#320f4ad0eaf5312dd9b45dc369cc48945e2a5f2e" - integrity sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ== - dependencies: - buffer "^5.6.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -busboy@1.6.0, busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -call-me-maybe@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" - integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -caniuse-lite@^1.0.30001579: - version "1.0.30001641" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz#3572862cd18befae3f637f2a1101cc033c6782ac" - integrity sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -"chokidar@>=3.0.0 <4.0.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -ci-info@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" - integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== - -classnames@^2.2.5, classnames@^2.3.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" - integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== - -cli-color@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.4.tgz#d658080290968816b322248b7306fad2346fb2c8" - integrity sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA== - dependencies: - d "^1.0.1" - es5-ext "^0.10.64" - es6-iterator "^2.0.3" - memoizee "^0.4.15" - timers-ext "^0.1.7" - -client-only@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -clsx@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -colorette@^2.0.7: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-table-printer@2.11.2: - version "2.11.2" - resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.2.tgz#549757033a7e3cde7e26e030038c9392ce600ee5" - integrity sha512-uuUHie0sfPP542TKGzPFal0W1wo1beuKAqIZdaavcONx8OoqdnJRKjkinbRTOta4FaCa1RcIL+7mMJWX3pQGVg== - dependencies: - simple-wcswidth "^1.0.1" - -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -cssfilter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" - integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -d@1, d@^1.0.1, d@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" - integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== - dependencies: - es5-ext "^0.10.64" - type "^2.7.2" - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -dataloader@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" - integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== - -date-fns@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.3.1.tgz#7581daca0892d139736697717a168afbb908cfed" - integrity sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw== - -date-fns@^3.3.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf" - integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== - -dateformat@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" - integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== - -debug@4.x, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -dequal@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -detect-libc@^2.0.0, detect-libc@^2.0.2, detect-libc@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -diff@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dotenv@^8.2.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.12.0: - version "5.17.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" - integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.19: - version "1.0.19" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" - integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.3" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - iterator.prototype "^1.1.2" - safe-array-concat "^1.1.2" - -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14, es5-ext@~0.10.2: - version "0.10.64" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" - integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - esniff "^2.0.1" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" - integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== - dependencies: - d "^1.0.2" - ext "^1.7.0" - -es6-weak-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - -esbuild@~0.21.5: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -esbuild@~0.23.0: - version "0.23.1" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" - integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.23.1" - "@esbuild/android-arm" "0.23.1" - "@esbuild/android-arm64" "0.23.1" - "@esbuild/android-x64" "0.23.1" - "@esbuild/darwin-arm64" "0.23.1" - "@esbuild/darwin-x64" "0.23.1" - "@esbuild/freebsd-arm64" "0.23.1" - "@esbuild/freebsd-x64" "0.23.1" - "@esbuild/linux-arm" "0.23.1" - "@esbuild/linux-arm64" "0.23.1" - "@esbuild/linux-ia32" "0.23.1" - "@esbuild/linux-loong64" "0.23.1" - "@esbuild/linux-mips64el" "0.23.1" - "@esbuild/linux-ppc64" "0.23.1" - "@esbuild/linux-riscv64" "0.23.1" - "@esbuild/linux-s390x" "0.23.1" - "@esbuild/linux-x64" "0.23.1" - "@esbuild/netbsd-x64" "0.23.1" - "@esbuild/openbsd-arm64" "0.23.1" - "@esbuild/openbsd-x64" "0.23.1" - "@esbuild/sunos-x64" "0.23.1" - "@esbuild/win32-arm64" "0.23.1" - "@esbuild/win32-ia32" "0.23.1" - "@esbuild/win32-x64" "0.23.1" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-next@15.0.0-rc.0: - version "15.0.0-rc.0" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-15.0.0-rc.0.tgz#45071f389072f9b061ad84f26843120ed0c62cba" - integrity sha512-c23lNAAt3oWQ9KtCzJvcApteCJgrntJHc/cgRNbBwrQ3ssx795CiV4hptdDQRmUm7y8VZV3yfrCRrnHMyQ4aOQ== - dependencies: - "@next/eslint-plugin-next" "15.0.0-rc.0" - "@rushstack/eslint-patch" "^1.3.3" - "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^3.5.2" - eslint-plugin-import "^2.28.1" - eslint-plugin-jsx-a11y "^6.7.1" - eslint-plugin-react "^7.33.2" - eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.5.2: - version "3.6.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" - integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.12.0" - eslint-module-utils "^2.7.4" - fast-glob "^3.3.1" - get-tsconfig "^4.5.0" - is-core-module "^2.11.0" - is-glob "^4.0.3" - -eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.28.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" - -eslint-plugin-jsx-a11y@^6.7.1: - version "6.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz#67ab8ff460d4d3d6a0b4a570e9c1670a0a8245c8" - integrity sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g== - dependencies: - aria-query "~5.1.3" - array-includes "^3.1.8" - array.prototype.flatmap "^1.3.2" - ast-types-flow "^0.0.8" - axe-core "^4.9.1" - axobject-query "~3.1.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.19" - hasown "^2.0.2" - jsx-ast-utils "^3.3.5" - language-tags "^1.0.9" - minimatch "^3.1.2" - object.fromentries "^2.0.8" - safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.0" - -"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": - version "4.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" - integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== - -eslint-plugin-react@^7.33.2: - version "7.34.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz#9965f27bd1250a787b5d4cfcc765e5a5d58dcb7b" - integrity sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA== - dependencies: - array-includes "^3.1.8" - array.prototype.findlast "^1.2.5" - array.prototype.flatmap "^1.3.2" - array.prototype.toreversed "^1.1.2" - array.prototype.tosorted "^1.1.4" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.19" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.8" - object.fromentries "^2.0.8" - object.hasown "^1.1.4" - object.values "^1.2.0" - prop-types "^15.8.1" - resolve "^2.0.0-next.5" - semver "^6.3.1" - string.prototype.matchall "^4.0.11" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.57.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -esniff@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" - integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== - dependencies: - d "^1.0.1" - es5-ext "^0.10.62" - event-emitter "^0.3.5" - type "^2.7.2" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -ext@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -fast-copy@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" - integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-fifo@^1.2.0, fast-fifo@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - -fast-glob@^3.2.9, fast-glob@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-redact@^3.1.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" - integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== - -fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fast-xml-parser@4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" - integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== - dependencies: - strnum "^1.0.5" - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-type@17.1.6: - version "17.1.6" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-17.1.6.tgz#18669e0577a4849ef6e73a41f8bdf1ab5ae21023" - integrity sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw== - dependencies: - readable-web-to-node-stream "^3.0.2" - strtok3 "^7.0.0-alpha.9" - token-types "^5.0.0-alpha.2" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" - integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== - dependencies: - locate-path "^7.2.0" - path-exists "^5.0.0" - unicorn-magic "^0.1.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -focus-trap@7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.5.4.tgz#6c4e342fe1dae6add9c2aa332a6e7a0bbd495ba2" - integrity sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w== - dependencies: - tabbable "^6.2.0" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" - integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -get-tsconfig@^4.5.0, get-tsconfig@^4.7.2, get-tsconfig@^4.7.5: - version "4.7.5" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" - integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== - dependencies: - resolve-pkg-maps "^1.0.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-promise@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" - integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== - dependencies: - "@types/glob" "^7.1.3" - -glob@10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.2.11, graceful-fs@^4.2.4: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -graphql-http@^1.22.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/graphql-http/-/graphql-http-1.22.1.tgz#3857ac75366e55db189cfe09ade9cc4c4f2cfd09" - integrity sha512-4Jor+LRbA7SfSaw7dfDUs2UBzvWg3cKrykfHRgKsOIvQaLuf+QOcG2t3Mx5N9GzSNJcuqMqJWz0ta5+BryEmXg== - -graphql-playground-html@1.6.30: - version "1.6.30" - resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.30.tgz#14c2a8eb7fc17bfeb1a746bbb28a11e34bf0b391" - integrity sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw== - dependencies: - xss "^1.0.6" - -graphql-scalars@1.22.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/graphql-scalars/-/graphql-scalars-1.22.2.tgz#6326e6fe2d0ad4228a9fea72a977e2bf26b86362" - integrity sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ== - dependencies: - tslib "^2.5.0" - -graphql@^16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.9.0.tgz#1c310e63f16a49ce1fbb230bd0a000e99f6f115f" - integrity sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -help-me@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/help-me/-/help-me-5.0.0.tgz#b1ebe63b967b74060027c2ac61f9be12d354a6f6" - integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== - -hoist-non-react-statics@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -http-status@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-status/-/http-status-1.6.2.tgz#6dc05188a9856d67d96e48e8b4fd645c719ce82a" - integrity sha512-oUExvfNckrpTpDazph7kNG8sQi5au3BeTo0idaZFXEhTaJKu7GNJCLHI0rYY2wljm548MSTM+Ljj/c6anqu2zQ== - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -image-size@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.1.1.tgz#ddd67d4dc340e52ac29ce5f546a09f4e29e840ac" - integrity sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ== - dependencies: - queue "6.0.2" - -immutable@^4.0.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" - integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-slot@^1.0.4, internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" - integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== - dependencies: - hasown "^2.0.2" - -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-map@^2.0.2, is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-promise@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.2, is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" - integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -joycon@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-to-typescript@11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-11.0.3.tgz#9b401c2b78329959f1c4c4e0639a6bdcf6a6ed77" - integrity sha512-EaEE9Y4VZ8b9jW5zce5a9L3+p4C9AqgIRHbNVDJahfMnoKzcd4sDb98BLxLdQhJEuRAXyKLg4H66NKm80W8ilg== - dependencies: - "@bcherny/json-schema-ref-parser" "9.0.9" - "@types/json-schema" "^7.0.11" - "@types/lodash" "^4.14.182" - "@types/prettier" "^2.6.1" - cli-color "^2.0.2" - get-stdin "^8.0.0" - glob "^7.1.6" - glob-promise "^4.2.2" - is-glob "^4.0.3" - lodash "^4.17.21" - minimist "^1.2.6" - mkdirp "^1.0.4" - mz "^2.7.0" - prettier "^2.6.2" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -jsonwebtoken@9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#81d8c901c112c24e497a55daf6b2be1225b40145" - integrity sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg== - dependencies: - jws "^3.2.2" - lodash "^4.17.21" - ms "^2.1.1" - semver "^7.3.8" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -kareem@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.5.1.tgz#7b8203e11819a8e77a34b3517d3ead206764d15d" - integrity sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA== - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -language-subtag-registry@^0.3.20: - version "0.3.23" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" - integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== - -language-tags@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lexical@0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/lexical/-/lexical-0.17.0.tgz#4d5d15162079560eda4579b037307457253c239b" - integrity sha512-cCFmANO5rIf34NF0go/hxp5S3V5Z8G2Rsa1FJy50qF2WM5EJNJ/MqN75TApjfgMkfrbO6gau3X12nCqwsT7aDg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -locate-path@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== - dependencies: - es5-ext "~0.10.2" - -md5@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -memoize-one@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" - integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== - -memoizee@^0.4.15: - version "0.4.17" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.17.tgz#942a5f8acee281fa6fb9c620bddc57e3b7382949" - integrity sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA== - dependencies: - d "^1.0.2" - es5-ext "^0.10.64" - es6-weak-map "^2.0.3" - event-emitter "^0.3.5" - is-promise "^2.2.2" - lru-queue "^0.1.0" - next-tick "^1.1.0" - timers-ext "^0.1.7" - -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^9.0.1: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist@1.2.8, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -monaco-editor@0.38.0: - version "0.38.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.38.0.tgz#7b3cd16f89b1b8867fcd3c96e67fccee791ff05c" - integrity sha512-11Fkh6yzEmwx7O0YoLxeae0qEGFwmyPRlVxpg7oF9czOOCB/iCjdJrG5I67da5WiXK3YJCxoz9TJFE8Tfq/v9A== - -mongodb-connection-string-url@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" - integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== - dependencies: - "@types/whatwg-url" "^8.2.1" - whatwg-url "^11.0.0" - -mongodb@4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.17.1.tgz#ccff6ddbda106d5e06c25b0e4df454fd36c5f819" - integrity sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ== - dependencies: - bson "^4.7.2" - mongodb-connection-string-url "^2.6.0" - socks "^2.7.1" - optionalDependencies: - "@aws-sdk/credential-providers" "^3.186.0" - "@mongodb-js/saslprep" "^1.1.0" - -mongoose-paginate-v2@1.7.22: - version "1.7.22" - resolved "https://registry.yarnpkg.com/mongoose-paginate-v2/-/mongoose-paginate-v2-1.7.22.tgz#9f178fe5fb71597e231639adac84d3ab9a96c62a" - integrity sha512-xW5GugkE21DJiu9e13EOxKt4ejEKQkRP/S1PkkXRjnk2rRZVKBcld1nPV+VJ/YCPfm8hb3sz9OvI7O38RmixkA== - -mongoose@6.12.3: - version "6.12.3" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-6.12.3.tgz#bc921ca2fd6d4c1a48dbf7bc88cf3eef1d3c4926" - integrity sha512-MNJymaaXali7w7rHBxVUoQ3HzHHMk/7I/+yeeoSa4rUzdjZwIWQznBNvVgc0A8ghuJwsuIkb5LyLV6gSjGjWyQ== - dependencies: - bson "^4.7.2" - kareem "2.5.1" - mongodb "4.17.1" - mpath "0.9.0" - mquery "4.0.3" - ms "2.1.3" - sift "16.0.1" - -mpath@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.9.0.tgz#0c122fe107846e31fc58c75b09c35514b3871904" - integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== - -mquery@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/mquery/-/mquery-4.0.3.tgz#4d15f938e6247d773a942c912d9748bd1965f89d" - integrity sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA== - dependencies: - debug "4.x" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.6: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -next@15.0.0-canary.104: - version "15.0.0-canary.104" - resolved "https://registry.yarnpkg.com/next/-/next-15.0.0-canary.104.tgz#4bc23e4d6a9524aa870957de4e39cfd961a8e063" - integrity sha512-LVzRmV/p/BGGYmTjlZSmCULmBQ2S5ov1nQAXYssu4cEMhkpklQVgh2I+uHHgo/xgdqIIcEBlUgsfV+CfKVsM6Q== - dependencies: - "@next/env" "15.0.0-canary.104" - "@swc/counter" "0.1.3" - "@swc/helpers" "0.5.12" - busboy "1.6.0" - caniuse-lite "^1.0.30001579" - graceful-fs "^4.2.11" - postcss "8.4.31" - styled-jsx "5.1.6" - optionalDependencies: - "@next/swc-darwin-arm64" "15.0.0-canary.104" - "@next/swc-darwin-x64" "15.0.0-canary.104" - "@next/swc-linux-arm64-gnu" "15.0.0-canary.104" - "@next/swc-linux-arm64-musl" "15.0.0-canary.104" - "@next/swc-linux-x64-gnu" "15.0.0-canary.104" - "@next/swc-linux-x64-musl" "15.0.0-canary.104" - "@next/swc-win32-arm64-msvc" "15.0.0-canary.104" - "@next/swc-win32-ia32-msvc" "15.0.0-canary.104" - "@next/swc-win32-x64-msvc" "15.0.0-canary.104" - sharp "^0.33.4" - -node-abi@^3.3.0: - version "3.65.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" - integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== - dependencies: - semver "^7.3.5" - -node-addon-api@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" - integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-to-formdata@4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/object-to-formdata/-/object-to-formdata-4.5.1.tgz#b6955a9c505b58df15852fee5f844b418b3eb6fe" - integrity sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw== - -object.assign@^4.1.4, object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -object.fromentries@^2.0.7, object.fromentries@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.hasown@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" - integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== - dependencies: - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -on-exit-leak-free@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" - integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.2.tgz#324377a83e5049cbecadc5554d6a63a9a4866b36" - integrity sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -payload@3.0.0-beta.94: - version "3.0.0-beta.94" - resolved "https://registry.yarnpkg.com/payload/-/payload-3.0.0-beta.94.tgz#8a733af1bab4ce88f07c0c169ffec317db345bed" - integrity sha512-7YrAHsMhD7cbekygPaY7wEpwgCrjuB0ShbDYfpxswzUHcR/64iVXqiTgNkA/Jy6GKbs3m6RkqQL/Q4GivllLDQ== - dependencies: - "@next/env" "^15.0.0-canary.104" - "@payloadcms/translations" "3.0.0-beta.94" - ajv "8.14.0" - bson-objectid "2.0.4" - ci-info "^4.0.0" - console-table-printer "2.11.2" - dataloader "2.2.2" - deepmerge "4.3.1" - file-type "17.1.6" - find-up "7.0.0" - get-tsconfig "^4.7.2" - http-status "1.6.2" - image-size "^1.1.1" - json-schema-to-typescript "11.0.3" - jsonwebtoken "9.0.1" - minimist "1.2.8" - monaco-editor "0.38.0" - pino "9.3.1" - pino-pretty "11.2.1" - pluralize "8.0.0" - sanitize-filename "1.6.3" - scmp "2.1.0" - ts-essentials "7.0.3" - tsx "4.17.0" - uuid "10.0.0" - -peek-readable@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.1.1.tgz#7dbeafa1ce271a3eba3fba808883bdb03769b822" - integrity sha512-4hEOSH7KeEaZpMDF/xfm1W9fS5rT7Ett3BkXWHqAEzRLLwLaHkwOL+GvvpIEh9UrvX9BDhzfkvteslgraoH69w== - -picocolors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pino-abstract-transport@^1.0.0, pino-abstract-transport@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz#97f9f2631931e242da531b5c66d3079c12c9d1b5" - integrity sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q== - dependencies: - readable-stream "^4.0.0" - split2 "^4.0.0" - -pino-pretty@11.2.1: - version "11.2.1" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-11.2.1.tgz#de9a42ff8ea7b26da93506bb9e49d0b566c5ae96" - integrity sha512-O05NuD9tkRasFRWVaF/uHLOvoRDFD7tb5VMertr78rbsYFjYp48Vg3477EshVAF5eZaEw+OpDl/tu+B0R5o+7g== - dependencies: - colorette "^2.0.7" - dateformat "^4.6.3" - fast-copy "^3.0.2" - fast-safe-stringify "^2.1.1" - help-me "^5.0.0" - joycon "^3.1.1" - minimist "^1.2.6" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.0.0" - pump "^3.0.0" - readable-stream "^4.0.0" - secure-json-parse "^2.4.0" - sonic-boom "^4.0.1" - strip-json-comments "^3.1.1" - -pino-std-serializers@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" - integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== - -pino@9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/pino/-/pino-9.3.1.tgz#1a2720a58ed2dbc41bdf063366dd3dd717d050c8" - integrity sha512-afSfrq/hUiW/MFmQcLEwV9Zh8Ry6MrMTOyBU53o/fc0gEl+1OZ/Fks/xQCM2nOC0C/OfDtQMnT2d8c3kpcfSzA== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.1.1" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.2.0" - pino-std-serializers "^7.0.0" - process-warning "^3.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.2.0" - safe-stable-stringify "^2.3.1" - sonic-boom "^4.0.1" - thread-stream "^3.0.0" - -pluralize@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss@8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prebuild-install@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^2.6.2: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -prismjs@^1.27.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== - -process-warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" - integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -prompts@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -qs-esm@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/qs-esm/-/qs-esm-7.0.2.tgz#cdd52c8ddba8270258e0808423e8f28d8a7195c9" - integrity sha512-D8NAthKSD7SGn748v+GLaaO6k08Mvpoqroa35PqIQC4gtUa8/Pb/k+r0m0NnGBVbHDP1gKZ2nVywqfMisRhV5A== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -queue-tick@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" - integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== - -queue@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" - integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== - dependencies: - inherits "~2.0.3" - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-animate-height@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-animate-height/-/react-animate-height-2.1.2.tgz#9b450fc64d46f10f5e07da8d0d5e2c47b9f15030" - integrity sha512-A9jfz/4CTdsIsE7WCQtO9UkOpMBcBRh8LxyHl2eoZz1ki02jpyUL5xt58gabd0CyeLQ8fRyQ+s2lyV2Ufu8Owg== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.1" - -react-datepicker@6.9.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-6.9.0.tgz#0ad234dad81d567ae64cad79697bbad69c95490b" - integrity sha512-QTxuzeem7BUfVFWv+g5WuvzT0c5BPo+XTCNbMTZKSZQLU+cMMwSUHwspaxuIcDlwNcOH0tiJ+bh1fJ2yxOGYWA== - dependencies: - "@floating-ui/react" "^0.26.2" - clsx "^2.1.0" - date-fns "^3.3.1" - prop-types "^15.7.2" - react-onclickoutside "^6.13.0" - -react-diff-viewer-continued@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/react-diff-viewer-continued/-/react-diff-viewer-continued-3.2.6.tgz#96382463b5de6838d95323c407442349b1c3a26e" - integrity sha512-GrzyqQnjIMoej+jMjWvtVSsQqhXgzEGqpXlJ2dAGfOk7Q26qcm8Gu6xtI430PBUyZsERe8BJSQf+7VZZo8IBNQ== - dependencies: - "@emotion/css" "^11.10.5" - classnames "^2.3.1" - diff "^5.1.0" - memoize-one "^6.0.0" - prop-types "^15.8.1" - -react-dom@19.0.0-rc-06d0b89e-20240801: - version "19.0.0-rc-06d0b89e-20240801" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-rc-06d0b89e-20240801.tgz#aca3f1e12ffb34f8784ea6c81fe630e7e6f9cd1f" - integrity sha512-6JIbEXFwsRkI3gLKhcmjvQ3GKsP4NR/BjPyTKyp7xYeQEeiH01TypGVbc/K6nU1/y4jNGFGkxH3ZFbKKZwCecw== - dependencies: - scheduler "0.25.0-rc-06d0b89e-20240801" - -react-error-boundary@4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.13.tgz#80386b7b27b1131c5fbb7368b8c0d983354c7947" - integrity sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ== - dependencies: - "@babel/runtime" "^7.12.5" - -react-error-boundary@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0" - integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== - dependencies: - "@babel/runtime" "^7.12.5" - -react-image-crop@10.1.8: - version "10.1.8" - resolved "https://registry.yarnpkg.com/react-image-crop/-/react-image-crop-10.1.8.tgz#6f7b33d069f6cfb887e66faee16a9fb2e6d31137" - integrity sha512-4rb8XtXNx7ZaOZarKKnckgz4xLMvds/YrU6mpJfGhGAsy2Mg4mIw1x+DCCGngVGq2soTBVVOxx2s/C6mTX9+pA== - -react-is@^16.13.1, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-onclickoutside@^6.13.0: - version "6.13.1" - resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz#1f5e0241c08784b6e65745d91aca0d700c548a89" - integrity sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w== - -react-select@5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.8.0.tgz#bd5c467a4df223f079dd720be9498076a3f085b5" - integrity sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA== - dependencies: - "@babel/runtime" "^7.12.0" - "@emotion/cache" "^11.4.0" - "@emotion/react" "^11.8.1" - "@floating-ui/dom" "^1.0.1" - "@types/react-transition-group" "^4.4.0" - memoize-one "^6.0.0" - prop-types "^15.6.0" - react-transition-group "^4.3.0" - use-isomorphic-layout-effect "^1.1.2" - -react-transition-group@4.4.5, react-transition-group@^4.3.0: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react@19.0.0-rc-06d0b89e-20240801: - version "19.0.0-rc-06d0b89e-20240801" - resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-rc-06d0b89e-20240801.tgz#7f4f373b8e9d0e474369e06b53e59d3c476d9bce" - integrity sha512-moBKIME1GBgs8onH1xCs+gzPWyLF62m+2XbD4GpirxeRDca7GLA8UQZO9IuQvf1uxCpVWCG8FrpU/D2x7Plknw== - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-web-to-node-stream@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -real-require@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== - -reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.1" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.19.0, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.5: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -sanitize-filename@1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - -sass@1.77.4: - version "1.77.4" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.4.tgz#92059c7bfc56b827c56eb116778d157ec017a5cd" - integrity sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -scheduler@0.25.0-rc-06d0b89e-20240801: - version "0.25.0-rc-06d0b89e-20240801" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-06d0b89e-20240801.tgz#e4caa5ba06ed9fa7165827d4f046adfc1872167e" - integrity sha512-5RF+494IBigvBHUPYId9MhAWyN0cZZq3o82oAbYvZuc2IFc4mZYHS3z2MuJ5Lwm39zGWDEzB404X6BO47zbt5w== - -scheduler@0.25.0-rc-f994737d14-20240522: - version "0.25.0-rc-f994737d14-20240522" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-f994737d14-20240522.tgz#6bbdbf50adeb250035a26f082bf966077d264a7e" - integrity sha512-qS+xGFF7AljP2APO2iJe8zESNsK20k25MACz+WGOXPybUsRdi1ssvaoF93im2nSX2q/XT3wKkjdz6RQfbmaxdw== - -scmp@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scmp/-/scmp-2.1.0.tgz#37b8e197c425bdeb570ab91cc356b311a11f9c9a" - integrity sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q== - -secure-json-parse@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.5, semver@^7.3.8, semver@^7.5.4, semver@^7.6.0: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.1, set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -sharp@0.32.6: - version "0.32.6" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" - integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== - dependencies: - color "^4.2.3" - detect-libc "^2.0.2" - node-addon-api "^6.1.0" - prebuild-install "^7.1.1" - semver "^7.5.4" - simple-get "^4.0.1" - tar-fs "^3.0.4" - tunnel-agent "^0.6.0" - -sharp@^0.33.4: - version "0.33.4" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.4.tgz#b88e6e843e095c6ab5e1a0c59c4885e580cd8405" - integrity sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q== - dependencies: - color "^4.2.3" - detect-libc "^2.0.3" - semver "^7.6.0" - optionalDependencies: - "@img/sharp-darwin-arm64" "0.33.4" - "@img/sharp-darwin-x64" "0.33.4" - "@img/sharp-libvips-darwin-arm64" "1.0.2" - "@img/sharp-libvips-darwin-x64" "1.0.2" - "@img/sharp-libvips-linux-arm" "1.0.2" - "@img/sharp-libvips-linux-arm64" "1.0.2" - "@img/sharp-libvips-linux-s390x" "1.0.2" - "@img/sharp-libvips-linux-x64" "1.0.2" - "@img/sharp-libvips-linuxmusl-arm64" "1.0.2" - "@img/sharp-libvips-linuxmusl-x64" "1.0.2" - "@img/sharp-linux-arm" "0.33.4" - "@img/sharp-linux-arm64" "0.33.4" - "@img/sharp-linux-s390x" "0.33.4" - "@img/sharp-linux-x64" "0.33.4" - "@img/sharp-linuxmusl-arm64" "0.33.4" - "@img/sharp-linuxmusl-x64" "0.33.4" - "@img/sharp-wasm32" "0.33.4" - "@img/sharp-win32-ia32" "0.33.4" - "@img/sharp-win32-x64" "0.33.4" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4, side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -sift@16.0.1: - version "16.0.1" - resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.1.tgz#e9c2ccc72191585008cf3e36fc447b2d2633a053" - integrity sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -simple-wcswidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" - integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks@^2.7.1: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sonic-boom@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.0.1.tgz#515b7cef2c9290cb362c4536388ddeece07aed30" - integrity sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ== - dependencies: - atomic-sleep "^1.0.0" - -sonner@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sonner/-/sonner-1.5.0.tgz#af359f817063318415326b33aab54c5d17c747b7" - integrity sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA== - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" - integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== - dependencies: - memory-pager "^1.0.2" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -state-local@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" - integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== - -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -streamx@^2.15.0, streamx@^2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.18.0.tgz#5bc1a51eb412a667ebfdcd4e6cf6a6fc65721ac7" - integrity sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ== - dependencies: - fast-fifo "^1.3.2" - queue-tick "^1.0.1" - text-decoder "^1.1.0" - optionalDependencies: - bare-events "^2.2.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.includes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" - integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.matchall@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" - integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - regexp.prototype.flags "^1.5.2" - set-function-name "^2.0.2" - side-channel "^1.0.6" - -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -strtok3@^7.0.0-alpha.9: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-7.1.0.tgz#98856ed6651c2f7f0e8a436a54536a53528ecfb2" - integrity sha512-19dQEwG6Jd+VabjPRyBhymIF069vZiqWSZa2jJBoKJTsqGKnTxowGoQaLnz+yLARfDI041IUQekyPUMWElOgsQ== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^5.1.1" - -styled-jsx@5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" - integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== - dependencies: - client-only "0.0.1" - -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tabbable@^6.0.0, tabbable@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-fs@^3.0.4: - version "3.0.6" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" - integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== - dependencies: - pump "^3.0.0" - tar-stream "^3.1.5" - optionalDependencies: - bare-fs "^2.1.1" - bare-path "^2.1.0" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar-stream@^3.1.5: - version "3.1.7" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" - integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== - dependencies: - b4a "^1.6.4" - fast-fifo "^1.2.0" - streamx "^2.15.0" - -text-decoder@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.1.1.tgz#5df9c224cebac4a7977720b9f083f9efa1aefde8" - integrity sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA== - dependencies: - b4a "^1.6.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-stream@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" - integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== - dependencies: - real-require "^0.2.0" - -timers-ext@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.8.tgz#b4e442f10b7624a29dd2aa42c295e257150cf16c" - integrity sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww== - dependencies: - es5-ext "^0.10.64" - next-tick "^1.1.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -token-types@^5.0.0-alpha.2: - version "5.0.1" - resolved "https://registry.yarnpkg.com/token-types/-/token-types-5.0.1.tgz#aa9d9e6b23c420a675e55413b180635b86a093b4" - integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== - dependencies: - utf8-byte-length "^1.0.1" - -ts-api-utils@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -ts-essentials@7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^2.0.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - -tsx@4.17.0: - version "4.17.0" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.17.0.tgz#6ffd9851a0c7aa4ecacf4dc19f28d82112af25c5" - integrity sha512-eN4mnDA5UMKDt4YZixo9tBioibaMBpoxBkD+rIPAjVmYERSG0/dWEY1CEFuV89CgASlKL499q8AhmkMnnjtOJg== - dependencies: - esbuild "~0.23.0" - get-tsconfig "^4.7.5" - optionalDependencies: - fsevents "~2.3.3" - -tsx@^4.16.2: - version "4.16.2" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.16.2.tgz#8722be119ae226ef0b4c6210d5ee90f3ba823f19" - integrity sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ== - dependencies: - esbuild "~0.21.5" - get-tsconfig "^4.7.5" - optionalDependencies: - fsevents "~2.3.3" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" - integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== - -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - -typescript@5.5.2: - version "5.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507" - integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unicorn-magic@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" - integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== - -uri-js@^4.2.2, uri-js@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -use-context-selector@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/use-context-selector/-/use-context-selector-2.0.0.tgz#3b5dafec7aa947c152d4f0aa7f250e99a205df3d" - integrity sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g== - -use-isomorphic-layout-effect@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - -utf8-byte-length@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz#f9f63910d15536ee2b2d5dd4665389715eac5c1e" - integrity sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA== - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== - -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^8.16.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -xss@^1.0.6: - version "1.0.15" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a" - integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== - dependencies: - commander "^2.20.3" - cssfilter "0.0.10" - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" - integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== diff --git a/examples/multi-tenant/.env.example b/examples/multi-tenant/.env.example index 62d3b71930..9344c5560c 100644 --- a/examples/multi-tenant/.env.example +++ b/examples/multi-tenant/.env.example @@ -1,5 +1,3 @@ DATABASE_URI=mongodb://127.0.0.1/payload-example-multi-tenant PAYLOAD_SECRET=PAYLOAD_MULTI_TENANT_EXAMPLE_SECRET_KEY PAYLOAD_PUBLIC_SERVER_URL=http://localhost:3000 -PAYLOAD_SEED=true -PAYLOAD_DROP_DATABASE=true diff --git a/examples/multi-tenant/.npmrc b/examples/multi-tenant/.npmrc deleted file mode 100644 index 521a9f7c07..0000000000 --- a/examples/multi-tenant/.npmrc +++ /dev/null @@ -1 +0,0 @@ -legacy-peer-deps=true diff --git a/examples/multi-tenant-single-domain/.swcrc b/examples/multi-tenant/.swcrc similarity index 100% rename from examples/multi-tenant-single-domain/.swcrc rename to examples/multi-tenant/.swcrc diff --git a/examples/multi-tenant/README.md b/examples/multi-tenant/README.md index 2dba0d5f25..492a1fde4b 100644 --- a/examples/multi-tenant/README.md +++ b/examples/multi-tenant/README.md @@ -1,24 +1,27 @@ # Payload Multi-Tenant Example -This example demonstrates how to achieve a multi-tenancy in [Payload](https://github.com/payloadcms/payload). This is a powerful way to vertically scale your application by sharing infrastructure across tenants. +This example demonstrates how to achieve a multi-tenancy in [Payload](https://github.com/payloadcms/payload). Tenants are separated by a `Tenants` collection. ## Quick Start To spin up this example locally, follow these steps: -1. First clone the repo -1. Then `cd YOUR_PROJECT_REPO && cp .env.example .env` -1. Next `yarn && yarn dev` -1. Now `open http://localhost:3000/admin` to access the admin panel -1. Login with email `demo@payloadcms.com` and password `demo` +1. Clone this repo +1. `cd` into this directory and run `pnpm i --ignore-workspace`\*, `yarn`, or `npm install` -That's it! Changes made in `./src` will be reflected in your app. See the [Development](#development) section for more details on how to log in as a tenant. + > \*If you are running using pnpm within the Payload Monorepo, the `--ignore-workspace` flag is needed so that pnpm generates a lockfile in this example's directory despite the fact that one exists in root. + +1. `pnpm dev`, `yarn dev` or `npm run dev` to start the server + - Press `y` when prompted to seed the database +1. `open http://localhost:3000` to access the home page +1. `open http://localhost:3000/admin` to access the admin panel + - Login with email `demo@payloadcms.com` and password `demo` ## How it works A multi-tenant Payload application is a single server that hosts multiple "tenants". Examples of tenants may be your agency's clients, your business conglomerate's organizations, or your SaaS customers. -Each tenant has its own set of users, pages, and other data that is scoped to that tenant. This means that your application will be shared across tenants but the data will be scoped to each tenant. Tenants also run on separate domains entirely, so users are not aware of their tenancy. +Each tenant has its own set of users, pages, and other data that is scoped to that tenant. This means that your application will be shared across tenants but the data will be scoped to each tenant. ### Collections @@ -36,9 +39,15 @@ See the [Collections](https://payloadcms.com/docs/configuration/collections) doc For more details on how to extend this functionality, see the [Payload Access Control](https://payloadcms.com/docs/access-control/overview) docs. + **Domain-based Tenant Setting**: + + This example also supports domain-based tenant selection, where tenants can be associated with specific domains. If a tenant is associated with a domain (e.g., `abc.localhost.com:3000`), when a user logs in from that domain, they will be automatically scoped to the matching tenant. This is accomplished through an optional `afterLogin` hook that sets a `payload-tenant` cookie based on the domain. + + By default, this functionality is commented out in the code but can be enabled easily. See the `setCookieBasedOnDomain` hook in the `Users` collection for more details. + - #### Pages - Each page is assigned a `tenant` which is used to control access and scope API requests. Pages that are created by tenants are automatically assigned that tenant based on that user's `lastLoggedInTenant` field. + Each page is assigned a `tenant`, which is used to control access and scope API requests. Only users with the `super-admin` role can create pages, and pages are assigned to specific tenants. Other users can view only the pages assigned to the tenant they are associated with. ## Access control @@ -53,8 +62,6 @@ This applies to each collection in the following ways: - `tenants`: Only super-admins and tenant-admins can read, create, update, or delete tenants. See [Tenants](#tenants) for more details. - `pages`: Everyone can access pages, but only super-admins and tenant-admins can create, update, or delete them. -When a user logs in, a `lastLoggedInTenant` field is saved to their profile. This is done by reading the value of `req.headers.host`, querying for a tenant with a matching `domain`, and verifying that the user is a member of that tenant. This field is then used to automatically assign the tenant to any documents that the user creates, such as pages. Super-admins can also use this field to browse the admin panel as a specific tenant. - > If you have versions and drafts enabled on your pages, you will need to add additional read access control condition to check the user's tenants that prevents them from accessing draft documents of other tenants. For more details on how to extend this functionality, see the [Payload Access Control](https://payloadcms.com/docs/access-control/overview#access-control) docs. @@ -69,63 +76,7 @@ For more details on this, see the [CORS](https://payloadcms.com/docs/production/ ## Front-end -If you're building a website or other front-end for your tenant, you will need specify the `tenant` in your requests. For example, if you wanted to fetch all pages for the tenant `ABC`, you would make a request to `/api/pages?where[tenant][slug][equals]=abc`. - -For a head start on building a website for your tenant(s), check out the official [Website Template](https://github.com/payloadcms/template-website). It includes a page layout builder, preview, SEO, and much more. It is not multi-tenant, though, but you can easily take the concepts from that example and apply them here. - -## Development - -To spin up this example locally, follow the [Quick Start](#quick-start). - -### Seed - -On boot, a seed script is included to scaffold a basic database for you to use as an example. This is done by setting the `PAYLOAD_DROP_DATABASE` and `PAYLOAD_SEED` environment variables which are included in the `.env.example` by default. You can remove these from your `.env` to prevent this behavior. You can also freshly seed your project at any time by running `yarn seed`. This seed creates a super-admin user with email `demo@payloadcms.com` and password `demo` along with the following tenants: - -- `ABC` - - Domains: - - `abc.localhost.com:3000` - - Users: - - `admin@abc.com` with role `admin` and password `test` - - `user@abc.com` with role `user` and password `test` - - Pages: - - `ABC Home` with content `Hello, ABC!` -- `BBC` - - Domains: - - `bbc.localhost.com:3000` - - Users: - - `admin@bbc.com` with role `admin` and password `test` - - `user@bbc.com` with role `user` and password `test` - - Pages: - - `BBC Home` with content `Hello, BBC!` - -> NOTICE: seeding the database is destructive because it drops your current database to populate a fresh one from the seed template. Only run this command if you are starting a new project or can afford to lose your current data. - -### Hosts file - -To fully experience the multi-tenancy of this example locally, your app must run on one of the domains listed in any of your tenant's `domains` field. The simplest way to do this to add the following lines to your hosts file. - -```bash -# these domains were provided in the seed script -# if needed, change them based on your own tenant settings -# remember to specify the port number when browsing to these domains -127.0.0.1 abc.localhost.com -127.0.0.1 bbc.localhost.com -``` - -> On Mac you can find the hosts file at `/etc/hosts`. On Windows, it's at `C:\Windows\System32\drivers\etc\hosts`. - -Then you can access your app at `http://abc.localhost.com:3000` and `http://bbc.localhost.com:3000`. Access control will be scoped to the correct tenant based on that user's `tenants`, see [Access Control](#access-control) for more details. - -## Production - -To run Payload in production, you need to build and serve the Admin panel. To do so, follow these steps: - -1. First, invoke the `payload build` script by running `yarn build` or `npm run build` in your project root. This creates a `./build` directory with a production-ready admin bundle. -1. Then, run `yarn serve` or `npm run serve` to run Node in production and serve Payload from the `./build` directory. - -### Deployment - -The easiest way to deploy your project is to use [Payload Cloud](https://payloadcms.com/new/import), a one-click hosting solution to deploy production-ready instances of your Payload apps directly from your GitHub repo. You can also choose to self-host your app, check out the [Deployment](https://payloadcms.com/docs/production/deployment) docs for more details. +The frontend is scaffolded out in this example directory. You can view the code for rendering pages at `/src/app/(app)/[tenant]/[...slug]/page.tsx`. This is a starter template, you may need to adjust the app to better fit your needs. ## Questions diff --git a/examples/multi-tenant-single-domain/next-env.d.ts b/examples/multi-tenant/next-env.d.ts similarity index 53% rename from examples/multi-tenant-single-domain/next-env.d.ts rename to examples/multi-tenant/next-env.d.ts index 4f11a03dc6..40c3d68096 100644 --- a/examples/multi-tenant-single-domain/next-env.d.ts +++ b/examples/multi-tenant/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/examples/multi-tenant-single-domain/next.config.mjs b/examples/multi-tenant/next.config.mjs similarity index 100% rename from examples/multi-tenant-single-domain/next.config.mjs rename to examples/multi-tenant/next.config.mjs diff --git a/examples/multi-tenant/nodemon.json b/examples/multi-tenant/nodemon.json deleted file mode 100644 index 43ca917095..0000000000 --- a/examples/multi-tenant/nodemon.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ext": "ts", - "exec": "ts-node src/server.ts -- -I", - "stdin": false -} diff --git a/examples/multi-tenant/package.json b/examples/multi-tenant/package.json index df1956e9ef..580565046e 100644 --- a/examples/multi-tenant/package.json +++ b/examples/multi-tenant/package.json @@ -1,49 +1,55 @@ { - "name": "payload-example-multi-tenant", - "description": "Payload multi-tenant example.", + "name": "multi-tenant", "version": "1.0.0", - "main": "dist/server.js", + "description": "An example of a multi tenant application with Payload", "license": "MIT", + "type": "module", "scripts": { - "dev": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts nodemon", - "seed": "rm -rf media && cross-env PAYLOAD_SEED=true PAYLOAD_DROP_DATABASE=true PAYLOAD_CONFIG_PATH=src/payload.config.ts ts-node src/server.ts", - "build:payload": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts payload build", - "build:server": "tsc", - "build": "yarn copyfiles && yarn build:payload && yarn build:server", - "serve": "cross-env PAYLOAD_CONFIG_PATH=dist/payload.config.js NODE_ENV=production node dist/server.js", - "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png}\" dist/", - "generate:types": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts payload generate:types", - "generate:graphQLSchema": "PAYLOAD_CONFIG_PATH=src/payload.config.ts payload generate:graphQLSchema", - "lint": "eslint src", - "lint:fix": "eslint --fix --ext .ts,.tsx src" + "_dev": "cross-env NODE_OPTIONS=--no-deprecation next dev", + "build": "cross-env NODE_OPTIONS=--no-deprecation next build", + "dev": "cross-env NODE_OPTIONS=--no-deprecation && pnpm seed && next dev", + "generate:schema": "payload-graphql generate:schema", + "generate:types": "payload generate:types", + "payload": "cross-env NODE_OPTIONS=--no-deprecation payload", + "seed": "npm run payload migrate:fresh", + "start": "cross-env NODE_OPTIONS=--no-deprecation next start" }, "dependencies": { - "@payloadcms/bundler-webpack": "latest", - "@payloadcms/db-mongodb": "latest", - "@payloadcms/richtext-slate": "latest", + "@payloadcms/db-mongodb": "3.0.0-beta.112", + "@payloadcms/next": "3.0.0-beta.112", + "@payloadcms/richtext-lexical": "3.0.0-beta.112", + "@payloadcms/ui": "3.0.0-beta.112", + "cross-env": "^7.0.3", "dotenv": "^8.2.0", - "express": "^4.17.1", - "payload": "latest" + "graphql": "^16.9.0", + "next": "15.0.0-canary.173", + "payload": "3.0.0-beta.112", + "qs": "^6.12.1", + "react": "19.0.0-rc-3edc000d-20240926", + "react-dom": "19.0.0-rc-3edc000d-20240926", + "sharp": "0.32.6" }, "devDependencies": { - "@payloadcms/eslint-config": "^0.0.1", - "@types/express": "^4.17.9", - "@types/node": "18.11.3", - "@types/react": "18.0.21", - "@typescript-eslint/eslint-plugin": "^5.51.0", - "@typescript-eslint/parser": "^5.51.0", - "copyfiles": "^2.4.1", - "cross-env": "^7.0.3", - "eslint": "^8.19.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-simple-import-sort": "^10.0.0", - "nodemon": "^2.0.6", - "prettier": "^2.7.1", - "ts-node": "^9.1.1", - "typescript": "^4.8.4" + "@payloadcms/graphql": "3.0.0-beta.112", + "@swc/core": "^1.6.13", + "@types/react": "npm:types-react@19.0.0-rc.1", + "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", + "eslint": "^8.57.0", + "eslint-config-next": "15.0.0-canary.173", + "tsx": "^4.16.2", + "typescript": "5.5.2" + }, + "engines": { + "node": "^18.20.2 || >=20.9.0" + }, + "pnpm": { + "overrides": { + "@types/react": "npm:types-react@19.0.0-rc.1", + "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1" + } + }, + "overrides": { + "@types/react": "npm:types-react@19.0.0-rc.1", + "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1" } } diff --git a/examples/multi-tenant/pnpm-lock.yaml b/examples/multi-tenant/pnpm-lock.yaml new file mode 100644 index 0000000000..822b53c86f --- /dev/null +++ b/examples/multi-tenant/pnpm-lock.yaml @@ -0,0 +1,7316 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + '@types/react': npm:types-react@19.0.0-rc.1 + '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + +importers: + + .: + dependencies: + '@payloadcms/db-mongodb': + specifier: 3.0.0-beta.112 + version: 3.0.0-beta.112(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2)) + '@payloadcms/next': + specifier: 3.0.0-beta.112 + version: 3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(next@15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)(typescript@5.5.2) + '@payloadcms/richtext-lexical': + specifier: 3.0.0-beta.112 + version: 3.0.0-beta.112(qhftob2zl2tsokyheqjue5finm) + '@payloadcms/ui': + specifier: 3.0.0-beta.112 + version: 3.0.0-beta.112(monaco-editor@0.38.0)(next@15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)(typescript@5.5.2) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + dotenv: + specifier: ^8.2.0 + version: 8.6.0 + graphql: + specifier: ^16.9.0 + version: 16.9.0 + next: + specifier: 15.0.0-canary.173 + version: 15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + payload: + specifier: 3.0.0-beta.112 + version: 3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2) + qs: + specifier: ^6.12.1 + version: 6.13.0 + react: + specifier: 19.0.0-rc-3edc000d-20240926 + version: 19.0.0-rc-3edc000d-20240926 + react-dom: + specifier: 19.0.0-rc-3edc000d-20240926 + version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + sharp: + specifier: 0.32.6 + version: 0.32.6 + devDependencies: + '@payloadcms/graphql': + specifier: 3.0.0-beta.112 + version: 3.0.0-beta.112(graphql@16.9.0)(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(typescript@5.5.2) + '@swc/core': + specifier: ^1.6.13 + version: 1.7.28(@swc/helpers@0.5.13) + '@types/react': + specifier: npm:types-react@19.0.0-rc.1 + version: types-react@19.0.0-rc.1 + '@types/react-dom': + specifier: npm:types-react-dom@19.0.0-rc.1 + version: types-react-dom@19.0.0-rc.1 + eslint: + specifier: ^8.57.0 + version: 8.57.1 + eslint-config-next: + specifier: 15.0.0-canary.173 + version: 15.0.0-canary.173(eslint@8.57.1)(typescript@5.5.2) + tsx: + specifier: ^4.16.2 + version: 4.19.1 + typescript: + specifier: 5.5.2 + version: 5.5.2 + +packages: + + '@apidevtools/json-schema-ref-parser@11.7.0': + resolution: {integrity: sha512-pRrmXMCwnmrkS3MLgAIW5dXRzeTv6GLjkjb4HmxNnvAKXN1Nfzp4KmGADBQvlVUcqi+a5D+hfGDLLnd5NnYxog==} + engines: {node: '>= 16'} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-cognito-identity@3.658.1': + resolution: {integrity: sha512-MCYLKmNy0FlNT9TvXfOxj0jh+ZQq+G9qEy/VZqu3JsQSgiFvFRdzgzcbQ9gQx7fZrDC/TPdABOTh483zI4cu9g==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso-oidc@3.658.1': + resolution: {integrity: sha512-RGcZAI3qEA05JszPKwa0cAyp8rnS1nUvs0Sqw4hqLNQ1kD7b7V6CPjRXe7EFQqCOMvM4kGqx0+cEEVTOmBsFLw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.658.1 + + '@aws-sdk/client-sso@3.658.1': + resolution: {integrity: sha512-lOuaBtqPTYGn6xpXlQF4LsNDsQ8Ij2kOdnk+i69Kp6yS76TYvtUuukyLL5kx8zE1c8WbYtxj9y8VNw9/6uKl7Q==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sts@3.658.1': + resolution: {integrity: sha512-yw9hc5blTnbT1V6mR7Cx9HGc9KQpcLQ1QXj8rntiJi6tIYu3aFNVEyy81JHL7NsuBSeQulJTvHO3y6r3O0sfRg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/core@3.658.1': + resolution: {integrity: sha512-vJVMoMcSKXK2gBRSu9Ywwv6wQ7tXH8VL1fqB1uVxgCqBZ3IHfqNn4zvpMPWrwgO2/3wv7XFyikGQ5ypPTCw4jA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-cognito-identity@3.658.1': + resolution: {integrity: sha512-JY4rZ4e2emL7PNHCU7F/BQV8PpQGEBZLkEoPD55RO4CitaIhlVZRpUCGLih+0Hw4MOnTUqJdfQBM+qZk6G+Now==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-env@3.654.0': + resolution: {integrity: sha512-kogsx3Ql81JouHS7DkheCDU9MYAvK0AokxjcshDveGmf7BbgbWCA8Fnb9wjQyNDaOXNvkZu8Z8rgkX91z324/w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-http@3.658.1': + resolution: {integrity: sha512-4ubkJjEVCZflxkZnV1JDQv8P2pburxk1LrEp55telfJRzXrnowzBKwuV2ED0QMNC448g2B3VCaffS+Ct7c4IWQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-ini@3.658.1': + resolution: {integrity: sha512-2uwOamQg5ppwfegwen1ddPu5HM3/IBSnaGlaKLFhltkdtZ0jiqTZWUtX2V+4Q+buLnT0hQvLS/frQ+7QUam+0Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.658.1 + + '@aws-sdk/credential-provider-node@3.658.1': + resolution: {integrity: sha512-XwxW6N+uPXPYAuyq+GfOEdfL/MZGAlCSfB5gEWtLBFmFbikhmEuqfWtI6CD60OwudCUOh6argd21BsJf8o1SJA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-process@3.654.0': + resolution: {integrity: sha512-PmQoo8sZ9Q2Ow8OMzK++Z9lI7MsRUG7sNq3E72DVA215dhtTICTDQwGlXH2AAmIp7n+G9LLRds+4wo2ehG4mkg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-sso@3.658.1': + resolution: {integrity: sha512-YOagVEsZEk9DmgJEBg+4MBXrPcw/tYas0VQ5OVBqC5XHNbi2OBGJqgmjVPesuu393E7W0VQxtJFDS00O1ewQgA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.654.0': + resolution: {integrity: sha512-6a2g9gMtZToqSu+CusjNK5zvbLJahQ9di7buO3iXgbizXpLXU1rnawCpWxwslMpT5fLgMSKDnKDrr6wdEk7jSw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.654.0 + + '@aws-sdk/credential-providers@3.658.1': + resolution: {integrity: sha512-lfXA6kZS6GHyi/67EbfrKdLoqHR6j7G35eFwaqxyNkfMhNBpAF0eZK3SYiwnzdR9+Wb/enTFawYiFbG5R+dQzA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-host-header@3.654.0': + resolution: {integrity: sha512-rxGgVHWKp8U2ubMv+t+vlIk7QYUaRCHaVpmUlJv0Wv6Q0KeO9a42T9FxHphjOTlCGQOLcjCreL9CF8Qhtb4mdQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-logger@3.654.0': + resolution: {integrity: sha512-OQYb+nWlmASyXfRb989pwkJ9EVUMP1CrKn2eyTk3usl20JZmKo2Vjis6I0tLUkMSxMhnBJJlQKyWkRpD/u1FVg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.654.0': + resolution: {integrity: sha512-gKSomgltKVmsT8sC6W7CrADZ4GHwX9epk3GcH6QhebVO3LA9LRbkL3TwOPUXakxxOLLUTYdOZLIOtFf7iH00lg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-user-agent@3.654.0': + resolution: {integrity: sha512-liCcqPAyRsr53cy2tYu4qeH4MMN0eh9g6k56XzI5xd4SghXH5YWh4qOYAlQ8T66ZV4nPMtD8GLtLXGzsH8moFg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/region-config-resolver@3.654.0': + resolution: {integrity: sha512-ydGOrXJxj3x0sJhsXyTmvJVLAE0xxuTWFJihTl67RtaO7VRNtd82I3P3bwoMMaDn5WpmV5mPo8fEUDRlBm3fPg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/token-providers@3.654.0': + resolution: {integrity: sha512-D8GeJYmvbfWkQDtTB4owmIobSMexZel0fOoetwvgCQ/7L8VPph3Q2bn1TRRIXvH7wdt6DcDxA3tKMHPBkT3GlA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.654.0 + + '@aws-sdk/types@3.654.0': + resolution: {integrity: sha512-VWvbED3SV+10QJIcmU/PKjsKilsTV16d1I7/on4bvD/jo1qGeMXqLDBSen3ks/tuvXZF/mFc7ZW/W2DiLVtO7A==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-endpoints@3.654.0': + resolution: {integrity: sha512-i902fcBknHs0Irgdpi62+QMvzxE+bczvILXigYrlHL4+PiEnlMVpni5L5W1qCkNZXf8AaMrSBuR1NZAGp6UOUw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-locate-window@3.568.0': + resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-user-agent-browser@3.654.0': + resolution: {integrity: sha512-ykYAJqvnxLt7wfrqya28wuH3/7NdrwzfiFd7NqEVQf7dXVxL5RPEpD7DxjcyQo3DsHvvdUvGZVaQhozycn1pzA==} + + '@aws-sdk/util-user-agent-node@3.654.0': + resolution: {integrity: sha512-a0ojjdBN6pqv6gB4H/QPPSfhs7mFtlVwnmKCM/QrTaFzN0U810PJ1BST3lBx5sa23I5jWHGaoFY+5q65C3clLQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + + '@dnd-kit/accessibility@3.1.0': + resolution: {integrity: sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==} + peerDependencies: + react: '>=16.8.0' + + '@dnd-kit/core@6.0.8': + resolution: {integrity: sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@dnd-kit/sortable@7.0.2': + resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==} + peerDependencies: + '@dnd-kit/core': ^6.0.7 + react: '>=16.8.0' + + '@dnd-kit/utilities@3.2.2': + resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} + peerDependencies: + react: '>=16.8.0' + + '@emnapi/runtime@1.2.0': + resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + + '@emotion/babel-plugin@11.12.0': + resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} + + '@emotion/cache@11.13.1': + resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} + + '@emotion/css@11.13.0': + resolution: {integrity: sha512-BUk99ylT+YHl+W/HN7nv1RCTkDYmKKqa1qbvM/qLSQEg61gipuBF5Hptk/2/ERmX2DCv0ccuFGhz9i0KSZOqPg==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.13.3': + resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.2': + resolution: {integrity: sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0': + resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.1': + resolution: {integrity: sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@faceless-ui/modal@3.0.0-beta.2': + resolution: {integrity: sha512-UmXvz7Iw3KMO4Pm3llZczU4uc5pPQDb6rdqwoBvYDFgWvkraOAHKx0HxSZgwqQvqOhn8joEFBfFp6/Do2562ow==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 + + '@faceless-ui/scroll-info@2.0.0-beta.0': + resolution: {integrity: sha512-pUBhQP8vduA7rVndNsjhaCcds1BykA/Q4iV23JWijU6ZFL/M3Fm9P3ypDS+0VVxolqemNhw8S3FXPwZGgjH4Rw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 + + '@faceless-ui/window-info@3.0.0-beta.0': + resolution: {integrity: sha512-Qs8xRA+fl4sU2aFVe9xawxfi5TVZ9VTPuhdQpx9aSv7U5a2F0AXwT61lJfnaJ9Flm8tOcxzq67p8cVZsXNCVeQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.11': + resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.26.24': + resolution: {integrity: sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@lexical/clipboard@0.16.1': + resolution: {integrity: sha512-0dWs/SwKS5KPpuf6fUVVt9vSCl6HAqcDGhSITw/okv0rrIlXTUT6WhVsMJtXfFxTyVvwMeOecJHvQH3i/jRQtA==} + + '@lexical/code@0.16.1': + resolution: {integrity: sha512-pOC28rRZ2XkmI2nIJm50DbKaCJtk5D0o7r6nORYp4i0z+lxt5Sf2m82DL9ksUHJRqKy87pwJDpoWvJ2SAI0ohw==} + + '@lexical/devtools-core@0.16.1': + resolution: {integrity: sha512-8CvGERGL7ySDVGLU+YPeq+JupIXsOFlXa3EuJ88koLKqXxYenwMleZgGqayFp6lCP78xqPKnATVeoOZUt/NabQ==} + peerDependencies: + react: '>=17.x' + react-dom: '>=17.x' + + '@lexical/dragon@0.16.1': + resolution: {integrity: sha512-Rvd60GIYN5kpjjBumS34EnNbBaNsoseI0AlzOdtIV302jiHPCLH0noe9kxzu9nZy+MZmjZy8Dx2zTbQT2mueRw==} + + '@lexical/hashtag@0.16.1': + resolution: {integrity: sha512-G+YOxStAKs3q1utqm9KR4D4lCkwIH52Rctm4RgaVTI+4lvTaybeDRGFV75P/pI/qlF7/FvAYHTYEzCjtC3GNMQ==} + + '@lexical/headless@0.16.1': + resolution: {integrity: sha512-L00TQk9vD1o7c25QMNdwD7MvkmQYP/jebG2M8GbX/3KSjHag2QB8MwcFlccSGXBhmbVm1X1Zo7z7urxY//3atw==} + + '@lexical/history@0.16.1': + resolution: {integrity: sha512-WQhScx0TJeKSQAnEkRpIaWdUXqirrNrom2MxbBUc/32zEUMm9FzV7nRGknvUabEFUo7vZq6xTZpOExQJqHInQA==} + + '@lexical/html@0.16.1': + resolution: {integrity: sha512-vbtAdCvQ3PaAqa5mFmtmrvbiAvjCu1iXBAJ0bsHqFXCF2Sba5LwHVe8dUAOTpfEZEMbiHfjul6b5fj4vNPGF2A==} + + '@lexical/link@0.16.1': + resolution: {integrity: sha512-zG36gEnEqbIe6tK/MhXi7wn/XMY/zdivnPcOY5WyC3derkEezeLSSIFsC1u5UNeK5pbpNMSy4LDpLhi1Ww4Y5w==} + + '@lexical/list@0.16.1': + resolution: {integrity: sha512-i9YhLAh5N6YO9dP+R1SIL9WEdCKeTiQQYVUzj84vDvX5DIBxMPUjTmMn3LXu9T+QO3h1s2L/vJusZASrl45eAw==} + + '@lexical/mark@0.16.1': + resolution: {integrity: sha512-CZRGMLcxn5D+jzf1XnH+Z+uUugmpg1mBwTbGybCPm8UWpBrKDHkrscfMgWz62iRWz0cdVjM5+0zWpNElxFTRjQ==} + + '@lexical/markdown@0.16.1': + resolution: {integrity: sha512-0sBLttMvfQO/hVaIqpHdvDowpgV2CoRuWo2CNwvRLZPPWvPVjL4Nkb73wmi8zAZsAOTbX2aw+g4m/+k5oJqNig==} + + '@lexical/offset@0.16.1': + resolution: {integrity: sha512-/i2J04lQmFeydUZIF8tKXLQTXiJDTQ6GRnkfv1OpxU4amc0rwGa7+qAz/PuF1n58rP6InpLmSHxgY5JztXa2jw==} + + '@lexical/overflow@0.16.1': + resolution: {integrity: sha512-xh5YpoxwA7K4wgMQF/Sjl8sdjaxqesLCtH5ZrcMsaPlmucDIEEs+i8xxk+kDUTEY7y+3FvRxs4lGNgX8RVWkvQ==} + + '@lexical/plain-text@0.16.1': + resolution: {integrity: sha512-GjY4ylrBZIaAVIF8IFnmW0XGyHAuRmWA6gKB8iTTlsjgFrCHFIYC74EeJSp309O0Hflg9rRBnKoX1TYruFHVwA==} + + '@lexical/react@0.16.1': + resolution: {integrity: sha512-SsGgLt9iKfrrMRy9lFb6ROVPUYOgv6b+mCn9Al+TLqs/gBReDBi3msA7m526nrtBUKYUnjHdQ1QXIJzuKgOxcg==} + peerDependencies: + react: '>=17.x' + react-dom: '>=17.x' + + '@lexical/rich-text@0.16.1': + resolution: {integrity: sha512-4uEVXJur7tdSbqbmsToCW4YVm0AMh4y9LK077Yq2O9hSuA5dqpI8UbTDnxZN2D7RfahNvwlqp8eZKFB1yeiJGQ==} + + '@lexical/selection@0.16.1': + resolution: {integrity: sha512-+nK3RvXtyQvQDq7AZ46JpphmM33pwuulwiRfeXR5T9iFQTtgWOEjsAi/KKX7vGm70BxACfiSxy5QCOgBWFwVJg==} + + '@lexical/table@0.16.1': + resolution: {integrity: sha512-GWb0/MM1sVXpi1p2HWWOBldZXASMQ4c6WRNYnRmq7J/aB5N66HqQgJGKp3m66Kz4k1JjhmZfPs7F018qIBhnFQ==} + + '@lexical/text@0.16.1': + resolution: {integrity: sha512-Os/nKQegORTrKKN6vL3/FMVszyzyqaotlisPynvTaHTUC+yY4uyjM2hlF93i5a2ixxyiPLF9bDroxUP96TMPXg==} + + '@lexical/utils@0.16.1': + resolution: {integrity: sha512-BVyJxDQi/rIxFTDjf2zE7rMDKSuEaeJ4dybHRa/hRERt85gavGByQawSLeQlTjLaYLVsy+x7wCcqh2fNhlLf0g==} + + '@lexical/yjs@0.16.1': + resolution: {integrity: sha512-QHw1bmzB/IypIV1tRWMH4hhwE1xX7wV+HxbzBS8oJAkoU5AYXM/kyp/sQicgqiwVfpai1Px7zatOoUDFgbyzHQ==} + peerDependencies: + yjs: '>=13.5.22' + + '@monaco-editor/loader@1.4.0': + resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==} + peerDependencies: + monaco-editor: '>= 0.21.0 < 1' + + '@monaco-editor/react@4.6.0': + resolution: {integrity: sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==} + peerDependencies: + monaco-editor: '>= 0.25.0 < 1' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@mongodb-js/saslprep@1.1.9': + resolution: {integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==} + + '@next/env@15.0.0-canary.173': + resolution: {integrity: sha512-ly6s88DqV1BSu4dthaU9/eTjyZDUeEC7KpXwnH0u4w2hu10ickyEFv52s7MXItoiiurtUorpg8h5nlK98UNQiQ==} + + '@next/env@15.0.0-rc.0': + resolution: {integrity: sha512-6W0ndQvHR9sXcqcKeR/inD2UTRCs9+VkSK3lfaGmEuZs7EjwwXMO2BPYjz9oBrtfPL3xuTjtXsHKSsalYQ5l1Q==} + + '@next/eslint-plugin-next@15.0.0-canary.173': + resolution: {integrity: sha512-4nYoVrqN1HwXH3k+r79jxRWNyqBNYioarBwyY9RkFIJkduGAP0us0y9C4DFY+3SdZql4WtyRZMgn6WfwHeE7sA==} + + '@next/swc-darwin-arm64@15.0.0-canary.173': + resolution: {integrity: sha512-peEFAtJDrSpnVL0VKqmbvBzbgxuOdwT+Y86PGMNkh6zEctodQ0Ka5YBlsu5Tjzkzkbn1xMpIpxurbqnsMwHeOQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.0.0-canary.173': + resolution: {integrity: sha512-mXrx5JDB8lSSBRrzGOVrvt3155c4B5ctn8hBuWdsHaMpnbwg6zQtSESp2z8pcMyXFAWaJqpYJ+ImH3M0VdYzyw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.0.0-canary.173': + resolution: {integrity: sha512-1rUBlXBKPQYe12+bddrD5GHG0sS7KD0aKDUoLAxXJ4iCPThdhOmT8PexJDBOE6D9JL1Lp5L4G01ntbRf360Jgw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.0.0-canary.173': + resolution: {integrity: sha512-6LjAq3zrmc8Dz8sao+ZtbjdUe9dkTMpv7MazHy6lAB33+mg9SwYuyvsg/YFRKlS2NetB8Gy1Fd+85YX6wYYiSQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.0.0-canary.173': + resolution: {integrity: sha512-x72YkJvmqH/1PzMyQ2VUnL/Bsbn+aDodr/KNhj42uEhhxUEXOkfJT8k8iwjbN7rhP+Oid7qWmd7w3FPkL9pOvg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.0.0-canary.173': + resolution: {integrity: sha512-DYOLKH97iTQRVatqJpxgCgUKdkgwtiza2mmLAC3roPSc/vPltwTvGDPtKKKiZ7Rn18VGe4GMb5j1DVUgnAzKMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.0.0-canary.173': + resolution: {integrity: sha512-wpOF0WMiiGeTbTvdaS20FhjyQl2qUsawN9oUNx/SKcOtHzjt2kBZiwtZmLNSdu9lSW3LPBpRxMA4EPf9ukjAxw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-ia32-msvc@15.0.0-canary.173': + resolution: {integrity: sha512-VSOMf/GbBYHkuly/hSGbam5AQfkdgTPZOdcrFalHd03Q1mEL4GCJBRRqu/ejGBHTI1CNsFekEyVBJ0GpZQkFTg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@next/swc-win32-x64-msvc@15.0.0-canary.173': + resolution: {integrity: sha512-JBwVQkiebNPVxk70TCbbxcG/JpIAnd/XKKt0LDeQf51HDdyGfu6MN3OZC3uqm2h1vb1FGDPOX1u9Klf5yek+nA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@payloadcms/db-mongodb@3.0.0-beta.112': + resolution: {integrity: sha512-O6SmfvbPdKSassuv71LSgvWzHetalu4qii3guEmXk5Kw1DUh1W0bqa6wBBoWUqcJXzpmnRIO91UoBoFfPOl3Kw==} + peerDependencies: + payload: 3.0.0-beta.112 + + '@payloadcms/graphql@3.0.0-beta.112': + resolution: {integrity: sha512-StVNPPAEen0KCwdDgurDBfKIFaQb8xPF10EqjDGRy0wUo9ahOrmovpXUcW6BmftTVdy0tQDsiQjjDZpoWta9WQ==} + hasBin: true + peerDependencies: + graphql: ^16.8.1 + payload: 3.0.0-beta.112 + + '@payloadcms/next@3.0.0-beta.112': + resolution: {integrity: sha512-uvK/k69beDi2fmevybzDN/Sbf/FhgiMY1XNQmK7gdAYuiQn5c7T8qBTmJornrAZXtHwmrJdSbnIhUodqFuOhqw==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + graphql: ^16.8.1 + next: ^15.0.0-canary.173 + payload: 3.0.0-beta.112 + + '@payloadcms/richtext-lexical@3.0.0-beta.112': + resolution: {integrity: sha512-jSNdNyZPvOl5rw7wn54mZNuCDQWeBSgXcC7XYIKr4ufE2l3dvtasCOu1v2mCdAY+NLWNDOKakuCIHbxndP9DQg==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + '@faceless-ui/modal': 3.0.0-beta.2 + '@faceless-ui/scroll-info': 2.0.0-beta.0 + '@lexical/headless': 0.18.0 + '@lexical/link': 0.18.0 + '@lexical/list': 0.18.0 + '@lexical/mark': 0.18.0 + '@lexical/markdown': 0.18.0 + '@lexical/react': 0.18.0 + '@lexical/rich-text': 0.18.0 + '@lexical/selection': 0.18.0 + '@lexical/table': 0.18.0 + '@lexical/utils': 0.18.0 + '@payloadcms/next': 3.0.0-beta.112 + lexical: 0.18.0 + payload: 3.0.0-beta.112 + react: ^19.0.0 || ^19.0.0-rc-3edc000d-20240926 + react-dom: ^19.0.0 || ^19.0.0-rc-3edc000d-20240926 + + '@payloadcms/translations@3.0.0-beta.112': + resolution: {integrity: sha512-IvUYpRzp7c0JFDdFlnCTo4zL5rr4UPcoe9kT+N+Qpxco6xY86dCmCVHFLRP1zF59Txik25JFA1s0rGZ5VOoO0w==} + + '@payloadcms/ui@3.0.0-beta.112': + resolution: {integrity: sha512-OvtvkK3C34OlF2YpB/zVvgS4nAcWNiE1pt4dTNtf/YKfyfu+NxHnHCb7Y0NYAXjes/TCrV2HsrMM115yyJUYLw==} + engines: {node: ^18.20.2 || >=20.9.0} + peerDependencies: + next: ^15.0.0-canary.173 + payload: 3.0.0-beta.112 + react: ^19.0.0 || ^19.0.0-rc-3edc000d-20240926 + react-dom: ^19.0.0 || ^19.0.0-rc-3edc000d-20240926 + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + + '@smithy/abort-controller@3.1.4': + resolution: {integrity: sha512-VupaALAQlXViW3/enTf/f5l5JZYSAxoJL7f0nanhNNKnww6DGCg1oYIuNP78KDugnkwthBO6iEcym16HhWV8RQ==} + engines: {node: '>=16.0.0'} + + '@smithy/config-resolver@3.0.8': + resolution: {integrity: sha512-Tv1obAC18XOd2OnDAjSWmmthzx6Pdeh63FbLin8MlPiuJ2ATpKkq0NcNOJFr0dO+JmZXnwu8FQxKJ3TKJ3Hulw==} + engines: {node: '>=16.0.0'} + + '@smithy/core@2.4.6': + resolution: {integrity: sha512-6lQQp99hnyuNNIzeTYSzCUXJHwvvFLY7hfdFGSJM95tjRDJGfzWYFRBXPaM9766LiiTsQ561KErtbufzUFSYUg==} + engines: {node: '>=16.0.0'} + + '@smithy/credential-provider-imds@3.2.3': + resolution: {integrity: sha512-VoxMzSzdvkkjMJNE38yQgx4CfnmT+Z+5EUXkg4x7yag93eQkVQgZvN3XBSHC/ylfBbLbAtdu7flTCChX9I+mVg==} + engines: {node: '>=16.0.0'} + + '@smithy/fetch-http-handler@3.2.8': + resolution: {integrity: sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==} + + '@smithy/hash-node@3.0.6': + resolution: {integrity: sha512-c/FHEdKK/7DU2z6ZE91L36ahyXWayR3B+FzELjnYq7wH5YqIseM24V+pWCS9kFn1Ln8OFGTf+pyYPiHZuX0s/Q==} + engines: {node: '>=16.0.0'} + + '@smithy/invalid-dependency@3.0.6': + resolution: {integrity: sha512-czM7Ioq3s8pIXht7oD+vmgy4Wfb4XavU/k/irO8NdXFFOx7YAlsCCcKOh/lJD1mJSYQqiR7NmpZ9JviryD/7AQ==} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@3.0.0': + resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-content-length@3.0.8': + resolution: {integrity: sha512-VuyszlSO49WKh3H9/kIO2kf07VUwGV80QRiaDxUfP8P8UKlokz381ETJvwLhwuypBYhLymCYyNhB3fLAGBX2og==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-endpoint@3.1.3': + resolution: {integrity: sha512-KeM/OrK8MVFUsoJsmCN0MZMVPjKKLudn13xpgwIMpGTYpA8QZB2Xq5tJ+RE6iu3A6NhOI4VajDTwBsm8pwwrhg==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-retry@3.0.21': + resolution: {integrity: sha512-/h0fElV95LekVVEJuSw+aI11S1Y3zIUwBc6h9ZbUv43Gl2weXsbQwjLoet6j/Qtb0phfrSxS6pNg6FqgJOWZkA==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-serde@3.0.6': + resolution: {integrity: sha512-KKTUSl1MzOM0MAjGbudeaVNtIDo+PpekTBkCNwvfZlKndodrnvRo+00USatiyLOc0ujjO9UydMRu3O9dYML7ag==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-stack@3.0.6': + resolution: {integrity: sha512-2c0eSYhTQ8xQqHMcRxLMpadFbTXg6Zla5l0mwNftFCZMQmuhI7EbAJMx6R5eqfuV3YbJ3QGyS3d5uSmrHV8Khg==} + engines: {node: '>=16.0.0'} + + '@smithy/node-config-provider@3.1.7': + resolution: {integrity: sha512-g3mfnC3Oo8pOI0dYuPXLtdW1WGVb3bR2tkV21GNkm0ZvQjLTtamXAwCWt/FCb0HGvKt3gHHmF1XerG0ICfalOg==} + engines: {node: '>=16.0.0'} + + '@smithy/node-http-handler@3.2.3': + resolution: {integrity: sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@3.1.6': + resolution: {integrity: sha512-NK3y/T7Q/Bw+Z8vsVs9MYIQ5v7gOX7clyrXcwhhIBQhbPgRl6JDrZbusO9qWDhcEus75Tg+VCxtIRfo3H76fpw==} + engines: {node: '>=16.0.0'} + + '@smithy/protocol-http@4.1.3': + resolution: {integrity: sha512-GcbMmOYpH9iRqtC05RbRnc/0FssxSTHlmaNhYBTgSgNCYpdR3Kt88u5GAZTBmouzv+Zlj/VRv92J9ruuDeJuEw==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-builder@3.0.6': + resolution: {integrity: sha512-sQe08RunoObe+Usujn9+R2zrLuQERi3CWvRO3BvnoWSYUaIrLKuAIeY7cMeDax6xGyfIP3x/yFWbEKSXvOnvVg==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-parser@3.0.6': + resolution: {integrity: sha512-UJKw4LlEkytzz2Wq+uIdHf6qOtFfee/o7ruH0jF5I6UAuU+19r9QV7nU3P/uI0l6+oElRHmG/5cBBcGJrD7Ozg==} + engines: {node: '>=16.0.0'} + + '@smithy/service-error-classification@3.0.6': + resolution: {integrity: sha512-53SpchU3+DUZrN7J6sBx9tBiCVGzsib2e4sc512Q7K9fpC5zkJKs6Z9s+qbMxSYrkEkle6hnMtrts7XNkMJJMg==} + engines: {node: '>=16.0.0'} + + '@smithy/shared-ini-file-loader@3.1.7': + resolution: {integrity: sha512-IA4K2qTJYXkF5OfVN4vsY1hfnUZjaslEE8Fsr/gGFza4TAC2A9NfnZuSY2srQIbt9bwtjHiAayrRVgKse4Q7fA==} + engines: {node: '>=16.0.0'} + + '@smithy/signature-v4@4.1.4': + resolution: {integrity: sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==} + engines: {node: '>=16.0.0'} + + '@smithy/smithy-client@3.3.5': + resolution: {integrity: sha512-7IZi8J3Dr9n3tX+lcpmJ/5tCYIqoXdblFBaPuv0SEKZFRpCxE+TqIWL6I3t7jLlk9TWu3JSvEZAhtjB9yvB+zA==} + engines: {node: '>=16.0.0'} + + '@smithy/types@3.4.2': + resolution: {integrity: sha512-tHiFcfcVedVBHpmHUEUHOCCih8iZbIAYn9NvPsNzaPm/237I3imdDdZoOC8c87H5HBAVEa06tTgb+OcSWV9g5w==} + engines: {node: '>=16.0.0'} + + '@smithy/url-parser@3.0.6': + resolution: {integrity: sha512-47Op/NU8Opt49KyGpHtVdnmmJMsp2hEwBdyjuFB9M2V5QVOwA7pBhhxKN5z6ztKGrMw76gd8MlbPuzzvaAncuQ==} + + '@smithy/util-base64@3.0.0': + resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-body-length-browser@3.0.0': + resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} + + '@smithy/util-body-length-node@3.0.0': + resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@3.0.0': + resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-config-provider@3.0.0': + resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-defaults-mode-browser@3.0.21': + resolution: {integrity: sha512-M/FhTBk4c/SsB91dD/M4gMGfJO7z/qJaM9+XQQIqBOf4qzZYMExnP7R4VdGwxxH8IKMGW+8F0I4rNtVRrcfPoA==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-defaults-mode-node@3.0.21': + resolution: {integrity: sha512-NiLinPvF86U3S2Pdx/ycqd4bnY5dmFSPNL5KYRwbNjqQFS09M5Wzqk8BNk61/47xCYz1X/6KeiSk9qgYPTtuDw==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-endpoints@2.1.2': + resolution: {integrity: sha512-FEISzffb4H8DLzGq1g4MuDpcv6CIG15fXoQzDH9SjpRJv6h7J++1STFWWinilG0tQh9H1v2UKWG19Jjr2B16zQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-hex-encoding@3.0.0': + resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-middleware@3.0.6': + resolution: {integrity: sha512-BxbX4aBhI1O9p87/xM+zWy0GzT3CEVcXFPBRDoHAM+pV0eSW156pR+PSYEz0DQHDMYDsYAflC2bQNz2uaDBUZQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-retry@3.0.6': + resolution: {integrity: sha512-BRZiuF7IwDntAbevqMco67an0Sr9oLQJqqRCsSPZZHYRnehS0LHDAkJk/pSmI7Z8c/1Vet294H7fY2fWUgB+Rg==} + engines: {node: '>=16.0.0'} + + '@smithy/util-stream@3.1.8': + resolution: {integrity: sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-uri-escape@3.0.0': + resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} + engines: {node: '>=16.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@3.0.0': + resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} + engines: {node: '>=16.0.0'} + + '@swc/core-darwin-arm64@1.7.28': + resolution: {integrity: sha512-BNkj6enHo2pdzOpCtQGKZbXT2A/qWIr0CVtbTM4WkJ3MCK/glbFsyO6X59p1r8+gfaZG4bWYnTTu+RuUAcsL5g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.7.28': + resolution: {integrity: sha512-96zQ+X5Fd6P/RNPkOyikTJgEc2M4TzznfYvjRd2hye5h22jhxCLL/csoauDgN7lYfd7mwsZ/sVXwJTMKl+vZSA==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.7.28': + resolution: {integrity: sha512-l2100Wx6LdXMOmOW3+KoHhBhyZrGdz8ylkygcVOC0QHp6YIATfuG+rRHksfyEWCSOdL3anM9MJZJX26KT/s+XQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.7.28': + resolution: {integrity: sha512-03m6iQ5Bv9u2VPnNRyaBmE8eHi056eE39L0gXcqGoo46GAGuoqYHt9pDz8wS6EgoN4t85iBMUZrkCNqFKkN6ZQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.7.28': + resolution: {integrity: sha512-vqVOpG/jc8mvTKQjaPBLhr7tnWyzuztOHsPnJqMWmg7zGcMeQC/2c5pU4uzRAfXMTp25iId6s4Y4wWfPS1EeDw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.7.28': + resolution: {integrity: sha512-HGwpWuB83Kr+V0E+zT5UwIIY9OxiS8aLd0UVMRVWuO8SrQyKm9HKJ46+zoAb8tfJrpZftfxvbn2ayZWR7gqosA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.7.28': + resolution: {integrity: sha512-q2Y2T8y8EgFtIiRyInnAXNe94aaHX74F0ha1Bl9VdRxE0u1/So+3VLbPvtp4V3Z6pj5pOePfCQJKifnllgAQ9A==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.7.28': + resolution: {integrity: sha512-bCqh4uBT/59h3dWK1v91In6qzz8rKoWoFRxCtNQLIK4jP55K0U231ZK9oN7neZD6bzcOUeFvOGgcyMAgDfFWfA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.7.28': + resolution: {integrity: sha512-XTHbHrksnrqK3JSJ2sbuMWvdJ6/G0roRpgyVTmNDfhTYPOwcVaL/mSrPGLwbksYUbq7ckwoKzrobhdxvQzPsDA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.7.28': + resolution: {integrity: sha512-jyXeoq6nX8abiCy2EpporsC5ywNENs4ocYuvxo1LSxDktWN1E2MTXq3cdJcEWB2Vydxq0rDcsGyzkRPMzFhkZw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.7.28': + resolution: {integrity: sha512-XapcMgsOS0cKh01AFEj+qXOk6KM4NZhp7a5vPicdhkRR8RzvjrCa7DTtijMxfotU8bqaEHguxmiIag2HUlT8QQ==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + + '@swc/types@0.1.12': + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@types/busboy@1.5.4': + resolution: {integrity: sha512-kG7WrUuAKK0NoyxfQHsVE6j1m01s6kMma64E+OZenQABMQyTJop1DumUWcLwAQ2JzpefU7PDYoRDKl8uZosFjw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@22.7.2': + resolution: {integrity: sha512-866lXSrpGpgyHBZUa2m9YNWqHDjjM0aBTJlNtYaGEw4rqY/dcD7deRVTbBBAJelfA7oaGDbNftXF/TL/A6RgoA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/react-transition-group@4.4.11': + resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} + + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + + '@types/whatwg-url@8.2.2': + resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} + + '@typescript-eslint/eslint-plugin@8.7.0': + resolution: {integrity: sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.2.0': + resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@7.2.0': + resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@8.7.0': + resolution: {integrity: sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.7.0': + resolution: {integrity: sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@7.2.0': + resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@8.7.0': + resolution: {integrity: sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@7.2.0': + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.7.0': + resolution: {integrity: sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.7.0': + resolution: {integrity: sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@7.2.0': + resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@8.7.0': + resolution: {integrity: sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.5.0: + resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + + bare-fs@2.3.5: + resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} + + bare-os@2.4.4: + resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} + + bare-path@2.1.3: + resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} + + bare-stream@2.3.0: + resolution: {integrity: sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-scroll-lock@4.0.0-beta.0: + resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + bson-objectid@2.0.4: + resolution: {integrity: sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ==} + + bson@4.7.2: + resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} + engines: {node: '>=6.9.0'} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001664: + resolution: {integrity: sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + console-table-printer@2.11.2: + resolution: {integrity: sha512-uuUHie0sfPP542TKGzPFal0W1wo1beuKAqIZdaavcONx8OoqdnJRKjkinbRTOta4FaCa1RcIL+7mMJWX3pQGVg==} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + cssfilter@0.0.10: + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + dataloader@2.2.2: + resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + + date-fns@3.3.1: + resolution: {integrity: sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw==} + + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-next@15.0.0-canary.173: + resolution: {integrity: sha512-/P3bxedUm1VqdwAq7/1jtOH/V4ii3HTGzsNFBvbaDU+ZcMQ3XOILOn1KmJJCRJiO1vg6wnTvFseQfwZgb1pP2w==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.6.3: + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.11.1: + resolution: {integrity: sha512-EwcbfLOhwVMAfatfqLecR2yv3dE5+kQ8kx+Rrt0DvDXEVwW86KQ/xbMDQhtp5l42VXukD5SOF8mQQHbaNtO0CQ==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.30.0: + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.0: + resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.36.1: + resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@3.0.2: + resolution: {integrity: sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==} + + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-type@19.3.0: + resolution: {integrity: sha512-mROwiKLZf/Kwa/2Rol+OOZQn1eyTkPB3ZTwC0ExY6OLFCbgxHYZvBm7xI77NvfZFMKBsmuXfmLJnD4eEftEhrA==} + engines: {node: '>=18'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql-http@1.22.1: + resolution: {integrity: sha512-4Jor+LRbA7SfSaw7dfDUs2UBzvWg3cKrykfHRgKsOIvQaLuf+QOcG2t3Mx5N9GzSNJcuqMqJWz0ta5+BryEmXg==} + engines: {node: '>=12'} + peerDependencies: + graphql: '>=0.11 <=16' + + graphql-playground-html@1.6.30: + resolution: {integrity: sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw==} + + graphql-scalars@1.22.2: + resolution: {integrity: sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + http-status@1.6.2: + resolution: {integrity: sha512-oUExvfNckrpTpDazph7kNG8sQi5au3BeTo0idaZFXEhTaJKu7GNJCLHI0rYY2wljm548MSTM+Ljj/c6anqu2zQ==} + engines: {node: '>= 0.4.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-size@1.1.1: + resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} + engines: {node: '>=16.x'} + hasBin: true + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-bun-module@1.2.1: + resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic.js@0.2.5: + resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-to-typescript@15.0.1: + resolution: {integrity: sha512-gSSg20skxv+ZQqR8Y8itZt+2iYFGNgneuTgf/Va0TBw+zo6JsykDG1bqhkhMs5g/vIdqmZx55oQJLbgOEuxPJw==} + engines: {node: '>=16.0.0'} + hasBin: true + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + kareem@2.5.1: + resolution: {integrity: sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==} + engines: {node: '>=12.0.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lexical@0.16.1: + resolution: {integrity: sha512-+R05d3+N945OY8pTUjTqQrWoApjC+ctzvjnmNETtx9WmVAaiW0tQVG+AYLt5pDGY8dQXtd4RPorvnxBTECt9SA==} + + lib0@0.2.97: + resolution: {integrity: sha512-Q4d1ekgvufi9FiHkkL46AhecfNjznSL9MRNoJRQ76gBHS9OqU2ArfQK0FvBpuxgWeJeNI0LVgAYMIpsGeX4gYg==} + engines: {node: '>=16'} + hasBin: true + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + monaco-editor@0.38.0: + resolution: {integrity: sha512-11Fkh6yzEmwx7O0YoLxeae0qEGFwmyPRlVxpg7oF9czOOCB/iCjdJrG5I67da5WiXK3YJCxoz9TJFE8Tfq/v9A==} + + mongodb-connection-string-url@2.6.0: + resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} + + mongodb@4.17.1: + resolution: {integrity: sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==} + engines: {node: '>=12.9.0'} + + mongoose-aggregate-paginate-v2@1.0.6: + resolution: {integrity: sha512-UuALu+mjhQa1K9lMQvjLL3vm3iALvNw8PQNIh2gp1b+tO5hUa0NC0Wf6/8QrT9PSJVTihXaD8hQVy3J4e0jO0Q==} + engines: {node: '>=4.0.0'} + + mongoose-paginate-v2@1.7.22: + resolution: {integrity: sha512-xW5GugkE21DJiu9e13EOxKt4ejEKQkRP/S1PkkXRjnk2rRZVKBcld1nPV+VJ/YCPfm8hb3sz9OvI7O38RmixkA==} + engines: {node: '>=4.0.0'} + + mongoose@6.12.3: + resolution: {integrity: sha512-MNJymaaXali7w7rHBxVUoQ3HzHHMk/7I/+yeeoSa4rUzdjZwIWQznBNvVgc0A8ghuJwsuIkb5LyLV6gSjGjWyQ==} + engines: {node: '>=12.0.0'} + + mpath@0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + + mquery@4.0.3: + resolution: {integrity: sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==} + engines: {node: '>=12.0.0'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next@15.0.0-canary.173: + resolution: {integrity: sha512-wD6+sidDZAao/rJ4D/9agqLDTlc/DzlREAnC/+pQSgmpmL8rn41h9Empke6POBxJ4kQWm61dpNDEmz882DknOA==} + engines: {node: '>=18.18.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-3edc000d-20240926 + react-dom: ^18.2.0 || 19.0.0-rc-3edc000d-20240926 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-abi@3.68.0: + resolution: {integrity: sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==} + engines: {node: '>=10'} + + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object-to-formdata@4.5.1: + resolution: {integrity: sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw==} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + payload@3.0.0-beta.112: + resolution: {integrity: sha512-ctzhvdN0Tu2sKfG8qkbUfWPuiICX1A2E3pYrOZb5ZN6iKBit+PkWVaFQfNxP748hD7k2+z7Gj+CgEU1Ra6dohg==} + engines: {node: ^18.20.2 || >=20.9.0} + hasBin: true + peerDependencies: + graphql: ^16.8.1 + + peek-readable@5.2.0: + resolution: {integrity: sha512-U94a+eXHzct7vAd19GH3UQ2dH4Satbng0MyYTMaQatL0pvYYL5CTPR25HBhKtecl+4bfu1/i3vC6k0hydO5Vcw==} + engines: {node: '>=14.16'} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-pretty@11.2.1: + resolution: {integrity: sha512-O05NuD9tkRasFRWVaF/uHLOvoRDFD7tb5VMertr78rbsYFjYp48Vg3477EshVAF5eZaEw+OpDl/tu+B0R5o+7g==} + hasBin: true + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.3.1: + resolution: {integrity: sha512-afSfrq/hUiW/MFmQcLEwV9Zh8Ry6MrMTOyBU53o/fc0gEl+1OZ/Fks/xQCM2nOC0C/OfDtQMnT2d8c3kpcfSzA==} + hasBin: true + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} + engines: {node: '>=10'} + hasBin: true + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs-esm@7.0.2: + resolution: {integrity: sha512-D8NAthKSD7SGn748v+GLaaO6k08Mvpoqroa35PqIQC4gtUa8/Pb/k+r0m0NnGBVbHDP1gKZ2nVywqfMisRhV5A==} + engines: {node: '>=18'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + + queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-animate-height@2.1.2: + resolution: {integrity: sha512-A9jfz/4CTdsIsE7WCQtO9UkOpMBcBRh8LxyHl2eoZz1ki02jpyUL5xt58gabd0CyeLQ8fRyQ+s2lyV2Ufu8Owg==} + engines: {node: '>= 6.0.0'} + peerDependencies: + react: '>=15.6.2' + react-dom: '>=15.6.2' + + react-datepicker@6.9.0: + resolution: {integrity: sha512-QTxuzeem7BUfVFWv+g5WuvzT0c5BPo+XTCNbMTZKSZQLU+cMMwSUHwspaxuIcDlwNcOH0tiJ+bh1fJ2yxOGYWA==} + peerDependencies: + react: ^16.9.0 || ^17 || ^18 + react-dom: ^16.9.0 || ^17 || ^18 + + react-diff-viewer-continued@3.2.6: + resolution: {integrity: sha512-GrzyqQnjIMoej+jMjWvtVSsQqhXgzEGqpXlJ2dAGfOk7Q26qcm8Gu6xtI430PBUyZsERe8BJSQf+7VZZo8IBNQ==} + engines: {node: '>= 8'} + peerDependencies: + react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + + react-dom@19.0.0-rc-3edc000d-20240926: + resolution: {integrity: sha512-0nEYp9I8IF5GZQOJdKSPhkwVFgBmYFiFJOzw5xfPD1USj/Wf8Z7lpruV7WStKD4uxbtfLamDMGZTRkSby7eAwQ==} + peerDependencies: + react: 19.0.0-rc-3edc000d-20240926 + + react-error-boundary@3.1.4: + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + react: '>=16.13.1' + + react-error-boundary@4.0.13: + resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} + peerDependencies: + react: '>=16.13.1' + + react-image-crop@10.1.8: + resolution: {integrity: sha512-4rb8XtXNx7ZaOZarKKnckgz4xLMvds/YrU6mpJfGhGAsy2Mg4mIw1x+DCCGngVGq2soTBVVOxx2s/C6mTX9+pA==} + peerDependencies: + react: '>=16.13.1' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-onclickoutside@6.13.1: + resolution: {integrity: sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w==} + peerDependencies: + react: ^15.5.x || ^16.x || ^17.x || ^18.x + react-dom: ^15.5.x || ^16.x || ^17.x || ^18.x + + react-select@5.8.0: + resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@19.0.0-rc-3edc000d-20240926: + resolution: {integrity: sha512-twH/qd0P8clqn+Z5hAxDi+3nh9pJv3zV9kzhjpbwBW/FlCimK7ypfAoElMIm5QnkhBX/YtkSj1Th49ZcRhjpGA==} + engines: {node: '>=0.10.0'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + + sass@1.77.4: + resolution: {integrity: sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==} + engines: {node: '>=14.0.0'} + hasBin: true + + scheduler@0.0.0-experimental-3edc000d-20240926: + resolution: {integrity: sha512-360BMNajOhMyrirau0pzWVgeakvrfjbfdqHnX2K+tSGTmn6tBN+6K5NhhaebqeXXWyCU3rl5FApjgF2GN0W5JA==} + + scheduler@0.25.0-rc-3edc000d-20240926: + resolution: {integrity: sha512-qAWyPrLLFM96Py4gnrFQLhYDrHkVXGw3P/hPrR3E6b5rriPeAA1a8YZBWlqH8Eehbc9waTih/WyDSyuwkxWWMw==} + + scmp@2.1.0: + resolution: {integrity: sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==} + + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + sharp@0.32.6: + resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} + engines: {node: '>=14.15.0'} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + sift@16.0.1: + resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + simple-wcswidth@1.0.1: + resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + sonic-boom@4.1.0: + resolution: {integrity: sha512-NGipjjRicyJJ03rPiZCJYjwlsuP2d1/5QUviozRXC7S3WdVWNK5e3Ojieb9CCyfhq2UC+3+SRd9nG3I2lPRvUw==} + + sonner@1.5.0: + resolution: {integrity: sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + state-local@1.0.7: + resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + + stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + streamx@2.20.1: + resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + strtok3@8.1.0: + resolution: {integrity: sha512-ExzDvHYPj6F6QkSNe/JxSlBxTh3OrI6wrAIz53ulxo1c4hBJ1bT9C/JrAthEKHWG9riVH3Xzg7B03Oxty6S2Lw==} + engines: {node: '>=16'} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-fs@3.0.6: + resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + text-decoder@1.2.0: + resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + token-types@6.0.0: + resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} + engines: {node: '>=14.16'} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-essentials@10.0.2: + resolution: {integrity: sha512-Xwag0TULqriaugXqVdDiGZ5wuZpqABZlpwQ2Ho4GDyiu/R2Xjkp/9+zcFxL7uzeLl/QCPrflnvpVYyS3ouT7Zw==} + peerDependencies: + typescript: '>=4.5.0' + peerDependenciesMeta: + typescript: + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + engines: {node: '>=18.0.0'} + hasBin: true + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + types-react-dom@19.0.0-rc.1: + resolution: {integrity: sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==} + + types-react@19.0.0-rc.1: + resolution: {integrity: sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==} + + typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + engines: {node: '>=14.17'} + hasBin: true + + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-context-selector@2.0.0: + resolution: {integrity: sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g==} + peerDependencies: + react: '>=18.0.0' + scheduler: '>=0.19.0' + + use-isomorphic-layout-effect@1.1.2: + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xss@1.0.15: + resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} + engines: {node: '>= 0.10.0'} + hasBin: true + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yjs@13.6.19: + resolution: {integrity: sha512-GNKw4mEUn5yWU2QPHRx8jppxmCm9KzbBhB4qJLUJFiiYD0g/tDVgXQ7aPkyh01YO28kbs2J/BEbWBagjuWyejw==} + engines: {node: '>=16.0.0', npm: '>=8.0.0'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@apidevtools/json-schema-ref-parser@11.7.0': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.7.0 + optional: true + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.654.0 + tslib: 2.7.0 + optional: true + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.7.0 + optional: true + + '@aws-sdk/client-cognito-identity@3.658.1': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.658.1(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/core': 3.658.1 + '@aws-sdk/credential-provider-node': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/middleware-host-header': 3.654.0 + '@aws-sdk/middleware-logger': 3.654.0 + '@aws-sdk/middleware-recursion-detection': 3.654.0 + '@aws-sdk/middleware-user-agent': 3.654.0 + '@aws-sdk/region-config-resolver': 3.654.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@aws-sdk/util-user-agent-browser': 3.654.0 + '@aws-sdk/util-user-agent-node': 3.654.0 + '@smithy/config-resolver': 3.0.8 + '@smithy/core': 2.4.6 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/hash-node': 3.0.6 + '@smithy/invalid-dependency': 3.0.6 + '@smithy/middleware-content-length': 3.0.8 + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/middleware-stack': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/node-http-handler': 3.2.3 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.21 + '@smithy/util-defaults-mode-node': 3.0.21 + '@smithy/util-endpoints': 2.1.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/core': 3.658.1 + '@aws-sdk/credential-provider-node': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/middleware-host-header': 3.654.0 + '@aws-sdk/middleware-logger': 3.654.0 + '@aws-sdk/middleware-recursion-detection': 3.654.0 + '@aws-sdk/middleware-user-agent': 3.654.0 + '@aws-sdk/region-config-resolver': 3.654.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@aws-sdk/util-user-agent-browser': 3.654.0 + '@aws-sdk/util-user-agent-node': 3.654.0 + '@smithy/config-resolver': 3.0.8 + '@smithy/core': 2.4.6 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/hash-node': 3.0.6 + '@smithy/invalid-dependency': 3.0.6 + '@smithy/middleware-content-length': 3.0.8 + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/middleware-stack': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/node-http-handler': 3.2.3 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.21 + '@smithy/util-defaults-mode-node': 3.0.21 + '@smithy/util-endpoints': 2.1.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/client-sso@3.658.1': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.658.1 + '@aws-sdk/middleware-host-header': 3.654.0 + '@aws-sdk/middleware-logger': 3.654.0 + '@aws-sdk/middleware-recursion-detection': 3.654.0 + '@aws-sdk/middleware-user-agent': 3.654.0 + '@aws-sdk/region-config-resolver': 3.654.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@aws-sdk/util-user-agent-browser': 3.654.0 + '@aws-sdk/util-user-agent-node': 3.654.0 + '@smithy/config-resolver': 3.0.8 + '@smithy/core': 2.4.6 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/hash-node': 3.0.6 + '@smithy/invalid-dependency': 3.0.6 + '@smithy/middleware-content-length': 3.0.8 + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/middleware-stack': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/node-http-handler': 3.2.3 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.21 + '@smithy/util-defaults-mode-node': 3.0.21 + '@smithy/util-endpoints': 2.1.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/client-sts@3.658.1': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.658.1(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/core': 3.658.1 + '@aws-sdk/credential-provider-node': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/middleware-host-header': 3.654.0 + '@aws-sdk/middleware-logger': 3.654.0 + '@aws-sdk/middleware-recursion-detection': 3.654.0 + '@aws-sdk/middleware-user-agent': 3.654.0 + '@aws-sdk/region-config-resolver': 3.654.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@aws-sdk/util-user-agent-browser': 3.654.0 + '@aws-sdk/util-user-agent-node': 3.654.0 + '@smithy/config-resolver': 3.0.8 + '@smithy/core': 2.4.6 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/hash-node': 3.0.6 + '@smithy/invalid-dependency': 3.0.6 + '@smithy/middleware-content-length': 3.0.8 + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/middleware-stack': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/node-http-handler': 3.2.3 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.21 + '@smithy/util-defaults-mode-node': 3.0.21 + '@smithy/util-endpoints': 2.1.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/core@3.658.1': + dependencies: + '@smithy/core': 2.4.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/property-provider': 3.1.6 + '@smithy/protocol-http': 4.1.3 + '@smithy/signature-v4': 4.1.4 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-middleware': 3.0.6 + fast-xml-parser: 4.4.1 + tslib: 2.7.0 + optional: true + + '@aws-sdk/credential-provider-cognito-identity@3.658.1': + dependencies: + '@aws-sdk/client-cognito-identity': 3.658.1 + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + optional: true + + '@aws-sdk/credential-provider-env@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/credential-provider-http@3.658.1': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/node-http-handler': 3.2.3 + '@smithy/property-provider': 3.1.6 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-stream': 3.1.8 + tslib: 2.7.0 + optional: true + + '@aws-sdk/credential-provider-ini@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1)': + dependencies: + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/credential-provider-env': 3.654.0 + '@aws-sdk/credential-provider-http': 3.658.1 + '@aws-sdk/credential-provider-process': 3.654.0 + '@aws-sdk/credential-provider-sso': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + '@aws-sdk/credential-provider-web-identity': 3.654.0(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/types': 3.654.0 + '@smithy/credential-provider-imds': 3.2.3 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + + '@aws-sdk/credential-provider-node@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1)': + dependencies: + '@aws-sdk/credential-provider-env': 3.654.0 + '@aws-sdk/credential-provider-http': 3.658.1 + '@aws-sdk/credential-provider-ini': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/credential-provider-process': 3.654.0 + '@aws-sdk/credential-provider-sso': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + '@aws-sdk/credential-provider-web-identity': 3.654.0(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/types': 3.654.0 + '@smithy/credential-provider-imds': 3.2.3 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + optional: true + + '@aws-sdk/credential-provider-process@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/credential-provider-sso@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))': + dependencies: + '@aws-sdk/client-sso': 3.658.1 + '@aws-sdk/token-providers': 3.654.0(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + + '@aws-sdk/credential-provider-web-identity@3.654.0(@aws-sdk/client-sts@3.658.1)': + dependencies: + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/credential-providers@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))': + dependencies: + '@aws-sdk/client-cognito-identity': 3.658.1 + '@aws-sdk/client-sso': 3.658.1 + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/credential-provider-cognito-identity': 3.658.1 + '@aws-sdk/credential-provider-env': 3.654.0 + '@aws-sdk/credential-provider-http': 3.658.1 + '@aws-sdk/credential-provider-ini': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/credential-provider-node': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/credential-provider-process': 3.654.0 + '@aws-sdk/credential-provider-sso': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + '@aws-sdk/credential-provider-web-identity': 3.654.0(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/types': 3.654.0 + '@smithy/credential-provider-imds': 3.2.3 + '@smithy/property-provider': 3.1.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + optional: true + + '@aws-sdk/middleware-host-header@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/middleware-logger@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/middleware-recursion-detection@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/middleware-user-agent@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/region-config-resolver@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/node-config-provider': 3.1.7 + '@smithy/types': 3.4.2 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.6 + tslib: 2.7.0 + optional: true + + '@aws-sdk/token-providers@3.654.0(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.658.1(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/types@3.654.0': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/util-endpoints@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/types': 3.4.2 + '@smithy/util-endpoints': 2.1.2 + tslib: 2.7.0 + optional: true + + '@aws-sdk/util-locate-window@3.568.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@aws-sdk/util-user-agent-browser@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/types': 3.4.2 + bowser: 2.11.0 + tslib: 2.7.0 + optional: true + + '@aws-sdk/util-user-agent-node@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/node-config-provider': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 + + '@babel/generator@7.25.6': + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + + '@babel/parser@7.25.6': + dependencies: + '@babel/types': 7.25.6 + + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + + '@babel/traverse@7.25.6': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + tslib: 2.7.0 + + '@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-3edc000d-20240926) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + tslib: 2.7.0 + + '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + '@dnd-kit/core': 6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-3edc000d-20240926 + tslib: 2.7.0 + + '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + tslib: 2.7.0 + + '@emnapi/runtime@1.2.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@emotion/babel-plugin@11.12.0': + dependencies: + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.25.6 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.2 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.13.1': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.1 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/css@11.13.0': + dependencies: + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.2 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.1 + transitivePeerDependencies: + - supports-color + + '@emotion/hash@0.9.2': {} + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.13.3(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-3edc000d-20240926) + '@emotion/utils': 1.4.1 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 19.0.0-rc-3edc000d-20240926 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.2': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.1 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + + '@emotion/utils@1.4.1': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true + + '@esbuild/linux-s390x@0.23.1': + optional: true + + '@esbuild/linux-x64@0.23.1': + optional: true + + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + + '@esbuild/openbsd-x64@0.23.1': + optional: true + + '@esbuild/sunos-x64@0.23.1': + optional: true + + '@esbuild/win32-arm64@0.23.1': + optional: true + + '@esbuild/win32-ia32@0.23.1': + optional: true + + '@esbuild/win32-x64@0.23.1': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@faceless-ui/modal@3.0.0-beta.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + body-scroll-lock: 4.0.0-beta.0 + focus-trap: 7.5.4 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + + '@faceless-ui/scroll-info@2.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + '@faceless-ui/window-info@3.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.11': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + '@floating-ui/dom': 1.6.11 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + '@floating-ui/react@0.26.24(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@floating-ui/utils': 0.2.8 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + tabbable: 6.2.0 + + '@floating-ui/utils@0.2.8': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.2.0 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsdevtools/ono@7.1.3': {} + + '@lexical/clipboard@0.16.1': + dependencies: + '@lexical/html': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/code@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + prismjs: 1.29.0 + + '@lexical/devtools-core@0.16.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + '@lexical/html': 0.16.1 + '@lexical/link': 0.16.1 + '@lexical/mark': 0.16.1 + '@lexical/table': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + '@lexical/dragon@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/hashtag@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/headless@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/history@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/html@0.16.1': + dependencies: + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/link@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/list@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/mark@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/markdown@0.16.1': + dependencies: + '@lexical/code': 0.16.1 + '@lexical/link': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/rich-text': 0.16.1 + '@lexical/text': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/offset@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/overflow@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/plain-text@0.16.1': + dependencies: + '@lexical/clipboard': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/react@0.16.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(yjs@13.6.19)': + dependencies: + '@lexical/clipboard': 0.16.1 + '@lexical/code': 0.16.1 + '@lexical/devtools-core': 0.16.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@lexical/dragon': 0.16.1 + '@lexical/hashtag': 0.16.1 + '@lexical/history': 0.16.1 + '@lexical/link': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/mark': 0.16.1 + '@lexical/markdown': 0.16.1 + '@lexical/overflow': 0.16.1 + '@lexical/plain-text': 0.16.1 + '@lexical/rich-text': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/table': 0.16.1 + '@lexical/text': 0.16.1 + '@lexical/utils': 0.16.1 + '@lexical/yjs': 0.16.1(yjs@13.6.19) + lexical: 0.16.1 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react-error-boundary: 3.1.4(react@19.0.0-rc-3edc000d-20240926) + transitivePeerDependencies: + - yjs + + '@lexical/rich-text@0.16.1': + dependencies: + '@lexical/clipboard': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/selection@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/table@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/text@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/utils@0.16.1': + dependencies: + '@lexical/list': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/table': 0.16.1 + lexical: 0.16.1 + + '@lexical/yjs@0.16.1(yjs@13.6.19)': + dependencies: + '@lexical/offset': 0.16.1 + lexical: 0.16.1 + yjs: 13.6.19 + + '@monaco-editor/loader@1.4.0(monaco-editor@0.38.0)': + dependencies: + monaco-editor: 0.38.0 + state-local: 1.0.7 + + '@monaco-editor/react@4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + dependencies: + '@monaco-editor/loader': 1.4.0(monaco-editor@0.38.0) + monaco-editor: 0.38.0 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + '@mongodb-js/saslprep@1.1.9': + dependencies: + sparse-bitfield: 3.0.3 + optional: true + + '@next/env@15.0.0-canary.173': {} + + '@next/env@15.0.0-rc.0': {} + + '@next/eslint-plugin-next@15.0.0-canary.173': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.0.0-canary.173': + optional: true + + '@next/swc-darwin-x64@15.0.0-canary.173': + optional: true + + '@next/swc-linux-arm64-gnu@15.0.0-canary.173': + optional: true + + '@next/swc-linux-arm64-musl@15.0.0-canary.173': + optional: true + + '@next/swc-linux-x64-gnu@15.0.0-canary.173': + optional: true + + '@next/swc-linux-x64-musl@15.0.0-canary.173': + optional: true + + '@next/swc-win32-arm64-msvc@15.0.0-canary.173': + optional: true + + '@next/swc-win32-ia32-msvc@15.0.0-canary.173': + optional: true + + '@next/swc-win32-x64-msvc@15.0.0-canary.173': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@payloadcms/db-mongodb@3.0.0-beta.112(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))': + dependencies: + bson-objectid: 2.0.4 + http-status: 1.6.2 + mongoose: 6.12.3(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + mongoose-aggregate-paginate-v2: 1.0.6 + mongoose-paginate-v2: 1.7.22 + payload: 3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2) + prompts: 2.4.2 + uuid: 10.0.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + - supports-color + + '@payloadcms/graphql@3.0.0-beta.112(graphql@16.9.0)(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(typescript@5.5.2)': + dependencies: + graphql: 16.9.0 + graphql-scalars: 1.22.2(graphql@16.9.0) + payload: 3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2) + pluralize: 8.0.0 + ts-essentials: 10.0.2(typescript@5.5.2) + tsx: 4.19.1 + transitivePeerDependencies: + - typescript + + '@payloadcms/next@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(next@15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)(typescript@5.5.2)': + dependencies: + '@dnd-kit/core': 6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@payloadcms/graphql': 3.0.0-beta.112(graphql@16.9.0)(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(typescript@5.5.2) + '@payloadcms/translations': 3.0.0-beta.112 + '@payloadcms/ui': 3.0.0-beta.112(monaco-editor@0.38.0)(next@15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)(typescript@5.5.2) + busboy: 1.6.0 + file-type: 19.3.0 + graphql: 16.9.0 + graphql-http: 1.22.1(graphql@16.9.0) + graphql-playground-html: 1.6.30 + http-status: 1.6.2 + next: 15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + path-to-regexp: 6.3.0 + payload: 3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2) + qs-esm: 7.0.2 + react-diff-viewer-continued: 3.2.6(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + sass: 1.77.4 + sonner: 1.5.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + uuid: 10.0.0 + ws: 8.18.0 + transitivePeerDependencies: + - '@types/react' + - bufferutil + - monaco-editor + - react + - react-dom + - supports-color + - typescript + - utf-8-validate + + '@payloadcms/richtext-lexical@3.0.0-beta.112(qhftob2zl2tsokyheqjue5finm)': + dependencies: + '@faceless-ui/modal': 3.0.0-beta.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@faceless-ui/scroll-info': 2.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@lexical/headless': 0.16.1 + '@lexical/link': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/mark': 0.16.1 + '@lexical/markdown': 0.16.1 + '@lexical/react': 0.16.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(yjs@13.6.19) + '@lexical/rich-text': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/table': 0.16.1 + '@lexical/utils': 0.16.1 + '@payloadcms/next': 3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(next@15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)(typescript@5.5.2) + '@payloadcms/translations': 3.0.0-beta.112 + '@payloadcms/ui': 3.0.0-beta.112(monaco-editor@0.38.0)(next@15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)(typescript@5.5.2) + '@types/uuid': 10.0.0 + bson-objectid: 2.0.4 + dequal: 2.0.3 + escape-html: 1.0.3 + lexical: 0.16.1 + payload: 3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2) + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react-error-boundary: 4.0.13(react@19.0.0-rc-3edc000d-20240926) + uuid: 10.0.0 + transitivePeerDependencies: + - '@types/react' + - monaco-editor + - next + - supports-color + - typescript + + '@payloadcms/translations@3.0.0-beta.112': + dependencies: + date-fns: 3.3.1 + + '@payloadcms/ui@3.0.0-beta.112(monaco-editor@0.38.0)(next@15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2))(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)(typescript@5.5.2)': + dependencies: + '@dnd-kit/core': 6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@faceless-ui/modal': 3.0.0-beta.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@faceless-ui/scroll-info': 2.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@faceless-ui/window-info': 3.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@monaco-editor/react': 4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@payloadcms/translations': 3.0.0-beta.112 + body-scroll-lock: 4.0.0-beta.0 + bson-objectid: 2.0.4 + date-fns: 3.3.1 + dequal: 2.0.3 + md5: 2.3.0 + next: 15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + object-to-formdata: 4.5.1 + payload: 3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2) + qs-esm: 7.0.2 + react: 19.0.0-rc-3edc000d-20240926 + react-animate-height: 2.1.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + react-datepicker: 6.9.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react-image-crop: 10.1.8(react@19.0.0-rc-3edc000d-20240926) + react-select: 5.8.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + scheduler: 0.0.0-experimental-3edc000d-20240926 + sonner: 1.5.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + ts-essentials: 10.0.2(typescript@5.5.2) + use-context-selector: 2.0.0(react@19.0.0-rc-3edc000d-20240926)(scheduler@0.0.0-experimental-3edc000d-20240926) + uuid: 10.0.0 + transitivePeerDependencies: + - '@types/react' + - monaco-editor + - supports-color + - typescript + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.10.4': {} + + '@smithy/abort-controller@3.1.4': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/config-resolver@3.0.8': + dependencies: + '@smithy/node-config-provider': 3.1.7 + '@smithy/types': 3.4.2 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.6 + tslib: 2.7.0 + optional: true + + '@smithy/core@2.4.6': + dependencies: + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + optional: true + + '@smithy/credential-provider-imds@3.2.3': + dependencies: + '@smithy/node-config-provider': 3.1.7 + '@smithy/property-provider': 3.1.6 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + tslib: 2.7.0 + optional: true + + '@smithy/fetch-http-handler@3.2.8': + dependencies: + '@smithy/protocol-http': 4.1.3 + '@smithy/querystring-builder': 3.0.6 + '@smithy/types': 3.4.2 + '@smithy/util-base64': 3.0.0 + tslib: 2.7.0 + optional: true + + '@smithy/hash-node@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + optional: true + + '@smithy/invalid-dependency@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@smithy/is-array-buffer@3.0.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@smithy/middleware-content-length@3.0.8': + dependencies: + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/middleware-endpoint@3.1.3': + dependencies: + '@smithy/middleware-serde': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@smithy/util-middleware': 3.0.6 + tslib: 2.7.0 + optional: true + + '@smithy/middleware-retry@3.0.21': + dependencies: + '@smithy/node-config-provider': 3.1.7 + '@smithy/protocol-http': 4.1.3 + '@smithy/service-error-classification': 3.0.6 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + tslib: 2.7.0 + uuid: 9.0.1 + optional: true + + '@smithy/middleware-serde@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/middleware-stack@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/node-config-provider@3.1.7': + dependencies: + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/node-http-handler@3.2.3': + dependencies: + '@smithy/abort-controller': 3.1.4 + '@smithy/protocol-http': 4.1.3 + '@smithy/querystring-builder': 3.0.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/property-provider@3.1.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/protocol-http@4.1.3': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/querystring-builder@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.7.0 + optional: true + + '@smithy/querystring-parser@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/service-error-classification@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + optional: true + + '@smithy/shared-ini-file-loader@3.1.7': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/signature-v4@4.1.4': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + optional: true + + '@smithy/smithy-client@3.3.5': + dependencies: + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-stack': 3.0.6 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + '@smithy/util-stream': 3.1.8 + tslib: 2.7.0 + optional: true + + '@smithy/types@3.4.2': + dependencies: + tslib: 2.7.0 + optional: true + + '@smithy/url-parser@3.0.6': + dependencies: + '@smithy/querystring-parser': 3.0.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/util-base64@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + optional: true + + '@smithy/util-body-length-browser@3.0.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@smithy/util-body-length-node@3.0.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.7.0 + optional: true + + '@smithy/util-buffer-from@3.0.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + tslib: 2.7.0 + optional: true + + '@smithy/util-config-provider@3.0.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@smithy/util-defaults-mode-browser@3.0.21': + dependencies: + '@smithy/property-provider': 3.1.6 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + bowser: 2.11.0 + tslib: 2.7.0 + optional: true + + '@smithy/util-defaults-mode-node@3.0.21': + dependencies: + '@smithy/config-resolver': 3.0.8 + '@smithy/credential-provider-imds': 3.2.3 + '@smithy/node-config-provider': 3.1.7 + '@smithy/property-provider': 3.1.6 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/util-endpoints@2.1.2': + dependencies: + '@smithy/node-config-provider': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/util-hex-encoding@3.0.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@smithy/util-middleware@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/util-retry@3.0.6': + dependencies: + '@smithy/service-error-classification': 3.0.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + optional: true + + '@smithy/util-stream@3.1.8': + dependencies: + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/node-http-handler': 3.2.3 + '@smithy/types': 3.4.2 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + optional: true + + '@smithy/util-uri-escape@3.0.0': + dependencies: + tslib: 2.7.0 + optional: true + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.7.0 + optional: true + + '@smithy/util-utf8@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + tslib: 2.7.0 + optional: true + + '@swc/core-darwin-arm64@1.7.28': + optional: true + + '@swc/core-darwin-x64@1.7.28': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.7.28': + optional: true + + '@swc/core-linux-arm64-gnu@1.7.28': + optional: true + + '@swc/core-linux-arm64-musl@1.7.28': + optional: true + + '@swc/core-linux-x64-gnu@1.7.28': + optional: true + + '@swc/core-linux-x64-musl@1.7.28': + optional: true + + '@swc/core-win32-arm64-msvc@1.7.28': + optional: true + + '@swc/core-win32-ia32-msvc@1.7.28': + optional: true + + '@swc/core-win32-x64-msvc@1.7.28': + optional: true + + '@swc/core@1.7.28(@swc/helpers@0.5.13)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.12 + optionalDependencies: + '@swc/core-darwin-arm64': 1.7.28 + '@swc/core-darwin-x64': 1.7.28 + '@swc/core-linux-arm-gnueabihf': 1.7.28 + '@swc/core-linux-arm64-gnu': 1.7.28 + '@swc/core-linux-arm64-musl': 1.7.28 + '@swc/core-linux-x64-gnu': 1.7.28 + '@swc/core-linux-x64-musl': 1.7.28 + '@swc/core-win32-arm64-msvc': 1.7.28 + '@swc/core-win32-ia32-msvc': 1.7.28 + '@swc/core-win32-x64-msvc': 1.7.28 + '@swc/helpers': 0.5.13 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.13': + dependencies: + tslib: 2.7.0 + + '@swc/types@0.1.12': + dependencies: + '@swc/counter': 0.1.3 + + '@tokenizer/token@0.3.0': {} + + '@types/busboy@1.5.4': + dependencies: + '@types/node': 22.7.2 + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/node@22.7.2': + dependencies: + undici-types: 6.19.8 + + '@types/parse-json@4.0.2': {} + + '@types/react-transition-group@4.4.11': + dependencies: + '@types/react': types-react@19.0.0-rc.1 + + '@types/uuid@10.0.0': {} + + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@8.2.2': + dependencies: + '@types/node': 22.7.2 + '@types/webidl-conversions': 7.0.3 + + '@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint@8.57.1)(typescript@5.5.2)': + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.2) + '@typescript-eslint/scope-manager': 8.7.0 + '@typescript-eslint/type-utils': 8.7.0(eslint@8.57.1)(typescript@5.5.2) + '@typescript-eslint/utils': 8.7.0(eslint@8.57.1)(typescript@5.5.2) + '@typescript-eslint/visitor-keys': 8.7.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.2) + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2)': + dependencies: + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.2) + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.7 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.2.0': + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + + '@typescript-eslint/scope-manager@8.7.0': + dependencies: + '@typescript-eslint/types': 8.7.0 + '@typescript-eslint/visitor-keys': 8.7.0 + + '@typescript-eslint/type-utils@8.7.0(eslint@8.57.1)(typescript@5.5.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.7.0(typescript@5.5.2) + '@typescript-eslint/utils': 8.7.0(eslint@8.57.1)(typescript@5.5.2) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.5.2) + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@7.2.0': {} + + '@typescript-eslint/types@8.7.0': {} + + '@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.2)': + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.2) + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.7.0(typescript@5.5.2)': + dependencies: + '@typescript-eslint/types': 8.7.0 + '@typescript-eslint/visitor-keys': 8.7.0 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.2) + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.7.0(eslint@8.57.1)(typescript@5.5.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.7.0 + '@typescript-eslint/types': 8.7.0 + '@typescript-eslint/typescript-estree': 8.7.0(typescript@5.5.2) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@7.2.0': + dependencies: + '@typescript-eslint/types': 7.2.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.7.0': + dependencies: + '@typescript-eslint/types': 8.7.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + aria-query@5.1.3: + dependencies: + deep-equal: 2.2.3 + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + + array-union@2.1.0: {} + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + ast-types-flow@0.0.8: {} + + atomic-sleep@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axe-core@4.10.0: {} + + axobject-query@4.1.0: {} + + b4a@1.6.7: {} + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.25.6 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + balanced-match@1.0.2: {} + + bare-events@2.5.0: + optional: true + + bare-fs@2.3.5: + dependencies: + bare-events: 2.5.0 + bare-path: 2.1.3 + bare-stream: 2.3.0 + optional: true + + bare-os@2.4.4: + optional: true + + bare-path@2.1.3: + dependencies: + bare-os: 2.4.4 + optional: true + + bare-stream@2.3.0: + dependencies: + b4a: 1.6.7 + streamx: 2.20.1 + optional: true + + base64-js@1.5.1: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + body-scroll-lock@4.0.0-beta.0: {} + + bowser@2.11.0: + optional: true + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + bson-objectid@2.0.4: {} + + bson@4.7.2: + dependencies: + buffer: 5.7.1 + + buffer-equal-constant-time@1.0.1: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001664: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + charenc@0.0.2: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@1.1.4: {} + + ci-info@4.0.0: {} + + classnames@2.5.1: {} + + client-only@0.0.1: {} + + clsx@2.1.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + colorette@2.0.20: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + console-table-printer@2.11.2: + dependencies: + simple-wcswidth: 1.0.1 + + convert-source-map@1.9.0: {} + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.3 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + cssfilter@0.0.10: {} + + csstype@3.1.3: {} + + damerau-levenshtein@1.0.8: {} + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + dataloader@2.2.2: {} + + date-fns@3.3.1: {} + + dateformat@4.6.3: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-equal@2.2.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.4 + is-arguments: 1.1.1 + is-array-buffer: 3.0.4 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + side-channel: 1.0.6 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + dequal@2.0.3: {} + + detect-libc@2.0.3: {} + + diff@5.2.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.25.6 + csstype: 3.1.3 + + dotenv@8.6.0: {} + + eastasianwidth@0.2.0: {} + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + + es-iterator-helpers@1.0.19: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-next@15.0.0-canary.173(eslint@8.57.1)(typescript@5.5.2): + dependencies: + '@next/eslint-plugin-next': 15.0.0-canary.173 + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/eslint-plugin': 8.7.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint@8.57.1)(typescript@5.5.2) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.2) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) + eslint-plugin-react: 7.36.1(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.15.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7 + enhanced-resolve: 5.17.1 + eslint: 8.57.1 + eslint-module-utils: 2.11.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + fast-glob: 3.3.2 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 + is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + + eslint-module-utils@2.11.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.2) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.11.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): + dependencies: + aria-query: 5.1.3 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.10.0 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.19 + eslint: 8.57.1 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.0 + + eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-react@7.36.1(eslint@8.57.1): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.1 + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.7 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + expand-template@2.0.3: {} + + fast-copy@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-fifo@1.3.2: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@3.0.2: {} + + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.0.5 + optional: true + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-type@19.3.0: + dependencies: + strtok3: 8.1.0 + token-types: 6.0.0 + uint8array-extras: 1.4.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-root@1.1.0: {} + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + focus-trap@7.5.4: + dependencies: + tabbable: 6.2.0 + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + fs-constants@1.0.0: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + github-from-package@0.0.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + graphql-http@1.22.1(graphql@16.9.0): + dependencies: + graphql: 16.9.0 + + graphql-playground-html@1.6.30: + dependencies: + xss: 1.0.15 + + graphql-scalars@1.22.2(graphql@16.9.0): + dependencies: + graphql: 16.9.0 + tslib: 2.7.0 + + graphql@16.9.0: {} + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + help-me@5.0.0: {} + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + http-status@1.6.2: {} + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + image-size@1.1.1: + dependencies: + queue: 6.0.2 + + immutable@4.3.7: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-async-function@2.0.0: + dependencies: + has-tostringtag: 1.0.2 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} + + is-bun-module@1.2.1: + dependencies: + semver: 7.6.3 + + is-callable@1.2.7: {} + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-weakmap@2.0.2: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-weakset@2.0.3: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isomorphic.js@0.2.5: {} + + iterator.prototype@1.1.2: + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + joycon@3.1.1: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@1.1.0: {} + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-to-typescript@15.0.1: + dependencies: + '@apidevtools/json-schema-ref-parser': 11.7.0 + '@types/json-schema': 7.0.15 + glob: 10.4.5 + is-glob: 4.0.3 + js-yaml: 4.1.0 + lodash: 4.17.21 + minimist: 1.2.8 + prettier: 3.3.3 + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.6.3 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + + kareem@2.5.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lexical@0.16.1: {} + + lib0@0.2.97: + dependencies: + isomorphic.js: 0.2.5 + + lines-and-columns@1.2.4: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.merge@4.6.2: {} + + lodash.once@4.1.1: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.4.3: {} + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + memoize-one@6.0.0: {} + + memory-pager@1.5.0: + optional: true + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-response@3.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mkdirp-classic@0.5.3: {} + + monaco-editor@0.38.0: {} + + mongodb-connection-string-url@2.6.0: + dependencies: + '@types/whatwg-url': 8.2.2 + whatwg-url: 11.0.0 + + mongodb@4.17.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)): + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.8.3 + optionalDependencies: + '@aws-sdk/credential-providers': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + '@mongodb-js/saslprep': 1.1.9 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + mongoose-aggregate-paginate-v2@1.0.6: {} + + mongoose-paginate-v2@1.7.22: {} + + mongoose@6.12.3(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)): + dependencies: + bson: 4.7.2 + kareem: 2.5.1 + mongodb: 4.17.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + mpath: 0.9.0 + mquery: 4.0.3 + ms: 2.1.3 + sift: 16.0.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + - supports-color + + mpath@0.9.0: {} + + mquery@4.0.3: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + ms@2.1.3: {} + + nanoid@3.3.7: {} + + napi-build-utils@1.0.2: {} + + natural-compare@1.4.0: {} + + next@15.0.0-canary.173(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): + dependencies: + '@next/env': 15.0.0-canary.173 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.13 + busboy: 1.6.0 + caniuse-lite: 1.0.30001664 + postcss: 8.4.31 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + styled-jsx: 5.1.6(react@19.0.0-rc-3edc000d-20240926) + optionalDependencies: + '@next/swc-darwin-arm64': 15.0.0-canary.173 + '@next/swc-darwin-x64': 15.0.0-canary.173 + '@next/swc-linux-arm64-gnu': 15.0.0-canary.173 + '@next/swc-linux-arm64-musl': 15.0.0-canary.173 + '@next/swc-linux-x64-gnu': 15.0.0-canary.173 + '@next/swc-linux-x64-musl': 15.0.0-canary.173 + '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 + '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 + '@next/swc-win32-x64-msvc': 15.0.0-canary.173 + sass: 1.77.4 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-abi@3.68.0: + dependencies: + semver: 7.6.3 + + node-addon-api@6.1.0: {} + + normalize-path@3.0.0: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.2: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object-to-formdata@4.5.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + on-exit-leak-free@2.1.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} + + path-type@4.0.0: {} + + payload@3.0.0-beta.112(graphql@16.9.0)(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(typescript@5.5.2): + dependencies: + '@monaco-editor/react': 4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@next/env': 15.0.0-rc.0 + '@payloadcms/translations': 3.0.0-beta.112 + '@types/busboy': 1.5.4 + ajv: 8.17.1 + bson-objectid: 2.0.4 + ci-info: 4.0.0 + console-table-printer: 2.11.2 + dataloader: 2.2.2 + deepmerge: 4.3.1 + file-type: 19.3.0 + get-tsconfig: 4.8.1 + graphql: 16.9.0 + http-status: 1.6.2 + image-size: 1.1.1 + json-schema-to-typescript: 15.0.1 + jsonwebtoken: 9.0.2 + minimist: 1.2.8 + pino: 9.3.1 + pino-pretty: 11.2.1 + pluralize: 8.0.0 + sanitize-filename: 1.6.3 + scmp: 2.1.0 + ts-essentials: 10.0.2(typescript@5.5.2) + tsx: 4.19.1 + uuid: 10.0.0 + transitivePeerDependencies: + - monaco-editor + - react + - react-dom + - typescript + + peek-readable@5.2.0: {} + + picocolors@1.1.0: {} + + picomatch@2.3.1: {} + + pino-abstract-transport@1.2.0: + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + + pino-pretty@11.2.1: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pump: 3.0.2 + readable-stream: 4.5.2 + secure-json-parse: 2.7.0 + sonic-boom: 4.1.0 + strip-json-comments: 3.1.1 + + pino-std-serializers@7.0.0: {} + + pino@9.3.1: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 7.0.0 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.1.0 + thread-stream: 3.1.0 + + pluralize@8.0.0: {} + + possible-typed-array-names@1.0.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 + + prebuild-install@7.1.2: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.68.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + + prelude-ls@1.2.1: {} + + prettier@3.3.3: {} + + prismjs@1.29.0: {} + + process-warning@3.0.0: {} + + process@0.11.10: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + qs-esm@7.0.2: {} + + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + + queue-microtask@1.2.3: {} + + queue-tick@1.0.1: {} + + queue@6.0.2: + dependencies: + inherits: 2.0.4 + + quick-format-unescaped@4.0.4: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-animate-height@2.1.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + dependencies: + classnames: 2.5.1 + prop-types: 15.8.1 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + react-datepicker@6.9.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + dependencies: + '@floating-ui/react': 0.26.24(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + clsx: 2.1.1 + date-fns: 3.3.1 + prop-types: 15.8.1 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react-onclickoutside: 6.13.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + + react-diff-viewer-continued@3.2.6(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + dependencies: + '@emotion/css': 11.13.0 + classnames: 2.5.1 + diff: 5.2.0 + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + transitivePeerDependencies: + - supports-color + + react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926): + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + scheduler: 0.25.0-rc-3edc000d-20240926 + + react-error-boundary@3.1.4(react@19.0.0-rc-3edc000d-20240926): + dependencies: + '@babel/runtime': 7.25.6 + react: 19.0.0-rc-3edc000d-20240926 + + react-error-boundary@4.0.13(react@19.0.0-rc-3edc000d-20240926): + dependencies: + '@babel/runtime': 7.25.6 + react: 19.0.0-rc-3edc000d-20240926 + + react-image-crop@10.1.8(react@19.0.0-rc-3edc000d-20240926): + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + + react-is@16.13.1: {} + + react-onclickoutside@6.13.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + react-select@5.8.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + dependencies: + '@babel/runtime': 7.25.6 + '@emotion/cache': 11.13.1 + '@emotion/react': 11.13.3(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + '@floating-ui/dom': 1.6.11 + '@types/react-transition-group': 4.4.11 + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + use-isomorphic-layout-effect: 1.1.2(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + transitivePeerDependencies: + - '@types/react' + - supports-color + + react-transition-group@4.4.5(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + dependencies: + '@babel/runtime': 7.25.6 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + react@19.0.0-rc-3edc000d-20240926: {} + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + real-require@0.2.0: {} + + reflect.getprototypeof@1.0.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.4 + + regenerator-runtime@0.14.1: {} + + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + safe-stable-stringify@2.5.0: {} + + sanitize-filename@1.6.3: + dependencies: + truncate-utf8-bytes: 1.0.2 + + sass@1.77.4: + dependencies: + chokidar: 3.6.0 + immutable: 4.3.7 + source-map-js: 1.2.1 + + scheduler@0.0.0-experimental-3edc000d-20240926: {} + + scheduler@0.25.0-rc-3edc000d-20240926: {} + + scmp@2.1.0: {} + + secure-json-parse@2.7.0: {} + + semver@6.3.1: {} + + semver@7.6.3: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + sharp@0.32.6: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + node-addon-api: 6.1.0 + prebuild-install: 7.1.2 + semver: 7.6.3 + simple-get: 4.0.1 + tar-fs: 3.0.6 + tunnel-agent: 0.6.0 + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + sift@16.0.1: {} + + signal-exit@4.1.0: {} + + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + simple-wcswidth@1.0.1: {} + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + smart-buffer@4.2.0: {} + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + sonic-boom@4.1.0: + dependencies: + atomic-sleep: 1.0.0 + + sonner@1.5.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + + source-map-js@1.2.1: {} + + source-map@0.5.7: {} + + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + optional: true + + split2@4.2.0: {} + + sprintf-js@1.1.3: {} + + state-local@1.0.7: {} + + stop-iteration-iterator@1.0.0: + dependencies: + internal-slot: 1.0.7 + + streamsearch@1.1.0: {} + + streamx@2.20.1: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.0 + optionalDependencies: + bare-events: 2.5.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.includes@2.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + strnum@1.0.5: + optional: true + + strtok3@8.1.0: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 5.2.0 + + styled-jsx@5.1.6(react@19.0.0-rc-3edc000d-20240926): + dependencies: + client-only: 0.0.1 + react: 19.0.0-rc-3edc000d-20240926 + + stylis@4.2.0: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tabbable@6.2.0: {} + + tapable@2.2.1: {} + + tar-fs@2.1.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-fs@3.0.6: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.3.5 + bare-path: 2.1.3 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.20.1 + + text-decoder@1.2.0: + dependencies: + b4a: 1.6.7 + + text-table@0.2.0: {} + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + token-types@6.0.0: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + tr46@3.0.0: + dependencies: + punycode: 2.3.1 + + truncate-utf8-bytes@1.0.2: + dependencies: + utf8-byte-length: 1.0.5 + + ts-api-utils@1.3.0(typescript@5.5.2): + dependencies: + typescript: 5.5.2 + + ts-essentials@10.0.2(typescript@5.5.2): + optionalDependencies: + typescript: 5.5.2 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.7.0: {} + + tsx@4.19.1: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + types-react-dom@19.0.0-rc.1: + dependencies: + '@types/react': types-react@19.0.0-rc.1 + + types-react@19.0.0-rc.1: + dependencies: + csstype: 3.1.3 + + typescript@5.5.2: {} + + uint8array-extras@1.4.0: {} + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + undici-types@6.19.8: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-context-selector@2.0.0(react@19.0.0-rc-3edc000d-20240926)(scheduler@0.0.0-experimental-3edc000d-20240926): + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + scheduler: 0.0.0-experimental-3edc000d-20240926 + + use-isomorphic-layout-effect@1.1.2(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + dependencies: + react: 19.0.0-rc-3edc000d-20240926 + optionalDependencies: + '@types/react': types-react@19.0.0-rc.1 + + utf8-byte-length@1.0.5: {} + + util-deprecate@1.0.2: {} + + uuid@10.0.0: {} + + uuid@9.0.1: + optional: true + + webidl-conversions@7.0.0: {} + + whatwg-url@11.0.0: + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-builtin-type@1.1.4: + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + ws@8.18.0: {} + + xss@1.0.15: + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + + yaml@1.10.2: {} + + yjs@13.6.19: + dependencies: + lib0: 0.2.97 + + yocto-queue@0.1.0: {} diff --git a/examples/multi-tenant/src/access/anyone.ts b/examples/multi-tenant/src/access/anyone.ts deleted file mode 100644 index c098600337..0000000000 --- a/examples/multi-tenant/src/access/anyone.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { Access } from 'payload/config' - -export const anyone: Access = () => true diff --git a/examples/multi-tenant-single-domain/src/access/isSuperAdmin.ts b/examples/multi-tenant/src/access/isSuperAdmin.ts similarity index 78% rename from examples/multi-tenant-single-domain/src/access/isSuperAdmin.ts rename to examples/multi-tenant/src/access/isSuperAdmin.ts index b116cf26ff..b5c748eb8f 100644 --- a/examples/multi-tenant-single-domain/src/access/isSuperAdmin.ts +++ b/examples/multi-tenant/src/access/isSuperAdmin.ts @@ -1,6 +1,8 @@ import type { Access } from 'payload' export const isSuperAdmin: Access = ({ req }) => { - if (!req?.user) return false + if (!req?.user) { + return false + } return Boolean(req.user.roles?.includes('super-admin')) } diff --git a/examples/multi-tenant/src/access/superAdmins.ts b/examples/multi-tenant/src/access/superAdmins.ts deleted file mode 100644 index 6de0bdaea8..0000000000 --- a/examples/multi-tenant/src/access/superAdmins.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Access } from 'payload/config' -import type { FieldHook } from 'payload/types' - -import { checkUserRoles } from '../utilities/checkUserRoles' - -export const superAdmins: Access = ({ req: { user } }) => checkUserRoles(['super-admin'], user) - -export const superAdminFieldAccess: FieldHook = ({ req: { user } }) => - checkUserRoles(['super-admin'], user) diff --git a/examples/multi-tenant-single-domain/src/app/(app)/[tenant]/[...slug]/page.tsx b/examples/multi-tenant/src/app/(app)/[tenant]/[...slug]/page.tsx similarity index 95% rename from examples/multi-tenant-single-domain/src/app/(app)/[tenant]/[...slug]/page.tsx rename to examples/multi-tenant/src/app/(app)/[tenant]/[...slug]/page.tsx index e22527de60..5fce8fb32a 100644 --- a/examples/multi-tenant-single-domain/src/app/(app)/[tenant]/[...slug]/page.tsx +++ b/examples/multi-tenant/src/app/(app)/[tenant]/[...slug]/page.tsx @@ -9,7 +9,7 @@ import React from 'react' import { RenderPage } from '../../../components/RenderPage' export default async function Page({ params }: { params: { slug?: string[]; tenant: string } }) { - const headers = getHeaders() + const headers = await getHeaders() const payload = await getPayloadHMR({ config: configPromise }) const { user } = await payload.auth({ headers }) @@ -81,7 +81,9 @@ export default async function Page({ params }: { params: { slug?: string[]; tena const pageData = pageQuery.docs?.[0] // The page with the provided slug could not be found - if (!pageData) return notFound() + if (!pageData) { + return notFound() + } // The page was found, render the page with data return diff --git a/examples/multi-tenant-single-domain/src/app/(app)/[tenant]/login/page.tsx b/examples/multi-tenant/src/app/(app)/[tenant]/login/page.tsx similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(app)/[tenant]/login/page.tsx rename to examples/multi-tenant/src/app/(app)/[tenant]/login/page.tsx diff --git a/examples/multi-tenant-single-domain/src/app/(app)/[tenant]/page.tsx b/examples/multi-tenant/src/app/(app)/[tenant]/page.tsx similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(app)/[tenant]/page.tsx rename to examples/multi-tenant/src/app/(app)/[tenant]/page.tsx diff --git a/examples/multi-tenant-single-domain/src/app/(app)/index.scss b/examples/multi-tenant/src/app/(app)/index.scss similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(app)/index.scss rename to examples/multi-tenant/src/app/(app)/index.scss diff --git a/examples/multi-tenant-single-domain/src/app/(app)/layout.tsx b/examples/multi-tenant/src/app/(app)/layout.tsx similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(app)/layout.tsx rename to examples/multi-tenant/src/app/(app)/layout.tsx diff --git a/examples/multi-tenant-single-domain/src/app/(payload)/admin/[[...segments]]/not-found.tsx b/examples/multi-tenant/src/app/(payload)/admin/[[...segments]]/not-found.tsx similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(payload)/admin/[[...segments]]/not-found.tsx rename to examples/multi-tenant/src/app/(payload)/admin/[[...segments]]/not-found.tsx diff --git a/examples/multi-tenant-single-domain/src/app/(payload)/admin/[[...segments]]/page.tsx b/examples/multi-tenant/src/app/(payload)/admin/[[...segments]]/page.tsx similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(payload)/admin/[[...segments]]/page.tsx rename to examples/multi-tenant/src/app/(payload)/admin/[[...segments]]/page.tsx diff --git a/examples/multi-tenant-single-domain/src/app/(payload)/admin/importMap.js b/examples/multi-tenant/src/app/(payload)/admin/importMap.js similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(payload)/admin/importMap.js rename to examples/multi-tenant/src/app/(payload)/admin/importMap.js diff --git a/examples/multi-tenant-single-domain/src/app/(payload)/api/[...slug]/route.ts b/examples/multi-tenant/src/app/(payload)/api/[...slug]/route.ts similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(payload)/api/[...slug]/route.ts rename to examples/multi-tenant/src/app/(payload)/api/[...slug]/route.ts diff --git a/examples/multi-tenant-single-domain/src/app/(payload)/api/graphql-playground/route.ts b/examples/multi-tenant/src/app/(payload)/api/graphql-playground/route.ts similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(payload)/api/graphql-playground/route.ts rename to examples/multi-tenant/src/app/(payload)/api/graphql-playground/route.ts diff --git a/examples/multi-tenant-single-domain/src/app/(payload)/api/graphql/route.ts b/examples/multi-tenant/src/app/(payload)/api/graphql/route.ts similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(payload)/api/graphql/route.ts rename to examples/multi-tenant/src/app/(payload)/api/graphql/route.ts diff --git a/examples/multi-tenant-single-domain/src/app/(payload)/custom.scss b/examples/multi-tenant/src/app/(payload)/custom.scss similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(payload)/custom.scss rename to examples/multi-tenant/src/app/(payload)/custom.scss diff --git a/examples/multi-tenant-single-domain/src/app/(payload)/layout.tsx b/examples/multi-tenant/src/app/(payload)/layout.tsx similarity index 100% rename from examples/multi-tenant-single-domain/src/app/(payload)/layout.tsx rename to examples/multi-tenant/src/app/(payload)/layout.tsx diff --git a/examples/multi-tenant-single-domain/src/app/components/Login/client.page.tsx b/examples/multi-tenant/src/app/components/Login/client.page.tsx similarity index 99% rename from examples/multi-tenant-single-domain/src/app/components/Login/client.page.tsx rename to examples/multi-tenant/src/app/components/Login/client.page.tsx index 98e68ba462..9fdf9d3e3b 100644 --- a/examples/multi-tenant-single-domain/src/app/components/Login/client.page.tsx +++ b/examples/multi-tenant/src/app/components/Login/client.page.tsx @@ -20,7 +20,7 @@ export const Login = ({ tenantSlug }: Props) => { const handleSubmit = async (e: FormEvent) => { e.preventDefault() - if (!usernameRef?.current?.value || !passwordRef?.current?.value) return + if (!usernameRef?.current?.value || !passwordRef?.current?.value) {return} const actionRes = await fetch( `${process.env.NEXT_PUBLIC_SERVER_URL}/api/users/external-users/login`, { diff --git a/examples/multi-tenant-single-domain/src/app/components/Login/index.scss b/examples/multi-tenant/src/app/components/Login/index.scss similarity index 100% rename from examples/multi-tenant-single-domain/src/app/components/Login/index.scss rename to examples/multi-tenant/src/app/components/Login/index.scss diff --git a/examples/multi-tenant-single-domain/src/app/components/RenderPage/index.tsx b/examples/multi-tenant/src/app/components/RenderPage/index.tsx similarity index 100% rename from examples/multi-tenant-single-domain/src/app/components/RenderPage/index.tsx rename to examples/multi-tenant/src/app/components/RenderPage/index.tsx diff --git a/examples/multi-tenant-single-domain/src/collections/Pages/access/byTenant.ts b/examples/multi-tenant/src/collections/Pages/access/byTenant.ts similarity index 95% rename from examples/multi-tenant-single-domain/src/collections/Pages/access/byTenant.ts rename to examples/multi-tenant/src/collections/Pages/access/byTenant.ts index bf25617342..df704c0b3e 100644 --- a/examples/multi-tenant-single-domain/src/collections/Pages/access/byTenant.ts +++ b/examples/multi-tenant/src/collections/Pages/access/byTenant.ts @@ -63,7 +63,9 @@ export const canMutatePage: Access = (args) => { const req = args.req const superAdmin = isSuperAdmin(args) - if (!req.user) return false + if (!req.user) { + return false + } // super admins can mutate pages for any tenant if (superAdmin) { @@ -77,7 +79,9 @@ export const canMutatePage: Access = (args) => { // pages they have access to return ( req.user?.tenants?.reduce((hasAccess: boolean, accessRow) => { - if (hasAccess) return true + if (hasAccess) { + return true + } if ( accessRow && accessRow.tenant === selectedTenant && diff --git a/examples/multi-tenant-single-domain/src/collections/Pages/access/externalReadAccess.ts b/examples/multi-tenant/src/collections/Pages/access/externalReadAccess.ts similarity index 100% rename from examples/multi-tenant-single-domain/src/collections/Pages/access/externalReadAccess.ts rename to examples/multi-tenant/src/collections/Pages/access/externalReadAccess.ts diff --git a/examples/multi-tenant/src/collections/Pages/access/lastLoggedInTenant.ts b/examples/multi-tenant/src/collections/Pages/access/lastLoggedInTenant.ts deleted file mode 100644 index 9ae70cc5e6..0000000000 --- a/examples/multi-tenant/src/collections/Pages/access/lastLoggedInTenant.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Access } from 'payload/types' - -export const lastLoggedInTenant: Access = ({ req: { user }, data }) => - user?.lastLoggedInTenant?.id === data?.id diff --git a/examples/multi-tenant/src/collections/Pages/access/loggedIn.ts b/examples/multi-tenant/src/collections/Pages/access/loggedIn.ts deleted file mode 100644 index ce4167ff7a..0000000000 --- a/examples/multi-tenant/src/collections/Pages/access/loggedIn.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { Access } from 'payload/config' - -export const loggedIn: Access = ({ req: { user } }) => { - return Boolean(user) -} diff --git a/examples/multi-tenant/src/collections/Pages/access/tenantAdmins.ts b/examples/multi-tenant/src/collections/Pages/access/tenantAdmins.ts deleted file mode 100644 index 9c626067dc..0000000000 --- a/examples/multi-tenant/src/collections/Pages/access/tenantAdmins.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { Access } from 'payload/config' - -import { checkUserRoles } from '../../../utilities/checkUserRoles' - -// the user must be an admin of the document's tenant -export const tenantAdmins: Access = ({ req: { user } }) => { - if (checkUserRoles(['super-admin'], user)) { - return true - } - - return { - tenant: { - in: - user?.tenants - ?.map(({ tenant, roles }) => - roles.includes('admin') ? (typeof tenant === 'string' ? tenant : tenant.id) : null, - ) // eslint-disable-line function-paren-newline - .filter(Boolean) || [], - }, - } -} diff --git a/examples/multi-tenant/src/collections/Pages/access/tenants.ts b/examples/multi-tenant/src/collections/Pages/access/tenants.ts deleted file mode 100644 index 7d44b8297f..0000000000 --- a/examples/multi-tenant/src/collections/Pages/access/tenants.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Access } from 'payload/types' - -import { isSuperAdmin } from '../../../utilities/isSuperAdmin' - -export const tenants: Access = ({ req: { user }, data }) => - // individual documents - (data?.tenant?.id && user?.lastLoggedInTenant?.id === data.tenant.id) || - (!user?.lastLoggedInTenant?.id && isSuperAdmin(user)) || { - // list of documents - tenant: { - equals: user?.lastLoggedInTenant?.id, - }, - } diff --git a/examples/multi-tenant-single-domain/src/collections/Pages/hooks/ensureUniqueSlug.ts b/examples/multi-tenant/src/collections/Pages/hooks/ensureUniqueSlug.ts similarity index 97% rename from examples/multi-tenant-single-domain/src/collections/Pages/hooks/ensureUniqueSlug.ts rename to examples/multi-tenant/src/collections/Pages/hooks/ensureUniqueSlug.ts index 567b986d28..ae2f97a732 100644 --- a/examples/multi-tenant-single-domain/src/collections/Pages/hooks/ensureUniqueSlug.ts +++ b/examples/multi-tenant/src/collections/Pages/hooks/ensureUniqueSlug.ts @@ -6,7 +6,7 @@ import { getTenantAccessIDs } from '../../../utilities/getTenantAccessIDs' export const ensureUniqueSlug: FieldHook = async ({ data, originalDoc, req, value }) => { // if value is unchanged, skip validation - if (originalDoc.slug === value) return value + if (originalDoc.slug === value) {return value} const incomingTenantID = typeof data?.tenant === 'object' ? data.tenant.id : data?.tenant const currentTenantID = diff --git a/examples/multi-tenant/src/collections/Pages/hooks/formatSlug.ts b/examples/multi-tenant/src/collections/Pages/hooks/formatSlug.ts deleted file mode 100644 index bb33fc1f54..0000000000 --- a/examples/multi-tenant/src/collections/Pages/hooks/formatSlug.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { FieldHook } from 'payload/types' - -const format = (val: string): string => - val - .replace(/ /g, '-') - .replace(/[^\w-]+/g, '') - .toLowerCase() - -const formatSlug = - (fallback: string): FieldHook => - ({ operation, value, originalDoc, data }) => { - if (typeof value === 'string') { - return format(value) - } - - if (operation === 'create') { - const fallbackData = data?.[fallback] || originalDoc?.[fallback] - - if (fallbackData && typeof fallbackData === 'string') { - return format(fallbackData) - } - } - - return value - } - -export default formatSlug diff --git a/examples/multi-tenant/src/collections/Pages/index.ts b/examples/multi-tenant/src/collections/Pages/index.ts index 2d9fce7f0e..7fbf9231b4 100644 --- a/examples/multi-tenant/src/collections/Pages/index.ts +++ b/examples/multi-tenant/src/collections/Pages/index.ts @@ -1,43 +1,44 @@ -import type { CollectionConfig } from 'payload/types' +import type { CollectionConfig } from 'payload' -import richText from '../../fields/richText' -import { tenant } from '../../fields/tenant' -import { loggedIn } from './access/loggedIn' -import { tenantAdmins } from './access/tenantAdmins' -import { tenants } from './access/tenants' -import formatSlug from './hooks/formatSlug' +import { tenantField } from '../../fields/TenantField' +import { isPayloadAdminPanel } from '../../utilities/isPayloadAdminPanel' +import { canMutatePage, filterByTenantRead } from './access/byTenant' +import { externalReadAccess } from './access/externalReadAccess' +import { ensureUniqueSlug } from './hooks/ensureUniqueSlug' export const Pages: CollectionConfig = { slug: 'pages', + access: { + create: canMutatePage, + delete: canMutatePage, + read: (args) => { + // when viewing pages inside the admin panel + // restrict access to the ones your user has access to + if (isPayloadAdminPanel(args.req)) {return filterByTenantRead(args)} + + // when viewing pages from outside the admin panel + // you should be able to see your tenants and public tenants + return externalReadAccess(args) + }, + update: canMutatePage, + }, admin: { useAsTitle: 'title', - defaultColumns: ['title', 'slug', 'updatedAt'], - }, - access: { - read: tenants, - create: loggedIn, - update: tenantAdmins, - delete: tenantAdmins, }, fields: [ { name: 'title', type: 'text', - required: true, }, { name: 'slug', - label: 'Slug', type: 'text', - index: true, - admin: { - position: 'sidebar', - }, + defaultValue: 'home', hooks: { - beforeValidate: [formatSlug('title')], + beforeValidate: [ensureUniqueSlug], }, + index: true, }, - tenant, - richText(), + tenantField, ], } diff --git a/examples/multi-tenant-single-domain/src/collections/Tenants/access/byTenant.ts b/examples/multi-tenant/src/collections/Tenants/access/byTenant.ts similarity index 89% rename from examples/multi-tenant-single-domain/src/collections/Tenants/access/byTenant.ts rename to examples/multi-tenant/src/collections/Tenants/access/byTenant.ts index c03be5285f..b4ebb5fd96 100644 --- a/examples/multi-tenant-single-domain/src/collections/Tenants/access/byTenant.ts +++ b/examples/multi-tenant/src/collections/Tenants/access/byTenant.ts @@ -1,7 +1,5 @@ import type { Access } from 'payload' -import { parseCookies } from 'payload' - import { isSuperAdmin } from '../../../access/isSuperAdmin' import { getTenantAccessIDs } from '../../../utilities/getTenantAccessIDs' @@ -9,7 +7,9 @@ export const filterByTenantRead: Access = (args) => { const req = args.req // Super admin can read all - if (isSuperAdmin(args)) return true + if (isSuperAdmin(args)) { + return true + } const tenantIDs = getTenantAccessIDs(req.user) @@ -42,15 +42,15 @@ export const canMutateTenant: Access = (args) => { const req = args.req const superAdmin = isSuperAdmin(args) - if (!req.user) return false + if (!req.user) { + return false + } // super admins can mutate pages for any tenant if (superAdmin) { return true } - const cookies = parseCookies(req.headers) - return { id: { in: diff --git a/examples/multi-tenant-single-domain/src/collections/Tenants/access/read.ts b/examples/multi-tenant/src/collections/Tenants/access/read.ts similarity index 94% rename from examples/multi-tenant-single-domain/src/collections/Tenants/access/read.ts rename to examples/multi-tenant/src/collections/Tenants/access/read.ts index 665d1d7dad..f3dddd800b 100644 --- a/examples/multi-tenant-single-domain/src/collections/Tenants/access/read.ts +++ b/examples/multi-tenant/src/collections/Tenants/access/read.ts @@ -7,7 +7,7 @@ export const tenantRead: Access = (args) => { const req = args.req // Super admin can read all - if (isSuperAdmin(args)) return true + if (isSuperAdmin(args)) {return true} const tenantIDs = getTenantAccessIDs(req.user) diff --git a/examples/multi-tenant/src/collections/Tenants/access/tenantAdmins.ts b/examples/multi-tenant/src/collections/Tenants/access/tenantAdmins.ts deleted file mode 100644 index 22abc35c97..0000000000 --- a/examples/multi-tenant/src/collections/Tenants/access/tenantAdmins.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { Access } from 'payload/config' - -import { isSuperAdmin } from '../../../utilities/isSuperAdmin' - -// the user must be an admin of the tenant being accessed -export const tenantAdmins: Access = ({ req: { user } }) => { - if (isSuperAdmin(user)) { - return true - } - - return { - id: { - in: - user?.tenants - ?.map(({ tenant, roles }) => - roles.includes('admin') ? (typeof tenant === 'string' ? tenant : tenant.id) : null, - ) // eslint-disable-line function-paren-newline - .filter(Boolean) || [], - }, - } -} diff --git a/examples/multi-tenant/src/collections/Tenants/index.ts b/examples/multi-tenant/src/collections/Tenants/index.ts index e57f7bc9ba..752f8de551 100644 --- a/examples/multi-tenant/src/collections/Tenants/index.ts +++ b/examples/multi-tenant/src/collections/Tenants/index.ts @@ -1,15 +1,15 @@ -import type { CollectionConfig } from 'payload/types' +import type { CollectionConfig } from 'payload' -import { superAdmins } from '../../access/superAdmins' -import { tenantAdmins } from './access/tenantAdmins' +import { isSuperAdmin } from '../../access/isSuperAdmin' +import { canMutateTenant, filterByTenantRead } from './access/byTenant' export const Tenants: CollectionConfig = { slug: 'tenants', access: { - create: superAdmins, - read: tenantAdmins, - update: tenantAdmins, - delete: superAdmins, + create: isSuperAdmin, + delete: canMutateTenant, + read: filterByTenantRead, + update: canMutateTenant, }, admin: { useAsTitle: 'name', @@ -20,17 +20,41 @@ export const Tenants: CollectionConfig = { type: 'text', required: true, }, + // The domains field allows you to associate one or more domains with a tenant. + // This is used to determine which tenant is associated with a specific domain, + // for example, 'abc.localhost.com' would match to 'Tenant 1'. + + // Uncomment this field if you want to enable domain-based tenant handling. + // { + // name: 'domains', + // type: 'array', + // fields: [ + // { + // name: 'domain', + // type: 'text', + // required: true, + // }, + // ], + // index: true, + // }, { - name: 'domains', - type: 'array', + name: 'slug', + type: 'text', + admin: { + description: 'Used for url paths, example: /tenant-slug/page-slug', + }, + index: true, + required: true, + }, + { + name: 'public', + type: 'checkbox', + admin: { + description: 'If checked, logging in is not required.', + position: 'sidebar', + }, + defaultValue: false, index: true, - fields: [ - { - name: 'domain', - type: 'text', - required: true, - }, - ], }, ], } diff --git a/examples/multi-tenant/src/collections/Users/access/adminsAndSelf.ts b/examples/multi-tenant/src/collections/Users/access/adminsAndSelf.ts deleted file mode 100644 index d7e0833633..0000000000 --- a/examples/multi-tenant/src/collections/Users/access/adminsAndSelf.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { Access } from 'payload/config' - -import { isSuperAdmin } from '../../../utilities/isSuperAdmin' -import { User } from '../../../payload-types' - -export const adminsAndSelf: Access = async ({ req: { user } }) => { - if (user) { - const isSuper = isSuperAdmin(user) - - // allow super-admins through only if they have not scoped their user via `lastLoggedInTenant` - if (isSuper && !user?.lastLoggedInTenant) { - return true - } - - // allow users to read themselves and any users within the tenants they are admins of - return { - or: [ - { - id: { - equals: user.id, - }, - }, - ...(isSuper - ? [ - { - 'tenants.tenant': { - in: [ - typeof user?.lastLoggedInTenant === 'string' - ? user?.lastLoggedInTenant - : user?.lastLoggedInTenant?.id, - ].filter(Boolean), - }, - }, - ] - : [ - { - 'tenants.tenant': { - in: - user?.tenants - ?.map(({ tenant, roles }) => - roles.includes('admin') - ? typeof tenant === 'string' - ? tenant - : tenant.id - : null, - ) // eslint-disable-line function-paren-newline - .filter(Boolean) || [], - }, - }, - ]), - ], - } - } -} diff --git a/examples/multi-tenant-single-domain/src/collections/Users/access/create.ts b/examples/multi-tenant/src/collections/Users/access/create.ts similarity index 76% rename from examples/multi-tenant-single-domain/src/collections/Users/access/create.ts rename to examples/multi-tenant/src/collections/Users/access/create.ts index 436c6005ed..f00cc66c93 100644 --- a/examples/multi-tenant-single-domain/src/collections/Users/access/create.ts +++ b/examples/multi-tenant/src/collections/Users/access/create.ts @@ -7,13 +7,13 @@ import { getTenantAdminTenantAccessIDs } from '../../../utilities/getTenantAcces export const createAccess: Access = (args) => { const { req } = args - if (!req.user) return false + if (!req.user) {return false} - if (isSuperAdmin(args)) return true + if (isSuperAdmin(args)) {return true} const adminTenantAccessIDs = getTenantAdminTenantAccessIDs(req.user) - if (adminTenantAccessIDs.length > 0) return true + if (adminTenantAccessIDs.length > 0) {return true} return false } diff --git a/examples/multi-tenant-single-domain/src/collections/Users/access/isAccessingSelf.ts b/examples/multi-tenant/src/collections/Users/access/isAccessingSelf.ts similarity index 79% rename from examples/multi-tenant-single-domain/src/collections/Users/access/isAccessingSelf.ts rename to examples/multi-tenant/src/collections/Users/access/isAccessingSelf.ts index 15b46eb9bc..bccd36a335 100644 --- a/examples/multi-tenant-single-domain/src/collections/Users/access/isAccessingSelf.ts +++ b/examples/multi-tenant/src/collections/Users/access/isAccessingSelf.ts @@ -1,6 +1,6 @@ import type { Access } from 'payload' export const isAccessingSelf: Access = ({ id, req }) => { - if (!req?.user) return false + if (!req?.user) {return false} return req.user.id === id } diff --git a/examples/multi-tenant-single-domain/src/collections/Users/access/isSuperAdminOrSelf.ts b/examples/multi-tenant/src/collections/Users/access/isSuperAdminOrSelf.ts similarity index 100% rename from examples/multi-tenant-single-domain/src/collections/Users/access/isSuperAdminOrSelf.ts rename to examples/multi-tenant/src/collections/Users/access/isSuperAdminOrSelf.ts diff --git a/examples/multi-tenant-single-domain/src/collections/Users/access/read.ts b/examples/multi-tenant/src/collections/Users/access/read.ts similarity index 94% rename from examples/multi-tenant-single-domain/src/collections/Users/access/read.ts rename to examples/multi-tenant/src/collections/Users/access/read.ts index f30fcf7440..b4aa7b9ba3 100644 --- a/examples/multi-tenant-single-domain/src/collections/Users/access/read.ts +++ b/examples/multi-tenant/src/collections/Users/access/read.ts @@ -8,7 +8,9 @@ import { getTenantAdminTenantAccessIDs } from '../../../utilities/getTenantAcces export const readAccess: Access = (args) => { const { req } = args - if (!req?.user) return false + if (!req?.user) { + return false + } const cookies = parseCookies(req.headers) const superAdmin = isSuperAdmin(args) @@ -39,7 +41,9 @@ export const readAccess: Access = (args) => { } } - if (superAdmin) return true + if (superAdmin) { + return true + } const adminTenantAccessIDs = getTenantAdminTenantAccessIDs(req.user) diff --git a/examples/multi-tenant/src/collections/Users/access/tenantAdmins.ts b/examples/multi-tenant/src/collections/Users/access/tenantAdmins.ts deleted file mode 100644 index f206ed386f..0000000000 --- a/examples/multi-tenant/src/collections/Users/access/tenantAdmins.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { FieldAccess } from 'payload/types' - -import { checkUserRoles } from '../../../utilities/checkUserRoles' -import { checkTenantRoles } from '../utilities/checkTenantRoles' - -export const tenantAdmins: FieldAccess = (args) => { - const { - req: { user }, - doc, - } = args - - return ( - checkUserRoles(['super-admin'], user) || - doc?.tenants?.some(({ tenant }) => { - const id = typeof tenant === 'string' ? tenant : tenant?.id - return checkTenantRoles(['admin'], user, id) - }) - ) -} diff --git a/examples/multi-tenant-single-domain/src/collections/Users/access/updateAndDelete.ts b/examples/multi-tenant/src/collections/Users/access/updateAndDelete.ts similarity index 85% rename from examples/multi-tenant-single-domain/src/collections/Users/access/updateAndDelete.ts rename to examples/multi-tenant/src/collections/Users/access/updateAndDelete.ts index e7c0cbb21b..a615bf9fcd 100644 --- a/examples/multi-tenant-single-domain/src/collections/Users/access/updateAndDelete.ts +++ b/examples/multi-tenant/src/collections/Users/access/updateAndDelete.ts @@ -5,9 +5,9 @@ import { getTenantAdminTenantAccessIDs } from '../../../utilities/getTenantAcces export const updateAndDeleteAccess: Access = (args) => { const { req } = args - if (!req.user) return false + if (!req.user) {return false} - if (isSuperAdmin(args)) return true + if (isSuperAdmin(args)) {return true} const adminTenantAccessIDs = getTenantAdminTenantAccessIDs(req.user) diff --git a/examples/multi-tenant-single-domain/src/collections/Users/endpoints/externalUsersLogin.ts b/examples/multi-tenant/src/collections/Users/endpoints/externalUsersLogin.ts similarity index 100% rename from examples/multi-tenant-single-domain/src/collections/Users/endpoints/externalUsersLogin.ts rename to examples/multi-tenant/src/collections/Users/endpoints/externalUsersLogin.ts diff --git a/examples/multi-tenant-single-domain/src/collections/Users/hooks/ensureUniqueUsername.ts b/examples/multi-tenant/src/collections/Users/hooks/ensureUniqueUsername.ts similarity index 97% rename from examples/multi-tenant-single-domain/src/collections/Users/hooks/ensureUniqueUsername.ts rename to examples/multi-tenant/src/collections/Users/hooks/ensureUniqueUsername.ts index f057d5434b..23ca8e52be 100644 --- a/examples/multi-tenant-single-domain/src/collections/Users/hooks/ensureUniqueUsername.ts +++ b/examples/multi-tenant/src/collections/Users/hooks/ensureUniqueUsername.ts @@ -6,7 +6,7 @@ import { getTenantAccessIDs } from '../../../utilities/getTenantAccessIDs' export const ensureUniqueUsername: FieldHook = async ({ data, originalDoc, req, value }) => { // if value is unchanged, skip validation - if (originalDoc.username === value) return value + if (originalDoc.username === value) {return value} const incomingTenantID = typeof data?.tenant === 'object' ? data.tenant.id : data?.tenant const currentTenantID = diff --git a/examples/multi-tenant/src/collections/Users/hooks/loginAfterCreate.ts b/examples/multi-tenant/src/collections/Users/hooks/loginAfterCreate.ts deleted file mode 100644 index c6cfed0c12..0000000000 --- a/examples/multi-tenant/src/collections/Users/hooks/loginAfterCreate.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { AfterChangeHook } from 'payload/dist/collections/config/types' - -export const loginAfterCreate: AfterChangeHook = async ({ - doc, - req, - req: { payload, body = {}, res }, - operation, -}) => { - if (operation === 'create' && !req.user) { - const { email, password } = body - - if (email && password) { - const { user, token } = await payload.login({ - collection: 'users', - data: { email, password }, - req, - res, - }) - - return { - ...doc, - token, - user, - } - } - } - - return doc -} diff --git a/examples/multi-tenant/src/collections/Users/hooks/recordLastLoggedInTenant.ts b/examples/multi-tenant/src/collections/Users/hooks/recordLastLoggedInTenant.ts deleted file mode 100644 index 3ba69cdbf9..0000000000 --- a/examples/multi-tenant/src/collections/Users/hooks/recordLastLoggedInTenant.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { AfterLoginHook } from 'payload/dist/collections/config/types' - -export const recordLastLoggedInTenant: AfterLoginHook = async ({ req, user }) => { - try { - const relatedOrg = await req.payload - .find({ - collection: 'tenants', - depth: 0, - limit: 1, - where: { - 'domains.domain': { - in: [req.headers.host], - }, - }, - }) - ?.then((res) => res.docs?.[0]) - - await req.payload.update({ - id: user.id, - collection: 'users', - data: { - lastLoggedInTenant: relatedOrg?.id || null, - }, - req, - }) - } catch (err: unknown) { - req.payload.logger.error({ - err, - msg: `Error recording last logged in tenant for user ${user.id}`, - }) - } - - return user -} diff --git a/examples/multi-tenant/src/collections/Users/hooks/setCookieBasedOnDomain.ts b/examples/multi-tenant/src/collections/Users/hooks/setCookieBasedOnDomain.ts new file mode 100644 index 0000000000..f34176bc79 --- /dev/null +++ b/examples/multi-tenant/src/collections/Users/hooks/setCookieBasedOnDomain.ts @@ -0,0 +1,40 @@ +import type { CollectionAfterLoginHook } from 'payload' + +import { mergeHeaders } from '@payloadcms/next/utilities' +import { generateCookie, getCookieExpiration } from 'payload' + +export const setCookieBasedOnDomain: CollectionAfterLoginHook = async ({ req, user }) => { + const relatedOrg = await req.payload.find({ + collection: 'tenants', + depth: 0, + limit: 1, + where: { + 'domains.domain': { + in: [req.headers.get('host')], + }, + }, + }) + + // If a matching tenant is found, set the 'payload-tenant' cookie + if (relatedOrg && relatedOrg.docs.length > 0) { + const tenantCookie = generateCookie({ + name: 'payload-tenant', + expires: getCookieExpiration({ seconds: 7200 }), + path: '/', + returnCookieAsObject: false, + value: relatedOrg.docs[0].id, + }) + + // Merge existing responseHeaders with the new Set-Cookie header + const newHeaders = new Headers({ + 'Set-Cookie': tenantCookie as string, + }) + + // Ensure you merge existing response headers if they already exist + req.responseHeaders = req.responseHeaders + ? mergeHeaders(req.responseHeaders, newHeaders) + : newHeaders + } + + return user +} diff --git a/examples/multi-tenant/src/collections/Users/index.ts b/examples/multi-tenant/src/collections/Users/index.ts index a270496b2d..8ce9402fa2 100644 --- a/examples/multi-tenant/src/collections/Users/index.ts +++ b/examples/multi-tenant/src/collections/Users/index.ts @@ -1,107 +1,73 @@ -import type { CollectionConfig } from 'payload/types' +import type { CollectionConfig } from 'payload' -import { anyone } from '../../access/anyone' -import { superAdminFieldAccess } from '../../access/superAdmins' -import { adminsAndSelf } from './access/adminsAndSelf' -import { tenantAdmins } from './access/tenantAdmins' -import { loginAfterCreate } from './hooks/loginAfterCreate' -import { recordLastLoggedInTenant } from './hooks/recordLastLoggedInTenant' -import { isSuperOrTenantAdmin } from './utilities/isSuperOrTenantAdmin' +import { createAccess } from './access/create' +import { readAccess } from './access/read' +import { updateAndDeleteAccess } from './access/updateAndDelete' +import { externalUsersLogin } from './endpoints/externalUsersLogin' +import { ensureUniqueUsername } from './hooks/ensureUniqueUsername' +// import { setCookieBasedOnDomain } from './hooks/setCookieBasedOnDomain' -export const Users: CollectionConfig = { +const Users: CollectionConfig = { slug: 'users', - auth: true, + access: { + create: createAccess, + delete: updateAndDeleteAccess, + read: readAccess, + update: updateAndDeleteAccess, + }, admin: { useAsTitle: 'email', }, - access: { - read: adminsAndSelf, - create: anyone, - update: adminsAndSelf, - delete: adminsAndSelf, - admin: isSuperOrTenantAdmin, - }, - hooks: { - afterChange: [loginAfterCreate], - afterLogin: [recordLastLoggedInTenant], - }, + auth: true, + endpoints: [externalUsersLogin], fields: [ - { - name: 'firstName', - type: 'text', - }, - { - name: 'lastName', - type: 'text', - }, { name: 'roles', type: 'select', + defaultValue: ['user'], hasMany: true, - required: true, - access: { - create: superAdminFieldAccess, - update: superAdminFieldAccess, - read: superAdminFieldAccess, - }, - options: [ - { - label: 'Super Admin', - value: 'super-admin', - }, - { - label: 'User', - value: 'user', - }, - ], + options: ['super-admin', 'user'], }, { name: 'tenants', type: 'array', - label: 'Tenants', - access: { - create: tenantAdmins, - update: tenantAdmins, - read: tenantAdmins, - }, fields: [ { name: 'tenant', type: 'relationship', + index: true, relationTo: 'tenants', required: true, + saveToJWT: true, }, { name: 'roles', type: 'select', + defaultValue: ['tenant-viewer'], hasMany: true, + options: ['tenant-admin', 'tenant-viewer'], required: true, - options: [ - { - label: 'Admin', - value: 'admin', - }, - { - label: 'User', - value: 'user', - }, - ], }, ], + saveToJWT: true, }, { - name: 'lastLoggedInTenant', - type: 'relationship', - relationTo: 'tenants', + name: 'username', + type: 'text', + hooks: { + beforeValidate: [ensureUniqueUsername], + }, index: true, - access: { - create: () => false, - read: tenantAdmins, - update: superAdminFieldAccess, - }, - admin: { - position: 'sidebar', - }, }, ], + // The following hook sets a cookie based on the domain a user logs in from. + // It checks the domain and matches it to a tenant in the system, then sets + // a 'payload-tenant' cookie for that tenant. + + // Uncomment this if you want to enable tenant-based cookie handling by domain. + // hooks: { + // afterLogin: [setCookieBasedOnDomain], + // }, } + +export default Users diff --git a/examples/multi-tenant/src/collections/Users/utilities/checkTenantRoles.ts b/examples/multi-tenant/src/collections/Users/utilities/checkTenantRoles.ts deleted file mode 100644 index e7cde3060d..0000000000 --- a/examples/multi-tenant/src/collections/Users/utilities/checkTenantRoles.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { User } from '../../../payload-types' - -export const checkTenantRoles = ( - allRoles: User['tenants'][0]['roles'] = [], - user: User = undefined, - tenant: User['tenants'][0]['tenant'] = undefined, -): boolean => { - if (tenant) { - const id = typeof tenant === 'string' ? tenant : tenant?.id - - if ( - allRoles.some((role) => { - return user?.tenants?.some(({ tenant: userTenant, roles }) => { - const tenantID = typeof userTenant === 'string' ? userTenant : userTenant?.id - return tenantID === id && roles?.includes(role) - }) - }) - ) - return true - } - - return false -} diff --git a/examples/multi-tenant/src/collections/Users/utilities/isSuperOrTenantAdmin.ts b/examples/multi-tenant/src/collections/Users/utilities/isSuperOrTenantAdmin.ts deleted file mode 100644 index 87a9f1cbc9..0000000000 --- a/examples/multi-tenant/src/collections/Users/utilities/isSuperOrTenantAdmin.ts +++ /dev/null @@ -1,71 +0,0 @@ -import type { PayloadRequest } from 'payload/dist/types' - -import { isSuperAdmin } from '../../../utilities/isSuperAdmin' - -const logs = false - -export const isSuperOrTenantAdmin = async (args: { req: PayloadRequest }): Promise => { - const { - req, - req: { user, payload }, - } = args - - // always allow super admins through - if (isSuperAdmin(user)) { - return true - } - - if (logs) { - const msg = `Finding tenant with host: '${req.headers.host}'` - payload.logger.info({ msg }) - } - - // read `req.headers.host`, lookup the tenant by `domain` to ensure it exists, and check if the user is an admin of that tenant - const foundTenants = await payload.find({ - collection: 'tenants', - where: { - 'domains.domain': { - in: [req.headers.host], - }, - }, - depth: 0, - limit: 1, - req, - }) - - // if this tenant does not exist, deny access - if (foundTenants.totalDocs === 0) { - if (logs) { - const msg = `No tenant found for ${req.headers.host}` - payload.logger.info({ msg }) - } - - return false - } - - if (logs) { - const msg = `Found tenant: '${foundTenants.docs?.[0]?.name}', checking if user is an tenant admin` - payload.logger.info({ msg }) - } - - // finally check if the user is an admin of this tenant - const tenantWithUser = user?.tenants?.find( - ({ tenant: userTenant }) => userTenant?.id === foundTenants.docs[0].id, - ) - - if (tenantWithUser?.roles?.some((role) => role === 'admin')) { - if (logs) { - const msg = `User is an admin of ${foundTenants.docs[0].name}, allowing access` - payload.logger.info({ msg }) - } - - return true - } - - if (logs) { - const msg = `User is not an admin of ${foundTenants.docs[0].name}, denying access` - payload.logger.info({ msg }) - } - - return false -} diff --git a/examples/multi-tenant-single-domain/src/components/TenantSelector/index.client.tsx b/examples/multi-tenant/src/components/TenantSelector/index.client.tsx similarity index 97% rename from examples/multi-tenant-single-domain/src/components/TenantSelector/index.client.tsx rename to examples/multi-tenant/src/components/TenantSelector/index.client.tsx index 76fb9b672e..c9b68c2fd7 100644 --- a/examples/multi-tenant-single-domain/src/components/TenantSelector/index.client.tsx +++ b/examples/multi-tenant/src/components/TenantSelector/index.client.tsx @@ -19,7 +19,9 @@ export const TenantSelector = ({ initialCookie }: { initialCookie?: string }) => const tenantIDs = user?.tenants?.map(({ tenant }) => { if (tenant) { - if (typeof tenant === 'string') return tenant + if (typeof tenant === 'string') { + return tenant + } return tenant.id } }) || [] diff --git a/examples/multi-tenant-single-domain/src/components/TenantSelector/index.scss b/examples/multi-tenant/src/components/TenantSelector/index.scss similarity index 100% rename from examples/multi-tenant-single-domain/src/components/TenantSelector/index.scss rename to examples/multi-tenant/src/components/TenantSelector/index.scss diff --git a/examples/multi-tenant-single-domain/src/components/TenantSelector/index.tsx b/examples/multi-tenant/src/components/TenantSelector/index.tsx similarity index 71% rename from examples/multi-tenant-single-domain/src/components/TenantSelector/index.tsx rename to examples/multi-tenant/src/components/TenantSelector/index.tsx index 0a31580b7f..933b0071bf 100644 --- a/examples/multi-tenant-single-domain/src/components/TenantSelector/index.tsx +++ b/examples/multi-tenant/src/components/TenantSelector/index.tsx @@ -3,7 +3,7 @@ import React from 'react' import { TenantSelector } from './index.client' -export const TenantSelectorRSC = () => { - const cookies = getCookies() +export const TenantSelectorRSC = async () => { + const cookies = await getCookies() return } diff --git a/examples/multi-tenant/src/dotenv.js b/examples/multi-tenant/src/dotenv.js deleted file mode 100644 index 8c62a1a294..0000000000 --- a/examples/multi-tenant/src/dotenv.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - config: () => null, -} diff --git a/examples/multi-tenant-single-domain/src/fields/TenantField/access/update.ts b/examples/multi-tenant/src/fields/TenantField/access/update.ts similarity index 100% rename from examples/multi-tenant-single-domain/src/fields/TenantField/access/update.ts rename to examples/multi-tenant/src/fields/TenantField/access/update.ts diff --git a/examples/multi-tenant-single-domain/src/fields/TenantField/components/Field.client.tsx b/examples/multi-tenant/src/fields/TenantField/components/Field.client.tsx similarity index 100% rename from examples/multi-tenant-single-domain/src/fields/TenantField/components/Field.client.tsx rename to examples/multi-tenant/src/fields/TenantField/components/Field.client.tsx diff --git a/examples/multi-tenant-single-domain/src/fields/TenantField/components/Field.tsx b/examples/multi-tenant/src/fields/TenantField/components/Field.tsx similarity index 90% rename from examples/multi-tenant-single-domain/src/fields/TenantField/components/Field.tsx rename to examples/multi-tenant/src/fields/TenantField/components/Field.tsx index 0f94e0a931..1644c2aa00 100644 --- a/examples/multi-tenant-single-domain/src/fields/TenantField/components/Field.tsx +++ b/examples/multi-tenant/src/fields/TenantField/components/Field.tsx @@ -10,8 +10,8 @@ export const TenantFieldComponent: React.FC<{ payload: Payload readOnly: boolean }> = async (args) => { - const cookies = getCookies() - const headers = getHeaders() + const cookies = await getCookies() + const headers = await getHeaders() const { user } = await args.payload.auth({ headers }) if ( diff --git a/examples/multi-tenant-single-domain/src/fields/TenantField/hooks/autofillTenant.ts b/examples/multi-tenant/src/fields/TenantField/hooks/autofillTenant.ts similarity index 87% rename from examples/multi-tenant-single-domain/src/fields/TenantField/hooks/autofillTenant.ts rename to examples/multi-tenant/src/fields/TenantField/hooks/autofillTenant.ts index 230ba50faa..d04eaf868d 100644 --- a/examples/multi-tenant-single-domain/src/fields/TenantField/hooks/autofillTenant.ts +++ b/examples/multi-tenant/src/fields/TenantField/hooks/autofillTenant.ts @@ -8,7 +8,7 @@ export const autofillTenant: FieldHook = ({ req, value }) => { // return that tenant ID as the value if (!value) { const tenantIDs = getTenantAccessIDs(req.user) - if (tenantIDs.length === 1) return tenantIDs[0] + if (tenantIDs.length === 1) {return tenantIDs[0]} } return value diff --git a/examples/multi-tenant-single-domain/src/fields/TenantField/index.ts b/examples/multi-tenant/src/fields/TenantField/index.ts similarity index 93% rename from examples/multi-tenant-single-domain/src/fields/TenantField/index.ts rename to examples/multi-tenant/src/fields/TenantField/index.ts index 7cc52a6bc8..8782ab2a37 100644 --- a/examples/multi-tenant-single-domain/src/fields/TenantField/index.ts +++ b/examples/multi-tenant/src/fields/TenantField/index.ts @@ -10,7 +10,7 @@ export const tenantField: Field = { access: { read: () => true, update: (args) => { - if (isSuperAdmin(args)) return true + if (isSuperAdmin(args)) {return true} return tenantFieldUpdate(args) }, }, diff --git a/examples/multi-tenant/src/fields/link.ts b/examples/multi-tenant/src/fields/link.ts deleted file mode 100644 index ae88df8236..0000000000 --- a/examples/multi-tenant/src/fields/link.ts +++ /dev/null @@ -1,145 +0,0 @@ -import type { Field } from 'payload/types' - -import deepMerge from '../utilities/deepMerge' - -export const appearanceOptions = { - primary: { - label: 'Primary Button', - value: 'primary', - }, - secondary: { - label: 'Secondary Button', - value: 'secondary', - }, - default: { - label: 'Default', - value: 'default', - }, -} - -export type LinkAppearances = 'primary' | 'secondary' | 'default' - -type LinkType = (options?: { - appearances?: LinkAppearances[] | false - disableLabel?: boolean - overrides?: Record -}) => Field - -const link: LinkType = ({ appearances, disableLabel = false, overrides = {} } = {}) => { - const linkResult: Field = { - name: 'link', - type: 'group', - admin: { - hideGutter: true, - }, - fields: [ - { - type: 'row', - fields: [ - { - name: 'type', - type: 'radio', - options: [ - { - label: 'Internal link', - value: 'reference', - }, - { - label: 'Custom URL', - value: 'custom', - }, - ], - defaultValue: 'reference', - admin: { - layout: 'horizontal', - width: '50%', - }, - }, - { - name: 'newTab', - label: 'Open in new tab', - type: 'checkbox', - admin: { - width: '50%', - style: { - alignSelf: 'flex-end', - }, - }, - }, - ], - }, - ], - } - - const linkTypes: Field[] = [ - { - name: 'reference', - label: 'Document to link to', - type: 'relationship', - relationTo: ['pages'], - required: true, - maxDepth: 1, - admin: { - condition: (_, siblingData) => siblingData?.type === 'reference', - }, - }, - { - name: 'url', - label: 'Custom URL', - type: 'text', - required: true, - admin: { - condition: (_, siblingData) => siblingData?.type === 'custom', - }, - }, - ] - - if (!disableLabel) { - linkTypes[0].admin.width = '50%' - linkTypes[1].admin.width = '50%' - - linkResult.fields.push({ - type: 'row', - fields: [ - ...linkTypes, - { - name: 'label', - label: 'Label', - type: 'text', - required: true, - admin: { - width: '50%', - }, - }, - ], - }) - } else { - linkResult.fields = [...linkResult.fields, ...linkTypes] - } - - if (appearances !== false) { - let appearanceOptionsToUse = [ - appearanceOptions.default, - appearanceOptions.primary, - appearanceOptions.secondary, - ] - - if (appearances) { - appearanceOptionsToUse = appearances.map((appearance) => appearanceOptions[appearance]) - } - - linkResult.fields.push({ - name: 'appearance', - type: 'select', - defaultValue: 'default', - options: appearanceOptionsToUse, - admin: { - description: 'Choose how the link should be rendered.', - }, - }) - } - - return deepMerge(linkResult, overrides) -} - -export default link diff --git a/examples/multi-tenant/src/fields/richText/elements.ts b/examples/multi-tenant/src/fields/richText/elements.ts deleted file mode 100644 index 469793c74f..0000000000 --- a/examples/multi-tenant/src/fields/richText/elements.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { RichTextElement } from '@payloadcms/richtext-slate' - -const elements: RichTextElement[] = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'link'] - -export default elements diff --git a/examples/multi-tenant/src/fields/richText/index.ts b/examples/multi-tenant/src/fields/richText/index.ts deleted file mode 100644 index 11bda18640..0000000000 --- a/examples/multi-tenant/src/fields/richText/index.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { slateEditor } from '@payloadcms/richtext-slate' -import type { RichTextElement, RichTextLeaf } from '@payloadcms/richtext-slate/dist/types' -import type { RichTextField } from 'payload/types' - -import deepMerge from '../../utilities/deepMerge' -import link from '../link' -import elements from './elements' -import leaves from './leaves' - -type RichText = ( - overrides?: Partial, - additions?: { - elements?: RichTextElement[] - leaves?: RichTextLeaf[] - }, -) => RichTextField - -const richText: RichText = ( - overrides, - additions = { - elements: [], - leaves: [], - }, -) => - deepMerge>( - { - name: 'richText', - type: 'richText', - required: true, - editor: slateEditor({ - admin: { - upload: { - collections: { - media: { - fields: [ - { - type: 'richText', - name: 'caption', - label: 'Caption', - editor: slateEditor({ - admin: { - elements: [...elements], - leaves: [...leaves], - }, - }), - }, - { - type: 'radio', - name: 'alignment', - label: 'Alignment', - options: [ - { - label: 'Left', - value: 'left', - }, - { - label: 'Center', - value: 'center', - }, - { - label: 'Right', - value: 'right', - }, - ], - }, - { - name: 'enableLink', - type: 'checkbox', - label: 'Enable Link', - }, - link({ - appearances: false, - disableLabel: true, - overrides: { - admin: { - condition: (_, data) => Boolean(data?.enableLink), - }, - }, - }), - ], - }, - }, - }, - elements: [...elements, ...(additions.elements || [])], - leaves: [...leaves, ...(additions.leaves || [])], - }, - }), - }, - overrides, - ) - -export default richText diff --git a/examples/multi-tenant/src/fields/richText/leaves.ts b/examples/multi-tenant/src/fields/richText/leaves.ts deleted file mode 100644 index 408143c77f..0000000000 --- a/examples/multi-tenant/src/fields/richText/leaves.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { RichTextLeaf } from '@payloadcms/richtext-slate' - -const defaultLeaves: RichTextLeaf[] = ['bold', 'italic', 'underline'] - -export default defaultLeaves diff --git a/examples/multi-tenant/src/fields/tenant/access/tenantAdmins.ts b/examples/multi-tenant/src/fields/tenant/access/tenantAdmins.ts deleted file mode 100644 index 9ddcca0f55..0000000000 --- a/examples/multi-tenant/src/fields/tenant/access/tenantAdmins.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { FieldAccess } from 'payload/types' - -import { checkUserRoles } from '../../../utilities/checkUserRoles' - -export const tenantAdminFieldAccess: FieldAccess = ({ req: { user }, doc }) => { - return ( - checkUserRoles(['super-admin'], user) || - !doc?.tenant || - (doc?.tenant && - user?.tenants?.some( - ({ tenant: userTenant, roles }) => - (typeof doc?.tenant === 'string' ? doc?.tenant : doc?.tenant.id) === userTenant?.id && - roles?.includes('admin'), - )) - ) -} diff --git a/examples/multi-tenant/src/fields/tenant/index.ts b/examples/multi-tenant/src/fields/tenant/index.ts deleted file mode 100644 index 883f3e5a01..0000000000 --- a/examples/multi-tenant/src/fields/tenant/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { Field } from 'payload/types' - -import { superAdminFieldAccess } from '../../access/superAdmins' -import { isSuperAdmin } from '../../utilities/isSuperAdmin' -import { tenantAdminFieldAccess } from './access/tenantAdmins' - -export const tenant: Field = { - name: 'tenant', - type: 'relationship', - relationTo: 'tenants', - // don't require this field because we need to auto-populate it, see below - // required: true, - // we also don't want to hide this field because super-admins may need to manage it - // to achieve this, create a custom component that conditionally renders the field based on the user's role - // hidden: true, - index: true, - admin: { - position: 'sidebar', - }, - access: { - create: superAdminFieldAccess, - read: tenantAdminFieldAccess, - update: superAdminFieldAccess, - }, - hooks: { - // automatically set the tenant to the last logged in tenant - // for super admins, allow them to set the tenant - beforeChange: [ - async ({ req, req: { user }, data }) => { - if ((await isSuperAdmin(req.user)) && data?.tenant) { - return data.tenant - } - - if (user?.lastLoggedInTenant?.id) { - return user.lastLoggedInTenant.id - } - - return undefined - }, - ], - }, -} diff --git a/examples/multi-tenant-single-domain/src/migrations/seed.ts b/examples/multi-tenant/src/migrations/seed.ts similarity index 85% rename from examples/multi-tenant-single-domain/src/migrations/seed.ts rename to examples/multi-tenant/src/migrations/seed.ts index 95cc9df422..8e8c0ac5d1 100644 --- a/examples/multi-tenant-single-domain/src/migrations/seed.ts +++ b/examples/multi-tenant/src/migrations/seed.ts @@ -10,11 +10,15 @@ export async function up({ payload }: MigrateUpArgs): Promise { }, }) + // The 'domains' field is used to associate a domain with this tenant. + // Uncomment and set the domain if you want to enable domain-based tenant assignment. + const tenant1 = await payload.create({ collection: 'tenants', data: { name: 'Tenant 1', slug: 'tenant-1', + // domains: [{ domain: 'abc.localhost.com:3000' }], }, }) @@ -23,6 +27,7 @@ export async function up({ payload }: MigrateUpArgs): Promise { data: { name: 'Tenant 2', slug: 'tenant-2', + // domains: [{ domain: 'bbc.localhost.com:3000' }], }, }) @@ -31,6 +36,7 @@ export async function up({ payload }: MigrateUpArgs): Promise { data: { name: 'Tenant 3', slug: 'tenant-3', + // domains: [{ domain: 'cbc.localhost.com:3000' }], }, }) @@ -44,6 +50,10 @@ export async function up({ payload }: MigrateUpArgs): Promise { roles: ['tenant-admin'], tenant: tenant1.id, }, + // { + // roles: ['tenant-admin'], + // tenant: tenant2.id, + // }, ], username: 'tenant1', }, diff --git a/examples/multi-tenant-single-domain/src/mocks/emptyObject.js b/examples/multi-tenant/src/mocks/emptyObject.js similarity index 100% rename from examples/multi-tenant-single-domain/src/mocks/emptyObject.js rename to examples/multi-tenant/src/mocks/emptyObject.js diff --git a/examples/multi-tenant/src/payload-types.ts b/examples/multi-tenant/src/payload-types.ts index 426607a334..03f996d59c 100644 --- a/examples/multi-tenant/src/payload-types.ts +++ b/examples/multi-tenant/src/payload-types.ts @@ -7,93 +7,164 @@ */ export interface Config { + auth: { + users: UserAuthOperations; + }; collections: { - users: User - tenants: Tenant - pages: Page - 'payload-preferences': PayloadPreference - 'payload-migrations': PayloadMigration - } - globals: {} + pages: Page; + users: User; + tenants: Tenant; + 'payload-locked-documents': PayloadLockedDocument; + 'payload-preferences': PayloadPreference; + 'payload-migrations': PayloadMigration; + }; + db: { + defaultIDType: string; + }; + globals: {}; + locale: null; + user: User & { + collection: 'users'; + }; } -export interface User { - id: string - firstName?: string - lastName?: string - roles: ('super-admin' | 'user')[] - tenants?: { - tenant: string | Tenant - roles: ('admin' | 'user')[] - id?: string - }[] - lastLoggedInTenant?: string | Tenant - updatedAt: string - createdAt: string - email: string - resetPasswordToken?: string - resetPasswordExpiration?: string - salt?: string - hash?: string - loginAttempts?: number - lockUntil?: string - password?: string -} -export interface Tenant { - id: string - name: string - domains?: { - domain: string - id?: string - }[] - updatedAt: string - createdAt: string +export interface UserAuthOperations { + forgotPassword: { + email: string; + password: string; + }; + login: { + email: string; + password: string; + }; + registerFirstUser: { + email: string; + password: string; + }; + unlock: { + email: string; + password: string; + }; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "pages". + */ export interface Page { - id: string - title: string - slug?: string - tenant?: string | Tenant - richText: { - [k: string]: unknown - }[] - updatedAt: string - createdAt: string + id: string; + title?: string | null; + slug?: string | null; + tenant: string | Tenant; + updatedAt: string; + createdAt: string; } -export interface PayloadPreference { - id: string +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "tenants". + */ +export interface Tenant { + id: string; + name: string; + slug: string; + public?: boolean | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: string; + roles?: ('super-admin' | 'user')[] | null; + tenants?: + | { + tenant: string | Tenant; + roles: ('tenant-admin' | 'tenant-viewer')[]; + id?: string | null; + }[] + | null; + username?: string | null; + updatedAt: string; + createdAt: string; + email: string; + resetPasswordToken?: string | null; + resetPasswordExpiration?: string | null; + salt?: string | null; + hash?: string | null; + loginAttempts?: number | null; + lockUntil?: string | null; + password?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents". + */ +export interface PayloadLockedDocument { + id: string; + document?: + | ({ + relationTo: 'pages'; + value: string | Page; + } | null) + | ({ + relationTo: 'users'; + value: string | User; + } | null) + | ({ + relationTo: 'tenants'; + value: string | Tenant; + } | null); + globalSlug?: string | null; user: { - relationTo: 'users' - value: string | User - } - key?: string + relationTo: 'users'; + value: string | User; + }; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences". + */ +export interface PayloadPreference { + id: string; + user: { + relationTo: 'users'; + value: string | User; + }; + key?: string | null; value?: | { - [k: string]: unknown + [k: string]: unknown; } | unknown[] | string | number | boolean - | null - updatedAt: string - createdAt: string + | null; + updatedAt: string; + createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations". + */ export interface PayloadMigration { - id: string - name?: string - batch?: number - updatedAt: string - createdAt: string + id: string; + name?: string | null; + batch?: number | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "auth". + */ +export interface Auth { + [k: string]: unknown; } + declare module 'payload' { - export interface GeneratedTypes { - collections: { - users: User - tenants: Tenant - pages: Page - 'payload-preferences': PayloadPreference - 'payload-migrations': PayloadMigration - } - } -} + export interface GeneratedTypes extends Config {} +} \ No newline at end of file diff --git a/examples/multi-tenant/src/payload.config.ts b/examples/multi-tenant/src/payload.config.ts index 54059d14d5..c872d8bc68 100644 --- a/examples/multi-tenant/src/payload.config.ts +++ b/examples/multi-tenant/src/payload.config.ts @@ -1,39 +1,33 @@ -import { webpackBundler } from '@payloadcms/bundler-webpack' import { mongooseAdapter } from '@payloadcms/db-mongodb' -import { slateEditor } from '@payloadcms/richtext-slate' -import dotenv from 'dotenv' +import { lexicalEditor } from '@payloadcms/richtext-lexical' import path from 'path' - -dotenv.config({ - path: path.resolve(__dirname, '../.env'), -}) - -import { buildConfig } from 'payload/config' +import { buildConfig } from 'payload' +import { fileURLToPath } from 'url' import { Pages } from './collections/Pages' import { Tenants } from './collections/Tenants' -import { Users } from './collections/Users' +import Users from './collections/Users' + +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) export default buildConfig({ - collections: [Users, Tenants, Pages], admin: { - bundler: webpackBundler(), - webpack: (config) => ({ - ...config, - resolve: { - ...config.resolve, - alias: { - ...config.resolve.alias, - dotenv: path.resolve(__dirname, './dotenv.js'), - }, - }, - }), + components: { + afterNavLinks: ['@/components/TenantSelector#TenantSelectorRSC'], + }, + user: 'users', }, - editor: slateEditor({}), + collections: [Pages, Users, Tenants], db: mongooseAdapter({ - url: process.env.DATABASE_URI, + url: process.env.DATABASE_URI as string, }), + editor: lexicalEditor({}), + graphQL: { + schemaOutputFile: path.resolve(dirname, 'generated-schema.graphql'), + }, + secret: process.env.PAYLOAD_SECRET as string, typescript: { - outputFile: path.resolve(__dirname, 'payload-types.ts'), + outputFile: path.resolve(dirname, 'payload-types.ts'), }, }) diff --git a/examples/multi-tenant/src/seed/index.ts b/examples/multi-tenant/src/seed/index.ts deleted file mode 100644 index ed1a0ea9da..0000000000 --- a/examples/multi-tenant/src/seed/index.ts +++ /dev/null @@ -1,119 +0,0 @@ -import type { Payload } from 'payload' - -export const seed = async (payload: Payload): Promise => { - // create super admin - await payload.create({ - collection: 'users', - data: { - email: 'demo@payloadcms.com', - password: 'demo', - roles: ['super-admin'], - }, - }) - - // create tenants, use `*.localhost.com` so that accidentally forgotten changes the hosts file are acceptable - const [abc, bbc] = await Promise.all([ - await payload.create({ - collection: 'tenants', - data: { - name: 'ABC', - domains: [{ domain: 'abc.localhost.com:3000' }], - }, - }), - await payload.create({ - collection: 'tenants', - data: { - name: 'BBC', - domains: [{ domain: 'bbc.localhost.com:3000' }], - }, - }), - ]) - - // create tenant-scoped admins and users - await Promise.all([ - await payload.create({ - collection: 'users', - data: { - email: 'admin@abc.com', - password: 'test', - roles: ['user'], - tenants: [ - { - tenant: abc.id, - roles: ['admin'], - }, - ], - }, - }), - await payload.create({ - collection: 'users', - data: { - email: 'user@abc.com', - password: 'test', - roles: ['user'], - tenants: [ - { - tenant: abc.id, - roles: ['user'], - }, - ], - }, - }), - await payload.create({ - collection: 'users', - data: { - email: 'admin@bbc.com', - password: 'test', - roles: ['user'], - tenants: [ - { - tenant: bbc.id, - roles: ['admin'], - }, - ], - }, - }), - await payload.create({ - collection: 'users', - data: { - email: 'user@bbc.com', - password: 'test', - roles: ['user'], - tenants: [ - { - tenant: bbc.id, - roles: ['user'], - }, - ], - }, - }), - ]) - - // create tenant-scoped pages - await Promise.all([ - await payload.create({ - collection: 'pages', - data: { - tenant: abc.id, - title: 'ABC Home', - richText: [ - { - text: 'Hello, ABC!', - }, - ], - }, - }), - await payload.create({ - collection: 'pages', - data: { - title: 'BBC Home', - tenant: bbc.id, - richText: [ - { - text: 'Hello, BBC!', - }, - ], - }, - }), - ]) -} diff --git a/examples/multi-tenant/src/server.ts b/examples/multi-tenant/src/server.ts deleted file mode 100644 index 985169f2ed..0000000000 --- a/examples/multi-tenant/src/server.ts +++ /dev/null @@ -1,37 +0,0 @@ -import dotenv from 'dotenv' -import path from 'path' - -dotenv.config({ - path: path.resolve(__dirname, '../.env'), -}) - -import express from 'express' -import payload from 'payload' - -import { seed } from './seed' - -const app = express() - -app.get('/', (_, res) => { - res.redirect('/admin') -}) - -const start = async (): Promise => { - await payload.init({ - secret: process.env.PAYLOAD_SECRET, - mongoURL: process.env.MONGODB_URI, - express: app, - onInit: () => { - payload.logger.info(`Payload Admin URL: ${payload.getAdminURL()}`) - }, - }) - - if (process.env.PAYLOAD_SEED === 'true') { - payload.logger.info('---- SEEDING DATABASE ----') - await seed(payload) - } - - app.listen(3000) -} - -start() diff --git a/examples/multi-tenant/src/utilities/checkUserRoles.ts b/examples/multi-tenant/src/utilities/checkUserRoles.ts deleted file mode 100644 index 06bc228e38..0000000000 --- a/examples/multi-tenant/src/utilities/checkUserRoles.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { User } from '../payload-types' - -export const checkUserRoles = (allRoles: User['roles'] = [], user: User = undefined): boolean => { - if (user) { - if ( - allRoles.some((role) => { - return user?.roles?.some((individualRole) => { - return individualRole === role - }) - }) - ) - return true - } - - return false -} diff --git a/examples/multi-tenant/src/utilities/deepMerge.ts b/examples/multi-tenant/src/utilities/deepMerge.ts deleted file mode 100644 index fe4e5feb00..0000000000 --- a/examples/multi-tenant/src/utilities/deepMerge.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Simple object check. - * @param item - * @returns {boolean} - */ -export function isObject(item: unknown): boolean { - return item && typeof item === 'object' && !Array.isArray(item) -} - -/** - * Deep merge two objects. - * @param target - * @param ...sources - */ -export default function deepMerge(target: T, source: R): T { - const output = { ...target } - if (isObject(target) && isObject(source)) { - Object.keys(source).forEach((key) => { - if (isObject(source[key])) { - if (!(key in (target as Record))) { - Object.assign(output, { [key]: source[key] }) - } else { - output[key] = deepMerge(target[key], source[key]) - } - } else { - Object.assign(output, { [key]: source[key] }) - } - }) - } - - return output -} diff --git a/examples/multi-tenant-single-domain/src/utilities/getTenantAccessIDs.ts b/examples/multi-tenant/src/utilities/getTenantAccessIDs.ts similarity index 74% rename from examples/multi-tenant-single-domain/src/utilities/getTenantAccessIDs.ts rename to examples/multi-tenant/src/utilities/getTenantAccessIDs.ts index 69c809938d..b827ac536d 100644 --- a/examples/multi-tenant-single-domain/src/utilities/getTenantAccessIDs.ts +++ b/examples/multi-tenant/src/utilities/getTenantAccessIDs.ts @@ -1,7 +1,7 @@ import type { User } from '../payload-types' -export const getTenantAccessIDs = (user: User | null): string[] => { - if (!user) return [] +export const getTenantAccessIDs = (user: null | User): string[] => { + if (!user) {return []} return ( user?.tenants?.reduce((acc: string[], { tenant }) => { if (tenant) { @@ -12,8 +12,8 @@ export const getTenantAccessIDs = (user: User | null): string[] => { ) } -export const getTenantAdminTenantAccessIDs = (user: User | null): string[] => { - if (!user) return [] +export const getTenantAdminTenantAccessIDs = (user: null | User): string[] => { + if (!user) {return []} return ( user?.tenants?.reduce((acc: string[], { roles, tenant }) => { diff --git a/examples/multi-tenant-single-domain/src/utilities/isPayloadAdminPanel.ts b/examples/multi-tenant/src/utilities/isPayloadAdminPanel.ts similarity index 100% rename from examples/multi-tenant-single-domain/src/utilities/isPayloadAdminPanel.ts rename to examples/multi-tenant/src/utilities/isPayloadAdminPanel.ts diff --git a/examples/multi-tenant/src/utilities/isSuperAdmin.ts b/examples/multi-tenant/src/utilities/isSuperAdmin.ts deleted file mode 100644 index d89345f864..0000000000 --- a/examples/multi-tenant/src/utilities/isSuperAdmin.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { User } from '../payload-types' -import { checkUserRoles } from './checkUserRoles' - -export const isSuperAdmin = (user: User): boolean => checkUserRoles(['super-admin'], user) diff --git a/examples/multi-tenant/tsconfig.json b/examples/multi-tenant/tsconfig.json index 1cb9264e80..7d03fb7cb7 100644 --- a/examples/multi-tenant/tsconfig.json +++ b/examples/multi-tenant/tsconfig.json @@ -1,33 +1,48 @@ { "compilerOptions": { - "target": "es5", + "baseUrl": ".", "lib": [ "dom", "dom.iterable", "esnext" ], "allowJs": true, - "strict": false, - "esModuleInterop": true, "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src", - "jsx": "react", - "sourceMap": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], "paths": { - "node_modules/*": ["./node_modules/*"] + "@/*": [ + "./src/*" + ], + "@payload-config": [ + "src/payload.config.ts" + ], + "@payload-types": [ + "src/payload-types.ts" + ] }, + "target": "ES2017" }, "include": [ - "src" + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + "src/mocks/emptyObject.js" ], "exclude": [ - "node_modules", - "dist", - "build", - ], - "ts-node": { - "transpileOnly": true - } + "node_modules" + ] } diff --git a/examples/multi-tenant/yarn.lock b/examples/multi-tenant/yarn.lock deleted file mode 100644 index 670cde378e..0000000000 --- a/examples/multi-tenant/yarn.lock +++ /dev/null @@ -1,8464 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@aws-crypto/crc32@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-cognito-identity@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.504.0.tgz#d0be72f2f88d1fc6f1bd66729c41a78cb191e72c" - integrity sha512-WsQY6CRDC9Y1rKjpsk187EHKES6nLmM9sD6iHAKZFLhi/DiYsy8SIafPFPEvluubYlheeLzgUB8Oxpj6Z69hlA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.504.0" - "@aws-sdk/core" "3.496.0" - "@aws-sdk/credential-provider-node" "3.504.0" - "@aws-sdk/middleware-host-header" "3.502.0" - "@aws-sdk/middleware-logger" "3.502.0" - "@aws-sdk/middleware-recursion-detection" "3.502.0" - "@aws-sdk/middleware-signing" "3.502.0" - "@aws-sdk/middleware-user-agent" "3.502.0" - "@aws-sdk/region-config-resolver" "3.502.0" - "@aws-sdk/types" "3.502.0" - "@aws-sdk/util-endpoints" "3.502.0" - "@aws-sdk/util-user-agent-browser" "3.502.0" - "@aws-sdk/util-user-agent-node" "3.502.0" - "@smithy/config-resolver" "^2.1.1" - "@smithy/core" "^1.3.1" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/hash-node" "^2.1.1" - "@smithy/invalid-dependency" "^2.1.1" - "@smithy/middleware-content-length" "^2.1.1" - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.1" - "@smithy/util-defaults-mode-node" "^2.1.1" - "@smithy/util-endpoints" "^1.1.1" - "@smithy/util-retry" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/client-sso-oidc@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.504.0.tgz#78ed1e921fcda039e8525a92bf5760e8bd0091a8" - integrity sha512-ODA33/nm2srhV08EW0KZAP577UgV0qjyr7Xp2yEo8MXWL4ZqQZprk1c+QKBhjr4Djesrm0VPmSD/np0mtYP68A== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.504.0" - "@aws-sdk/core" "3.496.0" - "@aws-sdk/middleware-host-header" "3.502.0" - "@aws-sdk/middleware-logger" "3.502.0" - "@aws-sdk/middleware-recursion-detection" "3.502.0" - "@aws-sdk/middleware-signing" "3.502.0" - "@aws-sdk/middleware-user-agent" "3.502.0" - "@aws-sdk/region-config-resolver" "3.502.0" - "@aws-sdk/types" "3.502.0" - "@aws-sdk/util-endpoints" "3.502.0" - "@aws-sdk/util-user-agent-browser" "3.502.0" - "@aws-sdk/util-user-agent-node" "3.502.0" - "@smithy/config-resolver" "^2.1.1" - "@smithy/core" "^1.3.1" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/hash-node" "^2.1.1" - "@smithy/invalid-dependency" "^2.1.1" - "@smithy/middleware-content-length" "^2.1.1" - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.1" - "@smithy/util-defaults-mode-node" "^2.1.1" - "@smithy/util-endpoints" "^1.1.1" - "@smithy/util-retry" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/client-sso@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.502.0.tgz#8cf21d8f52a5bef65bf7b458051b3f61f7db822c" - integrity sha512-OZAYal1+PQgUUtWiHhRayDtX0OD+XpXHKAhjYgEIPbyhQaCMp3/Bq1xDX151piWXvXqXLJHFKb8DUEqzwGO9QA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.496.0" - "@aws-sdk/middleware-host-header" "3.502.0" - "@aws-sdk/middleware-logger" "3.502.0" - "@aws-sdk/middleware-recursion-detection" "3.502.0" - "@aws-sdk/middleware-user-agent" "3.502.0" - "@aws-sdk/region-config-resolver" "3.502.0" - "@aws-sdk/types" "3.502.0" - "@aws-sdk/util-endpoints" "3.502.0" - "@aws-sdk/util-user-agent-browser" "3.502.0" - "@aws-sdk/util-user-agent-node" "3.502.0" - "@smithy/config-resolver" "^2.1.1" - "@smithy/core" "^1.3.1" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/hash-node" "^2.1.1" - "@smithy/invalid-dependency" "^2.1.1" - "@smithy/middleware-content-length" "^2.1.1" - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.1" - "@smithy/util-defaults-mode-node" "^2.1.1" - "@smithy/util-endpoints" "^1.1.1" - "@smithy/util-retry" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/client-sts@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.504.0.tgz#78a0beaf988ad2647d79c7157083dfd55953f41e" - integrity sha512-IESs8FkL7B/uY+ml4wgoRkrr6xYo4PizcNw6JX17eveq1gRBCPKeGMjE6HTDOcIYZZ8rqz/UeuH3JD4UhrMOnA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.496.0" - "@aws-sdk/middleware-host-header" "3.502.0" - "@aws-sdk/middleware-logger" "3.502.0" - "@aws-sdk/middleware-recursion-detection" "3.502.0" - "@aws-sdk/middleware-user-agent" "3.502.0" - "@aws-sdk/region-config-resolver" "3.502.0" - "@aws-sdk/types" "3.502.0" - "@aws-sdk/util-endpoints" "3.502.0" - "@aws-sdk/util-user-agent-browser" "3.502.0" - "@aws-sdk/util-user-agent-node" "3.502.0" - "@smithy/config-resolver" "^2.1.1" - "@smithy/core" "^1.3.1" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/hash-node" "^2.1.1" - "@smithy/invalid-dependency" "^2.1.1" - "@smithy/middleware-content-length" "^2.1.1" - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-body-length-browser" "^2.1.1" - "@smithy/util-body-length-node" "^2.2.1" - "@smithy/util-defaults-mode-browser" "^2.1.1" - "@smithy/util-defaults-mode-node" "^2.1.1" - "@smithy/util-endpoints" "^1.1.1" - "@smithy/util-middleware" "^2.1.1" - "@smithy/util-retry" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/core@3.496.0": - version "3.496.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.496.0.tgz#ec1394753b6b2f6e38aea593e30b2db5c7390969" - integrity sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A== - dependencies: - "@smithy/core" "^1.3.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/signature-v4" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-cognito-identity@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.504.0.tgz#adc60ad74f67c54a3f3120f231f89f1d2324b35e" - integrity sha512-QRmKLl4wM7Yd1HBzUdHIA+QhQxLROXptQjwMNL+KNfl5vMFYOUt0FMXwg80DRHl7qEScvZZEDovcswuuw5Uo2w== - dependencies: - "@aws-sdk/client-cognito-identity" "3.504.0" - "@aws-sdk/types" "3.502.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-env@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.502.0.tgz#800e63b2b9d90b078a120d474d5a3b1ec5b48514" - integrity sha512-KIB8Ae1Z7domMU/jU4KiIgK4tmYgvuXlhR54ehwlVHxnEoFPoPuGHFZU7oFn79jhhSLUFQ1lRYMxP0cEwb7XeQ== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-http@3.503.1": - version "3.503.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.503.1.tgz#e882a4b740c9193650053033b3001b03ca4b12c8" - integrity sha512-rTdlFFGoPPFMF2YjtlfRuSgKI+XsF49u7d98255hySwhsbwd3Xp+utTTPquxP+CwDxMHbDlI7NxDzFiFdsoZug== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/util-stream" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-ini@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.504.0.tgz#d463dae3a309c1e9181811f27c484fd9bfa6821f" - integrity sha512-ODICLXfr8xTUd3wweprH32Ge41yuBa+u3j0JUcLdTUO1N9ldczSMdo8zOPlP0z4doqD3xbnqMkjNQWgN/Q+5oQ== - dependencies: - "@aws-sdk/client-sts" "3.504.0" - "@aws-sdk/credential-provider-env" "3.502.0" - "@aws-sdk/credential-provider-process" "3.502.0" - "@aws-sdk/credential-provider-sso" "3.504.0" - "@aws-sdk/credential-provider-web-identity" "3.504.0" - "@aws-sdk/types" "3.502.0" - "@smithy/credential-provider-imds" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-node@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.504.0.tgz#c6014f56dd59be295114290164e00375d33f2952" - integrity sha512-6+V5hIh+tILmUjf2ZQWQINR3atxQVgH/bFrGdSR/sHSp/tEgw3m0xWL3IRslWU1e4/GtXrfg1iYnMknXy68Ikw== - dependencies: - "@aws-sdk/credential-provider-env" "3.502.0" - "@aws-sdk/credential-provider-http" "3.503.1" - "@aws-sdk/credential-provider-ini" "3.504.0" - "@aws-sdk/credential-provider-process" "3.502.0" - "@aws-sdk/credential-provider-sso" "3.504.0" - "@aws-sdk/credential-provider-web-identity" "3.504.0" - "@aws-sdk/types" "3.502.0" - "@smithy/credential-provider-imds" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-process@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.502.0.tgz#6c41d8845a1c7073491a064c158363de04640381" - integrity sha512-fJJowOjQ4infYQX0E1J3xFVlmuwEYJAFk0Mo1qwafWmEthsBJs+6BR2RiWDELHKrSK35u4Pf3fu3RkYuCtmQFw== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-sso@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.504.0.tgz#ad036805e8677f6a53b24aa82991596aa11ac605" - integrity sha512-4MgH2or2SjPzaxM08DCW+BjaX4DSsEGJlicHKmz6fh+w9JmLh750oXcTnbvgUeVz075jcs6qTKjvUcsdGM/t8Q== - dependencies: - "@aws-sdk/client-sso" "3.502.0" - "@aws-sdk/token-providers" "3.504.0" - "@aws-sdk/types" "3.502.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-web-identity@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.504.0.tgz#53de7dee538ecaeec534e369bca76c546b8f4cc5" - integrity sha512-L1ljCvGpIEFdJk087ijf2ohg7HBclOeB1UgBxUBBzf4iPRZTQzd2chGaKj0hm2VVaXz7nglswJeURH5PFcS5oA== - dependencies: - "@aws-sdk/client-sts" "3.504.0" - "@aws-sdk/types" "3.502.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/credential-providers@^3.186.0": - version "3.504.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.504.1.tgz#cdca40b79f1b8d1e7476e6fde3196015f4f16596" - integrity sha512-D/ef7ZVxJVXC1qe6ZMS0dOWM92LNHJRHn9Biz5eRqRvRhNL+Rq68ZULlc0TQTVY71Fcc5TJ8OwFhaboPUiqWXA== - dependencies: - "@aws-sdk/client-cognito-identity" "3.504.0" - "@aws-sdk/client-sso" "3.502.0" - "@aws-sdk/client-sts" "3.504.0" - "@aws-sdk/credential-provider-cognito-identity" "3.504.0" - "@aws-sdk/credential-provider-env" "3.502.0" - "@aws-sdk/credential-provider-http" "3.503.1" - "@aws-sdk/credential-provider-ini" "3.504.0" - "@aws-sdk/credential-provider-node" "3.504.0" - "@aws-sdk/credential-provider-process" "3.502.0" - "@aws-sdk/credential-provider-sso" "3.504.0" - "@aws-sdk/credential-provider-web-identity" "3.504.0" - "@aws-sdk/types" "3.502.0" - "@smithy/credential-provider-imds" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-host-header@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.502.0.tgz#2651fb3509990271c89eb50133fb17cb8ae435f6" - integrity sha512-EjnG0GTYXT/wJBmm5/mTjDcAkzU8L7wQjOzd3FTXuTCNNyvAvwrszbOj5FlarEw5XJBbQiZtBs+I5u9+zy560w== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-logger@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.502.0.tgz#558cefdd233779f15687957f9f07497199b22d72" - integrity sha512-FDyv6K4nCoHxbjLGS2H8ex8I0KDIiu4FJgVRPs140ZJy6gE5Pwxzv6YTzZGLMrnqcIs9gh065Lf6DjwMelZqaw== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-recursion-detection@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.502.0.tgz#c22e2c0c1d551e58c788264687324bb7186af2cc" - integrity sha512-hvbyGJbxeuezxOu8VfFmcV4ql1hKXLxHTe5FNYfEBat2KaZXVhc1Hg+4TvB06/53p+E8J99Afmumkqbxs2esUA== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-signing@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.502.0.tgz#48b3503147eecb1a53a63633462de353668f635a" - integrity sha512-4hF08vSzJ7L6sB+393gOFj3s2N6nLusYS0XrMW6wYNFU10IDdbf8Z3TZ7gysDJJHEGQPmTAesPEDBsasGWcMxg== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/signature-v4" "^2.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/middleware-user-agent@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.502.0.tgz#dd740f150d6f3110cf5b08fedf361d202f899c93" - integrity sha512-TxbBZbRiXPH0AUxegqiNd9aM9zNSbfjtBs5MEfcBsweeT/B2O7K1EjP9+CkB8Xmk/5FLKhAKLr19b1TNoE27rw== - dependencies: - "@aws-sdk/types" "3.502.0" - "@aws-sdk/util-endpoints" "3.502.0" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/region-config-resolver@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.502.0.tgz#c18a04060879eb03c47c05b05fc296119ee073ba" - integrity sha512-mxmsX2AGgnSM+Sah7mcQCIneOsJQNiLX0COwEttuf8eO+6cLMAZvVudH3BnWTfea4/A9nuri9DLCqBvEmPrilg== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/types" "^2.9.1" - "@smithy/util-config-provider" "^2.2.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@aws-sdk/token-providers@3.504.0": - version "3.504.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.504.0.tgz#f7f60b1152458e7094529ea3f3ced6ce92eece9f" - integrity sha512-YIJWWsZi2ClUiILS1uh5L6VjmCUSTI6KKMuL9DkGjYqJ0aI6M8bd8fT9Wm7QmXCyjcArTgr/Atkhia4T7oKvzQ== - dependencies: - "@aws-sdk/client-sso-oidc" "3.504.0" - "@aws-sdk/types" "3.502.0" - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/types@3.502.0", "@aws-sdk/types@^3.222.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.502.0.tgz#c23dda4df7fdbe32642d4f5ab23516f455fb6aba" - integrity sha512-M0DSPYe/gXhwD2QHgoukaZv5oDxhW3FfvYIrJptyqUq3OnPJBcDbihHjrE0PBtfh/9kgMZT60/fQ2NVFANfa2g== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/util-endpoints@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.502.0.tgz#aee818c0c53dfedfd49599fc260cd880faea5e82" - integrity sha512-6LKFlJPp2J24r1Kpfoz5ESQn+1v5fEjDB3mtUKRdpwarhm3syu7HbKlHCF3KbcCOyahobvLvhoedT78rJFEeeg== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/types" "^2.9.1" - "@smithy/util-endpoints" "^1.1.1" - tslib "^2.5.0" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.495.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz#9034fd8db77991b28ed20e067acdd53e8b8f824b" - integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-browser@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.502.0.tgz#87b42abff6944052c78a84981637ac21859dd016" - integrity sha512-v8gKyCs2obXoIkLETAeEQ3AM+QmhHhst9xbM1cJtKUGsRlVIak/XyyD+kVE6kmMm1cjfudHpHKABWk9apQcIZQ== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/types" "^2.9.1" - bowser "^2.11.0" - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-node@3.502.0": - version "3.502.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.502.0.tgz#04ac4d0371d4f243f12ddc23b42ca8ceb27dfad9" - integrity sha512-9RjxpkGZKbTdl96tIJvAo+vZoz4P/cQh36SBUt9xfRfW0BtsaLyvSrvlR5wyUYhvRcC12Axqh/8JtnAPq//+Vw== - dependencies: - "@aws-sdk/types" "3.502.0" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@babel/code-frame@^7.0.0": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/helper-module-imports@^7.16.7": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/types@^7.22.15": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@bcherny/json-schema-ref-parser@9.0.9": - version "9.0.9" - resolved "https://registry.yarnpkg.com/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#09899d405bc708c0acac0066ae8db5b94d465ca4" - integrity sha512-vmEmnJCfpkLdas++9OYg6riIezTYqTHpqUTODJzHLzs5UnXujbOJW9VwcVCnyo1mVRt32FRr23iXBx/sX8YbeQ== - dependencies: - "@jsdevtools/ono" "^7.1.3" - "@types/json-schema" "^7.0.6" - call-me-maybe "^1.0.1" - js-yaml "^4.1.0" - -"@csstools/cascade-layer-name-parser@^1.0.5", "@csstools/cascade-layer-name-parser@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.7.tgz#9cfc36de9716d219492eb0e5ee75348b2213a8fd" - integrity sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ== - -"@csstools/color-helpers@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.0.0.tgz#a1d6ffcefe5c1d389cbcca15f46da3cdaf241443" - integrity sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w== - -"@csstools/css-calc@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.6.tgz#2d4e16725c3f981f7c6e469c306bcb1f490e1082" - integrity sha512-YHPAuFg5iA4qZGzMzvrQwzkvJpesXXyIUyaONflQrjtHB+BcFFbgltJkIkb31dMGO4SE9iZFA4HYpdk7+hnYew== - -"@csstools/css-color-parser@^1.2.0", "@csstools/css-color-parser@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.5.1.tgz#bddf5513a7327c511c9e1ec682419dcad1f91869" - integrity sha512-x+SajGB2paGrTjPOUorGi8iCztF008YMKXTn+XzGVDBEIVJ/W1121pPerpneJYGOe1m6zWLPLnzOPaznmQxKFw== - dependencies: - "@csstools/color-helpers" "^4.0.0" - "@csstools/css-calc" "^1.1.6" - -"@csstools/css-parser-algorithms@^2.1.1", "@csstools/css-parser-algorithms@^2.3.2", "@csstools/css-parser-algorithms@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz#0c03cd5418a9f404a05ff2ffcb1b69d04e8ec532" - integrity sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ== - -"@csstools/css-tokenizer@^2.1.1", "@csstools/css-tokenizer@^2.2.1", "@csstools/css-tokenizer@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz#b099d543ea57b64f495915a095ead583866c50c6" - integrity sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg== - -"@csstools/media-query-list-parser@^2.1.5", "@csstools/media-query-list-parser@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.7.tgz#a4836e3dbd693081a30b32ce9c2a781e1be16788" - integrity sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ== - -"@csstools/postcss-cascade-layers@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.2.tgz#1a9212b150bc6106bcb1dfd4fc03f6fb42240037" - integrity sha512-PqM+jvg5T2tB4FHX+akrMGNWAygLupD4FNUjcv4PSvtVuWZ6ISxuo37m4jFGU7Jg3rCfloGzKd0+xfr5Ec3vZQ== - dependencies: - "@csstools/selector-specificity" "^3.0.1" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-color-function@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-2.2.3.tgz#c15546c3cc6041293024cdaa7d7998a340f88c39" - integrity sha512-b1ptNkr1UWP96EEHqKBWWaV5m/0hgYGctgA/RVZhONeP1L3T/8hwoqDm9bB23yVCfOgE9U93KI9j06+pEkJTvw== - dependencies: - "@csstools/css-color-parser" "^1.2.0" - "@csstools/css-parser-algorithms" "^2.1.1" - "@csstools/css-tokenizer" "^2.1.1" - "@csstools/postcss-progressive-custom-properties" "^2.3.0" - -"@csstools/postcss-color-mix-function@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-1.0.3.tgz#3755894bd8a04f82739327717700497a3f2f6f73" - integrity sha512-QGXjGugTluqFZWzVf+S3wCiRiI0ukXlYqCi7OnpDotP/zaVTyl/aqZujLFzTOXy24BoWnu89frGMc79ohY5eog== - dependencies: - "@csstools/css-color-parser" "^1.2.0" - "@csstools/css-parser-algorithms" "^2.1.1" - "@csstools/css-tokenizer" "^2.1.1" - "@csstools/postcss-progressive-custom-properties" "^2.3.0" - -"@csstools/postcss-font-format-keywords@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.1.tgz#15ca8f8bd54568e4f3336b80ca0d20c903d02049" - integrity sha512-D1lcG2sfotTq6yBEOMV3myFxJLT10F3DLYZJMbiny5YToqzHWodZen8WId3UTimm0mEHitXqAUNL5jdd6RzVdA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-gradients-interpolation-method@^4.0.0": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.9.tgz#083bedd34e9e9e60cc4582bc58229cdc2750d8d5" - integrity sha512-PSqR6QH7h3ggOl8TsoH73kbwYTKVQjAJauGg6nDKwaGfi5IL5StV//ehrv1C7HuPsHixMTc9YoAuuv1ocT20EQ== - dependencies: - "@csstools/css-color-parser" "^1.5.1" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/postcss-progressive-custom-properties" "^3.0.3" - -"@csstools/postcss-hwb-function@^3.0.0": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.8.tgz#4a21b447390998b3201ecc4dd6a8639f5e2a524d" - integrity sha512-CRQEG372Hivmt17rm/Ho22hBQI9K/a6grzGQ21Zwc7dyspmyG0ibmPIW8hn15vJmXqWGeNq7S+L2b8/OrU7O5A== - dependencies: - "@csstools/css-color-parser" "^1.5.1" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - -"@csstools/postcss-ic-unit@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.3.tgz#f1e257be491718d964a5ecebac39f2f469caf8a8" - integrity sha512-MpcmIL0/uMm/cFWh5V/9nbKKJ7jRr2qTYW5Q6zoE6HZ6uzOBJr2KRERv5/x8xzEBQ1MthDT7iP1EBp9luSQy7g== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.3" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.4.tgz#c95d3f8b355df1744c906d0ec5e69aedce4e9487" - integrity sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ== - dependencies: - "@csstools/selector-specificity" "^3.0.1" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-logical-float-and-clear@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.1.tgz#c70ed8293cc376b1572bf56794219f54dc58c54d" - integrity sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA== - -"@csstools/postcss-logical-resize@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.1.tgz#a46c1b51055db96fb63af3bfe58909c773aea377" - integrity sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-logical-viewport-units@^2.0.0": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.5.tgz#5517b609aeb76e7e94143514d77ff6c8c83f42f3" - integrity sha512-2fjSamKN635DSW6fEoyNd2Bkpv3FVblUpgk5cpghIgPW1aDHZE2SYfZK5xQALvjMYZVjfqsD5EbXA7uDVBQVQA== - dependencies: - "@csstools/css-tokenizer" "^2.2.3" - -"@csstools/postcss-media-minmax@^1.0.5": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.2.tgz#3c7ad7bebde6b329c40c96c3a78073aaa0714bb8" - integrity sha512-7qTRTJxW96u2yiEaTep1+8nto1O/rEDacewKqH+Riq5E6EsHTOmGHxkB4Se5Ic5xgDC4I05lLZxzzxnlnSypxA== - dependencies: - "@csstools/css-calc" "^1.1.6" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/media-query-list-parser" "^2.1.7" - -"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.0": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.5.tgz#a78989a2c8012235d878e70eac203d9d51419114" - integrity sha512-XHMPasWYPWa9XaUHXU6Iq0RLfoAI+nvGTPj51hOizNsHaAyFiq2SL4JvF1DU8lM6B70+HVzKM09Isbyrr755Bw== - dependencies: - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/media-query-list-parser" "^2.1.7" - -"@csstools/postcss-nested-calc@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.1.tgz#94b462420d22539984bfe659339abba6971ff8f0" - integrity sha512-bwwababZpWRm0ByHaWBxTsDGTMhZKmtUNl3Wt0Eom8AY7ORgXx5qF9SSk1vEFrCi+HOfJT6M6W5KPgzXuQNRwQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.2.tgz#9013e6ade2fbd4cd725438c9ff0b1000062cf20d" - integrity sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^3.0.0": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.9.tgz#26e462e0ec18222f08e285afd6d9c9261ab55ee4" - integrity sha512-l639gpcBfL3ogJe+og1M5FixQn8iGX8+29V7VtTSCUB37VzpzOC05URfde7INIdiJT65DkHzgdJ64/QeYggU8A== - dependencies: - "@csstools/css-color-parser" "^1.5.1" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/postcss-progressive-custom-properties" "^3.0.3" - -"@csstools/postcss-progressive-custom-properties@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-2.3.0.tgz#c16ad5fd9893136efc844e867e80f4becdb223d9" - integrity sha512-Zd8ojyMlsL919TBExQ1I0CTpBDdyCpH/yOdqatZpuC3sd22K4SwC7+Yez3Q/vmXMWSAl+shjNeFZ7JMyxMjK+Q== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-progressive-custom-properties@^3.0.0", "@csstools/postcss-progressive-custom-properties@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.3.tgz#8e0b61c204e80a3b4f82818f9738accb06894a06" - integrity sha512-WipTVh6JTMQfeIrzDV4wEPsV9NTzMK2jwXxyH6CGBktuWdivHnkioP/smp1x/0QDPQyx7NTS14RB+GV3zZZYEw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-relative-color-syntax@^2.0.0": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.9.tgz#6a6c5361a6ec02459e024fa2b769aa52f392038e" - integrity sha512-2UoaRd2iIuzUGtYgteN5fJ0s+OfCiV7PvCnw8MCh3om8+SeVinfG8D5sqBOvImxFVfrp6k60XF5RFlH6oc//fg== - dependencies: - "@csstools/css-color-parser" "^1.5.1" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/postcss-progressive-custom-properties" "^3.0.3" - -"@csstools/postcss-scope-pseudo-class@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.1.tgz#c5454ea2fb3cf9beaf212d3a631a5c18cd4fbc14" - integrity sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A== - dependencies: - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-stepped-value-functions@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.4.tgz#a97ae4d77dea36bb93b611712f872821ed796515" - integrity sha512-gyNQ2YaOVXPqLR737XtReRPVu7DGKBr9JBDLoiH1T+N1ggV3r4HotRCOC1l6rxVC0zOuU1KiOzUn9Z5W838/rg== - dependencies: - "@csstools/css-calc" "^1.1.6" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - -"@csstools/postcss-text-decoration-shorthand@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.4.tgz#b8c5216faa2c9d8a05b3f93da7b403dd5dd53a79" - integrity sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ== - dependencies: - "@csstools/color-helpers" "^4.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.4.tgz#23a5887f3c74c276a84ba66b9a963ea1731b531a" - integrity sha512-qj4Cxth6c38iNYzfJJWAxt8jsLrZaMVmbfGDDLOlI2YJeZoC3A5Su6/Kr7oXaPFRuspUu+4EQHngOktqVHWfVg== - dependencies: - "@csstools/css-calc" "^1.1.6" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - -"@csstools/postcss-unset-value@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.1.tgz#598a25630fd9ab0edf066d235916f7441404942a" - integrity sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg== - -"@csstools/selector-specificity@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz#d84597fbc0f897240c12fc0a31e492b036c70e40" - integrity sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww== - -"@date-io/core@^2.16.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.17.0.tgz#360a4d0641f069776ed22e457876e8a8a58c205e" - integrity sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw== - -"@date-io/date-fns@2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-2.16.0.tgz#bd5e09b6ecb47ee55e593fc3a87e7b2caaa3da40" - integrity sha512-bfm5FJjucqlrnQcXDVU5RD+nlGmL3iWgkHTq3uAZWVIuBu6dDmGa3m8a6zo2VQQpu8ambq9H22UyUpn7590joA== - dependencies: - "@date-io/core" "^2.16.0" - -"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@dnd-kit/accessibility@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz#1054e19be276b5f1154ced7947fc0cb5d99192e0" - integrity sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ== - dependencies: - tslib "^2.0.0" - -"@dnd-kit/core@6.0.8": - version "6.0.8" - resolved "https://registry.yarnpkg.com/@dnd-kit/core/-/core-6.0.8.tgz#040ae13fea9787ee078e5f0361f3b49b07f3f005" - integrity sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA== - dependencies: - "@dnd-kit/accessibility" "^3.0.0" - "@dnd-kit/utilities" "^3.2.1" - tslib "^2.0.0" - -"@dnd-kit/sortable@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@dnd-kit/sortable/-/sortable-7.0.2.tgz#791d550872457f3f3c843e00d159b640f982011c" - integrity sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA== - dependencies: - "@dnd-kit/utilities" "^3.2.0" - tslib "^2.0.0" - -"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@dnd-kit/utilities/-/utilities-3.2.2.tgz#5a32b6af356dc5f74d61b37d6f7129a4040ced7b" - integrity sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg== - dependencies: - tslib "^2.0.0" - -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@^11.11.0", "@emotion/cache@^11.4.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - -"@emotion/css@^11.10.5": - version "11.11.2" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.11.2.tgz#e5fa081d0c6e335352e1bc2b05953b61832dca5a" - integrity sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew== - dependencies: - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/react@^11.8.1": - version "11.11.3" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25" - integrity sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.3.tgz#84b77bfcfe3b7bb47d326602f640ccfcacd5ffb0" - integrity sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== - -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== - -"@faceless-ui/modal@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@faceless-ui/modal/-/modal-2.0.1.tgz#8a47299442eff450c09432cfaef35c5471becad6" - integrity sha512-z1PaaLxwuX+1In4vhUxODZndGKdCY+WIqzvtnas3CaYGGCVJBSJ4jfv9UEEGZzcahmSy+71bEL89cUT6d36j1Q== - dependencies: - body-scroll-lock "^3.1.5" - focus-trap "^6.9.2" - qs "^6.9.1" - react-transition-group "^4.4.2" - -"@faceless-ui/scroll-info@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@faceless-ui/scroll-info/-/scroll-info-1.3.0.tgz#4d9f76afa4c004018697424f77f8bc362ccaae08" - integrity sha512-X+doJMzQqyVGpwV/YgXUAalNWepP2W8ThgZspKZLFG43zTYLVTU17BYCjjY+ggKuA3b0W3JyXZ2M8f247AdmHw== - -"@faceless-ui/window-info@2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@faceless-ui/window-info/-/window-info-2.1.1.tgz#ed1474a60ab794295bca4c29e295b1e11a584d22" - integrity sha512-gMAgda7beR4CNpBIXjgRVn97ek0LG3PAj9lxmoYdg574IEzLFZAh3eAYtTaS2XLKgb4+IHhsuBzlGmHbeOo2Aw== - -"@floating-ui/core@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" - integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== - dependencies: - "@floating-ui/utils" "^0.2.1" - -"@floating-ui/dom@^1.0.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.1.tgz#d552e8444f77f2d88534372369b3771dc3a2fa5d" - integrity sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ== - dependencies: - "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.1" - -"@floating-ui/utils@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" - integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== - -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@humanwhocodes/config-array@^0.11.13": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.22" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" - integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - -"@juggle/resize-observer@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@monaco-editor/loader@^1.3.3": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558" - integrity sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg== - dependencies: - state-local "^1.0.6" - -"@monaco-editor/react@4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.5.1.tgz#fbc76c692aee9a33b9ab24ae0c5f219b8f002fdb" - integrity sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ== - dependencies: - "@monaco-editor/loader" "^1.3.3" - -"@mongodb-js/saslprep@^1.1.0": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz#24ec1c4915a65f5c506bb88c081731450d91bb1c" - integrity sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw== - dependencies: - sparse-bitfield "^3.0.3" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@payloadcms/bundler-webpack@latest": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@payloadcms/bundler-webpack/-/bundler-webpack-1.0.6.tgz#f37e1bcb364bd810df8da481afceb195e07f52f2" - integrity sha512-hKnRqF2IhYCqNwb8FjKNnjR9fKCXVK2PJgPu3R89dvFhvMnwkbkbj86LMCC4dLmQ9RXmmh/drw4Q5acQ/Xec8g== - dependencies: - compression "1.7.4" - connect-history-api-fallback "1.6.0" - css-loader "5.2.7" - css-minimizer-webpack-plugin "^5.0.0" - file-loader "6.2.0" - find-node-modules "^2.1.3" - html-webpack-plugin "^5.5.0" - md5 "2.3.0" - mini-css-extract-plugin "1.6.2" - path-browserify "1.0.1" - postcss "8.4.31" - postcss-loader "6.2.1" - postcss-preset-env "9.0.0" - process "0.11.10" - sass-loader "12.6.0" - style-loader "^2.0.0" - swc-loader "^0.2.3" - swc-minify-webpack-plugin "^2.1.0" - terser-webpack-plugin "^5.3.6" - url-loader "4.1.1" - webpack "^5.78.0" - webpack-bundle-analyzer "^4.8.0" - webpack-cli "^4.10.0" - webpack-dev-middleware "6.0.1" - webpack-hot-middleware "^2.25.3" - -"@payloadcms/db-mongodb@latest": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@payloadcms/db-mongodb/-/db-mongodb-1.4.0.tgz#84cf6c857816bf85007711150cb73b07ce56528d" - integrity sha512-9DVazhkV5+T2+NpIvIDMZ3AmJScjkj7r8OPwrz3BBvXXKid2NUDewTKFQSVtqWK6Ed5ArlvCAlk9J6zO3Q0+cA== - dependencies: - bson-objectid "2.0.4" - deepmerge "4.3.1" - get-port "5.1.1" - http-status "1.6.2" - mongoose "6.12.3" - mongoose-aggregate-paginate-v2 "1.0.6" - mongoose-paginate-v2 "1.7.22" - prompts "2.4.2" - uuid "9.0.0" - -"@payloadcms/eslint-config@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@payloadcms/eslint-config/-/eslint-config-0.0.1.tgz#4324702ddef6c773b3f3033795a13e6b50c95a92" - integrity sha512-Il59+0C4E/bI6uM2hont3I+oABWkJZbfbItubje5SGMrXkymUq8jT/UZRk0eCt918bB7gihxDXx8guFnR/aNIw== - -"@payloadcms/richtext-slate@latest": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@payloadcms/richtext-slate/-/richtext-slate-1.4.0.tgz#3ad112be41bd007da69b0e7fe66d07329fb07a37" - integrity sha512-nIQmo/q5ZeRylSXuUEn6DHgDXgye/SjMZ3HNPKhyEDe1ziiCvqpgb9CJ9m1DgPg1eDqh2OYxCUHipC21k0X0jw== - dependencies: - "@faceless-ui/modal" "2.0.1" - i18next "22.5.1" - is-hotkey "0.2.0" - react "18.2.0" - react-i18next "11.18.6" - slate "0.91.4" - slate-history "0.86.0" - slate-hyperscript "0.81.3" - slate-react "0.92.0" - -"@polka/url@^1.0.0-next.24": - version "1.0.0-next.24" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" - integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== - -"@popperjs/core@^2.11.8": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - -"@sideway/address@^4.1.3": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" - integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@smithy/abort-controller@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.1.tgz#bb68596a7c8213c2ef259bc7fb0f0c118c67ea9d" - integrity sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/config-resolver@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.1.tgz#fc6b036084b98fd26a8ff01a5d7eb676e41749c7" - integrity sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw== - dependencies: - "@smithy/node-config-provider" "^2.2.1" - "@smithy/types" "^2.9.1" - "@smithy/util-config-provider" "^2.2.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@smithy/core@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.1.tgz#ecedc564e68453b02c20db9e8435d59005c066d8" - integrity sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q== - dependencies: - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-retry" "^2.1.1" - "@smithy/middleware-serde" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@smithy/credential-provider-imds@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz#4805bf5e104718b959cf8699113fa9de6ddeeafa" - integrity sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA== - dependencies: - "@smithy/node-config-provider" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - tslib "^2.5.0" - -"@smithy/eventstream-codec@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz#4405ab0f9c77d439c575560c4886e59ee17d6d38" - integrity sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.9.1" - "@smithy/util-hex-encoding" "^2.1.1" - tslib "^2.5.0" - -"@smithy/fetch-http-handler@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz#b4d73bbc1449f61234077d58c705b843a8587bf0" - integrity sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg== - dependencies: - "@smithy/protocol-http" "^3.1.1" - "@smithy/querystring-builder" "^2.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-base64" "^2.1.1" - tslib "^2.5.0" - -"@smithy/hash-node@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.1.tgz#0f8a22d97565ca948724f72267e4d3a2f33740a8" - integrity sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg== - dependencies: - "@smithy/types" "^2.9.1" - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/invalid-dependency@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz#bd69fa24dd35e9bc65a160bd86becdf1399e4463" - integrity sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/is-array-buffer@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b" - integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== - dependencies: - tslib "^2.5.0" - -"@smithy/middleware-content-length@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz#df767de12d594bc5622009fb0fc8343522697d8c" - integrity sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g== - dependencies: - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/middleware-endpoint@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz#9e500df4d944741808e92018ccd2e948b598a49f" - integrity sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q== - dependencies: - "@smithy/middleware-serde" "^2.1.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/url-parser" "^2.1.1" - "@smithy/util-middleware" "^2.1.1" - tslib "^2.5.0" - -"@smithy/middleware-retry@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz#ddc749dd927f136714f76ca5a52dcfb0993ee162" - integrity sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA== - dependencies: - "@smithy/node-config-provider" "^2.2.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/service-error-classification" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/util-middleware" "^2.1.1" - "@smithy/util-retry" "^2.1.1" - tslib "^2.5.0" - uuid "^8.3.2" - -"@smithy/middleware-serde@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz#2c5750f76e276a5249720f6c3c24fac29abbee16" - integrity sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/middleware-stack@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz#67f992dc36e8a6861f881f80a81c1c30956a0396" - integrity sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/node-config-provider@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz#c440c7948d58d72f0e212aa1967aa12f0729defd" - integrity sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg== - dependencies: - "@smithy/property-provider" "^2.1.1" - "@smithy/shared-ini-file-loader" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/node-http-handler@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz#77d23279ff0a12cbe7cde93c5e7c0e86ad56dd20" - integrity sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA== - dependencies: - "@smithy/abort-controller" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/querystring-builder" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/property-provider@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.1.tgz#0f7ffc5e43829eaca5b2b5aae8554807a52b30f3" - integrity sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/protocol-http@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.1.1.tgz#eee522d0ed964a72b735d64925e07bcfb7a7806f" - integrity sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/querystring-builder@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz#b9693448ad3f8e0767d84cf5cae29f35514591fb" - integrity sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg== - dependencies: - "@smithy/types" "^2.9.1" - "@smithy/util-uri-escape" "^2.1.1" - tslib "^2.5.0" - -"@smithy/querystring-parser@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz#a4282a66cc56844317dbff824e573f469bbfc032" - integrity sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/service-error-classification@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz#dd24e1ec529ae9ec8e87d8b15f0fc8f7e17f3d02" - integrity sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw== - dependencies: - "@smithy/types" "^2.9.1" - -"@smithy/shared-ini-file-loader@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz#a2e28b4d85f8a8262a84403fa2b74a086b3a7703" - integrity sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/signature-v4@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.1.tgz#6080171e3d694f40d3f553bbc236c5c433efd4d2" - integrity sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg== - dependencies: - "@smithy/eventstream-codec" "^2.1.1" - "@smithy/is-array-buffer" "^2.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-hex-encoding" "^2.1.1" - "@smithy/util-middleware" "^2.1.1" - "@smithy/util-uri-escape" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/smithy-client@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.3.1.tgz#0c3a4a0d3935c7ad2240cc23181f276705212b1f" - integrity sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA== - dependencies: - "@smithy/middleware-endpoint" "^2.4.1" - "@smithy/middleware-stack" "^2.1.1" - "@smithy/protocol-http" "^3.1.1" - "@smithy/types" "^2.9.1" - "@smithy/util-stream" "^2.1.1" - tslib "^2.5.0" - -"@smithy/types@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.9.1.tgz#ed04d4144eed3b8bd26d20fc85aae8d6e357ebb9" - integrity sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw== - dependencies: - tslib "^2.5.0" - -"@smithy/url-parser@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.1.tgz#a30de227b6734650d740b6dff74d488b874e85e3" - integrity sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q== - dependencies: - "@smithy/querystring-parser" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-base64@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.1.1.tgz#af729085cc9d92ebd54a5d2c5d0aa5a0c31f83bf" - integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g== - dependencies: - "@smithy/util-buffer-from" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-body-length-browser@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d" - integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== - dependencies: - tslib "^2.5.0" - -"@smithy/util-body-length-node@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e" - integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-buffer-from@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08" - integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== - dependencies: - "@smithy/is-array-buffer" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-config-provider@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba" - integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-defaults-mode-browser@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz#be9ac82acee6ec4821b610e7187b0e147f0ba8ff" - integrity sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA== - dependencies: - "@smithy/property-provider" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - bowser "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-defaults-mode-node@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz#0910ee00aac3e8a08aac3e6ae8794e52f3efef02" - integrity sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA== - dependencies: - "@smithy/config-resolver" "^2.1.1" - "@smithy/credential-provider-imds" "^2.2.1" - "@smithy/node-config-provider" "^2.2.1" - "@smithy/property-provider" "^2.1.1" - "@smithy/smithy-client" "^2.3.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-endpoints@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz#45426dba6fb42282a0ad955600b2b3ba050d118f" - integrity sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw== - dependencies: - "@smithy/node-config-provider" "^2.2.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-hex-encoding@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f" - integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-middleware@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.1.tgz#903ba19bb17704f4b476fb9ade9bf9eb0174bc3d" - integrity sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA== - dependencies: - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-retry@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.1.tgz#f2d3566b6e5b841028c7240c852007d4037e49b2" - integrity sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA== - dependencies: - "@smithy/service-error-classification" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" - -"@smithy/util-stream@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.1.tgz#3ae0e88c3a1a45899e29c1655d2e5a3865b6c0a6" - integrity sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ== - dependencies: - "@smithy/fetch-http-handler" "^2.4.1" - "@smithy/node-http-handler" "^2.3.1" - "@smithy/types" "^2.9.1" - "@smithy/util-base64" "^2.1.1" - "@smithy/util-buffer-from" "^2.1.1" - "@smithy/util-hex-encoding" "^2.1.1" - "@smithy/util-utf8" "^2.1.1" - tslib "^2.5.0" - -"@smithy/util-uri-escape@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83" - integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-utf8@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.1.1.tgz#690018dd28f47f014114497735e51417ea5900a6" - integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A== - dependencies: - "@smithy/util-buffer-from" "^2.1.1" - tslib "^2.5.0" - -"@swc/core-darwin-arm64@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.76.tgz#757f10c6482a44b8cea3e85b8ae714ce9b31b4b5" - integrity sha512-ovviEhZ/1E81Z9OGrO0ivLWk4VCa3I3ZzM+cd3gugglRRwVwtlIaoIYqY5S3KiCAupDd1+UCl5X7Vbio7a/V8g== - -"@swc/core-darwin-x64@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.76.tgz#edba4a4dbbc7454bc914fc8cf61545a74622d46f" - integrity sha512-tcySTDqs0SHCebtW35sCdcLWsmTEo7bEwx0gNL/spetqVT9fpFi6qU8qcnt7i2KaZHbeNl9g1aadu+Yrni+GzA== - -"@swc/core-linux-arm-gnueabihf@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.76.tgz#d998f0e51ebec03e8666f02cee3fc6e40ceaf680" - integrity sha512-apgzpGWy1AwoMF4urAAASsAjE7rEzZFIF+p6utuxhS7cNHzE0AyEVDYJbo+pzBdlZ8orBdzzsHtFwoEgKOjebA== - -"@swc/core-linux-arm64-gnu@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.76.tgz#4f4d98f699e92ebafb10ed75e468384a81ab128c" - integrity sha512-c3c0zz6S0eludqidDpuqbadE0WT3OZczyQxe9Vw8lFFXES85mvNGtwYzyGK2o7TICpsuHrndwDIoYpmpWk879g== - -"@swc/core-linux-arm64-musl@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.76.tgz#4341ca15e4a398de73af149c52c4d45b8cf5c4c8" - integrity sha512-Is3bpq7F2qtlnkzEeOD6HIZJPpOmu3q6c82lKww90Q0NnrlSluVMozTHJgwVoFZyizH7uLnk0LuNcEAWLnmJIw== - -"@swc/core-linux-x64-gnu@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.76.tgz#cc2e6f0f90f0e9d6dcb8bc62cd31172e0967b396" - integrity sha512-iwCeRzd9oSvUzqt7nU6p/ztceAWfnO9XVxBn502R5gs6QCBbE1HCKrWHDO77aKPK7ss+0NcIGHvXTd9L8/wRzw== - -"@swc/core-linux-x64-musl@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.76.tgz#ebc327df5e07aa02e41309e56590f505f1fc64c0" - integrity sha512-a671g4tW8kyFeuICsgq4uB9ukQfiIyXJT4V6YSnmqhCTz5mazWuDxZ5wKnx/1g5nXTl+U5cWH2TZaCJatp4GKA== - -"@swc/core-win32-arm64-msvc@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.76.tgz#34fb884d2ee2eec3382c01f712bde0f05e058a3b" - integrity sha512-+swEFtjdMezS0vKUhJC3psdSDtOJGY5pEOt4e8XOPvn7aQpKQ9LfF49XVtIwDSk5SGuWtVoLFzkSY3reWUJCyg== - -"@swc/core-win32-ia32-msvc@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.76.tgz#a0dc94357d72eca6572522ed1202b6476222c249" - integrity sha512-5CqwAykpGBJ3PqGLOlWGLGIPpBAG1IwWVDUfro3hhjQ7XJxV5Z1aQf5V5OJ90HJVtrEAVx2xx59UV/Dh081LOg== - -"@swc/core-win32-x64-msvc@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.76.tgz#eea647407895a5a410a459b2abf8572adb147927" - integrity sha512-CiMpWLLlR3Cew9067E7XxaLBwYYJ90r9EhGSO6V1pvYSWj7ET/Ppmtj1ZhzPJMqRXAP6xflfl5R5o4ee1m4WLA== - -"@swc/core@1.3.76": - version "1.3.76" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.76.tgz#f5259bd718e11854d9bd3a05f91f40bca21dffbc" - integrity sha512-aYYTA2aVYkwJAZepQXtPnkUthhOfn8qd6rsh+lrJxonFrjmpI7RHt2tMDVTXP6XDX7fvnvrVtT1bwZfmBFPh0Q== - optionalDependencies: - "@swc/core-darwin-arm64" "1.3.76" - "@swc/core-darwin-x64" "1.3.76" - "@swc/core-linux-arm-gnueabihf" "1.3.76" - "@swc/core-linux-arm64-gnu" "1.3.76" - "@swc/core-linux-arm64-musl" "1.3.76" - "@swc/core-linux-x64-gnu" "1.3.76" - "@swc/core-linux-x64-musl" "1.3.76" - "@swc/core-win32-arm64-msvc" "1.3.76" - "@swc/core-win32-ia32-msvc" "1.3.76" - "@swc/core-win32-x64-msvc" "1.3.76" - -"@swc/register@0.1.10": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@swc/register/-/register-0.1.10.tgz#74a20b7559669e03479b05e9e5c6d1524d4d92a2" - integrity sha512-6STwH/q4dc3pitXLVkV7sP0Hiy+zBsU2wOF1aXpXR95pnH3RYHKIsDC+gvesfyB7jxNT9OOZgcqOp9RPxVTx9A== - dependencies: - lodash.clonedeep "^4.5.0" - pirates "^4.0.1" - source-map-support "^0.5.13" - -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.56.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.2.tgz#1c72a9b794aa26a8b94ad26d5b9aa51c8a6384bb" - integrity sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/express-serve-static-core@^4.17.33": - version "4.17.42" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz#2a276952acc73d1b8dc63fd4210647abbc553a71" - integrity sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.17.9": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/glob@^7.1.3": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/is-hotkey@^0.1.1": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@types/is-hotkey/-/is-hotkey-0.1.10.tgz#cf440fab9bf75ffba4e1a16e8df28938de0778c9" - integrity sha512-RvC8KMw5BCac1NvRRyaHgMMEtBaZ6wh0pyPTBu7izn4Sj/AX9Y4aXU5c7rX8PnM/knsuUpC1IeoBkANtxBypsQ== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/lodash@^4.14.149", "@types/lodash@^4.14.182": - version "4.14.202" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" - integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== - -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/node@*": - version "20.11.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" - integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== - dependencies: - undici-types "~5.26.4" - -"@types/node@18.11.3": - version "18.11.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.3.tgz#78a6d7ec962b596fc2d2ec102c4dd3ef073fea6a" - integrity sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A== - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/prettier@^2.6.1": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== - -"@types/qs@*": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/react-transition-group@^4.4.0": - version "4.4.10" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" - integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.2.51" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.51.tgz#01ede6dfc712796257a3443bf8d613149e5c322a" - integrity sha512-XeoMaU4CzyjdRr3c4IQQtiH7Rpo18V07rYZUucEZQwOUEtGgTXv7e6igQiQ+xnV6MbMe1qjEmKdgMNnfppnXfg== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@18.0.21": - version "18.0.21" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.21.tgz#b8209e9626bb00a34c76f55482697edd2b43cc67" - integrity sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - -"@types/semver@^7.3.12": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/webidl-conversions@*": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz#1306dbfa53768bcbcfc95a1c8cde367975581859" - integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA== - -"@types/whatwg-url@^8.2.1": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" - integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== - dependencies: - "@types/node" "*" - "@types/webidl-conversions" "*" - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.51.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.51.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" - integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== - -"@webpack-cli/info@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" - integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" - integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.0.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.6.3, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-html-community@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.4: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.flat@^1.2.5: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -atomically@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" - integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== - -autoprefixer@^10.4.14: - version "10.4.17" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" - integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== - dependencies: - browserslist "^4.22.2" - caniuse-lite "^1.0.30001578" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== - -b4a@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" - integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== - -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -body-scroll-lock@4.0.0-beta.0: - version "4.0.0-beta.0" - resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz#4f78789d10e6388115c0460cd6d7d4dd2bbc4f7e" - integrity sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ== - -body-scroll-lock@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec" - integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.21.9, browserslist@^4.22.2: - version "4.22.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" - integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== - dependencies: - caniuse-lite "^1.0.30001580" - electron-to-chromium "^1.4.648" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -bson-objectid@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/bson-objectid/-/bson-objectid-2.0.4.tgz#339211572ef97dc98f2d68eaee7b99b7be59a089" - integrity sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ== - -bson@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/bson/-/bson-4.7.2.tgz#320f4ad0eaf5312dd9b45dc369cc48945e2a5f2e" - integrity sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ== - dependencies: - buffer "^5.6.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -call-me-maybe@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" - integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001580: - version "1.0.30001583" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz#abb2970cc370801dc7e27bf290509dc132cfa390" - integrity sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" - integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== - -clean-css@^5.2.2: - version "5.3.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" - integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== - dependencies: - source-map "~0.6.0" - -cli-color@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879" - integrity sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ== - dependencies: - d "^1.0.1" - es5-ext "^0.10.61" - es6-iterator "^2.0.3" - memoizee "^0.4.15" - timers-ext "^0.1.7" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clsx@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.7: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -commander@^2.20.0, commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.0.0, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -compute-scroll-into-view@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -conf@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/conf/-/conf-10.2.0.tgz#838e757be963f1a2386dfe048a98f8f69f7b55d6" - integrity sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg== - dependencies: - ajv "^8.6.3" - ajv-formats "^2.1.1" - atomically "^1.7.0" - debounce-fn "^4.0.0" - dot-prop "^6.0.1" - env-paths "^2.2.1" - json-schema-typed "^7.0.3" - onetime "^5.1.2" - pkg-up "^3.1.0" - semver "^7.3.5" - -connect-history-api-fallback@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-table-printer@2.11.2: - version "2.11.2" - resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.2.tgz#549757033a7e3cde7e26e030038c9392ce600ee5" - integrity sha512-uuUHie0sfPP542TKGzPFal0W1wo1beuKAqIZdaavcONx8OoqdnJRKjkinbRTOta4FaCa1RcIL+7mMJWX3pQGVg== - dependencies: - simple-wcswidth "^1.0.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copyfiles@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" - integrity sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg== - dependencies: - glob "^7.0.5" - minimatch "^3.0.3" - mkdirp "^1.0.4" - noms "0.0.0" - through2 "^2.0.1" - untildify "^4.0.0" - yargs "^16.1.0" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - -cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -css-blank-pseudo@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.1.tgz#f79f8b84cc00f891e16aa85f14093c5e1c3499a8" - integrity sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw== - dependencies: - postcss-selector-parser "^6.0.13" - -css-declaration-sorter@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz#9796bcc257b4647c39993bda8d431ce32b666f80" - integrity sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ== - -css-has-pseudo@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.1.tgz#05be77f1414315c3880a1fcc96a72471af4a8ecf" - integrity sha512-WwoVKqNxApfEI7dWFyaHoeFCcUPD+lPyjL6lNpRUNX7IyIUuVpawOTwwA5D0ZR6V2xQZonNPVj8kEcxzEaAQfQ== - dependencies: - "@csstools/selector-specificity" "^3.0.1" - postcss-selector-parser "^6.0.13" - postcss-value-parser "^4.2.0" - -css-loader@5.2.7: - version "5.2.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" - integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== - dependencies: - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" - -css-minimizer-webpack-plugin@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" - integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - cssnano "^6.0.1" - jest-worker "^29.4.3" - postcss "^8.4.24" - schema-utils "^4.0.1" - serialize-javascript "^6.0.1" - -css-prefers-color-scheme@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.1.tgz#30fcb94cc38b639b66fb99e1882ffd97f741feaa" - integrity sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g== - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.1" - -css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssdb@^7.6.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.10.0.tgz#08816db7b793f088263e8f61dfe8d7f11a3459f2" - integrity sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssfilter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" - integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== - -cssnano-preset-default@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.0.3.tgz#b4ce755974f4dc8d3d09ac13bb6281cce3ced45e" - integrity sha512-4y3H370aZCkT9Ev8P4SO4bZbt+AExeKhh8wTbms/X7OLDo5E7AYUUy6YPxa/uF5Grf+AJwNcCnxKhZynJ6luBA== - dependencies: - css-declaration-sorter "^7.1.1" - cssnano-utils "^4.0.1" - postcss-calc "^9.0.1" - postcss-colormin "^6.0.2" - postcss-convert-values "^6.0.2" - postcss-discard-comments "^6.0.1" - postcss-discard-duplicates "^6.0.1" - postcss-discard-empty "^6.0.1" - postcss-discard-overridden "^6.0.1" - postcss-merge-longhand "^6.0.2" - postcss-merge-rules "^6.0.3" - postcss-minify-font-values "^6.0.1" - postcss-minify-gradients "^6.0.1" - postcss-minify-params "^6.0.2" - postcss-minify-selectors "^6.0.2" - postcss-normalize-charset "^6.0.1" - postcss-normalize-display-values "^6.0.1" - postcss-normalize-positions "^6.0.1" - postcss-normalize-repeat-style "^6.0.1" - postcss-normalize-string "^6.0.1" - postcss-normalize-timing-functions "^6.0.1" - postcss-normalize-unicode "^6.0.2" - postcss-normalize-url "^6.0.1" - postcss-normalize-whitespace "^6.0.1" - postcss-ordered-values "^6.0.1" - postcss-reduce-initial "^6.0.2" - postcss-reduce-transforms "^6.0.1" - postcss-svgo "^6.0.2" - postcss-unique-selectors "^6.0.2" - -cssnano-utils@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.1.tgz#fd18b42f95938bf55ab47967705355d6047bf1da" - integrity sha512-6qQuYDqsGoiXssZ3zct6dcMxiqfT6epy7x4R0TQJadd4LWO3sPR6JH6ZByOvVLoZ6EdwPGgd7+DR1EmX3tiXQQ== - -cssnano@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.0.3.tgz#46db972da71aa159437287fb4c6bc9c5d3cc5d93" - integrity sha512-MRq4CIj8pnyZpcI2qs6wswoYoDD1t0aL28n+41c1Ukcpm56m1h6mCexIHBGjfZfnTqtGSSCP4/fB1ovxgjBOiw== - dependencies: - cssnano-preset-default "^6.0.3" - lilconfig "^3.0.0" - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dataloader@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" - integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== - -date-fns@2.30.0, date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -dateformat@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" - integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== - -debounce-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" - integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== - dependencies: - mimic-fn "^3.0.0" - -debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -debug@2, debug@2.6.9, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@4.x, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.2.6, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-equal@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@4.3.1, deepmerge@^4.0.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== - -detect-libc@^2.0.0, detect-libc@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -direction@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" - integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@8.6.0, dotenv@^8.2.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.648: - version "1.4.656" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz#b374fb7cab9b782a5bc967c0ce0e19826186b9c9" - integrity sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.3: - version "7.11.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" - integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" - -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== - -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== - dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -es6-weak-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.5.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== - -eslint-import-resolver-node@^0.3.6: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.7.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-filenames@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz#7094f00d7aefdd6999e3ac19f72cea058e590cf7" - integrity sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w== - dependencies: - lodash.camelcase "4.3.0" - lodash.kebabcase "4.1.1" - lodash.snakecase "4.1.1" - lodash.upperfirst "4.3.1" - -eslint-plugin-import@2.25.4: - version "2.25.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" - integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.2" - has "^1.0.3" - is-core-module "^2.8.0" - is-glob "^4.0.3" - minimatch "^3.0.4" - object.values "^1.1.5" - resolve "^1.20.0" - tsconfig-paths "^3.12.0" - -eslint-plugin-prettier@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-react-hooks@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-simple-import-sort@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz#cc4ceaa81ba73252427062705b64321946f61351" - integrity sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw== - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.19.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.2.0, events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== - dependencies: - homedir-polyfill "^1.0.1" - -express-fileupload@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.4.0.tgz#be9d70a881d6c2b1ce668df86e4f89ddbf238ec7" - integrity sha512-RjzLCHxkv3umDeZKeFeMg8w7qe0V09w3B7oGZprr/oO2H/ISCgNzuqzn7gV3HRWb37GjRk429CCpSLS2KNTqMQ== - dependencies: - busboy "^1.6.0" - -express-rate-limit@5.5.1: - version "5.5.1" - resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-5.5.1.tgz#110c23f6a65dfa96ab468eda95e71697bc6987a2" - integrity sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg== - -express@4.18.2, express@^4.17.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -fast-copy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.1.tgz#9e89ef498b8c04c1cd76b33b8e14271658a732aa" - integrity sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-fifo@^1.1.0, fast-fifo@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-redact@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== - -fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fast-xml-parser@4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" - integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== - dependencies: - strnum "^1.0.5" - -fastest-levenshtein@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastq@^1.6.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.0.tgz#ca5e1a90b5e68f97fc8b61330d5819b82f5fab03" - integrity sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-type@16.5.4: - version "16.5.4" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" - integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== - dependencies: - readable-web-to-node-stream "^3.0.0" - strtok3 "^6.2.4" - token-types "^4.1.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-node-modules@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" - integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== - dependencies: - findup-sync "^4.0.0" - merge "^2.1.1" - -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@4.1.0, find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -findup-sync@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" - integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^4.0.2" - resolve-dir "^1.0.1" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatley@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/flatley/-/flatley-5.2.0.tgz#3a645837c669be8d978335e37ae3afffcfbdedb7" - integrity sha512-vsb0/03uIHu7/3jRqABweblFUJMLokz1uMrcgFlvx6OAr6V3FiSic2iXeiJCj+cciTiQeumSDsIFAAnN1yvu4w== - dependencies: - is-buffer "^1.1.6" - -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -focus-trap@^6.9.2: - version "6.9.4" - resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-6.9.4.tgz#436da1a1d935c48b97da63cd8f361c6f3aa16444" - integrity sha512-v2NTsZe2FF59Y+sDykKY+XjqZ0cPfhq/hikWVL88BqLivnNiEffAsac6rP6H45ff9wG9LL5ToiDqrLEP9GX9mw== - dependencies: - tabbable "^5.3.3" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-port@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" - integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== - dependencies: - resolve-pkg-maps "^1.0.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-promise@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" - integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== - dependencies: - "@types/glob" "^7.1.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.0.5, glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -glob@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -graphql-http@1.21.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/graphql-http/-/graphql-http-1.21.0.tgz#04d1606e663acd3f422e86e2e85f4ae7a8b0881b" - integrity sha512-yrItPfHj5WeT4n7iusbVin+vGSQjXFAX6U/GnYytdCJRXVad1TWGtYFDZ2ROjCKpXQzIwvfbiWCEwfuXgR3B6A== - -graphql-playground-html@^1.6.30: - version "1.6.30" - resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.30.tgz#14c2a8eb7fc17bfeb1a746bbb28a11e34bf0b391" - integrity sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw== - dependencies: - xss "^1.0.6" - -graphql-playground-middleware-express@1.7.23: - version "1.7.23" - resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.23.tgz#95aba44d801ff3c08b2246917d2901d2e7c35d3d" - integrity sha512-M/zbTyC1rkgiQjFSgmzAv6umMHOphYLNWZp6Ye5QrD77WfGOOoSqDsVmGUczc2pDkEPEzzGB/bvBO5rdzaTRgw== - dependencies: - graphql-playground-html "^1.6.30" - -graphql-query-complexity@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/graphql-query-complexity/-/graphql-query-complexity-0.12.0.tgz#5f636ccc54da82225f31e898e7f27192fe074b4c" - integrity sha512-fWEyuSL6g/+nSiIRgIipfI6UXTI7bAxrpPlCY1c0+V3pAEUo1ybaKmSBgNr1ed2r+agm1plJww8Loig9y6s2dw== - dependencies: - lodash.get "^4.4.2" - -graphql-scalars@1.22.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/graphql-scalars/-/graphql-scalars-1.22.2.tgz#6326e6fe2d0ad4228a9fea72a977e2bf26b86362" - integrity sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ== - dependencies: - tslib "^2.5.0" - -graphql-type-json@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.2.tgz#f53a851dbfe07bd1c8157d24150064baab41e115" - integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== - -graphql@16.8.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -help-me@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/help-me/-/help-me-4.2.0.tgz#50712bfd799ff1854ae1d312c36eafcea85b0563" - integrity sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA== - dependencies: - glob "^8.0.0" - readable-stream "^3.6.0" - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -html-entities@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - -html-escaper@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -html-webpack-plugin@5.5.3: - version "5.5.3" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -html-webpack-plugin@^5.5.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" - integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-status@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-status/-/http-status-1.6.2.tgz#6dc05188a9856d67d96e48e8b4fd645c719ce82a" - integrity sha512-oUExvfNckrpTpDazph7kNG8sQi5au3BeTo0idaZFXEhTaJKu7GNJCLHI0rYY2wljm548MSTM+Ljj/c6anqu2zQ== - -i18next-browser-languagedetector@6.1.8: - version "6.1.8" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.8.tgz#8e9c61b32a4dfe9b959b38bc9d2a8b95f799b27c" - integrity sha512-Svm+MduCElO0Meqpj1kJAriTC6OhI41VhlT/A0UPjGoPZBhAHIaGE5EfsHlTpgdH09UVX7rcc72pSDDBeKSQQA== - dependencies: - "@babel/runtime" "^7.19.0" - -i18next-http-middleware@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/i18next-http-middleware/-/i18next-http-middleware-3.3.2.tgz#6a24fee6bde44952a5af24364d43fa32f6c1b9b6" - integrity sha512-PSeLXQXr9Qiv9Q3GCWCoIJenKVbxCcVsXb7VMp/mOprV4gu+AMJT7VHw4+QEf6oYW6GU31QSLnfDpLNoSMtx3g== - -i18next@22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424" - integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA== - dependencies: - "@babel/runtime" "^7.20.6" - -iconv-lite@0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - -ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -immer@^9.0.6: - version "9.0.21" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== - -immutable@^4.0.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== - dependencies: - get-intrinsic "^1.2.2" - hasown "^2.0.0" - side-channel "^1.0.4" - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -ip@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" - integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.6, is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0, is-core-module@^2.8.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hotkey@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.2.0.tgz#1835a68171a91e5c9460869d96336947c8340cef" - integrity sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw== - -is-hotkey@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.8.tgz#6b1f4b2d0e5639934e20c05ed24d623a21d36d25" - integrity sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ== - -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@5.0.0, is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-promise@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -is-windows@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isomorphic-fetch@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.4.3: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -joi@17.9.2: - version "17.9.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" - integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -joycon@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-to-typescript@11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-11.0.3.tgz#9b401c2b78329959f1c4c4e0639a6bdcf6a6ed77" - integrity sha512-EaEE9Y4VZ8b9jW5zce5a9L3+p4C9AqgIRHbNVDJahfMnoKzcd4sDb98BLxLdQhJEuRAXyKLg4H66NKm80W8ilg== - dependencies: - "@bcherny/json-schema-ref-parser" "9.0.9" - "@types/json-schema" "^7.0.11" - "@types/lodash" "^4.14.182" - "@types/prettier" "^2.6.1" - cli-color "^2.0.2" - get-stdin "^8.0.0" - glob "^7.1.6" - glob-promise "^4.2.2" - is-glob "^4.0.3" - lodash "^4.17.21" - minimist "^1.2.6" - mkdirp "^1.0.4" - mz "^2.7.0" - prettier "^2.6.2" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema-typed@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" - integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonwebtoken@9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#81d8c901c112c24e497a55daf6b2be1225b40145" - integrity sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg== - dependencies: - jws "^3.2.2" - lodash "^4.17.21" - ms "^2.1.1" - semver "^7.3.8" - -jsonwebtoken@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" - integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^7.5.4" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -jwt-decode@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" - integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== - -kareem@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.5.1.tgz#7b8203e11819a8e77a34b3517d3ead206764d15d" - integrity sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA== - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -klona@^2.0.4, klona@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.kebabcase@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -lodash.snakecase@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash.upperfirst@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" - integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== - -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== - dependencies: - es5-ext "~0.10.2" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -md5@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -mdn-data@2.0.28: - version "2.0.28" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.4.12: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -memoize-one@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" - integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== - -memoizee@^0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" - integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== - dependencies: - d "^1.0.1" - es5-ext "^0.10.53" - es6-weak-map "^2.0.3" - event-emitter "^0.3.5" - is-promise "^2.2.2" - lru-queue "^0.1.0" - next-tick "^1.1.0" - timers-ext "^0.1.7" - -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merge@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - -method-override@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/method-override/-/method-override-3.0.0.tgz#6ab0d5d574e3208f15b0c9cf45ab52000468d7a2" - integrity sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA== - dependencies: - debug "3.1.0" - methods "~1.1.2" - parseurl "~1.3.2" - vary "~1.1.2" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-memoize@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/micro-memoize/-/micro-memoize-4.1.2.tgz#ce719c1ba1e41592f1cd91c64c5f41dcbf135f36" - integrity sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g== - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" - integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -mini-css-extract-plugin@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" - integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" - -minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist@1.2.8, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@1.0.4, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -monaco-editor@0.38.0: - version "0.38.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.38.0.tgz#7b3cd16f89b1b8867fcd3c96e67fccee791ff05c" - integrity sha512-11Fkh6yzEmwx7O0YoLxeae0qEGFwmyPRlVxpg7oF9czOOCB/iCjdJrG5I67da5WiXK3YJCxoz9TJFE8Tfq/v9A== - -mongodb-connection-string-url@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" - integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== - dependencies: - "@types/whatwg-url" "^8.2.1" - whatwg-url "^11.0.0" - -mongodb@4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.17.1.tgz#ccff6ddbda106d5e06c25b0e4df454fd36c5f819" - integrity sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ== - dependencies: - bson "^4.7.2" - mongodb-connection-string-url "^2.6.0" - socks "^2.7.1" - optionalDependencies: - "@aws-sdk/credential-providers" "^3.186.0" - "@mongodb-js/saslprep" "^1.1.0" - -mongoose-aggregate-paginate-v2@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/mongoose-aggregate-paginate-v2/-/mongoose-aggregate-paginate-v2-1.0.6.tgz#fd2f2564d1bbf52f49a196f0b7b03675913dacca" - integrity sha512-UuALu+mjhQa1K9lMQvjLL3vm3iALvNw8PQNIh2gp1b+tO5hUa0NC0Wf6/8QrT9PSJVTihXaD8hQVy3J4e0jO0Q== - -mongoose-paginate-v2@1.7.22: - version "1.7.22" - resolved "https://registry.yarnpkg.com/mongoose-paginate-v2/-/mongoose-paginate-v2-1.7.22.tgz#9f178fe5fb71597e231639adac84d3ab9a96c62a" - integrity sha512-xW5GugkE21DJiu9e13EOxKt4ejEKQkRP/S1PkkXRjnk2rRZVKBcld1nPV+VJ/YCPfm8hb3sz9OvI7O38RmixkA== - -mongoose@6.12.3: - version "6.12.3" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-6.12.3.tgz#bc921ca2fd6d4c1a48dbf7bc88cf3eef1d3c4926" - integrity sha512-MNJymaaXali7w7rHBxVUoQ3HzHHMk/7I/+yeeoSa4rUzdjZwIWQznBNvVgc0A8ghuJwsuIkb5LyLV6gSjGjWyQ== - dependencies: - bson "^4.7.2" - kareem "2.5.1" - mongodb "4.17.1" - mpath "0.9.0" - mquery "4.0.3" - ms "2.1.3" - sift "16.0.1" - -mpath@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.9.0.tgz#0c122fe107846e31fc58c75b09c35514b3871904" - integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== - -mquery@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/mquery/-/mquery-4.0.3.tgz#4d15f938e6247d773a942c912d9748bd1965f89d" - integrity sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA== - dependencies: - debug "4.x" - -mrmime@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" - integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.6, nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -needle@^2.5.2: - version "2.9.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" - integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next-tick@1, next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-abi@^3.3.0: - version "3.54.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" - integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== - dependencies: - semver "^7.3.5" - -node-addon-api@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" - integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== - -node-fetch@^2.6.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -nodemailer@6.9.8: - version "6.9.8" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.8.tgz#29601e80440f2af7aa62b32758fdac7c6b784143" - integrity sha512-cfrYUk16e67Ks051i4CntM9kshRYei1/o/Gi8K1d+R34OIs21xdFnW7Pt7EucmVKA0LKtqUGNcjMZ7ehjl49mQ== - -nodemon@^2.0.6: - version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" - integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== - dependencies: - chokidar "^3.5.2" - debug "^3.2.7" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^5.7.1" - simple-update-notifier "^1.0.7" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -noms@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" - integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== - dependencies: - inherits "^2.0.1" - readable-stream "~1.0.31" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1, object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-to-formdata@4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/object-to-formdata/-/object-to-formdata-4.5.1.tgz#b6955a9c505b58df15852fee5f844b418b3eb6fe" - integrity sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw== - -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.values@^1.1.5: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -on-exit-leak-free@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" - integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -passport-anonymous@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/passport-anonymous/-/passport-anonymous-1.0.1.tgz#241e37274ec44dfb7f6cad234b41c438386bc117" - integrity sha512-Mk2dls97nLTzHpsWCYQ54IVGucWaiWSHHr3+IhWYAebg4dRgRQIfyoeYrixoxB2z2z4+EM7p9yjC+a3yMB5z5A== - dependencies: - passport-strategy "1.x.x" - -passport-headerapikey@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/passport-headerapikey/-/passport-headerapikey-1.2.2.tgz#b71960523999c9864151b8535c919e3ff5ba75ce" - integrity sha512-4BvVJRrWsNJPrd3UoZfcnnl4zvUWYKEtfYkoDsaOKBsrWHYmzTApCjs7qUbncOLexE9ul0IRiYBFfBG0y9IVQA== - dependencies: - lodash "^4.17.15" - passport-strategy "^1.0.0" - -passport-jwt@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/passport-jwt/-/passport-jwt-4.0.1.tgz#c443795eff322c38d173faa0a3c481479646ec3d" - integrity sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ== - dependencies: - jsonwebtoken "^9.0.0" - passport-strategy "^1.0.0" - -passport-local@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" - integrity sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow== - dependencies: - passport-strategy "1.x.x" - -passport-strategy@1.x.x, passport-strategy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" - integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== - -passport@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/passport/-/passport-0.6.0.tgz#e869579fab465b5c0b291e841e6cc95c005fac9d" - integrity sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug== - dependencies: - passport-strategy "1.x.x" - pause "0.0.1" - utils-merge "^1.0.1" - -path-browserify@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" - integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== - -payload@latest: - version "2.9.0" - resolved "https://registry.yarnpkg.com/payload/-/payload-2.9.0.tgz#531b39420bf03f7ebf54d7dc3a5c5d815fee929d" - integrity sha512-C8QekOUOh1689qWWrCLNXhgC5K1LnKYFmFEru/GxhQBEO6SFEULdQHMnmjP1yrHARu1eVU24UdFVniKY+9oR7A== - dependencies: - "@date-io/date-fns" "2.16.0" - "@dnd-kit/core" "6.0.8" - "@dnd-kit/sortable" "7.0.2" - "@faceless-ui/modal" "2.0.1" - "@faceless-ui/scroll-info" "1.3.0" - "@faceless-ui/window-info" "2.1.1" - "@monaco-editor/react" "4.5.1" - "@swc/core" "1.3.76" - "@swc/register" "0.1.10" - body-parser "1.20.2" - body-scroll-lock "4.0.0-beta.0" - bson-objectid "2.0.4" - compression "1.7.4" - conf "10.2.0" - connect-history-api-fallback "1.6.0" - console-table-printer "2.11.2" - dataloader "2.2.2" - date-fns "2.30.0" - deep-equal "2.2.2" - deepmerge "4.3.1" - dotenv "8.6.0" - express "4.18.2" - express-fileupload "1.4.0" - express-rate-limit "5.5.1" - file-type "16.5.4" - find-up "4.1.0" - flatley "5.2.0" - fs-extra "10.1.0" - get-tsconfig "4.6.2" - graphql "16.8.1" - graphql-http "1.21.0" - graphql-playground-middleware-express "1.7.23" - graphql-query-complexity "0.12.0" - graphql-scalars "1.22.2" - graphql-type-json "0.3.2" - html-webpack-plugin "5.5.3" - http-status "1.6.2" - i18next "22.5.1" - i18next-browser-languagedetector "6.1.8" - i18next-http-middleware "3.3.2" - is-hotkey "0.2.0" - is-plain-object "5.0.0" - isomorphic-fetch "3.0.0" - joi "17.9.2" - json-schema-to-typescript "11.0.3" - jsonwebtoken "9.0.1" - jwt-decode "3.1.2" - md5 "2.3.0" - method-override "3.0.0" - micro-memoize "4.1.2" - minimist "1.2.8" - mkdirp "1.0.4" - monaco-editor "0.38.0" - nodemailer "6.9.8" - object-to-formdata "4.5.1" - passport "0.6.0" - passport-anonymous "1.0.1" - passport-headerapikey "1.2.2" - passport-jwt "4.0.1" - passport-local "1.0.0" - pino "8.15.0" - pino-pretty "10.2.0" - pluralize "8.0.0" - probe-image-size "6.0.0" - process "0.11.10" - qs "6.11.2" - qs-middleware "1.0.3" - react "18.2.0" - react-animate-height "2.1.2" - react-datepicker "4.16.0" - react-diff-viewer-continued "3.2.6" - react-dom "18.2.0" - react-helmet "6.1.0" - react-i18next "11.18.6" - react-image-crop "10.1.8" - react-router-dom "5.3.4" - react-router-navigation-prompt "1.9.6" - react-select "5.7.4" - react-toastify "8.2.0" - sanitize-filename "1.6.3" - sass "1.69.4" - scheduler "0.23.0" - scmp "2.1.0" - sharp "0.32.6" - swc-loader "0.2.3" - terser-webpack-plugin "5.3.9" - ts-essentials "7.0.3" - use-context-selector "1.4.1" - uuid "9.0.1" - -peek-readable@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" - integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pino-abstract-transport@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" - integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== - dependencies: - readable-stream "^4.0.0" - split2 "^4.0.0" - -pino-abstract-transport@v1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz#cc0d6955fffcadb91b7b49ef220a6cc111d48bb3" - integrity sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA== - dependencies: - readable-stream "^4.0.0" - split2 "^4.0.0" - -pino-pretty@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-10.2.0.tgz#c674a153e15c08d7032a826d0051d786feace1d9" - integrity sha512-tRvpyEmGtc2D+Lr3FulIZ+R1baggQ4S3xD2Ar93KixFEDx6SEAUP3W5aYuEw1C73d6ROrNcB2IXLteW8itlwhA== - dependencies: - colorette "^2.0.7" - dateformat "^4.6.3" - fast-copy "^3.0.0" - fast-safe-stringify "^2.1.1" - help-me "^4.0.1" - joycon "^3.1.1" - minimist "^1.2.6" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.0.0" - pump "^3.0.0" - readable-stream "^4.0.0" - secure-json-parse "^2.4.0" - sonic-boom "^3.0.0" - strip-json-comments "^3.1.1" - -pino-std-serializers@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" - integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== - -pino@8.15.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.0.tgz#67c61d5e397bf297e5a0433976a7f7b8aa6f876b" - integrity sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.1.1" - on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.0.0 - pino-std-serializers "^6.0.0" - process-warning "^2.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.2.0" - safe-stable-stringify "^2.3.1" - sonic-boom "^3.1.0" - thread-stream "^2.0.0" - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -pluralize@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -postcss-attribute-case-insensitive@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01" - integrity sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-calc@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" - integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.4.tgz#2f1f8390d8d508713e43802230bf3ae0173622a7" - integrity sha512-YBzfVvVUNR4U3N0imzU1NPKCuwxzfHJkEP6imJxzsJ8LozRKeej9mWmg9Ef1ovJdb0xrGTRVzUxgTrMun5iw/Q== - dependencies: - "@csstools/css-color-parser" "^1.5.1" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/postcss-progressive-custom-properties" "^3.0.3" - -postcss-color-hex-alpha@^9.0.2: - version "9.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.3.tgz#b7f0d3829218608c0d219e25aa06b1216393c69e" - integrity sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.2.tgz#a5c7e605631eff2a7a230535bcf6aba29de4a270" - integrity sha512-f+RDEAPW2m8UbJWkSpRfV+QxhSaQhDMihI75DVGJJh4oRIoegjheeRtINFJum9D8BqGJcvD4GLjggTvCwZ4zuA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-colormin@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.0.2.tgz#2af9ce753937b08e058dbc6879e4aedfab42806b" - integrity sha512-TXKOxs9LWcdYo5cgmcSHPkyrLAh86hX1ijmyy6J8SbOhyv6ua053M3ZAM/0j44UsnQNIWdl8gb5L7xX2htKeLw== - dependencies: - browserslist "^4.22.2" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.0.2.tgz#c4a7509aeb1cc7ac3f6948fcbffc2bf8cac7c56a" - integrity sha512-aeBmaTnGQ+NUSVQT8aY0sKyAD/BaLJenEKZ03YK0JnDE1w1Rr8XShoxdal2V2H26xTJKr3v5haByOhJuyT4UYw== - dependencies: - browserslist "^4.22.2" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^10.0.0: - version "10.0.2" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz#70a244bbc59fc953ab6573e4e2c9624639aef08a" - integrity sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.5" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - "@csstools/media-query-list-parser" "^2.1.5" - -postcss-custom-properties@^13.2.1: - version "13.3.4" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.4.tgz#0ad5be700b692e0288ce3b2b406eac964244f197" - integrity sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.7" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^7.1.4: - version "7.1.6" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz#6d28812998dcd48f61a6a538141fc16cf2c42123" - integrity sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.5" - "@csstools/css-parser-algorithms" "^2.3.2" - "@csstools/css-tokenizer" "^2.2.1" - postcss-selector-parser "^6.0.13" - -postcss-dir-pseudo-class@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.1.tgz#b93755f52fb90215301b1d3ecb7c5e6416930a1e" - integrity sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-discard-comments@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.1.tgz#46176212bd9c3e5f48aa4b8b4868786726c41d36" - integrity sha512-f1KYNPtqYLUeZGCHQPKzzFtsHaRuECe6jLakf/RjSRqvF5XHLZnM2+fXLhb8Qh/HBFHs3M4cSLb1k3B899RYIg== - -postcss-discard-duplicates@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.1.tgz#112b1a95948e69b3484fdd43584dda6930977939" - integrity sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg== - -postcss-discard-empty@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.1.tgz#b34cb45ec891246da4506b53e352390fdef126c4" - integrity sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg== - -postcss-discard-overridden@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.1.tgz#c63c559237758d74bc505452393a64dda9b19ef4" - integrity sha512-qs0ehZMMZpSESbRkw1+inkf51kak6OOzNRaoLd/U7Fatp0aN2HQ1rxGOrJvYcRAN9VpX8kUF13R2ofn8OlvFVA== - -postcss-double-position-gradients@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.3.tgz#9345b273bd16056665209ce260be0d36ac211f65" - integrity sha512-QKYpwmaSm6HcdS0ndAuWSNNMv78R1oSySoh3mYBmctHWr2KWcwPJVakdOyU4lvFVW0GRu9wfIQwGeM4p3xU9ow== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.3" - postcss-value-parser "^4.2.0" - -postcss-focus-visible@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-9.0.1.tgz#eede1032ce86b3bb2556d93ca5df63c68dfc2559" - integrity sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-focus-within@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz#524af4c7eabae35cb1efa220a7903016fcc897fa" - integrity sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-5.0.1.tgz#887b64655f42370b43f0ab266cc6dbabf504d276" - integrity sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw== - -postcss-image-set-function@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-6.0.2.tgz#ddf62a4468207ce7de2f99154325adbe6c95c032" - integrity sha512-/O1xwqpJiz/apxGQi7UUfv1xUcorvkHZfvCYHPpRxxZj2WvjD0rg0+/+c+u5/Do5CpUg3XvfYxMrhcnjW1ArDQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-initial@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" - integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== - -postcss-lab-function@^6.0.0: - version "6.0.9" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.9.tgz#9ef00afba26703a1a3d83d502401a66a98eabb96" - integrity sha512-PKFAVTBEWJYsoSTD7Kp/OzeiMsXaLX39Pv75XgUyF5VrbMfeTw+JqCGsvDP3dPhclh6BemdCFHcjXBG9gO4UCg== - dependencies: - "@csstools/css-color-parser" "^1.5.1" - "@csstools/css-parser-algorithms" "^2.5.0" - "@csstools/css-tokenizer" "^2.2.3" - "@csstools/postcss-progressive-custom-properties" "^3.0.3" - -postcss-loader@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - -postcss-logical@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-7.0.1.tgz#a3121f6510591b195321b16e65fbe13b1cfd3115" - integrity sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-merge-longhand@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.2.tgz#cd4e83014851da59545e9a906b245615550f4064" - integrity sha512-+yfVB7gEM8SrCo9w2lCApKIEzrTKl5yS1F4yGhV3kSim6JzbfLGJyhR1B6X+6vOT0U33Mgx7iv4X9MVWuaSAfw== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^6.0.2" - -postcss-merge-rules@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.0.3.tgz#08fcf714faaad75b1980ecd961b080ae2f8ddeb3" - integrity sha512-yfkDqSHGohy8sGYIJwBmIGDv4K4/WrJPX355XrxQb/CSsT4Kc/RxDi6akqn5s9bap85AWgv21ArcUWwWdGNSHA== - dependencies: - browserslist "^4.22.2" - caniuse-api "^3.0.0" - cssnano-utils "^4.0.1" - postcss-selector-parser "^6.0.15" - -postcss-minify-font-values@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.0.1.tgz#788eb930168be90225f3937f0b70aa19d8b532b2" - integrity sha512-tIwmF1zUPoN6xOtA/2FgVk1ZKrLcCvE0dpZLtzyyte0j9zUeB8RTbCqrHZGjJlxOvNWKMYtunLrrl7HPOiR46w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.1.tgz#4faf1880b483dc37016658aa186b42194ff9b5bc" - integrity sha512-M1RJWVjd6IOLPl1hYiOd5HQHgpp6cvJVLrieQYS9y07Yo8itAr6jaekzJphaJFR0tcg4kRewCk3kna9uHBxn/w== - dependencies: - colord "^2.9.1" - cssnano-utils "^4.0.1" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.0.2.tgz#bd64af642fa5610281b8a9461598bbb91f92ae05" - integrity sha512-zwQtbrPEBDj+ApELZ6QylLf2/c5zmASoOuA4DzolyVGdV38iR2I5QRMsZcHkcdkZzxpN8RS4cN7LPskOkTwTZw== - dependencies: - browserslist "^4.22.2" - cssnano-utils "^4.0.1" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.2.tgz#62065b38d3453ddc6627ba50e4f4a2154b031aa0" - integrity sha512-0b+m+w7OAvZejPQdN2GjsXLv5o0jqYHX3aoV0e7RBKPCsB7TYG5KKWBFhGnB/iP3213Ts8c5H4wLPLMm7z28Sg== - dependencies: - postcss-selector-parser "^6.0.15" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6" - integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134" - integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nesting@^12.0.0: - version "12.0.2" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.0.2.tgz#cb92061347db3e7c38c174c97cb01feff2eef439" - integrity sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ== - dependencies: - "@csstools/selector-specificity" "^3.0.1" - postcss-selector-parser "^6.0.13" - -postcss-normalize-charset@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.1.tgz#5f70e1eb8bbdbcfcbed060ef70f179e8fef57d0c" - integrity sha512-aW5LbMNRZ+oDV57PF9K+WI1Z8MPnF+A8qbajg/T8PP126YrGX1f9IQx21GI2OlGz7XFJi/fNi0GTbY948XJtXg== - -postcss-normalize-display-values@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.1.tgz#ff9aa30bbf1283294bfd9cc8b6fb81ff060a7f2d" - integrity sha512-mc3vxp2bEuCb4LgCcmG1y6lKJu1Co8T+rKHrcbShJwUmKJiEl761qb/QQCfFwlrvSeET3jksolCR/RZuMURudw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.1.tgz#41ffdc72994f024c6cd6e91dbfb40ab9abe6fe90" - integrity sha512-HRsq8u/0unKNvm0cvwxcOUEcakFXqZ41fv3FOdPn916XFUrympjr+03oaLkuZENz3HE9RrQE9yU0Xv43ThWjQg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.1.tgz#55dc54b6f80305b280a379899a6626e0a07b04a8" - integrity sha512-Gbb2nmCy6tTiA7Sh2MBs3fj9W8swonk6lw+dFFeQT68B0Pzwp1kvisJQkdV6rbbMSd9brMlS8I8ts52tAGWmGQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.1.tgz#7605e0fb4ec7bf2709709991d13a949e4419db1d" - integrity sha512-5Fhx/+xzALJD9EI26Aq23hXwmv97Zfy2VFrt5PLT8lAhnBIZvmaT5pQk+NuJ/GWj/QWaKSKbnoKDGLbV6qnhXg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.1.tgz#ef937b7ca2fd62ed0b46645ea5728b842a3600db" - integrity sha512-4zcczzHqmCU7L5dqTB9rzeqPWRMc0K2HoR+Bfl+FSMbqGBUcP5LRfgcH4BdRtLuzVQK1/FHdFoGT3F7rkEnY+g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.2.tgz#361026744ff11baebaec771b60c2a5f36f274fd0" - integrity sha512-Ff2VdAYCTGyMUwpevTZPZ4w0+mPjbZzLLyoLh/RMpqUqeQKZ+xMm31hkxBavDcGKcxm6ACzGk0nBfZ8LZkStKA== - dependencies: - browserslist "^4.22.2" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.1.tgz#eae58cb4f5f9a4fa5bbbf6d4222dff534ad46186" - integrity sha512-jEXL15tXSvbjm0yzUV7FBiEXwhIa9H88JOXDGQzmcWoB4mSjZIsmtto066s2iW9FYuIrIF4k04HA2BKAOpbsaQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.1.tgz#b5933750b938814c028d3d2b2e5c0199e0037b53" - integrity sha512-76i3NpWf6bB8UHlVuLRxG4zW2YykF9CTEcq/9LGAiz2qBuX5cBStadkk0jSkg9a9TCIXbMQz7yzrygKoCW9JuA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-opacity-percentage@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002" - integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ== - -postcss-ordered-values@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.1.tgz#553e735d009065b362da93340e57f43d5f2d0fbc" - integrity sha512-XXbb1O/MW9HdEhnBxitZpPFbIvDgbo9NK4c/5bOfiKpnIGZDoL2xd7/e6jW5DYLsWxBbs+1nZEnVgnjnlFViaA== - dependencies: - cssnano-utils "^4.0.1" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.1.tgz#c0a124edad4f7ad88109275a60510e1fb07ab833" - integrity sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-9.0.1.tgz#c08c46a94e639c1ee3457ac96d50c50a89bd6ac3" - integrity sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.0.0.tgz#9ca4fc5c0b4a0584d4284008a33ec2d456e2b5a5" - integrity sha512-L0x/Nluq+/FkidIYjU7JtkmRL2/QmXuYkxuM3C5y9VG3iGLljF9PuBHQ7kzKRoVfwnca0VNN0Zb3a/bxVJ12vA== - dependencies: - "@csstools/postcss-cascade-layers" "^4.0.0" - "@csstools/postcss-color-function" "^2.2.3" - "@csstools/postcss-color-mix-function" "^1.0.3" - "@csstools/postcss-font-format-keywords" "^3.0.0" - "@csstools/postcss-gradients-interpolation-method" "^4.0.0" - "@csstools/postcss-hwb-function" "^3.0.0" - "@csstools/postcss-ic-unit" "^3.0.0" - "@csstools/postcss-is-pseudo-class" "^4.0.0" - "@csstools/postcss-logical-float-and-clear" "^2.0.0" - "@csstools/postcss-logical-resize" "^2.0.0" - "@csstools/postcss-logical-viewport-units" "^2.0.0" - "@csstools/postcss-media-minmax" "^1.0.5" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.0" - "@csstools/postcss-nested-calc" "^3.0.0" - "@csstools/postcss-normalize-display-values" "^3.0.0" - "@csstools/postcss-oklab-function" "^3.0.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - "@csstools/postcss-relative-color-syntax" "^2.0.0" - "@csstools/postcss-scope-pseudo-class" "^3.0.0" - "@csstools/postcss-stepped-value-functions" "^3.0.0" - "@csstools/postcss-text-decoration-shorthand" "^3.0.0" - "@csstools/postcss-trigonometric-functions" "^3.0.0" - "@csstools/postcss-unset-value" "^3.0.0" - autoprefixer "^10.4.14" - browserslist "^4.21.9" - css-blank-pseudo "^6.0.0" - css-has-pseudo "^6.0.0" - css-prefers-color-scheme "^9.0.0" - cssdb "^7.6.0" - postcss-attribute-case-insensitive "^6.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^6.0.0" - postcss-color-hex-alpha "^9.0.2" - postcss-color-rebeccapurple "^9.0.0" - postcss-custom-media "^10.0.0" - postcss-custom-properties "^13.2.1" - postcss-custom-selectors "^7.1.4" - postcss-dir-pseudo-class "^8.0.0" - postcss-double-position-gradients "^5.0.0" - postcss-focus-visible "^9.0.0" - postcss-focus-within "^8.0.0" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^5.0.0" - postcss-image-set-function "^6.0.0" - postcss-initial "^4.0.1" - postcss-lab-function "^6.0.0" - postcss-logical "^7.0.0" - postcss-nesting "^12.0.0" - postcss-opacity-percentage "^2.0.0" - postcss-overflow-shorthand "^5.0.0" - postcss-page-break "^3.0.4" - postcss-place "^9.0.0" - postcss-pseudo-class-any-link "^9.0.0" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^7.0.1" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.1.tgz#71c24a886765763d4e37e21a27ecc6f1c1a5d698" - integrity sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-reduce-initial@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.0.2.tgz#763d25902406c872264041df69f182eb15a5d9be" - integrity sha512-YGKalhNlCLcjcLvjU5nF8FyeCTkCO5UtvJEt0hrPZVCTtRLSOH4z00T1UntQPj4dUmIYZgMj8qK77JbSX95hSw== - dependencies: - browserslist "^4.22.2" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.1.tgz#7bf59d7c6e7066e3b18ef17237d2344bd3da6d75" - integrity sha512-fUbV81OkUe75JM+VYO1gr/IoA2b/dRiH6HvMwhrIBSUrxq3jNZQZitSnugcTLDi1KkQh1eR/zi+iyxviUNBkcQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb" - integrity sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.15, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.15" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" - integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.2.tgz#dbc9d03e7f346bc0d82443078602a951e0214836" - integrity sha512-IH5R9SjkTkh0kfFOQDImyy1+mTCb+E830+9SV1O+AaDcoHTvfsvt6WwJeo7KwcHbFnevZVCsXhDmjFiGVuwqFQ== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.2.0" - -postcss-unique-selectors@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.2.tgz#09a34a5a31a649d3e9bca5962af0616f39d071d2" - integrity sha512-8IZGQ94nechdG7Y9Sh9FlIY2b4uS8/k8kdKRX040XHsS3B6d1HrJAkXrBSsSu4SuARruSsUjW3nlSw8BHkaAYQ== - dependencies: - postcss-selector-parser "^6.0.15" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.2.15, postcss@^8.4.24: - version "8.4.33" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.6.2, prettier@^2.7.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -probe-image-size@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/probe-image-size/-/probe-image-size-6.0.0.tgz#4a85b19d5af4e29a8de7d53a9aa036f6fd02f5f4" - integrity sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA== - dependencies: - deepmerge "^4.0.0" - needle "^2.5.2" - stream-parser "~0.3.1" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-warning@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.3.2.tgz#70d8a3251aab0eafe3a595d8ae2c5d2277f096a5" - integrity sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA== - -process@0.11.10, process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -prompts@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -qs-middleware@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/qs-middleware/-/qs-middleware-1.0.3.tgz#84f3535275ba20fd00c2122efacce6ab01092c19" - integrity sha512-ymlixxD/0Bj3BMY9x1z8ENdQdhkmsIbDNyVvfM8soHn5p/CRFlLPrmtxmE5aG//q1PzHHSGuLi+6QlHezivseg== - dependencies: - qs "~6.4.0" - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@6.11.2, qs@^6.9.1: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -qs@~6.4.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.1.tgz#2bad97710a5b661c366b378b1e3a44a592ff45e6" - integrity sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -queue-tick@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" - integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-animate-height@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-animate-height/-/react-animate-height-2.1.2.tgz#9b450fc64d46f10f5e07da8d0d5e2c47b9f15030" - integrity sha512-A9jfz/4CTdsIsE7WCQtO9UkOpMBcBRh8LxyHl2eoZz1ki02jpyUL5xt58gabd0CyeLQ8fRyQ+s2lyV2Ufu8Owg== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.1" - -react-datepicker@4.16.0: - version "4.16.0" - resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-4.16.0.tgz#b9dd389bb5611a1acc514bba1dd944be21dd877f" - integrity sha512-hNQ0PAg/LQoVbDUO/RWAdm/RYmPhN3cz7LuQ3hqbs24OSp69QCiKOJRrQ4jk1gv1jNR5oYu8SjjgfDh8q6Q1yw== - dependencies: - "@popperjs/core" "^2.11.8" - classnames "^2.2.6" - date-fns "^2.30.0" - prop-types "^15.7.2" - react-onclickoutside "^6.12.2" - react-popper "^2.3.0" - -react-diff-viewer-continued@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/react-diff-viewer-continued/-/react-diff-viewer-continued-3.2.6.tgz#96382463b5de6838d95323c407442349b1c3a26e" - integrity sha512-GrzyqQnjIMoej+jMjWvtVSsQqhXgzEGqpXlJ2dAGfOk7Q26qcm8Gu6xtI430PBUyZsERe8BJSQf+7VZZo8IBNQ== - dependencies: - "@emotion/css" "^11.10.5" - classnames "^2.3.1" - diff "^5.1.0" - memoize-one "^6.0.0" - prop-types "^15.8.1" - -react-dom@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-fast-compare@^3.0.1, react-fast-compare@^3.1.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" - integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== - -react-helmet@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" - integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== - dependencies: - object-assign "^4.1.1" - prop-types "^15.7.2" - react-fast-compare "^3.1.1" - react-side-effect "^2.1.0" - -react-i18next@11.18.6: - version "11.18.6" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.6.tgz#e159c2960c718c1314f1e8fcaa282d1c8b167887" - integrity sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA== - dependencies: - "@babel/runtime" "^7.14.5" - html-parse-stringify "^3.0.1" - -react-image-crop@10.1.8: - version "10.1.8" - resolved "https://registry.yarnpkg.com/react-image-crop/-/react-image-crop-10.1.8.tgz#6f7b33d069f6cfb887e66faee16a9fb2e6d31137" - integrity sha512-4rb8XtXNx7ZaOZarKKnckgz4xLMvds/YrU6mpJfGhGAsy2Mg4mIw1x+DCCGngVGq2soTBVVOxx2s/C6mTX9+pA== - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-onclickoutside@^6.12.2: - version "6.13.0" - resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz#e165ea4e5157f3da94f4376a3ab3e22a565f4ffc" - integrity sha512-ty8So6tcUpIb+ZE+1HAhbLROvAIJYyJe/1vRrrcmW+jLsaM+/powDRqxzo6hSh9CuRZGSL1Q8mvcF5WRD93a0A== - -react-popper@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" - integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== - dependencies: - react-fast-compare "^3.0.1" - warning "^4.0.2" - -react-router-dom@5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router-navigation-prompt@1.9.6: - version "1.9.6" - resolved "https://registry.yarnpkg.com/react-router-navigation-prompt/-/react-router-navigation-prompt-1.9.6.tgz#a949252dfbae8c40508671beb6d5995f0b089ac4" - integrity sha512-l0sAtbroHK8i1/Eyy29XcrMpBEt0R08BaScgMUt8r5vWWbLz7G0ChOikayTCQm7QgDFsHw8gVnxDJb7TBZCAKg== - -react-router@5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-select@5.7.4: - version "5.7.4" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.4.tgz#d8cad96e7bc9d6c8e2709bdda8f4363c5dd7ea7d" - integrity sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ== - dependencies: - "@babel/runtime" "^7.12.0" - "@emotion/cache" "^11.4.0" - "@emotion/react" "^11.8.1" - "@floating-ui/dom" "^1.0.1" - "@types/react-transition-group" "^4.4.0" - memoize-one "^6.0.0" - prop-types "^15.6.0" - react-transition-group "^4.3.0" - use-isomorphic-layout-effect "^1.1.2" - -react-side-effect@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" - integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== - -react-toastify@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-8.2.0.tgz#ef7d56bdfdc6272ca6b228368ab564721c3a3244" - integrity sha512-Pg2Ju7NngAamarFvLwqrFomJ57u/Ay6i6zfLurt/qPynWkAkOthu6vxfqYpJCyNhHRhR4hu7+bySSeWWJu6PAg== - dependencies: - clsx "^1.1.1" - -react-transition-group@^4.3.0, react-transition-group@^4.4.2: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-web-to-node-stream@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -real-require@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== - -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.4, resolve@^1.9.0: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-array-concat@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== - dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" - integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== - dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - is-regex "^1.1.4" - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sanitize-filename@1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - -sass-loader@12.6.0: - version "12.6.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sass@1.69.4: - version "1.69.4" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.4.tgz#10c735f55e3ea0b7742c6efa940bce30e07fbca2" - integrity sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -sax@^1.2.4: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" - integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== - -scheduler@0.23.0, scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0, schema-utils@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -scmp@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scmp/-/scmp-2.1.0.tgz#37b8e197c425bdeb570ab91cc356b311a11f9c9a" - integrity sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q== - -scroll-into-view-if-needed@^2.2.20: - version "2.2.31" - resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587" - integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== - dependencies: - compute-scroll-into-view "^1.0.20" - -secure-json-parse@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -semver@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== - dependencies: - define-data-property "^1.1.1" - function-bind "^1.1.2" - get-intrinsic "^1.2.2" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -sharp@0.32.6: - version "0.32.6" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" - integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== - dependencies: - color "^4.2.3" - detect-libc "^2.0.2" - node-addon-api "^6.1.0" - prebuild-install "^7.1.1" - semver "^7.5.4" - simple-get "^4.0.1" - tar-fs "^3.0.4" - tunnel-agent "^0.6.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -sift@16.0.1: - version "16.0.1" - resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.1.tgz#e9c2ccc72191585008cf3e36fc447b2d2633a053" - integrity sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== - dependencies: - semver "~7.0.0" - -simple-wcswidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" - integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== - -sirv@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" - integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== - dependencies: - "@polka/url" "^1.0.0-next.24" - mrmime "^2.0.0" - totalist "^3.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slate-history@0.86.0: - version "0.86.0" - resolved "https://registry.yarnpkg.com/slate-history/-/slate-history-0.86.0.tgz#5554612271d2fc1018a7918be3961bb66e620c58" - integrity sha512-OxObL9tbhgwvSlnKSCpGIh7wnuaqvOj5jRExGjEyCU2Ke8ctf22HjT+jw7GEi9ttLzNTUmTEU3YIzqKGeqN+og== - dependencies: - is-plain-object "^5.0.0" - -slate-hyperscript@0.81.3: - version "0.81.3" - resolved "https://registry.yarnpkg.com/slate-hyperscript/-/slate-hyperscript-0.81.3.tgz#0c8f446d6bef717d2fe855239fb86a000ba2d0d2" - integrity sha512-A/jvoLTAgeRcJaUPQCYOikCJxSws6+/jkL7mM+QuZljNd7EA5YqafGA7sVBJRFpcoSsDRUIah1yNiC/7vxZPYg== - dependencies: - is-plain-object "^5.0.0" - -slate-react@0.92.0: - version "0.92.0" - resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.92.0.tgz#eb158ac2a33d962f48c466c4c8cc7bc14c1c6633" - integrity sha512-xEDKu5RKw5f0N95l1UeNQnrB0Pxh4JPjpIZR/BVsMo0ININnLAknR99gLo46bl/Ffql4mr7LeaxQRoXxbFtJOQ== - dependencies: - "@juggle/resize-observer" "^3.4.0" - "@types/is-hotkey" "^0.1.1" - "@types/lodash" "^4.14.149" - direction "^1.0.3" - is-hotkey "^0.1.6" - is-plain-object "^5.0.0" - lodash "^4.17.4" - scroll-into-view-if-needed "^2.2.20" - tiny-invariant "1.0.6" - -slate@0.91.4: - version "0.91.4" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.91.4.tgz#759764d63c8a8a7aff29a29e598e593ed80277f9" - integrity sha512-aUJ3rpjrdi5SbJ5G1Qjr3arytfRkEStTmHjBfWq2A2Q8MybacIzkScSvGJjQkdTk3djCK9C9SEOt39sSeZFwTw== - dependencies: - immer "^9.0.6" - is-plain-object "^5.0.0" - tiny-warning "^1.0.3" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -sonic-boom@^3.0.0, sonic-boom@^3.1.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.0.tgz#e442c5c23165df897d77c3c14ef3ca40dec66a66" - integrity sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA== - dependencies: - atomic-sleep "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@^0.5.13, source-map-support@^0.5.17, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" - integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== - dependencies: - memory-pager "^1.0.2" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -state-local@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" - integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - -stream-parser@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" - integrity sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ== - dependencies: - debug "2" - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -streamx@^2.15.0: - version "2.15.7" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.7.tgz#a12fe09faa3fda2483e8044c406b72286994a138" - integrity sha512-NPEKS5+yjyo597eafGbKW5ujh7Sm6lDLHZQd/lRSz6S0VarpADBJItqfB4PnwpS+472oob1GX5cCY9vzfJpHUA== - dependencies: - fast-fifo "^1.1.0" - queue-tick "^1.0.1" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -strtok3@^6.2.4: - version "6.3.0" - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" - integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^4.1.0" - -style-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -stylehacks@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.0.2.tgz#5bf2654561752547d4548765f35c9a49659b3742" - integrity sha512-00zvJGnCu64EpMjX8b5iCZ3us2Ptyw8+toEkb92VdmkEaRaSGBNKAoK6aWZckhXxmQP8zWiTaFaiMGIU8Ve8sg== - dependencies: - browserslist "^4.22.2" - postcss-selector-parser "^6.0.15" - -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - -supports-color@^5.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svgo@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.2.0.tgz#7a5dff2938d8c6096e00295c2390e8e652fa805d" - integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - -swc-loader@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.3.tgz#6792f1c2e4c9ae9bf9b933b3e010210e270c186d" - integrity sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A== - -swc-loader@^0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.4.tgz#5043989de1dfbea4d3493c72df2dd922f5edaf6d" - integrity sha512-B0toRR3M8PuUV3f0hSoXHogtLCRW8bVYVZl0L1p1iSeTgVBkXa9mOQOYuQBbSJnSdnoQiM7ZCHIY47b0dKaehg== - -swc-minify-webpack-plugin@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/swc-minify-webpack-plugin/-/swc-minify-webpack-plugin-2.1.1.tgz#2c63fe592d49541733d7557b3af8f97c7ffa78b9" - integrity sha512-/9ud/libNWUC5p71vXWhW/O2Nc0essW8D9pY4P4ol0ceM8OcFbNr41R9YFqTkmktqUL2t0WwXau+FkR4T1+PJA== - -tabbable@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.3.3.tgz#aac0ff88c73b22d6c3c5a50b1586310006b47fbf" - integrity sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-fs@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" - integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== - dependencies: - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^3.1.5" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar-stream@^3.1.5: - version "3.1.7" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" - integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== - dependencies: - b4a "^1.6.4" - fast-fifo "^1.2.0" - streamx "^2.15.0" - -terser-webpack-plugin@5.3.9: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.6: - version "5.3.10" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== - dependencies: - "@jridgewell/trace-mapping" "^0.3.20" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" - -terser@^5.10.0, terser@^5.16.8, terser@^5.26.0: - version "5.27.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c" - integrity sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-stream@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.1.tgz#6d588b14f0546e59d3f306614f044bc01ce43351" - integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== - dependencies: - real-require "^0.2.0" - -through2@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -timers-ext@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" - integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== - dependencies: - es5-ext "~0.10.46" - next-tick "1" - -tiny-invariant@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== - -tiny-invariant@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -tiny-warning@^1.0.0, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -token-types@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" - integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== - dependencies: - utf8-byte-length "^1.0.1" - -ts-essentials@7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -ts-node@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -tsconfig-paths@^3.12.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.11.1, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.1, tslib@^2.5.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typescript@^4.8.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-loader@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -use-context-selector@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/use-context-selector/-/use-context-selector-1.4.1.tgz#eb96279965846b72915d7f899b8e6ef1d768b0ae" - integrity sha512-Io2ArvcRO+6MWIhkdfMFt+WKQX+Vb++W8DS2l03z/Vw/rz3BclKpM0ynr4LYGyU85Eke+Yx5oIhTY++QR0ZDoA== - -use-isomorphic-layout-effect@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utils-merge@1.0.1, utils-merge@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - -uuid@9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -warning@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -webpack-bundle-analyzer@^4.8.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz#84b7473b630a7b8c21c741f81d8fe4593208b454" - integrity sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - commander "^7.2.0" - debounce "^1.2.1" - escape-string-regexp "^4.0.0" - gzip-size "^6.0.0" - html-escaper "^2.0.2" - is-plain-object "^5.0.0" - opener "^1.5.2" - picocolors "^1.0.0" - sirv "^2.0.3" - ws "^7.3.1" - -webpack-cli@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" - integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.2.0" - "@webpack-cli/info" "^1.5.0" - "@webpack-cli/serve" "^1.7.0" - colorette "^2.0.14" - commander "^7.0.0" - cross-spawn "^7.0.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - webpack-merge "^5.7.3" - -webpack-dev-middleware@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz#fd585127ed44dab3f253daf0d98f4d58a5088cc2" - integrity sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw== - dependencies: - colorette "^2.0.10" - memfs "^3.4.12" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-hot-middleware@^2.25.3: - version "2.26.1" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz#87214f1e3f9f3acab9271fef9e6ed7b637d719c0" - integrity sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A== - dependencies: - ansi-html-community "0.0.8" - html-entities "^2.1.0" - strip-ansi "^6.0.0" - -webpack-merge@^5.7.3: - version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-sources@^1.1.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.78.0: - version "5.90.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.1.tgz#62ab0c097d7cbe83d32523dbfbb645cdb7c3c01c" - integrity sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.21.10" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -whatwg-fetch@^3.4.1: - version "3.6.20" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" - integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== - -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== - dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.1" - -which@^1.2.14: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^7.3.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xss@^1.0.6: - version "1.0.14" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" - integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== - dependencies: - commander "^2.20.3" - cssfilter "0.0.10" - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^16.1.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 123022969f54a98442f3c5df482a788705a2e2e7 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Wed, 9 Oct 2024 15:48:40 -0400 Subject: [PATCH 017/110] chore(release): eslint/3.0.0-beta.112 --- packages/eslint-config/package.json | 2 +- packages/eslint-plugin/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index de82feaf7c..1743ec0cc4 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/eslint-config", - "version": "3.0.0-beta.97", + "version": "3.0.0-beta.112", "description": "Payload styles for ESLint and Prettier", "keywords": [], "homepage": "https://payloadcms.com", diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index a0cc21b729..4464bf4cac 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/eslint-plugin", - "version": "3.0.0-beta.97", + "version": "3.0.0-beta.112", "description": "Payload plugins for ESLint", "keywords": [], "homepage": "https://payloadcms.com", From 28c3a770ee3fab1ea1e75fb0a506e954e91d1f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20Gabri=C4=8D?= <83283727+GregorGabric@users.noreply.github.com> Date: Wed, 9 Oct 2024 22:23:05 +0200 Subject: [PATCH 018/110] feat(translations): add slovenian lang (#8603) Add Slovenian language --- packages/payload/src/exports/i18n/sl.ts | 1 + packages/translations/src/exports/all.ts | 2 + packages/translations/src/languages/sl.ts | 456 ++++++++++++++++++++++ packages/translations/src/types.ts | 1 + 4 files changed, 460 insertions(+) create mode 100644 packages/payload/src/exports/i18n/sl.ts create mode 100644 packages/translations/src/languages/sl.ts diff --git a/packages/payload/src/exports/i18n/sl.ts b/packages/payload/src/exports/i18n/sl.ts new file mode 100644 index 0000000000..6ac60fc638 --- /dev/null +++ b/packages/payload/src/exports/i18n/sl.ts @@ -0,0 +1 @@ +export { sl } from '@payloadcms/translations/languages/sl' diff --git a/packages/translations/src/exports/all.ts b/packages/translations/src/exports/all.ts index 3012d698ed..265d768ac4 100644 --- a/packages/translations/src/exports/all.ts +++ b/packages/translations/src/exports/all.ts @@ -26,6 +26,7 @@ import { rs } from '../languages/rs.js' import { rsLatin } from '../languages/rsLatin.js' import { ru } from '../languages/ru.js' import { sk } from '../languages/sk.js' +import { sl } from '../languages/sl.js' import { sv } from '../languages/sv.js' import { th } from '../languages/th.js' import { tr } from '../languages/tr.js' @@ -61,6 +62,7 @@ export const translations = { 'rs-latin': rsLatin, ru, sk, + sl, sv, th, tr, diff --git a/packages/translations/src/languages/sl.ts b/packages/translations/src/languages/sl.ts new file mode 100644 index 0000000000..2a2850e22b --- /dev/null +++ b/packages/translations/src/languages/sl.ts @@ -0,0 +1,456 @@ +import type { Language } from '../types.js' + +export const slTranslations = { + authentication: { + account: 'Račun', + accountOfCurrentUser: 'Račun trenutnega uporabnika', + accountVerified: 'Račun uspešno preverjen.', + alreadyActivated: 'Že aktivirano', + alreadyLoggedIn: 'Že prijavljeni', + apiKey: 'API ključ', + authenticated: 'Avtenticirano', + backToLogin: 'Nazaj na prijavo', + beginCreateFirstUser: 'Za začetek ustvarite prvega uporabnika.', + changePassword: 'Spremeni geslo', + checkYourEmailForPasswordReset: + 'Preverite svoj e-poštni predal za povezavo, ki vam bo omogočila varno ponastaviti geslo.', + confirmGeneration: 'Potrdi generiranje', + confirmPassword: 'Potrdi geslo', + createFirstUser: 'Ustvari prvega uporabnika', + emailNotValid: 'Vneseni e-poštni naslov ni veljaven', + emailOrUsername: 'E-pošta ali uporabniško ime', + emailSent: 'E-pošta poslana', + emailVerified: 'E-pošta uspešno preverjena.', + enableAPIKey: 'Omogoči API ključ', + failedToUnlock: 'Odklepanje ni uspelo', + forceUnlock: 'Prisili odklepanje', + forgotPassword: 'Pozabljeno geslo', + forgotPasswordEmailInstructions: + 'Vnesite svoj e-poštni naslov. Prejeli boste e-pošto z navodili za ponastavitev gesla.', + forgotPasswordQuestion: 'Ste pozabili geslo?', + forgotPasswordUsernameInstructions: + 'Vnesite svoje uporabniško ime. Navodila za ponastavitev gesla bodo poslana na e-poštni naslov, povezan z vašim uporabniškim imenom.', + generate: 'Generiraj', + generateNewAPIKey: 'Generiraj nov API ključ', + generatingNewAPIKeyWillInvalidate: + 'Generiranje novega API ključa bo <1>razveljavilo prejšnji ključ. Ste prepričani, da želite nadaljevati?', + lockUntil: 'Zakleni do', + logBackIn: 'Ponovno se prijavi', + loggedIn: 'Za prijavo z drugim uporabnikom se morate najprej <0>odjaviti.', + loggedInChangePassword: + 'Za spremembo gesla pojdite na svoj <0>račun in tam uredite svoje geslo.', + loggedOutInactivity: 'Odjavljeni ste bili zaradi neaktivnosti.', + loggedOutSuccessfully: 'Uspešno ste se odjavili.', + loggingOut: 'Odjavljanje...', + login: 'Prijava', + loginAttempts: 'Poskusi prijave', + loginUser: 'Prijavi uporabnika', + loginWithAnotherUser: 'Za prijavo z drugim uporabnikom se morate najprej <0>odjaviti.', + logOut: 'Odjava', + logout: 'Odjava', + logoutSuccessful: 'Odjava uspešna.', + logoutUser: 'Odjavi uporabnika', + newAccountCreated: + 'Pravkar je bil ustvarjen nov račun za dostop do
{{serverURL}} Prosimo, kliknite na naslednjo povezavo ali jo prilepite v svoj brskalnik za potrditev e-pošte: {{verificationURL}}
Po potrditvi e-pošte se boste lahko uspešno prijavili.', + newAPIKeyGenerated: 'Nov API ključ generiran.', + newPassword: 'Novo geslo', + passed: 'Avtentikacija uspešna', + passwordResetSuccessfully: 'Geslo uspešno ponastavljeno.', + resetPassword: 'Ponastavi geslo', + resetPasswordExpiration: 'Potek ponastavitve gesla', + resetPasswordToken: 'Žeton za ponastavitev gesla', + resetYourPassword: 'Ponastavite svoje geslo', + stayLoggedIn: 'Ostani prijavljen', + successfullyRegisteredFirstUser: 'Uspešno registriran prvi uporabnik.', + successfullyUnlocked: 'Uspešno odklenjeno', + tokenRefreshSuccessful: 'Osvežitev žetona uspešna.', + unableToVerify: 'Ni mogoče preveriti', + username: 'Uporabniško ime', + usernameNotValid: 'Vneseno uporabniško ime ni veljavno', + verified: 'Preverjeno', + verifiedSuccessfully: 'Uspešno preverjeno', + verify: 'Preveri', + verifyUser: 'Preveri uporabnika', + verifyYourEmail: 'Potrdite svojo e-pošto', + youAreInactive: + 'Že nekaj časa niste bili aktivni in boste kmalu samodejno odjavljeni zaradi varnosti. Želite ostati prijavljeni?', + youAreReceivingResetPassword: + 'To sporočilo ste prejeli, ker ste vi (ali nekdo drug) zahtevali ponastavitev gesla za vaš račun. Prosimo, kliknite na naslednjo povezavo ali jo prilepite v svoj brskalnik za dokončanje postopka:', + youDidNotRequestPassword: + 'Če tega niste zahtevali, prezrite to e-pošto in vaše geslo bo ostalo nespremenjeno.', + }, + error: { + accountAlreadyActivated: 'Ta račun je že aktiviran.', + autosaving: 'Pri samodejnem shranjevanju tega dokumenta je prišlo do težave.', + correctInvalidFields: 'Prosimo, popravite neveljavna polja.', + deletingFile: 'Pri brisanju datoteke je prišlo do napake.', + deletingTitle: + 'Pri brisanju {{title}} je prišlo do napake. Prosimo, preverite povezavo in poskusite znova.', + emailOrPasswordIncorrect: 'Vnesena e-pošta ali geslo je napačno.', + followingFieldsInvalid_one: 'Naslednje polje je neveljavno:', + followingFieldsInvalid_other: 'Naslednja polja so neveljavna:', + incorrectCollection: 'Napačna zbirka', + invalidFileType: 'Neveljaven tip datoteke', + invalidFileTypeValue: 'Neveljaven tip datoteke: {{value}}', + loadingDocument: 'Pri nalaganju dokumenta z ID-jem {{id}} je prišlo do težave.', + localesNotSaved_one: 'Naslednjega jezika ni bilo mogoče shraniti:', + localesNotSaved_other: 'Naslednjih jezikov ni bilo mogoče shraniti:', + logoutFailed: 'Odjava ni uspela.', + missingEmail: 'Manjka e-pošta.', + missingIDOfDocument: 'Manjka ID dokumenta za posodobitev.', + missingIDOfVersion: 'Manjka ID različice.', + missingRequiredData: 'Manjkajo zahtevani podatki.', + noFilesUploaded: 'Nobena datoteka ni bila naložena.', + noMatchedField: 'Za "{{label}}" ni bilo najdeno ujemajoče se polje', + notAllowedToAccessPage: 'Nimate dovoljenja za dostop do te strani.', + notAllowedToPerformAction: 'Nimate dovoljenja za izvedbo tega dejanja.', + notFound: 'Zahtevani vir ni bil najden.', + noUser: 'Ni uporabnika', + previewing: 'Pri predogledu tega dokumenta je prišlo do težave.', + problemUploadingFile: 'Pri nalaganju datoteke je prišlo do težave.', + tokenInvalidOrExpired: 'Žeton je neveljaven ali je potekel.', + tokenNotProvided: 'Žeton ni bil posredovan.', + unableToDeleteCount: 'Ni bilo mogoče izbrisati {{count}} od {{total}} {{label}}.', + unableToUpdateCount: 'Ni bilo mogoče posodobiti {{count}} od {{total}} {{label}}.', + unauthorized: 'Neavtorizirano, za to zahtevo morate biti prijavljeni.', + unknown: 'Prišlo je do neznane napake.', + unPublishingDocument: 'Pri umiku objave tega dokumenta je prišlo do težave.', + unspecific: 'Prišlo je do napake.', + userEmailAlreadyRegistered: 'Uporabnik s tem e-poštnim naslovom je že registriran.', + userLocked: 'Ta uporabnik je zaklenjen zaradi prevelikega števila neuspešnih poskusov prijave.', + usernameAlreadyRegistered: 'Uporabnik s tem uporabniškim imenom je že registriran.', + usernameOrPasswordIncorrect: 'Vneseno uporabniško ime ali geslo je napačno.', + valueMustBeUnique: 'Vrednost mora biti unikatna', + verificationTokenInvalid: 'Žeton za preverjanje je neveljaven.', + }, + fields: { + addLabel: 'Dodaj {{label}}', + addLink: 'Dodaj povezavo', + addNew: 'Dodaj novo', + addNewLabel: 'Dodaj nov {{label}}', + addRelationship: 'Dodaj povezavo', + addUpload: 'Dodaj nalaganje', + block: 'blok', + blocks: 'bloki', + blockType: 'Tip bloka', + chooseBetweenCustomTextOrDocument: + 'Izberite med vnosom URL-ja po meri ali povezavo na drug dokument.', + chooseDocumentToLink: 'Izberite dokument za povezavo', + chooseFromExisting: 'Izberite iz obstoječih', + chooseLabel: 'Izberite {{label}}', + collapseAll: 'Strni vse', + customURL: 'URL po meri', + editLabelData: 'Uredi podatke {{label}}', + editLink: 'Uredi povezavo', + editRelationship: 'Uredi povezavo', + enterURL: 'Vnesite URL', + internalLink: 'Notranja povezava', + itemsAndMore: '{{items}} in še {{count}}', + labelRelationship: '{{label}} povezava', + latitude: 'Zemljepisna širina', + linkedTo: 'Povezano z <0>{{label}}', + linkType: 'Tip povezave', + longitude: 'Zemljepisna dolžina', + newLabel: 'Nov {{label}}', + openInNewTab: 'Odpri v novem zavihku', + passwordsDoNotMatch: 'Gesli se ne ujemata.', + relatedDocument: 'Povezan dokument', + relationTo: 'Povezava z', + removeRelationship: 'Odstrani povezavo', + removeUpload: 'Odstrani nalaganje', + saveChanges: 'Shrani spremembe', + searchForBlock: 'Išči blok', + selectExistingLabel: 'Izberi obstoječ {{label}}', + selectFieldsToEdit: 'Izberi polja za urejanje', + showAll: 'Pokaži vse', + swapRelationship: 'Zamenjaj povezavo', + swapUpload: 'Zamenjaj nalaganje', + textToDisplay: 'Besedilo za prikaz', + toggleBlock: 'Preklopi blok', + uploadNewLabel: 'Naloži nov {{label}}', + }, + general: { + aboutToDelete: 'Izbrisali boste {{label}} <1>{{title}}. Ste prepričani?', + aboutToDeleteCount_many: 'Izbrisali boste {{count}} {{label}}', + aboutToDeleteCount_one: 'Izbrisali boste {{count}} {{label}}', + aboutToDeleteCount_other: 'Izbrisali boste {{count}} {{label}}', + addBelow: 'Dodaj spodaj', + addFilter: 'Dodaj filter', + adminTheme: 'Tema skrbnika', + and: 'In', + anotherUserTakenOver: 'Drug uporabnik je prevzel urejanje tega dokumenta.', + applyChanges: 'Uporabi spremembe', + ascending: 'Naraščajoče', + automatic: 'Samodejno', + backToDashboard: 'Nazaj na nadzorno ploščo', + cancel: 'Prekliči', + changesNotSaved: + 'Vaše spremembe niso shranjene. Če zapustite zdaj, boste izgubili svoje spremembe.', + clearAll: 'Počisti vse', + close: 'Zapri', + collapse: 'Strni', + collections: 'Zbirke', + columns: 'Stolpci', + columnToSort: 'Stolpec za razvrščanje', + confirm: 'Potrdi', + confirmDeletion: 'Potrdi brisanje', + confirmDuplication: 'Potrdi podvajanje', + copied: 'Kopirano', + copy: 'Kopiraj', + create: 'Ustvari', + created: 'Ustvarjeno', + createdAt: 'Ustvarjeno', + createNew: 'Ustvari novo', + createNewLabel: 'Ustvari nov {{label}}', + creating: 'Ustvarjanje', + creatingNewLabel: 'Ustvarjanje novega {{label}}', + currentlyEditing: + 'trenutno ureja ta dokument. Če prevzamete, jim bo onemogočeno nadaljnje urejanje in lahko izgubijo neshranjene spremembe.', + custom: 'Po meri', + dark: 'Temno', + dashboard: 'Nadzorna plošča', + delete: 'Izbriši', + deletedCountSuccessfully: 'Uspešno izbrisano {{count}} {{label}}.', + deletedSuccessfully: 'Uspešno izbrisano.', + deleting: 'Brisanje...', + depth: 'Globina', + descending: 'Padajoče', + deselectAllRows: 'Odznači vse vrstice', + document: 'Dokument', + documentLocked: 'Dokument zaklenjen', + documents: 'Dokumenti', + duplicate: 'Podvoji', + duplicateWithoutSaving: 'Podvoji brez shranjevanja sprememb', + edit: 'Uredi', + editedSince: 'Urejeno od', + editing: 'Urejanje', + editingLabel_many: 'Urejanje {{count}} {{label}}', + editingLabel_one: 'Urejanje {{count}} {{label}}', + editingLabel_other: 'Urejanje {{count}} {{label}}', + editingTakenOver: 'Urejanje prevzeto', + editLabel: 'Uredi {{label}}', + email: 'E-pošta', + emailAddress: 'E-poštni naslov', + enterAValue: 'Vnesite vrednost', + error: 'Napaka', + errors: 'Napake', + fallbackToDefaultLocale: 'Uporabi privzeti jezik', + false: 'Ne', + filter: 'Filter', + filters: 'Filtri', + filterWhere: 'Filtriraj {{label}} kjer', + globals: 'Globalne nastavitve', + goBack: 'Nazaj', + isEditing: 'ureja', + language: 'Jezik', + lastModified: 'Zadnja sprememba', + leaveAnyway: 'Vseeno zapusti', + leaveWithoutSaving: 'Zapusti brez shranjevanja', + light: 'Svetlo', + livePreview: 'Predogled', + loading: 'Nalaganje', + locale: 'Jezik', + locales: 'Jeziki', + menu: 'Meni', + moveDown: 'Premakni dol', + moveUp: 'Premakni gor', + newPassword: 'Novo geslo', + next: 'Naprej', + noFiltersSet: 'Ni nastavljenih filtrov', + noLabel: '', + none: 'Brez', + noOptions: 'Ni možnosti', + noResults: + 'Ni najdenih {{label}}. Ali {{label}} še ne obstajajo ali pa ne ustrezajo filtrom, ki ste jih določili zgoraj.', + notFound: 'Ni najdeno', + nothingFound: 'Nič ni najdeno', + noValue: 'Ni vrednosti', + of: 'od', + only: 'Samo', + open: 'Odpri', + or: 'Ali', + order: 'Vrstni red', + pageNotFound: 'Stran ni najdena', + password: 'Geslo', + payloadSettings: 'Nastavitve Payloada', + perPage: 'Na stran: {{limit}}', + previous: 'Prejšnji', + remove: 'Odstrani', + reset: 'Ponastavi', + row: 'Vrstica', + rows: 'Vrstice', + save: 'Shrani', + saving: 'Shranjevanje...', + searchBy: 'Išči po {{label}}', + selectAll: 'Izberi vse {{count}} {{label}}', + selectAllRows: 'Izberi vse vrstice', + selectedCount: '{{count}} {{label}} izbranih', + selectValue: 'Izberi vrednost', + showAllLabel: 'Pokaži vse {{label}}', + sorryNotFound: 'Oprostite - ničesar ni mogoče najti, kar bi ustrezalo vaši zahtevi.', + sort: 'Razvrsti', + sortByLabelDirection: 'Razvrsti po {{label}} {{direction}}', + stayOnThisPage: 'Ostani na tej strani', + submissionSuccessful: 'Oddaja uspešna.', + submit: 'Oddaj', + submitting: 'Oddajanje...', + success: 'Uspeh', + successfullyCreated: '{{label}} uspešno ustvarjen.', + successfullyDuplicated: '{{label}} uspešno podvojen.', + takeOver: 'Prevzemi', + thisLanguage: 'Slovenščina', + titleDeleted: '{{label}} "{{title}}" uspešno izbrisan.', + true: 'Da', + unauthorized: 'Nepooblaščeno', + unsavedChangesDuplicate: 'Imate neshranjene spremembe. Želite nadaljevati s podvajanjem?', + untitled: 'Brez naslova', + updatedAt: 'Posodobljeno', + updatedCountSuccessfully: 'Uspešno posodobljeno {{count}} {{label}}.', + updatedSuccessfully: 'Uspešno posodobljeno.', + updating: 'Posodabljanje', + uploading: 'Nalaganje', + user: 'Uporabnik', + username: 'Uporabniško ime', + users: 'Uporabniki', + value: 'Vrednost', + viewReadOnly: 'Ogled samo za branje', + welcome: 'Dobrodošli', + }, + operators: { + contains: 'vsebuje', + equals: 'je enako', + exists: 'obstaja', + intersects: 'se seka', + isGreaterThan: 'je večje od', + isGreaterThanOrEqualTo: 'je večje ali enako', + isIn: 'je v', + isLessThan: 'je manjše od', + isLessThanOrEqualTo: 'je manjše ali enako', + isLike: 'je podobno', + isNotEqualTo: 'ni enako', + isNotIn: 'ni v', + near: 'blizu', + within: 'znotraj', + }, + upload: { + addFile: 'Dodaj datoteko', + addFiles: 'Dodaj datoteke', + bulkUpload: 'Množično nalaganje', + crop: 'Obreži', + cropToolDescription: + 'Povlecite kote izbranega območja, narišite novo območje ali prilagodite vrednosti spodaj.', + dragAndDrop: 'Povlecite in spustite datoteko', + dragAndDropHere: 'ali povlecite in spustite datoteko sem', + editImage: 'Uredi sliko', + fileName: 'Ime datoteke', + fileSize: 'Velikost datoteke', + filesToUpload: 'Datoteke za nalaganje', + fileToUpload: 'Datoteka za nalaganje', + focalPoint: 'Žarišče', + focalPointDescription: + 'Povlecite žarišče neposredno na predogledu ali prilagodite vrednosti spodaj.', + height: 'Višina', + lessInfo: 'Manj informacij', + moreInfo: 'Več informacij', + pasteURL: 'Prilepi URL', + previewSizes: 'Velikosti predogleda', + selectCollectionToBrowse: 'Izberite zbirko za brskanje', + selectFile: 'Izberite datoteko', + setCropArea: 'Nastavi območje obrezovanja', + setFocalPoint: 'Nastavi žarišče', + sizes: 'Velikosti', + sizesFor: 'Velikosti za {{label}}', + width: 'Širina', + }, + validation: { + emailAddress: 'Vnesite veljaven e-poštni naslov.', + enterNumber: 'Vnesite veljavno številko.', + fieldHasNo: 'To polje nima {{label}}', + greaterThanMax: '{{value}} je večje od največje dovoljene {{label}} {{max}}.', + invalidInput: 'To polje ima neveljaven vnos.', + invalidSelection: 'To polje ima neveljavno izbiro.', + invalidSelections: 'To polje ima naslednje neveljavne izbire:', + lessThanMin: '{{value}} je manjše od najmanjše dovoljene {{label}} {{min}}.', + limitReached: 'Dosežena omejitev, dodati je mogoče samo {{max}} elementov.', + longerThanMin: 'Ta vrednost mora biti daljša od najmanjše dolžine {{minLength}} znakov.', + notValidDate: '"{{value}}" ni veljaven datum.', + required: 'To polje je obvezno.', + requiresAtLeast: 'To polje zahteva vsaj {{count}} {{label}}.', + requiresNoMoreThan: 'To polje zahteva največ {{count}} {{label}}.', + requiresTwoNumbers: 'To polje zahteva dve številki.', + shorterThanMax: 'Ta vrednost mora biti krajša od največje dolžine {{maxLength}} znakov.', + trueOrFalse: 'To polje je lahko samo enako true ali false.', + username: + 'Vnesite veljavno uporabniško ime. Lahko vsebuje črke, številke, vezaje, pike in podčrtaje.', + validUploadID: 'To polje ni veljaven ID nalaganja.', + }, + version: { + type: 'Tip', + aboutToPublishSelection: 'Objavili boste vse {{label}} v izboru. Ste prepričani?', + aboutToRestore: + 'Ta {{label}} dokument boste obnovili v stanje, v katerem je bil {{versionDate}}.', + aboutToRestoreGlobal: + 'Globalni {{label}} boste obnovili v stanje, v katerem je bil {{versionDate}}.', + aboutToRevertToPublished: + 'Spremembe tega dokumenta boste povrnili v objavljeno stanje. Ste prepričani?', + aboutToUnpublish: 'Ta dokument boste umaknili iz objave. Ste prepričani?', + aboutToUnpublishSelection: 'Umaknili boste iz objave vse {{label}} v izboru. Ste prepričani?', + autosave: 'Samodejno shranjevanje', + autosavedSuccessfully: 'Samodejno shranjeno uspešno.', + autosavedVersion: 'Samodejno shranjena različica', + changed: 'Spremenjeno', + compareVersion: 'Primerjaj različico z:', + confirmPublish: 'Potrdi objavo', + confirmRevertToSaved: 'Potrdi vrnitev na shranjeno', + confirmUnpublish: 'Potrdi umik objave', + confirmVersionRestoration: 'Potrdi obnovitev različice', + currentDocumentStatus: 'Trenutni {{docStatus}} dokument', + currentDraft: 'Trenutni osnutek', + currentPublishedVersion: 'Trenutna objavljena različica', + draft: 'Osnutek', + draftSavedSuccessfully: 'Osnutek uspešno shranjen.', + lastSavedAgo: 'Nazadnje shranjeno pred {{distance}}', + noFurtherVersionsFound: 'Ni najdenih nadaljnjih različic', + noRowsFound: 'Ni najdenih {{label}}', + noRowsSelected: 'Ni izbranih {{label}}', + preview: 'Predogled', + previouslyPublished: 'Predhodno objavljeno', + problemRestoringVersion: 'Pri obnavljanju te različice je prišlo do težave', + publish: 'Objavi', + publishChanges: 'Objavi spremembe', + published: 'Objavljeno', + publishIn: 'Objavi v {{locale}}', + publishing: 'Objavljanje', + restoreAsDraft: 'Obnovi kot osnutek', + restoredSuccessfully: 'Uspešno obnovljeno.', + restoreThisVersion: 'Obnovi to različico', + restoring: 'Obnavljanje...', + reverting: 'Razveljavljanje...', + revertToPublished: 'Vrni na objavljeno', + saveDraft: 'Shrani osnutek', + selectLocales: 'Izberite jezike za prikaz', + selectVersionToCompare: 'Izberite različico za primerjavo', + showingVersionsFor: 'Prikaz različic za:', + showLocales: 'Prikaži jezike:', + status: 'Status', + unpublish: 'Razveljavi objavo', + unpublishing: 'Razveljavljanje objave...', + version: 'Različica', + versionCount_many: 'Najdenih {{count}} različic', + versionCount_none: 'Ni najdenih različic', + versionCount_one: 'Najdena {{count}} različica', + versionCount_other: 'Najdene {{count}} različice', + versionCreatedOn: '{{version}} ustvarjena:', + versionID: 'ID različice', + versions: 'Različice', + viewingVersion: 'Ogled različice za {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Ogled različice za globalni {{entityLabel}}', + viewingVersions: 'Ogled različic za {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Ogled različic za globalni {{entityLabel}}', + }, +} + +export const sl: Language = { + dateFNSKey: 'sl-SI', + translations: slTranslations, +} diff --git a/packages/translations/src/types.ts b/packages/translations/src/types.ts index 07fa24cf7b..bb86375c47 100644 --- a/packages/translations/src/types.ts +++ b/packages/translations/src/types.ts @@ -28,6 +28,7 @@ type DateFNSKeys = | 'ro' | 'ru' | 'sk' + | 'sl-SI' | 'sv' | 'th' | 'tr' From f8bae0e7b0711bb0f057f39630293ce11834c01c Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Wed, 9 Oct 2024 22:09:31 -0400 Subject: [PATCH 019/110] ci: remove payload as valid scope, payload is implied if no scope --- .github/workflows/pr-title.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr-title.yml b/.github/workflows/pr-title.yml index 30efc4bd54..991881ce2f 100644 --- a/.github/workflows/pr-title.yml +++ b/.github/workflows/pr-title.yml @@ -47,7 +47,6 @@ jobs: live-preview live-preview-react next - payload plugin-cloud plugin-cloud-storage plugin-form-builder From 5e94d9b1ca25ab762e71ee1de5db649e99c35cc5 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Wed, 9 Oct 2024 23:36:18 -0400 Subject: [PATCH 020/110] fix: corrects useAuth generics (#8627) Corrects AuthContext and useAuth generics due to regression in https://github.com/payloadcms/payload/pull/8600 --- packages/ui/src/providers/Auth/index.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/ui/src/providers/Auth/index.tsx b/packages/ui/src/providers/Auth/index.tsx index 7107caf488..8b2eca0450 100644 --- a/packages/ui/src/providers/Auth/index.tsx +++ b/packages/ui/src/providers/Auth/index.tsx @@ -14,9 +14,7 @@ import { requests } from '../../utilities/api.js' import { formatAdminURL } from '../../utilities/formatAdminURL.js' import { useConfig } from '../Config/index.js' -export type UserResponse = MeOperationResult | null - -export type AuthContext = { +export type AuthContext = { fetchFullUser: () => Promise logOut: () => Promise permissions?: Permissions @@ -24,11 +22,11 @@ export type AuthContext = { refreshCookieAsync: () => Promise refreshPermissions: () => Promise setPermissions: (permissions: Permissions) => void - setUser: (user: UserResponse) => void + setUser: (user: MeOperationResult | null) => void strategy?: string token?: string tokenExpiration?: number - user?: null | UserResponse['user'] + user?: null | T } const Context = createContext({} as AuthContext) @@ -99,7 +97,7 @@ export function AuthProvider({ }, []) const setNewUser = useCallback( - (userResponse: UserResponse) => { + (userResponse: MeOperationResult | null) => { if (userResponse?.user) { setUserInMemory(userResponse.user) setTokenInMemory(userResponse.token) @@ -325,4 +323,4 @@ export function AuthProvider({ ) } -export const useAuth = (): AuthContext => useContext(Context) +export const useAuth = (): AuthContext => useContext(Context) as AuthContext From a70b193527214fec242dfdd02ad84bd114bfeccc Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Thu, 10 Oct 2024 08:47:15 -0400 Subject: [PATCH 021/110] chore: improve setUser type, uses generic from useAuth (#8636) Create specific type for setUser in auth provider that uses the generic. --- .../src/views/CreateFirstUser/index.client.tsx | 11 +++-------- packages/next/src/views/Login/LoginForm/index.tsx | 5 +++-- packages/ui/src/exports/client/index.ts | 1 + packages/ui/src/providers/Auth/index.tsx | 14 ++++++++++---- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/next/src/views/CreateFirstUser/index.client.tsx b/packages/next/src/views/CreateFirstUser/index.client.tsx index 037431e989..078b1133bf 100644 --- a/packages/next/src/views/CreateFirstUser/index.client.tsx +++ b/packages/next/src/views/CreateFirstUser/index.client.tsx @@ -1,15 +1,10 @@ 'use client' -import type { - ClientCollectionConfig, - FormState, - LoginWithUsernameOptions, - MeOperationResult, -} from 'payload' +import type { FormProps, UserWithToken } from '@payloadcms/ui' +import type { ClientCollectionConfig, FormState, LoginWithUsernameOptions } from 'payload' import { ConfirmPasswordField, Form, - type FormProps, FormSubmit, PasswordField, RenderFields, @@ -57,7 +52,7 @@ export const CreateFirstUserClient: React.FC<{ [apiRoute, userSlug, serverURL], ) - const handleFirstRegister = (data: MeOperationResult) => { + const handleFirstRegister = (data: UserWithToken) => { setUser(data) } diff --git a/packages/next/src/views/Login/LoginForm/index.tsx b/packages/next/src/views/Login/LoginForm/index.tsx index f3ef1edeb8..ba049ec8fb 100644 --- a/packages/next/src/views/Login/LoginForm/index.tsx +++ b/packages/next/src/views/Login/LoginForm/index.tsx @@ -6,7 +6,8 @@ import React from 'react' const baseClass = 'login__form' const Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default -import type { ClientUser, FormState, MeOperationResult } from 'payload' +import type { UserWithToken } from '@payloadcms/ui' +import type { FormState } from 'payload' import { Form, FormSubmit, PasswordField, useAuth, useConfig, useTranslation } from '@payloadcms/ui' import { formatAdminURL } from '@payloadcms/ui/shared' @@ -74,7 +75,7 @@ export const LoginForm: React.FC<{ } } - const handleLogin = (data: MeOperationResult) => { + const handleLogin = (data: UserWithToken) => { setUser(data) } diff --git a/packages/ui/src/exports/client/index.ts b/packages/ui/src/exports/client/index.ts index 2ccf66b92c..d62666514f 100644 --- a/packages/ui/src/exports/client/index.ts +++ b/packages/ui/src/exports/client/index.ts @@ -192,6 +192,7 @@ export { XIcon } from '../../icons/X/index.js' // providers export { ActionsProvider, SetViewActions, useActions } from '../../providers/Actions/index.js' export { AuthProvider, useAuth } from '../../providers/Auth/index.js' +export type { UserWithToken } from '../../providers/Auth/index.js' export { ClientFunctionProvider, useClientFunctions } from '../../providers/ClientFunction/index.js' export { useAddClientFunction } from '../../providers/ClientFunction/index.js' export { RenderComponent } from '../../providers/Config/RenderComponent.js' diff --git a/packages/ui/src/providers/Auth/index.tsx b/packages/ui/src/providers/Auth/index.tsx index 8b2eca0450..eb8401d647 100644 --- a/packages/ui/src/providers/Auth/index.tsx +++ b/packages/ui/src/providers/Auth/index.tsx @@ -1,5 +1,5 @@ 'use client' -import type { ClientUser, MeOperationResult, Permissions, User } from 'payload' +import type { ClientUser, Permissions, User } from 'payload' import { useModal } from '@faceless-ui/modal' import { usePathname, useRouter } from 'next/navigation.js' @@ -14,6 +14,12 @@ import { requests } from '../../utilities/api.js' import { formatAdminURL } from '../../utilities/formatAdminURL.js' import { useConfig } from '../Config/index.js' +export type UserWithToken = { + exp: number + token: string + user: T +} + export type AuthContext = { fetchFullUser: () => Promise logOut: () => Promise @@ -22,7 +28,7 @@ export type AuthContext = { refreshCookieAsync: () => Promise refreshPermissions: () => Promise setPermissions: (permissions: Permissions) => void - setUser: (user: MeOperationResult | null) => void + setUser: (user: null | UserWithToken) => void strategy?: string token?: string tokenExpiration?: number @@ -97,7 +103,7 @@ export function AuthProvider({ }, []) const setNewUser = useCallback( - (userResponse: MeOperationResult | null) => { + (userResponse: null | UserWithToken) => { if (userResponse?.user) { setUserInMemory(userResponse.user) setTokenInMemory(userResponse.token) @@ -240,7 +246,7 @@ export function AuthProvider({ }) if (request.status === 200) { - const json: MeOperationResult = await request.json() + const json: UserWithToken = await request.json() const user = null setNewUser(json) From a3bf938862f54f858458c538596d3fa199da7936 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:10:11 +0300 Subject: [PATCH 022/110] chore: do not use withSentryConfig for dev/e2e next config if not needed (#8629) This fixes this error when executing particular e2e test with playwright extension image --- instrumentation.ts | 2 +- next.config.mjs | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/instrumentation.ts b/instrumentation.ts index 41a4d932dc..bfbc305514 100644 --- a/instrumentation.ts +++ b/instrumentation.ts @@ -1,5 +1,5 @@ export async function register() { - if (process.env.NEXT_RUNTIME === 'nodejs') { + if (process.env.NEXT_RUNTIME === 'nodejs' && process.env.NEXT_PUBLIC_SENTRY_DSN) { await import('./sentry.server.config.js') } } diff --git a/next.config.mjs b/next.config.mjs index fcaddd3b38..3d865ff7f5 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -42,12 +42,21 @@ const config = withBundleAnalyzer( '.mjs': ['.mts', '.mjs'], } + // Ignore sentry warnings when not wrapped with withSentryConfig + webpackConfig.ignoreWarnings = [ + ...(webpackConfig.ignoreWarnings ?? []), + { file: /esm\/platform\/node\/instrumentation.js/ }, + { module: /esm\/platform\/node\/instrumentation.js/ }, + ] + return webpackConfig }, }), ) -export default withSentryConfig(config, { - telemetry: false, - tunnelRoute: '/monitoring-tunnel', -}) +export default process.env.NEXT_PUBLIC_SENTRY_DSN + ? withSentryConfig(config, { + telemetry: false, + tunnelRoute: '/monitoring-tunnel', + }) + : config From 1dcae37e586abaf12c46ce17855a938dedb831d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Jablo=C3=B1ski?= <43938777+GermanJablo@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:50:32 -0300 Subject: [PATCH 023/110] chore: add instructions to run the examples to the readme (#8623) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 308cbb768a..6877a87917 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,10 @@ If you want to add contributions to this repository, please follow the instructi The [Examples Directory](./examples) is a great resource for learning how to setup Payload in a variety of different ways, but you can also find great examples in our blog and throughout our social media. +If you'd like to run the examples, you can either copy them to a folder outside this repo or run them directly by (1) navigating to the example's subfolder (`cd examples/your-example-folder`) and (2) using the `--ignore-workspace` flag to bypass workspace restrictions (e.g., `pnpm --ignore-workspace install` or `pnpm --ignore-workspace dev`). + +You can see more examples at: + - [Examples Directory](./examples) - [Payload Blog](https://payloadcms.com/blog) - [Payload YouTube](https://www.youtube.com/@payloadcms) From f6acfdb1f5182700ea1511caea8067f98de4e451 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 10 Oct 2024 19:58:30 +0300 Subject: [PATCH 024/110] fix(drizzle): hasMany joins - localized, limit and schema paths (#8633) Fixes https://github.com/payloadcms/payload/issues/8630 - Fixes `hasMany: true` and `localized: true` on the foreign field - Adds `limit` to the subquery instead of hardcoded `11`. - Adds the schema path `field.on` to the subquery, without this having 2 or more relationship fields to the same collection breaks joins - Properly checks if the field is `hasMany` --- packages/drizzle/src/find/traverseFields.ts | 28 ++++-- .../src/transform/read/traverseFields.ts | 4 +- .../src/fields/config/sanitizeJoinField.ts | 2 + packages/payload/src/fields/config/types.ts | 4 + test/joins/collections/Categories.ts | 6 ++ test/joins/collections/Posts.ts | 7 ++ test/joins/int.spec.ts | 89 ++++++++++++++++++- test/joins/payload-types.ts | 5 ++ 8 files changed, 132 insertions(+), 13 deletions(-) diff --git a/packages/drizzle/src/find/traverseFields.ts b/packages/drizzle/src/find/traverseFields.ts index e4b4f9506f..9c092a439b 100644 --- a/packages/drizzle/src/find/traverseFields.ts +++ b/packages/drizzle/src/find/traverseFields.ts @@ -1,7 +1,8 @@ +import type { DBQueryConfig } from 'drizzle-orm' import type { LibSQLDatabase } from 'drizzle-orm/libsql' import type { Field, JoinQuery } from 'payload' -import { and, type DBQueryConfig, eq, sql } from 'drizzle-orm' +import { and, eq, sql } from 'drizzle-orm' import { fieldAffectsData, fieldIsVirtual, tabHasName } from 'payload/shared' import toSnakeCase from 'to-snake-case' @@ -245,12 +246,15 @@ export const traverseFields = ({ const fields = adapter.payload.collections[field.collection].config.fields const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection)) - const joinTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${ + let joinTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${ field.localized && adapter.payload.config.localization ? adapter.localesSuffix : '' }` - if (!adapter.tables[joinTableName][field.on]) { + if (field.hasMany) { const db = adapter.drizzle as LibSQLDatabase + if (field.localized) { + joinTableName = adapter.tableNameMap.get(toSnakeCase(field.collection)) + } const joinTable = `${joinTableName}${adapter.relationshipsSuffix}` const joins: BuildQueryJoinAliases = [ @@ -262,6 +266,7 @@ export const traverseFields = ({ sql.raw(`"${joinTable}"."${topLevelTableName}_id"`), adapter.tables[currentTableName].id, ), + eq(adapter.tables[joinTable].path, field.on), ), table: adapter.tables[joinTable], }, @@ -291,30 +296,35 @@ export const traverseFields = ({ query: db .select({ id: adapter.tables[joinTableName].id, + ...(field.localized && { + locale: adapter.tables[joinTable].locale, + }), }) .from(adapter.tables[joinTableName]) .where(subQueryWhere) .orderBy(orderBy.order(orderBy.column)) - .limit(11), + .limit(limit), }) const columnName = `${path.replaceAll('.', '_')}${field.name}` - const extras = field.localized ? _locales.extras : currentArgs.extras + const jsonObjectSelect = field.localized + ? sql.raw(`'_parentID', "id", '_locale', "locale"`) + : sql.raw(`'id', "id"`) if (adapter.name === 'sqlite') { - extras[columnName] = sql` + currentArgs.extras[columnName] = sql` COALESCE(( - SELECT json_group_array("id") + SELECT json_group_array(json_object(${jsonObjectSelect})) FROM ( ${subQuery} ) AS ${sql.raw(`${columnName}_sub`)} ), '[]') `.as(columnName) } else { - extras[columnName] = sql` + currentArgs.extras[columnName] = sql` COALESCE(( - SELECT json_agg("id") + SELECT json_agg(json_build_object(${jsonObjectSelect})) FROM ( ${subQuery} ) AS ${sql.raw(`${columnName}_sub`)} diff --git a/packages/drizzle/src/transform/read/traverseFields.ts b/packages/drizzle/src/transform/read/traverseFields.ts index b680e6e73b..864eeb82cc 100644 --- a/packages/drizzle/src/transform/read/traverseFields.ts +++ b/packages/drizzle/src/transform/read/traverseFields.ts @@ -452,8 +452,8 @@ export const traverseFields = >({ } else { const hasNextPage = limit !== 0 && fieldData.length > limit fieldResult = { - docs: (hasNextPage ? fieldData.slice(0, limit) : fieldData).map((objOrID) => ({ - id: typeof objOrID === 'object' ? objOrID.id : objOrID, + docs: (hasNextPage ? fieldData.slice(0, limit) : fieldData).map(({ id }) => ({ + id, })), hasNextPage, } diff --git a/packages/payload/src/fields/config/sanitizeJoinField.ts b/packages/payload/src/fields/config/sanitizeJoinField.ts index 9da7bc372b..e3cce422f3 100644 --- a/packages/payload/src/fields/config/sanitizeJoinField.ts +++ b/packages/payload/src/fields/config/sanitizeJoinField.ts @@ -82,6 +82,8 @@ export const sanitizeJoinField = ({ // override the join field localized property to use whatever the relationship field has field.localized = joinRelationship.localized + // override the join field hasMany property to use whatever the relationship field has + field.hasMany = joinRelationship.hasMany if (!joins[field.collection]) { joins[field.collection] = [join] diff --git a/packages/payload/src/fields/config/types.ts b/packages/payload/src/fields/config/types.ts index 3a964a8ede..96e8634cf6 100644 --- a/packages/payload/src/fields/config/types.ts +++ b/packages/payload/src/fields/config/types.ts @@ -1452,6 +1452,10 @@ export type JoinField = { */ collection: CollectionSlug defaultValue?: never + /** + * This does not need to be set and will be overridden by the relationship field's hasMany property. + */ + hasMany?: boolean hidden?: false index?: never /** diff --git a/test/joins/collections/Categories.ts b/test/joins/collections/Categories.ts index 5780405ef2..22bf851106 100644 --- a/test/joins/collections/Categories.ts +++ b/test/joins/collections/Categories.ts @@ -55,6 +55,12 @@ export const Categories: CollectionConfig = { collection: postsSlug, on: 'categories', }, + { + name: 'hasManyPostsLocalized', + type: 'join', + collection: postsSlug, + on: 'categoriesLocalized', + }, { name: 'group', type: 'group', diff --git a/test/joins/collections/Posts.ts b/test/joins/collections/Posts.ts index edfaf546e0..2da610a06a 100644 --- a/test/joins/collections/Posts.ts +++ b/test/joins/collections/Posts.ts @@ -29,6 +29,13 @@ export const Posts: CollectionConfig = { relationTo: categoriesSlug, hasMany: true, }, + { + name: 'categoriesLocalized', + type: 'relationship', + relationTo: categoriesSlug, + hasMany: true, + localized: true, + }, { name: 'group', type: 'group', diff --git a/test/joins/int.spec.ts b/test/joins/int.spec.ts index ade2ec6a06..e5b0857f72 100644 --- a/test/joins/int.spec.ts +++ b/test/joins/int.spec.ts @@ -5,7 +5,7 @@ import { getFileByPath } from 'payload' import { fileURLToPath } from 'url' import type { NextRESTClient } from '../helpers/NextRESTClient.js' -import type { Category, Post } from './payload-types.js' +import type { Category, Config, Post } from './payload-types.js' import { devUser } from '../credentials.js' import { idToString } from '../helpers/idToString.js' @@ -80,6 +80,7 @@ describe('Joins Field', () => { category: category.id, upload: uploadedImage, categories, + categoriesLocalized: categories, group: { category: category.id, camelCaseCategory: category.id, @@ -212,6 +213,89 @@ describe('Joins Field', () => { expect(otherCategoryWithPosts.hasManyPosts.docs[0].title).toBe('test 14') }) + it('should populate joins using find with hasMany localized relationships', async () => { + const post_1 = await createPost( + { + title: `test es localized 1`, + categoriesLocalized: [category.id], + group: { + category: category.id, + camelCaseCategory: category.id, + }, + }, + 'es', + ) + + const post_2 = await createPost( + { + title: `test es localized 2`, + categoriesLocalized: [otherCategory.id], + group: { + category: category.id, + camelCaseCategory: category.id, + }, + }, + 'es', + ) + + const resultEn = await payload.find({ + collection: 'categories', + where: { + id: { equals: category.id }, + }, + }) + const otherResultEn = await payload.find({ + collection: 'categories', + where: { + id: { equals: otherCategory.id }, + }, + }) + + const [categoryWithPostsEn] = resultEn.docs + const [otherCategoryWithPostsEn] = otherResultEn.docs + + expect(categoryWithPostsEn.hasManyPostsLocalized.docs).toHaveLength(10) + expect(categoryWithPostsEn.hasManyPostsLocalized.docs[0]).toHaveProperty('title') + expect(categoryWithPostsEn.hasManyPostsLocalized.docs[0].title).toBe('test 14') + expect(otherCategoryWithPostsEn.hasManyPostsLocalized.docs).toHaveLength(8) + expect(otherCategoryWithPostsEn.hasManyPostsLocalized.docs[0]).toHaveProperty('title') + expect(otherCategoryWithPostsEn.hasManyPostsLocalized.docs[0].title).toBe('test 14') + + const resultEs = await payload.find({ + collection: 'categories', + locale: 'es', + where: { + id: { equals: category.id }, + }, + }) + const otherResultEs = await payload.find({ + collection: 'categories', + locale: 'es', + where: { + id: { equals: otherCategory.id }, + }, + }) + + const [categoryWithPostsEs] = resultEs.docs + const [otherCategoryWithPostsEs] = otherResultEs.docs + + expect(categoryWithPostsEs.hasManyPostsLocalized.docs).toHaveLength(1) + expect(categoryWithPostsEs.hasManyPostsLocalized.docs[0].title).toBe('test es localized 1') + + expect(otherCategoryWithPostsEs.hasManyPostsLocalized.docs).toHaveLength(1) + expect(otherCategoryWithPostsEs.hasManyPostsLocalized.docs[0].title).toBe('test es localized 2') + + // clean up + await payload.delete({ + collection: 'posts', + where: { + id: { + in: [post_1.id, post_2.id], + }, + }, + }) + }) + it('should not error when deleting documents with joins', async () => { const category = await payload.create({ collection: 'categories', @@ -499,9 +583,10 @@ describe('Joins Field', () => { }) }) -async function createPost(overrides?: Partial) { +async function createPost(overrides?: Partial, locale?: Config['locale']) { return payload.create({ collection: 'posts', + locale, data: { title: 'test', ...overrides, diff --git a/test/joins/payload-types.ts b/test/joins/payload-types.ts index ae89d82ef8..6fb3e55ba2 100644 --- a/test/joins/payload-types.ts +++ b/test/joins/payload-types.ts @@ -58,6 +58,7 @@ export interface Post { upload?: (string | null) | Upload; category?: (string | null) | Category; categories?: (string | Category)[] | null; + categoriesLocalized?: (string | Category)[] | null; group?: { category?: (string | null) | Category; camelCaseCategory?: (string | null) | Category; @@ -102,6 +103,10 @@ export interface Category { docs?: (string | Post)[] | null; hasNextPage?: boolean | null; } | null; + hasManyPostsLocalized?: { + docs?: (string | Post)[] | null; + hasNextPage?: boolean | null; + } | null; group?: { relatedPosts?: { docs?: (string | Post)[] | null; From fdebc84d4f9ba0444962fc1730cbfa3f69d66d9f Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 10 Oct 2024 20:11:44 +0300 Subject: [PATCH 025/110] fix: sanitize virtual fields in `admin.useAsTitle` (#8620) Fixes https://github.com/payloadcms/payload/issues/8525. Disallows to set `admin.useAsTitle` with a virtual field. Updates docs / jsdoc accordingly --- docs/admin/collections.mdx | 32 +++++++++---------- .../src/collections/config/useAsTitle.ts | 7 +++- packages/payload/src/fields/config/types.ts | 1 + 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/docs/admin/collections.mdx b/docs/admin/collections.mdx index f4d183c7ca..9675b53bfa 100644 --- a/docs/admin/collections.mdx +++ b/docs/admin/collections.mdx @@ -25,23 +25,23 @@ export const MyCollection: CollectionConfig = { The following options are available: -| Option | Description | -| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`group`** | Text used as a label for grouping Collection and Global links together in the navigation. | -| **`hidden`** | Set to true or a function, called with the current user, returning true to exclude this Collection from navigation and admin routing. | -| **`hooks`** | Admin-specific hooks for this Collection. [More details](../hooks/collections). | -| **`useAsTitle`** | Specify a top-level field to use for a document title throughout the Admin Panel. If no field is defined, the ID of the document is used as the title. | +| Option | Description | +| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`group`** | Text used as a label for grouping Collection and Global links together in the navigation. | +| **`hidden`** | Set to true or a function, called with the current user, returning true to exclude this Collection from navigation and admin routing. | +| **`hooks`** | Admin-specific hooks for this Collection. [More details](../hooks/collections). | +| **`useAsTitle`** | Specify a top-level field to use for a document title throughout the Admin Panel. If no field is defined, the ID of the document is used as the title. A field with `virtual: true` cannot be used as the title. | | **`description`** | Text to display below the Collection label in the List View to give editors more information. Alternatively, you can use the `admin.components.Description` to render a React component. [More details](#components). | -| **`defaultColumns`** | Array of field names that correspond to which columns to show by default in this Collection's List View. | -| **`hideAPIURL`** | Hides the "API URL" meta field while editing documents within this Collection. | -| **`enableRichTextLink`** | The [Rich Text](../fields/rich-text) field features a `Link` element which allows for users to automatically reference related documents within their rich text. Set to `true` by default. | -| **`enableRichTextRelationship`** | The [Rich Text](../fields/rich-text) field features a `Relationship` element which allows for users to automatically reference related documents within their rich text. Set to `true` by default. | -| **`meta`** | Page metadata overrides to apply to this Collection within the Admin Panel. [More details](./metadata). | -| **`preview`** | Function to generate preview URLs within the Admin Panel that can point to your app. [More details](#preview). | -| **`livePreview`** | Enable real-time editing for instant visual feedback of your front-end application. [More details](../live-preview/overview). | -| **`components`** | Swap in your own React components to be used within this Collection. [More details](#components). | -| **`listSearchableFields`** | Specify which fields should be searched in the List search view. [More details](#list-searchable-fields). | -| **`pagination`** | Set pagination-specific options for this Collection. [More details](#pagination). | +| **`defaultColumns`** | Array of field names that correspond to which columns to show by default in this Collection's List View. | +| **`hideAPIURL`** | Hides the "API URL" meta field while editing documents within this Collection. | +| **`enableRichTextLink`** | The [Rich Text](../fields/rich-text) field features a `Link` element which allows for users to automatically reference related documents within their rich text. Set to `true` by default. | +| **`enableRichTextRelationship`** | The [Rich Text](../fields/rich-text) field features a `Relationship` element which allows for users to automatically reference related documents within their rich text. Set to `true` by default. | +| **`meta`** | Page metadata overrides to apply to this Collection within the Admin Panel. [More details](./metadata). | +| **`preview`** | Function to generate preview URLs within the Admin Panel that can point to your app. [More details](#preview). | +| **`livePreview`** | Enable real-time editing for instant visual feedback of your front-end application. [More details](../live-preview/overview). | +| **`components`** | Swap in your own React components to be used within this Collection. [More details](#components). | +| **`listSearchableFields`** | Specify which fields should be searched in the List search view. [More details](#list-searchable-fields). | +| **`pagination`** | Set pagination-specific options for this Collection. [More details](#pagination). | ### Components diff --git a/packages/payload/src/collections/config/useAsTitle.ts b/packages/payload/src/collections/config/useAsTitle.ts index f182b311cf..b25ffc8a84 100644 --- a/packages/payload/src/collections/config/useAsTitle.ts +++ b/packages/payload/src/collections/config/useAsTitle.ts @@ -1,7 +1,7 @@ import type { CollectionConfig } from '../../index.js' import { InvalidConfiguration } from '../../errors/InvalidConfiguration.js' -import { fieldAffectsData } from '../../fields/config/types.js' +import { fieldAffectsData, fieldIsVirtual } from '../../fields/config/types.js' import flattenFields from '../../utilities/flattenTopLevelFields.js' /** @@ -33,6 +33,11 @@ export const validateUseAsTitle = (config: CollectionConfig) => { } } } else { + if (useAsTitleField && fieldIsVirtual(useAsTitleField)) { + throw new InvalidConfiguration( + `The field "${config.admin.useAsTitle}" specified in "admin.useAsTitle" in the collection "${config.slug}" is virtual. A virtual field cannot be used as the title.`, + ) + } if (!useAsTitleField) { throw new InvalidConfiguration( `The field "${config.admin.useAsTitle}" specified in "admin.useAsTitle" does not exist in the collection "${config.slug}"`, diff --git a/packages/payload/src/fields/config/types.ts b/packages/payload/src/fields/config/types.ts index 96e8634cf6..ad71c526ae 100644 --- a/packages/payload/src/fields/config/types.ts +++ b/packages/payload/src/fields/config/types.ts @@ -424,6 +424,7 @@ export interface FieldBase { /** * Pass `true` to disable field in the DB * for [Virtual Fields](https://payloadcms.com/blog/learn-how-virtual-fields-can-help-solve-common-cms-challenges): + * A virtual field cannot be used in `admin.useAsTitle` */ virtual?: boolean } From aec4d7b8d58f3657a266325bea8c1b4c1329541a Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:12:54 -0400 Subject: [PATCH 026/110] chore: improve i18n docs (#8638) Fixes https://github.com/payloadcms/payload/issues/8632 --- docs/configuration/i18n.mdx | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/docs/configuration/i18n.mdx b/docs/configuration/i18n.mdx index caad145500..7946bb2886 100644 --- a/docs/configuration/i18n.mdx +++ b/docs/configuration/i18n.mdx @@ -40,7 +40,6 @@ export default buildConfig({ // highlight-start i18n: { fallbackLanguage: 'en', // default - debug: false, // default } // highlight-end }) @@ -183,8 +182,9 @@ Here we create a shareable translations object. We will import this in both our // /custom-translations.ts import type { Config } from 'payload' +import type { NestedKeysStripped } from '@payloadcms/translations' -export customTranslations: Config['i18n']['translations'] = { +export const customTranslations: Config['i18n']['translations'] = { en: { general: { myCustomKey: 'My custom english translation', @@ -194,9 +194,12 @@ export customTranslations: Config['i18n']['translations'] = { } }, } + +export type CustomTranslationsObject = typeof customTranslationsObject.en +export type CustomTranslationsKeys = NestedKeysStripped ``` -We import the shared translations object into our Payload config so they are available for use: +Import the shared translations object into our Payload config so they are available for use: ```ts // /payload.config.ts @@ -214,23 +217,19 @@ export default buildConfig({ }) ``` -We import the shared translations and use it to create types to use in a [Custom Component](../admin/components): +Import the shared translation types to use in your [Custom Component](../admin/components): ```ts // /components/MyComponent.tsx 'use client' -import type { NestedKeysStripped } from '@payloadcms/translations' import type React from 'react' import { useTranslation } from '@payloadcms/ui/providers/Translation' -import { customTranslations } from '../custom-translations' - -type CustomTranslationObject = typeof customTranslations.en -type CustomTranslationKeys = NestedKeysStripped +import type { CustomTranslationsObject, CustomTranslationsKeys } from '../custom-translations' export const MyComponent: React.FC = () => { - const { i18n, t } = useTranslation() // These generics merge your custom translations with the default client translations + const { i18n, t } = useTranslation() // These generics merge your custom translations with the default client translations return t('general:myCustomKey') } @@ -241,23 +240,16 @@ Additionally, Payload exposes the `t` function in various places, for example in ```ts // /fields/myField.ts -import type { - DefaultTranslationKeys, - NestedKeysStripped, - TFunction, -} from '@payloadcms/translations' +import type { DefaultTranslationKeys, TFunction } from '@payloadcms/translations' import type { Field } from 'payload' -import { customTranslations } from '../custom-translations' - -type CustomTranslationObject = typeof customTranslations.en -type CustomTranslationKeys = NestedKeysStripped +import { CustomTranslationsKeys } from '../custom-translations' const field: Field = { name: 'myField', type: 'text', label: ( - { t }: { t: TFunction }, // The generic passed to TFunction does not automatically merge the custom translations with the default translations. We need to merge them ourselves here + { t }: { t: TFunction }, // The generic passed to TFunction does not automatically merge the custom translations with the default translations. We need to merge them ourselves here ) => t('fields:addLabel'), } ``` From d0a5560629e345369ed0bfcaaf492f8dcd3acd96 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Oct 2024 13:25:17 -0600 Subject: [PATCH 027/110] fix: commonjs exports missing for withPayload (#8643) Closes https://github.com/payloadcms/payload/issues/8635 `withPayload.cjs` is now correctly named in the exports The final exports in package.json looks like this ``` "./withPayload": { "import": "./dist/withPayload.js", "require": "./dist/cjs/withPayload.cjs", "default": "./dist/withPayload.js" }, ``` You can now use withPayload with require inside `next.config.js` files ``` const { withPayload } = require('@payloadcms/next/withPayload') const nextConfig = { // Your Next.js config here experimental: { reactCompiler: false, }, } module.exports = withPayload(nextConfig) ``` --- packages/next/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next/package.json b/packages/next/package.json index 2209620106..16f09cd60a 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -54,7 +54,7 @@ "build:babel": "rm -rf dist_optimized && babel dist --out-dir dist_optimized --source-maps --extensions .ts,.js,.tsx,.jsx,.cjs,.mjs && rm -rf dist && mv dist_optimized dist", "build:cjs": "swc ./src/withPayload.js -o ./dist/cjs/withPayload.cjs --config-file .swcrc-cjs --strip-leading-paths", "build:esbuild": "node bundleScss.js", - "build:reactcompiler": "rm -rf dist && rm -rf tsconfig.tsbuildinfo && pnpm build:swc && pnpm build:cjs && pnpm build:babel && pnpm copyfiles && pnpm build:types && pnpm build:esbuild", + "build:reactcompiler": "rm -rf dist && rm -rf tsconfig.tsbuildinfo && pnpm build:swc && pnpm build:babel && pnpm copyfiles && pnpm build:types && pnpm build:esbuild && pnpm build:cjs", "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths", "build:types": "tsc --emitDeclarationOnly --outDir dist", "build:without_reactcompiler": "rm -rf dist && rm -rf tsconfig.tsbuildinfo && pnpm copyfiles && pnpm build:types && pnpm build:swc && pnpm build:cjs && pnpm build:esbuild", @@ -126,7 +126,7 @@ }, "./withPayload": { "import": "./dist/withPayload.js", - "require": "./dist/cjs/withPayload.js", + "require": "./dist/cjs/withPayload.cjs", "default": "./dist/withPayload.js" }, "./layouts": { From a15765395d6736295f63958c35a628892f5c3ea3 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Thu, 10 Oct 2024 16:40:01 -0400 Subject: [PATCH 028/110] chore: add plugin-sentry to publish list --- scripts/lib/publishList.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/lib/publishList.ts b/scripts/lib/publishList.ts index 0c8c977a84..a81c5c210f 100644 --- a/scripts/lib/publishList.ts +++ b/scripts/lib/publishList.ts @@ -42,11 +42,11 @@ export const packagePublishList = [ 'plugin-nested-docs', 'plugin-redirects', 'plugin-search', + 'plugin-sentry', 'plugin-seo', 'plugin-stripe', // Unpublished - // 'plugin-sentry' // 'storage-uploadthing', // 'eslint-config', // 'eslint-plugin', From 067d353cdd2869623a2361322625b685ff355f5e Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Thu, 10 Oct 2024 16:42:05 -0400 Subject: [PATCH 029/110] chore(release): v3.0.0-beta.113 [skip ci] --- package.json | 2 +- packages/create-payload-app/package.json | 2 +- packages/db-mongodb/package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- packages/drizzle/package.json | 2 +- packages/email-nodemailer/package.json | 2 +- packages/email-resend/package.json | 2 +- packages/graphql/package.json | 2 +- packages/live-preview-react/package.json | 2 +- packages/live-preview-vue/package.json | 2 +- packages/live-preview/package.json | 2 +- packages/next/package.json | 2 +- packages/payload/package.json | 2 +- packages/plugin-cloud-storage/package.json | 2 +- packages/plugin-cloud/package.json | 2 +- packages/plugin-form-builder/package.json | 2 +- packages/plugin-nested-docs/package.json | 2 +- packages/plugin-redirects/package.json | 2 +- packages/plugin-search/package.json | 2 +- packages/plugin-sentry/package.json | 2 +- packages/plugin-seo/package.json | 2 +- packages/plugin-stripe/package.json | 2 +- packages/richtext-lexical/package.json | 2 +- packages/richtext-slate/package.json | 2 +- packages/storage-azure/package.json | 2 +- packages/storage-gcs/package.json | 2 +- packages/storage-s3/package.json | 2 +- packages/storage-uploadthing/package.json | 2 +- packages/storage-vercel-blob/package.json | 2 +- packages/translations/package.json | 2 +- packages/ui/package.json | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index ccbd05fef5..b128054b45 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "private": true, "type": "module", "scripts": { diff --git a/packages/create-payload-app/package.json b/packages/create-payload-app/package.json index 9ad3a34ce5..06a5595140 100644 --- a/packages/create-payload-app/package.json +++ b/packages/create-payload-app/package.json @@ -1,6 +1,6 @@ { "name": "create-payload-app", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index b6fa8eed58..0ada58db05 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The officially supported MongoDB database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index 2dca598f94..064288938c 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The officially supported Postgres database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index c40701d5a8..6c949c4c7d 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-sqlite", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The officially supported SQLite database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 5c30b764c5..16f26cbca1 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-vercel-postgres", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Vercel Postgres adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index 92148b0c8a..d1246143ba 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/drizzle", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "A library of shared functions used by different payload database adapters", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-nodemailer/package.json b/packages/email-nodemailer/package.json index 24aabbd8a6..c724404d16 100644 --- a/packages/email-nodemailer/package.json +++ b/packages/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-nodemailer", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Payload Nodemailer Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-resend/package.json b/packages/email-resend/package.json index 1e9c98f2c7..511806c871 100644 --- a/packages/email-resend/package.json +++ b/packages/email-resend/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-resend", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Payload Resend Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/graphql/package.json b/packages/graphql/package.json index 7a939c6963..e6320b18c1 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index 9a1a50908a..9bc3f3489a 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-react", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The official React SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview-vue/package.json b/packages/live-preview-vue/package.json index 0912f53e5f..461ffd783e 100644 --- a/packages/live-preview-vue/package.json +++ b/packages/live-preview-vue/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-vue", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The official Vue SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview/package.json b/packages/live-preview/package.json index d78f7b3723..1ce6c464d9 100644 --- a/packages/live-preview/package.json +++ b/packages/live-preview/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The official live preview JavaScript SDK for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/next/package.json b/packages/next/package.json index 16f09cd60a..4b95dc54c8 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/payload/package.json b/packages/payload/package.json index ab56455254..c7949d3d29 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Node, React, Headless CMS and Application Framework built on Next.js", "keywords": [ "admin panel", diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index 62e4c256b6..1d0683f748 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud-storage", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The official cloud storage plugin for Payload CMS", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index 7dfb563935..af57a253b4 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The official Payload Cloud plugin", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index c5990ac5d0..f409249544 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-form-builder", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Form builder plugin for Payload CMS", "keywords": [ "payload", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index e40c53cec1..3f4db45eff 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The official Nested Docs plugin for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index 0f88f41992..52f4a58883 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Redirects plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index b9e9dbbe52..0b093d2ee1 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Search plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-sentry/package.json b/packages/plugin-sentry/package.json index 93391c328d..917cc8bb10 100644 --- a/packages/plugin-sentry/package.json +++ b/packages/plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-sentry", - "version": "3.0.0-beta.111", + "version": "3.0.0-beta.113", "description": "Sentry plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index 310a1bd3e2..1878bf4ae4 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "SEO plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-stripe/package.json b/packages/plugin-stripe/package.json index f230580525..b8bdc3c9a5 100644 --- a/packages/plugin-stripe/package.json +++ b/packages/plugin-stripe/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-stripe", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Stripe plugin for Payload", "keywords": [ "payload", diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index bb34bdf041..ef53cbaedc 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The officially supported Lexical richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index 8f679e6e9b..93d885f6a0 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "The officially supported Slate richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-azure/package.json b/packages/storage-azure/package.json index c6a4cd2f45..690bf06fdd 100644 --- a/packages/storage-azure/package.json +++ b/packages/storage-azure/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-azure", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Payload storage adapter for Azure Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-gcs/package.json b/packages/storage-gcs/package.json index 863016a573..0d6fd78ff5 100644 --- a/packages/storage-gcs/package.json +++ b/packages/storage-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-gcs", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Payload storage adapter for Google Cloud Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-s3/package.json b/packages/storage-s3/package.json index f515572f94..dddd19fbf7 100644 --- a/packages/storage-s3/package.json +++ b/packages/storage-s3/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-s3", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Payload storage adapter for Amazon S3", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-uploadthing/package.json b/packages/storage-uploadthing/package.json index cafb8b2574..06978e01c6 100644 --- a/packages/storage-uploadthing/package.json +++ b/packages/storage-uploadthing/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-uploadthing", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Payload storage adapter for uploadthing", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-vercel-blob/package.json b/packages/storage-vercel-blob/package.json index 2c93a94ae2..8b5a03c5b4 100644 --- a/packages/storage-vercel-blob/package.json +++ b/packages/storage-vercel-blob/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-vercel-blob", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "description": "Payload storage adapter for Vercel Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/translations/package.json b/packages/translations/package.json index c015dd003c..60e450c1b3 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/ui/package.json b/packages/ui/package.json index a761a4c76b..b8072b6be4 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-beta.112", + "version": "3.0.0-beta.113", "homepage": "https://payloadcms.com", "repository": { "type": "git", From 8daac4e6706fb8c29eb971cc90e7ac7546e27138 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Fri, 11 Oct 2024 17:01:21 +0300 Subject: [PATCH 030/110] fix: properly store timestamps in versions (#8646) This PR makes a more clear gap between `version_createdAt` / `version_updatedAt` and `createdAt` / `updatedAt` columns / fields in mongodb. - `createdAt` - This should be a new value in a new version. Before this change it was the same all the time. Should remain the same on autosave. - The same for `updatedAt`, but it should be updated on every change (including autosave) - `version_createdAt` - Should remain equal to `createdAt` from the parent collection / table - `version_updatedAt` - On a latest version it makes sense this be the same as `updatedAt` from the parent collection / table, as all the `version_*` fields should be just synced with it --- packages/db-mongodb/src/queryDrafts.ts | 2 - packages/drizzle/src/createGlobalVersion.ts | 4 + packages/drizzle/src/createVersion.ts | 8 +- packages/drizzle/src/queryDrafts.ts | 2 - .../src/collections/operations/duplicate.ts | 5 +- .../src/collections/operations/find.ts | 2 +- .../src/collections/operations/update.ts | 5 +- .../src/collections/operations/updateByID.ts | 5 +- .../payload/src/globals/operations/update.ts | 6 +- .../src/versions/drafts/getQueryDraftsSort.ts | 16 +++- .../versions/getLatestCollectionVersion.ts | 9 +- .../src/versions/getLatestGlobalVersion.ts | 14 +-- packages/payload/src/versions/saveVersion.ts | 8 +- .../ui/src/providers/DocumentInfo/index.tsx | 5 ++ test/versions/int.spec.ts | 85 ++++++++++++++++++- 15 files changed, 128 insertions(+), 48 deletions(-) diff --git a/packages/db-mongodb/src/queryDrafts.ts b/packages/db-mongodb/src/queryDrafts.ts index b7badbd64c..5754905d69 100644 --- a/packages/db-mongodb/src/queryDrafts.ts +++ b/packages/db-mongodb/src/queryDrafts.ts @@ -99,8 +99,6 @@ export const queryDrafts: QueryDrafts = async function queryDrafts( _id: doc.parent, id: doc.parent, ...doc.version, - createdAt: doc.createdAt, - updatedAt: doc.updatedAt, } return sanitizeInternalFields(doc) diff --git a/packages/drizzle/src/createGlobalVersion.ts b/packages/drizzle/src/createGlobalVersion.ts index 3af9547b99..d4c72db4bd 100644 --- a/packages/drizzle/src/createGlobalVersion.ts +++ b/packages/drizzle/src/createGlobalVersion.ts @@ -12,10 +12,12 @@ export async function createGlobalVersion( this: DrizzleAdapter, { autosave, + createdAt, globalSlug, publishedLocale, req = {} as PayloadRequest, snapshot, + updatedAt, versionData, }: CreateGlobalVersionArgs, ) { @@ -28,9 +30,11 @@ export async function createGlobalVersion( adapter: this, data: { autosave, + createdAt, latest: true, publishedLocale, snapshot, + updatedAt, version: versionData, }, db, diff --git a/packages/drizzle/src/createVersion.ts b/packages/drizzle/src/createVersion.ts index a52d01d9b9..0eda45ffcb 100644 --- a/packages/drizzle/src/createVersion.ts +++ b/packages/drizzle/src/createVersion.ts @@ -13,10 +13,12 @@ export async function createVersion( { autosave, collectionSlug, + createdAt, parent, publishedLocale, req = {} as PayloadRequest, snapshot, + updatedAt, versionData, }: CreateVersionArgs, ) { @@ -33,17 +35,15 @@ export async function createVersion( const data: Record = { autosave, + createdAt, latest: true, parent, publishedLocale, snapshot, + updatedAt, version, } - if ('createdAt' in version) { - data.createdAt = version.createdAt - } - const result = await upsertRow>({ adapter: this, data, diff --git a/packages/drizzle/src/queryDrafts.ts b/packages/drizzle/src/queryDrafts.ts index 636d486feb..00386a2a50 100644 --- a/packages/drizzle/src/queryDrafts.ts +++ b/packages/drizzle/src/queryDrafts.ts @@ -38,8 +38,6 @@ export const queryDrafts: QueryDrafts = async function queryDrafts( doc = { id: doc.parent, ...doc.version, - createdAt: doc.createdAt, - updatedAt: doc.updatedAt, } return doc diff --git a/packages/payload/src/collections/operations/duplicate.ts b/packages/payload/src/collections/operations/duplicate.ts index 9b65fecf66..6539b802e9 100644 --- a/packages/payload/src/collections/operations/duplicate.ts +++ b/packages/payload/src/collections/operations/duplicate.ts @@ -267,10 +267,7 @@ export const duplicateOperation = async ( result = await saveVersion({ id: versionDoc.id, collection: collectionConfig, - docWithLocales: { - ...versionDoc, - createdAt: result.createdAt, - }, + docWithLocales: versionDoc, draft: shouldSaveDraft, payload, req, diff --git a/packages/payload/src/collections/operations/find.ts b/packages/payload/src/collections/operations/find.ts index e0e0368998..ccb41f8119 100644 --- a/packages/payload/src/collections/operations/find.ts +++ b/packages/payload/src/collections/operations/find.ts @@ -131,7 +131,7 @@ export const findOperation = async ( page: sanitizedPage, pagination: usePagination, req, - sort: getQueryDraftsSort(sort), + sort: getQueryDraftsSort({ collectionConfig, sort }), where: fullWhere, }) } else { diff --git a/packages/payload/src/collections/operations/update.ts b/packages/payload/src/collections/operations/update.ts index 135e440573..5ee4ae6e48 100644 --- a/packages/payload/src/collections/operations/update.ts +++ b/packages/payload/src/collections/operations/update.ts @@ -329,10 +329,7 @@ export const updateOperation = async ( result = await saveVersion({ id, collection: collectionConfig, - docWithLocales: { - ...result, - createdAt: doc.createdAt, - }, + docWithLocales: result, payload, req, }) diff --git a/packages/payload/src/collections/operations/updateByID.ts b/packages/payload/src/collections/operations/updateByID.ts index 5433258716..f9146b6211 100644 --- a/packages/payload/src/collections/operations/updateByID.ts +++ b/packages/payload/src/collections/operations/updateByID.ts @@ -356,10 +356,7 @@ export const updateByIDOperation = async ( id, autosave, collection: collectionConfig, - docWithLocales: { - ...result, - createdAt: docWithLocales.createdAt, - }, + docWithLocales: result, draft: shouldSaveDraft, payload, publishSpecificLocale, diff --git a/packages/payload/src/globals/operations/update.ts b/packages/payload/src/globals/operations/update.ts index d52924e2de..9d981b8e37 100644 --- a/packages/payload/src/globals/operations/update.ts +++ b/packages/payload/src/globals/operations/update.ts @@ -245,11 +245,7 @@ export const updateOperation = async ( const { globalType } = result result = await saveVersion({ autosave, - docWithLocales: { - ...result, - createdAt: result.createdAt, - updatedAt: result.updatedAt, - }, + docWithLocales: result, draft: shouldSaveDraft, global: globalConfig, payload, diff --git a/packages/payload/src/versions/drafts/getQueryDraftsSort.ts b/packages/payload/src/versions/drafts/getQueryDraftsSort.ts index a6a5448d15..e4ccd3b6f4 100644 --- a/packages/payload/src/versions/drafts/getQueryDraftsSort.ts +++ b/packages/payload/src/versions/drafts/getQueryDraftsSort.ts @@ -1,10 +1,22 @@ +import type { SanitizedCollectionConfig } from '../../collections/config/types.js' + /** * Takes the incoming sort argument and prefixes it with `versions.` and preserves any `-` prefixes for descending order * @param sort */ -export const getQueryDraftsSort = (sort: string): string => { +export const getQueryDraftsSort = ({ + collectionConfig, + sort, +}: { + collectionConfig: SanitizedCollectionConfig + sort: string +}): string => { if (!sort) { - return sort + if (collectionConfig.defaultSort) { + sort = collectionConfig.defaultSort + } else { + sort = '-createdAt' + } } let direction = '' diff --git a/packages/payload/src/versions/getLatestCollectionVersion.ts b/packages/payload/src/versions/getLatestCollectionVersion.ts index 8366d3bbe2..ada7ff212e 100644 --- a/packages/payload/src/versions/getLatestCollectionVersion.ts +++ b/packages/payload/src/versions/getLatestCollectionVersion.ts @@ -48,10 +48,7 @@ export const getLatestCollectionVersion = async ({ return undefined } - return { - ...latestVersion.version, - id, - createdAt: latestVersion.createdAt, - updatedAt: latestVersion.updatedAt, - } + latestVersion.version.id = id + + return latestVersion.version } diff --git a/packages/payload/src/versions/getLatestGlobalVersion.ts b/packages/payload/src/versions/getLatestGlobalVersion.ts index 5d0413bf63..e32689b318 100644 --- a/packages/payload/src/versions/getLatestGlobalVersion.ts +++ b/packages/payload/src/versions/getLatestGlobalVersion.ts @@ -56,12 +56,16 @@ export const getLatestGlobalVersion = async ({ } } + if (!latestVersion.version.createdAt) { + latestVersion.version.createdAt = latestVersion.createdAt + } + + if (!latestVersion.version.updatedAt) { + latestVersion.version.updatedAt = latestVersion.updatedAt + } + return { - global: { - ...latestVersion.version, - createdAt: latestVersion.createdAt, - updatedAt: latestVersion.updatedAt, - }, + global: latestVersion.version, globalExists, } } diff --git a/packages/payload/src/versions/saveVersion.ts b/packages/payload/src/versions/saveVersion.ts index 161c245d0c..0febf4ac02 100644 --- a/packages/payload/src/versions/saveVersion.ts +++ b/packages/payload/src/versions/saveVersion.ts @@ -82,7 +82,7 @@ export const saveVersion = async ({ const data: Record = { createdAt: new Date(latestVersion.createdAt).toISOString(), - updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(), + updatedAt: now, version: { ...versionData, }, @@ -114,12 +114,12 @@ export const saveVersion = async ({ const createVersionArgs = { autosave: Boolean(autosave), collectionSlug: undefined, - createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now, + createdAt: now, globalSlug: undefined, parent: collection ? id : undefined, publishedLocale: publishSpecificLocale || undefined, req, - updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(), + updatedAt: now, versionData, } @@ -194,8 +194,6 @@ export const saveVersion = async ({ } let createdVersion = result.version - createdVersion.createdAt = result.createdAt - createdVersion.updatedAt = result.updatedAt createdVersion = sanitizeInternalFields(createdVersion) createdVersion.id = result.parent diff --git a/packages/ui/src/providers/DocumentInfo/index.tsx b/packages/ui/src/providers/DocumentInfo/index.tsx index c190386a22..07978ba9a3 100644 --- a/packages/ui/src/providers/DocumentInfo/index.tsx +++ b/packages/ui/src/providers/DocumentInfo/index.tsx @@ -339,6 +339,11 @@ const DocumentInfo: React.FC< ...versionParams.where, and: [ ...versionParams.where.and, + { + 'version._status': { + equals: 'draft', + }, + }, { updatedAt: { greater_than: publishedJSON.updatedAt, diff --git a/test/versions/int.spec.ts b/test/versions/int.spec.ts index 1ce308b953..6dbfed6198 100644 --- a/test/versions/int.spec.ts +++ b/test/versions/int.spec.ts @@ -14,6 +14,7 @@ import AutosavePosts from './collections/Autosave.js' import AutosaveGlobal from './globals/Autosave.js' import { autosaveCollectionSlug, + autoSaveGlobalSlug, draftCollectionSlug, localizedCollectionSlug, localizedGlobalSlug, @@ -306,21 +307,55 @@ describe('Versions', () => { ) }) - it('should have the same createdAt on new version create', async () => { + it('should have different createdAt in a new version while the same version.createdAt', async () => { const doc = await payload.create({ collection: autosaveCollectionSlug, data: { description: 'descr', title: 'title' }, }) - await wait(30) + await wait(10) - const updated = await payload.update({ + const upd = await payload.update({ collection: autosaveCollectionSlug, id: doc.id, data: {}, }) - expect(doc.createdAt).toBe(updated.createdAt) + expect(upd.createdAt).toBe(doc.createdAt) + + const { + docs: [latestVersionData], + } = await payload.findVersions({ + collection: autosaveCollectionSlug, + where: { + and: [ + { + parent: { + equals: doc.id, + }, + latest: { + equals: true, + }, + }, + ], + }, + }) + + // Version itself should have new createdAt + expect(new Date(latestVersionData.createdAt) > new Date(doc.createdAt)).toBe(true) + // But the same createdAt in version data! + expect(latestVersionData.version.createdAt).toBe(doc.createdAt) + + const fromNonVersionsTable = await payload.findByID({ + draft: false, + id: doc.id, + collection: autosaveCollectionSlug, + }) + + // createdAt from non-versions should be the same as version_createdAt in versions + expect(fromNonVersionsTable.createdAt).toBe(latestVersionData.version.createdAt) + // When creating new version - updatedAt should match version.updatedAt + expect(fromNonVersionsTable.updatedAt).toBe(latestVersionData.version.updatedAt) }) }) @@ -1265,6 +1300,48 @@ describe('Versions', () => { expect(updatedGlobal._status).toStrictEqual('draft') expect(globalLocalVersionID).toBeDefined() }) + + it('should have different createdAt in a new version while the same version.createdAt', async () => { + const doc = await payload.updateGlobal({ + slug: autoSaveGlobalSlug, + data: { title: 'asd' }, + }) + + await wait(10) + + const upd = await payload.updateGlobal({ + slug: autoSaveGlobalSlug, + data: { title: 'asd2' }, + }) + + expect(upd.createdAt).toBe(doc.createdAt) + + const { + docs: [latestVersionData], + } = await payload.findGlobalVersions({ + slug: autoSaveGlobalSlug, + where: { + latest: { + equals: true, + }, + }, + }) + + // Version itself should have new createdAt + expect(new Date(latestVersionData.createdAt) > new Date(doc.createdAt)).toBe(true) + // But the same version.createdAt! + expect(latestVersionData.version.createdAt).toBe(doc.createdAt) + + const fromNonVersionsTable = await payload.findGlobal({ + draft: false, + slug: autoSaveGlobalSlug, + }) + + // createdAt from non-versions should be the same as version_createdAt in versions + expect(fromNonVersionsTable.createdAt).toBe(latestVersionData.version.createdAt) + // When creating a new version - updatedAt should match + expect(fromNonVersionsTable.updatedAt).toBe(latestVersionData.version.updatedAt) + }) }) describe('Read', () => { From 256949e33161f3585469d29691b0dfa0fcd678a3 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Fri, 11 Oct 2024 17:17:32 +0300 Subject: [PATCH 031/110] feat(db-postgres, db-vercel-postgres): createDatabase, auto database create if it does not exist (#8655) Adds `createDatabase` method to Postgres adapters which can be used either independently like this: ```ts payload.db.createDatabase({ name: "some-database", schemaName: "custom-schema" }) ``` Or ```ts payload.db.createDatabase() ``` Which creates a database from the current configuration, this is used in `connect` if `autoDatabaseCreate` is set to `true` (default). You can disable this behaviour with: ```ts postgresAdapter({ autoDatabaseCreate: false }) ``` Example: image --- docs/database/postgres.mdx | 1 + packages/db-postgres/src/connect.ts | 16 ++- packages/db-postgres/src/index.ts | 3 + packages/db-postgres/src/types.ts | 5 + packages/db-vercel-postgres/src/connect.ts | 16 ++- packages/db-vercel-postgres/src/index.ts | 3 + packages/db-vercel-postgres/src/types.ts | 5 + packages/drizzle/src/exports/postgres.ts | 1 + .../drizzle/src/postgres/createDatabase.ts | 110 ++++++++++++++++++ packages/drizzle/src/postgres/types.ts | 16 ++- 10 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 packages/drizzle/src/postgres/createDatabase.ts diff --git a/docs/database/postgres.mdx b/docs/database/postgres.mdx index 9710ba5248..f2d86860ec 100644 --- a/docs/database/postgres.mdx +++ b/docs/database/postgres.mdx @@ -60,6 +60,7 @@ export default buildConfig({ | `schemaName` (experimental) | A string for the postgres schema to use, defaults to 'public'. | | `idType` | A string of 'serial', or 'uuid' that is used for the data type given to id columns. | | `transactionOptions` | A PgTransactionConfig object for transactions, or set to `false` to disable using transactions. [More details](https://orm.drizzle.team/docs/transactions) | +| `disableCreateDatabase` | Pass `true` to disale auto database creation if it doesn't exist. Defaults to `false`. | | `localesSuffix` | A string appended to the end of table names for storing localized fields. Default is '_locales'. | | `relationshipsSuffix` | A string appended to the end of table names for storing relationships. Default is '_rels'. | | `versionsSuffix` | A string appended to the end of table names for storing versions. Defaults to '_v'. | diff --git a/packages/db-postgres/src/connect.ts b/packages/db-postgres/src/connect.ts index bf26961aca..a88a62dfa8 100644 --- a/packages/db-postgres/src/connect.ts +++ b/packages/db-postgres/src/connect.ts @@ -76,7 +76,21 @@ export const connect: Connect = async function connect( } } } catch (err) { - this.payload.logger.error({ err, msg: `Error: cannot connect to Postgres: ${err.message}` }) + if (err.message?.match(/database .* does not exist/i) && !this.disableCreateDatabase) { + // capitalize first char of the err msg + this.payload.logger.info( + `${err.message.charAt(0).toUpperCase() + err.message.slice(1)}, creating...`, + ) + const isCreated = await this.createDatabase() + + if (isCreated) { + await this.connect(options) + return + } + } else { + this.payload.logger.error(`Error: cannot connect to Postgres. Details: ${err.message}`, err) + } + if (typeof this.rejectInitializing === 'function') { this.rejectInitializing() } diff --git a/packages/db-postgres/src/index.ts b/packages/db-postgres/src/index.ts index 80996b6528..841c6fefe9 100644 --- a/packages/db-postgres/src/index.ts +++ b/packages/db-postgres/src/index.ts @@ -35,6 +35,7 @@ import { import { convertPathToJSONTraversal, countDistinct, + createDatabase, createJSONQuery, createMigration, defaultDrizzleSnapshot, @@ -78,7 +79,9 @@ export function postgresAdapter(args: Args): DatabaseAdapterObj name: 'postgres', afterSchemaInit: args.afterSchemaInit ?? [], beforeSchemaInit: args.beforeSchemaInit ?? [], + createDatabase, defaultDrizzleSnapshot, + disableCreateDatabase: args.disableCreateDatabase ?? false, drizzle: undefined, enums: {}, features: { diff --git a/packages/db-postgres/src/types.ts b/packages/db-postgres/src/types.ts index 3fe149d0b9..53256e25d4 100644 --- a/packages/db-postgres/src/types.ts +++ b/packages/db-postgres/src/types.ts @@ -24,6 +24,11 @@ export type Args = { * To generate Drizzle schema from the database, see [Drizzle Kit introspection](https://orm.drizzle.team/kit-docs/commands#introspect--pull) */ beforeSchemaInit?: PostgresSchemaHook[] + /** + * Pass `true` to disale auto database creation if it doesn't exist. + * @default false + */ + disableCreateDatabase?: boolean idType?: 'serial' | 'uuid' localesSuffix?: string logger?: DrizzleConfig['logger'] diff --git a/packages/db-vercel-postgres/src/connect.ts b/packages/db-vercel-postgres/src/connect.ts index 64907f04d5..30644bc908 100644 --- a/packages/db-vercel-postgres/src/connect.ts +++ b/packages/db-vercel-postgres/src/connect.ts @@ -39,7 +39,21 @@ export const connect: Connect = async function connect( } } } catch (err) { - this.payload.logger.error({ err, msg: `Error: cannot connect to Postgres: ${err.message}` }) + if (err.message?.match(/database .* does not exist/i) && !this.disableCreateDatabase) { + // capitalize first char of the err msg + this.payload.logger.info( + `${err.message.charAt(0).toUpperCase() + err.message.slice(1)}, creating...`, + ) + const isCreated = await this.createDatabase() + + if (isCreated) { + await this.connect(options) + return + } + } else { + this.payload.logger.error(`Error: cannot connect to Postgres. Details: ${err.message}`, err) + } + if (typeof this.rejectInitializing === 'function') { this.rejectInitializing() } diff --git a/packages/db-vercel-postgres/src/index.ts b/packages/db-vercel-postgres/src/index.ts index 2a85faf6bf..635907d35e 100644 --- a/packages/db-vercel-postgres/src/index.ts +++ b/packages/db-vercel-postgres/src/index.ts @@ -35,6 +35,7 @@ import { import { convertPathToJSONTraversal, countDistinct, + createDatabase, createJSONQuery, createMigration, defaultDrizzleSnapshot, @@ -78,7 +79,9 @@ export function vercelPostgresAdapter(args: Args = {}): DatabaseAdapterObj { + const connectionURL = new URL(connectionString) + const newConnectionURL = new URL(connectionURL) + newConnectionURL.pathname = `/${database}` + + return newConnectionURL.toString() +} + +type Args = { + /** + * Name of a database, defaults to the current one + */ + name?: string + /** + * Schema to create in addition to 'public'. Defaults to adapter.schemaName if exists. + */ + schemaName?: string +} +export const createDatabase = async function (this: BasePostgresAdapter, args: Args = {}) { + // DATABASE_URL - default Vercel env + const connectionString = this.poolOptions?.connectionString ?? process.env.DATABASE_URL + let managementClientConfig: ClientConfig = {} + let dbName = args.name + const schemaName = this.schemaName || 'public' + + if (connectionString) { + if (!dbName) { + dbName = new URL(connectionString).pathname.slice(1) + } + + managementClientConfig.connectionString = setConnectionStringDatabase({ + connectionString, + database: 'postgres', + }) + } else { + if (!dbName) { + dbName = this.poolOptions.database + } + + managementClientConfig = { + ...this.poolOptions, + database: 'postgres', + } + } + + // import pg only when createDatabase is used + const pg = await import('pg') + + const managementClient = new pg.Client(managementClientConfig) + + try { + await managementClient.connect() + await managementClient.query(`CREATE DATABASE ${dbName}`) + + this.payload.logger.info(`Created database "${dbName}"`) + + if (schemaName !== 'public') { + let createdDatabaseConfig: ClientConfig = {} + + if (connectionString) { + createdDatabaseConfig.connectionString = setConnectionStringDatabase({ + connectionString, + database: dbName, + }) + } else { + createdDatabaseConfig = { + ...this.poolOptions, + database: dbName, + } + } + + const createdDatabaseClient = new pg.Client(createdDatabaseConfig) + + try { + await createdDatabaseClient.connect() + + await createdDatabaseClient.query(`CREATE SCHEMA ${schemaName}`) + this.payload.logger.info(`Created schema "${dbName}.${schemaName}"`) + } catch (err) { + this.payload.logger.error({ + err, + msg: `Error: failed to create schema "${dbName}.${schemaName}". Details: ${err.message}`, + }) + } finally { + await createdDatabaseClient.end() + } + } + + return true + } catch (err) { + this.payload.logger.error( + `Error: failed to create database ${dbName}. Details: ${err.message}`, + err, + ) + + return false + } finally { + await managementClient.end() + } +} diff --git a/packages/drizzle/src/postgres/types.ts b/packages/drizzle/src/postgres/types.ts index 8a55d6d151..2e2d407555 100644 --- a/packages/drizzle/src/postgres/types.ts +++ b/packages/drizzle/src/postgres/types.ts @@ -21,7 +21,7 @@ import type { } from 'drizzle-orm/pg-core' import type { PgTableFn } from 'drizzle-orm/pg-core/table' import type { Payload, PayloadRequest } from 'payload' -import type { QueryResult } from 'pg' +import type { ClientConfig, QueryResult } from 'pg' import type { extendDrizzleTable, Operators } from '../index.js' import type { BuildQueryJoinAliases, DrizzleAdapter, TransactionPg } from '../types.js' @@ -92,6 +92,17 @@ export type Insert = (args: { values: Record | Record[] }) => Promise[]> +export type CreateDatabase = (args?: { + /** + * Name of a database, defaults to the current one + */ + name?: string + /** + * Schema to create in addition to 'public'. Defaults from adapter.schemaName if exists. + */ + schemaName?: string +}) => Promise + type Schema = | { enum: typeof pgEnum @@ -119,8 +130,10 @@ export type BasePostgresAdapter = { afterSchemaInit: PostgresSchemaHook[] beforeSchemaInit: PostgresSchemaHook[] countDistinct: CountDistinct + createDatabase: CreateDatabase defaultDrizzleSnapshot: DrizzleSnapshotJSON deleteWhere: DeleteWhere + disableCreateDatabase: boolean drizzle: PostgresDB dropDatabase: DropDatabase enums: Record @@ -137,6 +150,7 @@ export type BasePostgresAdapter = { logger: DrizzleConfig['logger'] operators: Operators pgSchema?: Schema + poolOptions?: ClientConfig prodMigrations?: { down: (args: MigrateDownArgs) => Promise name: string From 1ffb6c3e13bc654dfa8eccc68a2813c84042a1b1 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Fri, 11 Oct 2024 20:13:54 +0300 Subject: [PATCH 032/110] fix(drizzle): indexes / unique with relationships (#8432) Fixes https://github.com/payloadcms/payload/issues/8413 and https://github.com/payloadcms/payload/issues/6460 - Builds indexes for relationships by default in the SQL schema - Fixes `unique: true` handling with Postgres / SQLite for every type of relationships (non-polymorphic. hasMany, polymorphic, polymorphic hasMany) _note_: disables unique for nested to arrays / blocks relationships in the `_rels` table. - adds tests 2.0 PR tha ports only indexes creation https://github.com/payloadcms/payload/pull/8446, because `unique: true` could be a breaking change if someone has incosistent unique data in the database. --- packages/db-sqlite/src/schema/build.ts | 32 ++- .../db-sqlite/src/schema/traverseFields.ts | 29 ++- packages/drizzle/src/postgres/schema/build.ts | 36 ++- .../src/postgres/schema/traverseFields.ts | 29 ++- test/fields/collections/Indexed/index.ts | 46 ++++ test/fields/int.spec.ts | 214 +++++++++++++++++- test/fields/payload-types.ts | 23 ++ 7 files changed, 394 insertions(+), 15 deletions(-) diff --git a/packages/db-sqlite/src/schema/build.ts b/packages/db-sqlite/src/schema/build.ts index 0883984f0b..9646e3e812 100644 --- a/packages/db-sqlite/src/schema/build.ts +++ b/packages/db-sqlite/src/schema/build.ts @@ -24,6 +24,7 @@ import toSnakeCase from 'to-snake-case' import type { GenericColumns, GenericTable, IDType, SQLiteAdapter } from '../types.js' +import { createIndex } from './createIndex.js' import { getIDColumn } from './getIDColumn.js' import { setColumnID } from './setColumnID.js' import { traverseFields } from './traverseFields.js' @@ -56,6 +57,7 @@ type Args = { buildNumbers?: boolean buildRelationships?: boolean disableNotNull: boolean + disableRelsTableUnique?: boolean disableUnique: boolean fields: Field[] joins?: SanitizedJoins @@ -64,6 +66,7 @@ type Args = { rootRelationsToBuild?: RelationMap rootTableIDColType?: IDType rootTableName?: string + rootUniqueRelationships?: Set tableName: string timestamps?: boolean versions: boolean @@ -88,6 +91,7 @@ export const buildTable = ({ baseColumns = {}, baseExtraConfig = {}, disableNotNull, + disableRelsTableUnique, disableUnique = false, fields, joins, @@ -96,6 +100,7 @@ export const buildTable = ({ rootRelationsToBuild, rootTableIDColType, rootTableName: incomingRootTableName, + rootUniqueRelationships, tableName, timestamps, versions, @@ -114,6 +119,7 @@ export const buildTable = ({ // Relationships to the base collection const relationships: Set = rootRelationships || new Set() + const uniqueRelationships: Set = rootUniqueRelationships || new Set() let relationshipsTable: GenericTable | SQLiteTableWithColumns @@ -133,6 +139,7 @@ export const buildTable = ({ adapter, columns, disableNotNull, + disableRelsTableUnique, disableUnique, fields, indexes, @@ -147,6 +154,7 @@ export const buildTable = ({ rootRelationsToBuild: rootRelationsToBuild || relationsToBuild, rootTableIDColType: rootTableIDColType || idColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }) @@ -393,7 +401,9 @@ export const buildTable = ({ colType = 'text' } - relationshipColumns[`${relationTo}ID`] = getIDColumn({ + const colName = `${relationTo}ID` + + relationshipColumns[colName] = getIDColumn({ name: `${formattedRelationTo}_id`, type: colType, primaryKey: false, @@ -402,9 +412,27 @@ export const buildTable = ({ relationExtraConfig[`${relationTo}IdFk`] = (cols) => foreignKey({ name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`, - columns: [cols[`${relationTo}ID`]], + columns: [cols[colName]], foreignColumns: [adapter.tables[formattedRelationTo].id], }).onDelete('cascade') + + const indexName = [colName] + + const unique = !disableUnique && uniqueRelationships.has(relationTo) + + if (unique) { + indexName.push('path') + } + if (hasLocalizedRelationshipField) { + indexName.push('locale') + } + + relationExtraConfig[`${relationTo}IdIdx`] = createIndex({ + name: indexName, + columnName: `${formattedRelationTo}_id`, + tableName: relationshipsTableName, + unique, + }) }) relationshipsTable = sqliteTable(relationshipsTableName, relationshipColumns, (cols) => { diff --git a/packages/db-sqlite/src/schema/traverseFields.ts b/packages/db-sqlite/src/schema/traverseFields.ts index 1241ea6260..725679c00d 100644 --- a/packages/db-sqlite/src/schema/traverseFields.ts +++ b/packages/db-sqlite/src/schema/traverseFields.ts @@ -36,6 +36,7 @@ type Args = { columnPrefix?: string columns: Record disableNotNull: boolean + disableRelsTableUnique?: boolean disableUnique?: boolean fieldPrefix?: string fields: (Field | TabAsField)[] @@ -52,6 +53,7 @@ type Args = { rootRelationsToBuild?: RelationMap rootTableIDColType: IDType rootTableName: string + uniqueRelationships: Set versions: boolean /** * Tracks whether or not this table is built @@ -74,6 +76,7 @@ export const traverseFields = ({ columnPrefix, columns, disableNotNull, + disableRelsTableUnique, disableUnique = false, fieldPrefix, fields, @@ -90,6 +93,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }: Args): Result => { @@ -147,9 +151,10 @@ export const traverseFields = ({ } if ( - (field.unique || field.index) && - !['array', 'blocks', 'group', 'point', 'relationship', 'upload'].includes(field.type) && - !('hasMany' in field && field.hasMany === true) + (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) && + !['array', 'blocks', 'group', 'point'].includes(field.type) && + !('hasMany' in field && field.hasMany === true) && + !('relationTo' in field && Array.isArray(field.relationTo)) ) { const unique = disableUnique !== true && field.unique if (unique) { @@ -401,12 +406,14 @@ export const traverseFields = ({ baseColumns, baseExtraConfig, disableNotNull: disableNotNullFromHere, + disableRelsTableUnique: true, disableUnique, fields: disableUnique ? idToUUID(field.fields) : field.fields, rootRelationships: relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, + rootUniqueRelationships: uniqueRelationships, tableName: arrayTableName, versions, withinLocalizedArrayOrBlock: isLocalized, @@ -540,12 +547,14 @@ export const traverseFields = ({ baseColumns, baseExtraConfig, disableNotNull: disableNotNullFromHere, + disableRelsTableUnique: true, disableUnique, fields: disableUnique ? idToUUID(block.fields) : block.fields, rootRelationships: relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, + rootUniqueRelationships: uniqueRelationships, tableName: blockTableName, versions, withinLocalizedArrayOrBlock: isLocalized, @@ -664,6 +673,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }) @@ -719,6 +729,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized, }) @@ -775,6 +786,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }) @@ -831,6 +843,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }) @@ -859,9 +872,17 @@ export const traverseFields = ({ case 'relationship': case 'upload': if (Array.isArray(field.relationTo)) { - field.relationTo.forEach((relation) => relationships.add(relation)) + field.relationTo.forEach((relation) => { + relationships.add(relation) + if (field.unique && !disableUnique && !disableRelsTableUnique) { + uniqueRelationships.add(relation) + } + }) } else if (field.hasMany) { relationships.add(field.relationTo) + if (field.unique && !disableUnique && !disableRelsTableUnique) { + uniqueRelationships.add(field.relationTo) + } } else { // simple relationships get a column on the targetTable with a foreign key to the relationTo table const relationshipConfig = adapter.payload.collections[field.relationTo].config diff --git a/packages/drizzle/src/postgres/schema/build.ts b/packages/drizzle/src/postgres/schema/build.ts index 91132443a4..8b3fd1219a 100644 --- a/packages/drizzle/src/postgres/schema/build.ts +++ b/packages/drizzle/src/postgres/schema/build.ts @@ -30,6 +30,7 @@ import type { } from '../types.js' import { createTableName } from '../../createTableName.js' +import { createIndex } from './createIndex.js' import { parentIDColumnMap } from './parentIDColumnMap.js' import { setColumnID } from './setColumnID.js' import { traverseFields } from './traverseFields.js' @@ -45,6 +46,7 @@ type Args = { buildNumbers?: boolean buildRelationships?: boolean disableNotNull: boolean + disableRelsTableUnique?: boolean disableUnique: boolean fields: Field[] joins?: SanitizedJoins @@ -52,6 +54,7 @@ type Args = { rootRelationsToBuild?: RelationMap rootTableIDColType?: string rootTableName?: string + rootUniqueRelationships?: Set tableName: string timestamps?: boolean versions: boolean @@ -76,6 +79,7 @@ export const buildTable = ({ baseColumns = {}, baseExtraConfig = {}, disableNotNull, + disableRelsTableUnique = false, disableUnique = false, fields, joins, @@ -83,6 +87,7 @@ export const buildTable = ({ rootRelationsToBuild, rootTableIDColType, rootTableName: incomingRootTableName, + rootUniqueRelationships, tableName, timestamps, versions, @@ -102,6 +107,9 @@ export const buildTable = ({ // Relationships to the base collection const relationships: Set = rootRelationships || new Set() + // Unique relationships to the base collection + const uniqueRelationships: Set = rootUniqueRelationships || new Set() + let relationshipsTable: GenericTable | PgTableWithColumns // Drizzle relations @@ -120,6 +128,7 @@ export const buildTable = ({ adapter, columns, disableNotNull, + disableRelsTableUnique, disableUnique, fields, indexes, @@ -133,6 +142,7 @@ export const buildTable = ({ rootRelationsToBuild: rootRelationsToBuild || relationsToBuild, rootTableIDColType: rootTableIDColType || idColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }) @@ -368,16 +378,34 @@ export const buildTable = ({ colType = 'varchar' } - relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType]( - `${formattedRelationTo}_id`, - ) + const colName = `${relationTo}ID` + + relationshipColumns[colName] = parentIDColumnMap[colType](`${formattedRelationTo}_id`) relationExtraConfig[`${relationTo}IdFk`] = (cols) => foreignKey({ name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`, - columns: [cols[`${relationTo}ID`]], + columns: [cols[colName]], foreignColumns: [adapter.tables[formattedRelationTo].id], }).onDelete('cascade') + + const indexName = [colName] + + const unique = !disableUnique && uniqueRelationships.has(relationTo) + + if (unique) { + indexName.push('path') + } + if (hasLocalizedRelationshipField) { + indexName.push('locale') + } + + relationExtraConfig[`${relationTo}IdIdx`] = createIndex({ + name: indexName, + columnName: `${formattedRelationTo}_id`, + tableName: relationshipsTableName, + unique, + }) }) relationshipsTable = adapter.pgSchema.table( diff --git a/packages/drizzle/src/postgres/schema/traverseFields.ts b/packages/drizzle/src/postgres/schema/traverseFields.ts index 777e428899..d334ec3db9 100644 --- a/packages/drizzle/src/postgres/schema/traverseFields.ts +++ b/packages/drizzle/src/postgres/schema/traverseFields.ts @@ -43,6 +43,7 @@ type Args = { columnPrefix?: string columns: Record disableNotNull: boolean + disableRelsTableUnique?: boolean disableUnique?: boolean fieldPrefix?: string fields: (Field | TabAsField)[] @@ -58,6 +59,7 @@ type Args = { rootRelationsToBuild?: RelationMap rootTableIDColType: string rootTableName: string + uniqueRelationships: Set versions: boolean /** * Tracks whether or not this table is built @@ -80,6 +82,7 @@ export const traverseFields = ({ columnPrefix, columns, disableNotNull, + disableRelsTableUnique, disableUnique = false, fieldPrefix, fields, @@ -95,6 +98,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }: Args): Result => { @@ -152,9 +156,10 @@ export const traverseFields = ({ } if ( - (field.unique || field.index) && - !['array', 'blocks', 'group', 'point', 'relationship', 'upload'].includes(field.type) && - !('hasMany' in field && field.hasMany === true) + (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) && + !['array', 'blocks', 'group', 'point'].includes(field.type) && + !('hasMany' in field && field.hasMany === true) && + !('relationTo' in field && Array.isArray(field.relationTo)) ) { const unique = disableUnique !== true && field.unique if (unique) { @@ -412,12 +417,14 @@ export const traverseFields = ({ baseColumns, baseExtraConfig, disableNotNull: disableNotNullFromHere, + disableRelsTableUnique: true, disableUnique, fields: disableUnique ? idToUUID(field.fields) : field.fields, rootRelationships: relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, + rootUniqueRelationships: uniqueRelationships, tableName: arrayTableName, versions, withinLocalizedArrayOrBlock: isLocalized, @@ -547,12 +554,14 @@ export const traverseFields = ({ baseColumns, baseExtraConfig, disableNotNull: disableNotNullFromHere, + disableRelsTableUnique: true, disableUnique, fields: disableUnique ? idToUUID(block.fields) : block.fields, rootRelationships: relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, + rootUniqueRelationships: uniqueRelationships, tableName: blockTableName, versions, withinLocalizedArrayOrBlock: isLocalized, @@ -670,6 +679,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }) @@ -724,6 +734,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized, }) @@ -779,6 +790,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }) @@ -834,6 +846,7 @@ export const traverseFields = ({ rootRelationsToBuild, rootTableIDColType, rootTableName, + uniqueRelationships, versions, withinLocalizedArrayOrBlock, }) @@ -862,9 +875,17 @@ export const traverseFields = ({ case 'relationship': case 'upload': if (Array.isArray(field.relationTo)) { - field.relationTo.forEach((relation) => relationships.add(relation)) + field.relationTo.forEach((relation) => { + relationships.add(relation) + if (field.unique && !disableUnique && !disableRelsTableUnique) { + uniqueRelationships.add(relation) + } + }) } else if (field.hasMany) { relationships.add(field.relationTo) + if (field.unique && !disableUnique && !disableRelsTableUnique) { + uniqueRelationships.add(field.relationTo) + } } else { // simple relationships get a column on the targetTable with a foreign key to the relationTo table const relationshipConfig = adapter.payload.collections[field.relationTo].config diff --git a/test/fields/collections/Indexed/index.ts b/test/fields/collections/Indexed/index.ts index b4f2c42745..3a717c15f1 100644 --- a/test/fields/collections/Indexed/index.ts +++ b/test/fields/collections/Indexed/index.ts @@ -16,6 +16,52 @@ const IndexedFields: CollectionConfig = { type: 'text', unique: true, }, + { + name: 'uniqueRelationship', + type: 'relationship', + relationTo: 'text-fields', + unique: true, + }, + { + name: 'uniqueHasManyRelationship', + type: 'relationship', + relationTo: 'text-fields', + unique: true, + hasMany: true, + }, + { + name: 'uniqueHasManyRelationship_2', + type: 'relationship', + relationTo: 'text-fields', + hasMany: true, + unique: true, + }, + { + name: 'uniquePolymorphicRelationship', + type: 'relationship', + relationTo: ['text-fields'], + unique: true, + }, + { + name: 'uniquePolymorphicRelationship_2', + type: 'relationship', + relationTo: ['text-fields'], + unique: true, + }, + { + name: 'uniqueHasManyPolymorphicRelationship', + type: 'relationship', + relationTo: ['text-fields'], + unique: true, + hasMany: true, + }, + { + name: 'uniqueHasManyPolymorphicRelationship_2', + type: 'relationship', + relationTo: ['text-fields'], + unique: true, + hasMany: true, + }, { name: 'uniqueRequiredText', type: 'text', diff --git a/test/fields/int.spec.ts b/test/fields/int.spec.ts index 2bab5bf0a9..fe528cacc6 100644 --- a/test/fields/int.spec.ts +++ b/test/fields/int.spec.ts @@ -1,9 +1,9 @@ import type { MongooseAdapter } from '@payloadcms/db-mongodb' import type { IndexDirection, IndexOptions } from 'mongoose' -import type { PaginatedDocs, Payload } from 'payload' import { reload } from '@payloadcms/next/utilities' import path from 'path' +import { type PaginatedDocs, type Payload, ValidationError } from 'payload' import { fileURLToPath } from 'url' import type { NextRESTClient } from '../helpers/NextRESTClient.js' @@ -1035,6 +1035,218 @@ describe('Fields', () => { }).toBeDefined() }) + it('should throw validation error saving on unique relationship fields hasMany: false non polymorphic', async () => { + const textDoc = await payload.create({ collection: 'text-fields', data: { text: 'asd' } }) + + await payload + .create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '1', + text: '2', + uniqueRequiredText: '3', + uniqueRelationship: textDoc.id, + }, + }) + // Skip mongodb uniuqe error because it threats localizedUniqueRequriedText.es as undefined + .then((doc) => + payload.update({ + locale: 'es', + collection: 'indexed-fields', + data: { localizedUniqueRequiredText: '20' }, + id: doc.id, + }), + ) + + await expect( + payload.create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '4', + text: '5', + uniqueRequiredText: '10', + uniqueRelationship: textDoc.id, + }, + }), + ).rejects.toBeTruthy() + }) + + it('should throw validation error saving on unique relationship fields hasMany: true', async () => { + const textDoc = await payload.create({ collection: 'text-fields', data: { text: 'asd' } }) + + await payload + .create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '1', + text: '2', + uniqueRequiredText: '3', + uniqueHasManyRelationship: [textDoc.id], + }, + }) + // Skip mongodb uniuqe error because it threats localizedUniqueRequriedText.es as undefined + .then((doc) => + payload.update({ + locale: 'es', + collection: 'indexed-fields', + data: { localizedUniqueRequiredText: '40' }, + id: doc.id, + }), + ) + + // Should allow the same relationship on a diferrent field! + await payload + .create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '31', + text: '24', + uniqueRequiredText: '55', + uniqueHasManyRelationship_2: [textDoc.id], + }, + }) + // Skip mongodb uniuqe error because it threats localizedUniqueRequriedText.es as undefined + .then((doc) => + payload.update({ + locale: 'es', + collection: 'indexed-fields', + data: { localizedUniqueRequiredText: '30' }, + id: doc.id, + }), + ) + + await expect( + payload.create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '4', + text: '5', + uniqueRequiredText: '10', + uniqueHasManyRelationship: [textDoc.id], + }, + }), + ).rejects.toBeTruthy() + }) + + it('should throw validation error saving on unique relationship fields polymorphic', async () => { + const textDoc = await payload.create({ collection: 'text-fields', data: { text: 'asd' } }) + + await payload + .create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '1', + text: '2', + uniqueRequiredText: '3', + uniquePolymorphicRelationship: { relationTo: 'text-fields', value: textDoc.id }, + }, + }) + // Skip mongodb uniuqe error because it threats localizedUniqueRequriedText.es as undefined + .then((doc) => + payload.update({ + locale: 'es', + collection: 'indexed-fields', + data: { localizedUniqueRequiredText: '20' }, + id: doc.id, + }), + ) + + // Should allow the same relationship on a diferrent field! + await payload + .create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '31', + text: '24', + uniqueRequiredText: '55', + uniquePolymorphicRelationship_2: { relationTo: 'text-fields', value: textDoc.id }, + }, + }) + // Skip mongodb uniuqe error because it threats localizedUniqueRequriedText.es as undefined + .then((doc) => + payload.update({ + locale: 'es', + collection: 'indexed-fields', + data: { localizedUniqueRequiredText: '100' }, + id: doc.id, + }), + ) + + await expect( + payload.create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '4', + text: '5', + uniqueRequiredText: '10', + uniquePolymorphicRelationship: { relationTo: 'text-fields', value: textDoc.id }, + }, + }), + ).rejects.toBeTruthy() + }) + + it('should throw validation error saving on unique relationship fields polymorphic hasMany: true', async () => { + const textDoc = await payload.create({ collection: 'text-fields', data: { text: 'asd' } }) + + await payload + .create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '1', + text: '2', + uniqueRequiredText: '3', + uniqueHasManyPolymorphicRelationship: [ + { relationTo: 'text-fields', value: textDoc.id }, + ], + }, + }) + .then((doc) => + payload.update({ + locale: 'es', + collection: 'indexed-fields', + data: { localizedUniqueRequiredText: '100' }, + id: doc.id, + }), + ) + + // Should allow the same relationship on a diferrent field! + await payload + .create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '31', + text: '24', + uniqueRequiredText: '55', + uniqueHasManyPolymorphicRelationship_2: [ + { relationTo: 'text-fields', value: textDoc.id }, + ], + }, + }) + // Skip mongodb uniuqe error because it threats localizedUniqueRequriedText.es as undefined + .then((doc) => + payload.update({ + locale: 'es', + collection: 'indexed-fields', + data: { localizedUniqueRequiredText: '300' }, + id: doc.id, + }), + ) + + await expect( + payload.create({ + collection: 'indexed-fields', + data: { + localizedUniqueRequiredText: '4', + text: '5', + uniqueRequiredText: '10', + uniqueHasManyPolymorphicRelationship: [ + { relationTo: 'text-fields', value: textDoc.id }, + ], + }, + }), + ).rejects.toBeTruthy() + }) + it('should not throw validation error saving multiple null values for unique fields', async () => { const data = { localizedUniqueRequiredText: 'en1', diff --git a/test/fields/payload-types.ts b/test/fields/payload-types.ts index 4b5dda66a5..7d60e22422 100644 --- a/test/fields/payload-types.ts +++ b/test/fields/payload-types.ts @@ -1020,6 +1020,29 @@ export interface IndexedField { id: string; text: string; uniqueText?: string | null; + uniqueRelationship?: (string | null) | TextField; + uniqueHasManyRelationship?: (string | TextField)[] | null; + uniqueHasManyRelationship_2?: (string | TextField)[] | null; + uniquePolymorphicRelationship?: { + relationTo: 'text-fields'; + value: string | TextField; + } | null; + uniquePolymorphicRelationship_2?: { + relationTo: 'text-fields'; + value: string | TextField; + } | null; + uniqueHasManyPolymorphicRelationship?: + | { + relationTo: 'text-fields'; + value: string | TextField; + }[] + | null; + uniqueHasManyPolymorphicRelationship_2?: + | { + relationTo: 'text-fields'; + value: string | TextField; + }[] + | null; uniqueRequiredText: string; localizedUniqueRequiredText: string; /** From 7a0b419c10005c20183d9fb19372dfa9208d4450 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Fri, 11 Oct 2024 20:14:18 +0300 Subject: [PATCH 033/110] feat: add limit property to bulk update operation (#8656) Adds `limit` to `payload.update`(bulk) / REST --- .../src/routes/rest/collections/update.ts | 4 ++- .../collections/operations/local/update.ts | 1 + .../src/collections/operations/update.ts | 5 +++- test/collections-rest/int.spec.ts | 30 +++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/packages/next/src/routes/rest/collections/update.ts b/packages/next/src/routes/rest/collections/update.ts index b289c43634..3edecc1c70 100644 --- a/packages/next/src/routes/rest/collections/update.ts +++ b/packages/next/src/routes/rest/collections/update.ts @@ -10,9 +10,10 @@ import type { CollectionRouteHandler } from '../types.js' import { headersWithCors } from '../../../utilities/headersWithCors.js' export const update: CollectionRouteHandler = async ({ collection, req }) => { - const { depth, draft, where } = req.query as { + const { depth, draft, limit, where } = req.query as { depth?: string draft?: string + limit?: string where?: Where } @@ -21,6 +22,7 @@ export const update: CollectionRouteHandler = async ({ collection, req }) => { data: req.data, depth: isNumber(depth) ? Number(depth) : undefined, draft: draft === 'true', + limit: isNumber(limit) ? Number(limit) : undefined, req, where, }) diff --git a/packages/payload/src/collections/operations/local/update.ts b/packages/payload/src/collections/operations/local/update.ts index 831955b15d..6177e3b003 100644 --- a/packages/payload/src/collections/operations/local/update.ts +++ b/packages/payload/src/collections/operations/local/update.ts @@ -45,6 +45,7 @@ export type ByIDOptions = { export type ManyOptions = { id?: never + limit?: number where: Where } & BaseOptions diff --git a/packages/payload/src/collections/operations/update.ts b/packages/payload/src/collections/operations/update.ts index 5ee4ae6e48..baab4f3fb8 100644 --- a/packages/payload/src/collections/operations/update.ts +++ b/packages/payload/src/collections/operations/update.ts @@ -40,6 +40,7 @@ export type Arguments = { depth?: number disableVerificationEmail?: boolean draft?: boolean + limit?: number overrideAccess?: boolean overrideLock?: boolean overwriteExistingFiles?: boolean @@ -78,6 +79,7 @@ export const updateOperation = async ( collection, depth, draft: draftArg = false, + limit = 0, overrideAccess, overrideLock, overwriteExistingFiles = false, @@ -136,6 +138,7 @@ export const updateOperation = async ( const query = await payload.db.queryDrafts>({ collection: collectionConfig.slug, + limit, locale, pagination: false, req, @@ -146,7 +149,7 @@ export const updateOperation = async ( } else { const query = await payload.db.find({ collection: collectionConfig.slug, - limit: 0, + limit, locale, pagination: false, req, diff --git a/test/collections-rest/int.spec.ts b/test/collections-rest/int.spec.ts index 9d1c53ba57..68ef995ef7 100644 --- a/test/collections-rest/int.spec.ts +++ b/test/collections-rest/int.spec.ts @@ -154,6 +154,36 @@ describe('collections-rest', () => { expect(docs.pop().description).toEqual(description) }) + it('should bulk update with limit', async () => { + const ids = [] + for (let i = 0; i < 3; i++) { + const post = await createPost({ description: `to-update` }) + ids.push(post.id) + } + + const description = 'updated-description' + const response = await restClient.PATCH(`/${slug}`, { + body: JSON.stringify({ + description, + }), + query: { limit: 2, where: { id: { in: ids } } }, + }) + const { docs, errors } = await response.json() + + expect(errors).toHaveLength(0) + expect(response.status).toEqual(200) + expect(docs).toHaveLength(2) + expect(docs[0].description).toEqual(description) + expect(docs.pop().description).toEqual(description) + + const { docs: resDocs } = await payload.find({ + limit: 10, + collection: slug, + where: { id: { in: ids } }, + }) + expect(resDocs.at(-1).description).toEqual('to-update') + }) + it('should not bulk update with a bad query', async () => { for (let i = 0; i < 2; i++) { await createPost({ description: `desc ${i}` }) From 21606ded08450e46d2523c75c7f5a563452c27e3 Mon Sep 17 00:00:00 2001 From: Patrik Date: Fri, 11 Oct 2024 13:49:07 -0400 Subject: [PATCH 034/110] fix(db-mongodb): add validation to relationship ids (#8395) fixes https://github.com/payloadcms/payload/issues/8652 --- .../src/utilities/sanitizeRelationshipIDs.ts | 11 ++++++++-- test/database/int.spec.ts | 21 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/db-mongodb/src/utilities/sanitizeRelationshipIDs.ts b/packages/db-mongodb/src/utilities/sanitizeRelationshipIDs.ts index 7b33c56bfc..bb15fc769c 100644 --- a/packages/db-mongodb/src/utilities/sanitizeRelationshipIDs.ts +++ b/packages/db-mongodb/src/utilities/sanitizeRelationshipIDs.ts @@ -1,7 +1,7 @@ import type { CollectionConfig, Field, SanitizedConfig, TraverseFieldsCallback } from 'payload' import mongoose from 'mongoose' -import { traverseFields } from 'payload' +import { APIError, traverseFields } from 'payload' import { fieldAffectsData } from 'payload/shared' type Args = { @@ -31,7 +31,14 @@ const convertValue = ({ ) if (!customIDField) { - return new mongoose.Types.ObjectId(value) + try { + return new mongoose.Types.ObjectId(value) + } catch (error) { + throw new APIError( + `Failed to create ObjectId from value: ${value}. Error: ${error.message}`, + 400, + ) + } } return value diff --git a/test/database/int.spec.ts b/test/database/int.spec.ts index 069c277379..5c27156156 100644 --- a/test/database/int.spec.ts +++ b/test/database/int.spec.ts @@ -741,4 +741,25 @@ describe('database', () => { }), ).rejects.toThrow(QueryError) }) + + it('should not allow document creation with relationship data to an invalid document ID', async () => { + let invalidDoc + + try { + invalidDoc = await payload.create({ + collection: 'relation-b', + data: { title: 'invalid', relationship: 'not-real-id' }, + }) + } catch (error) { + expect(error).toBeInstanceOf(Error) + } + + expect(invalidDoc).toBeUndefined() + + const relationBDocs = await payload.find({ + collection: 'relation-b', + }) + + expect(relationBDocs.docs).toHaveLength(0) + }) }) From c731940239187b3fff60a22971abcd36e5384574 Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Fri, 11 Oct 2024 12:54:39 -0600 Subject: [PATCH 035/110] chore: use custom jest reporter to achieve sane jest logs (#8607) The default jest log reporter is garbage. Webstorm replaces it with their own (which is pretty good), but vscode unfortunately uses the default one. This PR does the following to the jest reporter **1. Replace the default reporter with the jest-ci-spec-reporter reporter.** The default reporter is hiding console logs and incorrectly rewriting console history. Now, logs like these: ``` [20:56:16] INFO: ---- DROPPING DATABASE ---- [20:56:17] INFO: ---- DROPPED DATABASE ---- ``` will be visible again. The default reporter was showing them for half a second, then rewrites log history and hides them. **2. add custom logger to showcase hidden error messages** Some error messages are hidden and are only displayed at the end of the test, in a very ugly way. If the test hangs, you might have to wait a long time to see those errors. This PR makes sure that errors are logged when they were intended to be logged. They will not be printed in a pretty way (Webstorm for example prints them in red and clickable, like a proper error message) - but at least they will be printed instead of leaving you in the dark **Override console global in jest setup to hide console log spam** This turns logs like ``` console.log initPayloadInt done at log (helpers/initPayloadInt.ts:27:11) ``` into `initPayloadInt done` ## CI Yes, CI logs are actually usable now. We no longer have random console logs floating around! It was horrible! Finally, you can actually see which console logs belong to which test. Before: https://github.com/payloadcms/payload/actions/runs/11241674859/job/31253918825 After: https://github.com/payloadcms/payload/actions/runs/11242035327/job/31255031760?pr=8607 **BEFORE** ![CleanShot 2024-10-08 at 21 27 23@2x](https://github.com/user-attachments/assets/7c83ced7-b4fd-4e90-95ff-2c240829c3cd) What test triggered this "ValidationError: The following field is invalid: filteredRelation" error? Who knows!! Could have been any test. We will never know... **AFTER:** Finally, clarity ![CleanShot 2024-10-08 at 21 28 15@2x](https://github.com/user-attachments/assets/a259950e-3213-4faa-9f87-e54fd970f6dc) ## Screenshots - Passing database test suite ## Passing database test suite ### Before ![CleanShot 2024-10-08 at 21 07 39@2x](https://github.com/user-attachments/assets/00a07d30-fbeb-4a52-8982-3e0bc198e278) ![CleanShot 2024-10-08 at 21 08 05@2x](https://github.com/user-attachments/assets/0bc02982-83e4-4205-a1e9-0c0277390ab2) ### After ![CleanShot 2024-10-08 at 21 06 52@2x](https://github.com/user-attachments/assets/cd1e6ac1-17c0-4859-a374-2176e698784e) ## Screenshots - Failing test ### Before - that's where it hangs ![CleanShot 2024-10-08 at 21 09 52@2x](https://github.com/user-attachments/assets/088b1074-bd57-4d9d-8de4-81f1a5edf407) ### After - that's where it hangs Actually shows me the error without having to wait 3 minutes for test to timeout: ![CleanShot 2024-10-08 at 21 13 13@2x](https://github.com/user-attachments/assets/ec91f530-2f5e-4b6d-872a-f483b9a421f4) ### Before - after waiting for 3 minutes for test to timeout: ![CleanShot 2024-10-08 at 21 12 08@2x](https://github.com/user-attachments/assets/64ac9945-3a3c-4eb5-991c-943859500bb5) (1000 lines of same error spam...) ![CleanShot 2024-10-08 at 21 19 28@2x](https://github.com/user-attachments/assets/ccd33c38-f6d9-47a8-8c5a-41c118cfe849) ### After - after waiting for 3 minutes for test to timeout: ![CleanShot 2024-10-08 at 21 14 54@2x](https://github.com/user-attachments/assets/c2240305-21da-4b4c-9e28-ee68f8b2899d) ![CleanShot 2024-10-08 at 21 15 09@2x](https://github.com/user-attachments/assets/d6f7fab6-acd4-4bcc-a560-9e86792fdbbf) (Error spam) ![CleanShot 2024-10-08 at 21 15 20@2x](https://github.com/user-attachments/assets/6be43e88-f881-4598-bb32-d7cfc90ef710) --- jest.config.js | 12 +++- pnpm-lock.yaml | 2 + test/_community/payload-types.ts | 2 +- test/jest-spec-reporter.cjs | 100 +++++++++++++++++++++++++++++++ test/jest.config.js | 4 -- test/jest.setup.js | 3 + test/jestreporter.cjs | 16 +++++ 7 files changed, 133 insertions(+), 6 deletions(-) create mode 100644 test/jest-spec-reporter.cjs create mode 100644 test/jestreporter.cjs diff --git a/jest.config.js b/jest.config.js index daddb04b22..39283f8ad5 100644 --- a/jest.config.js +++ b/jest.config.js @@ -15,6 +15,12 @@ const esModules = [ 'uint8array-extras', ].join('|') +import path from 'path' +import { fileURLToPath } from 'url' + +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) + /** @type {import('jest').Config} */ const baseJestConfig = { extensionsToTreatAsEsm: ['.ts', '.tsx'], @@ -36,10 +42,14 @@ const baseJestConfig = { '^.+\\.(t|j)sx?$': ['@swc/jest'], }, verbose: true, + reporters: [ + path.resolve(dirname, './test/jest-spec-reporter.cjs'), + path.resolve(dirname, './test/jestreporter.cjs'), + ], } if (process.env.CI) { - baseJestConfig.reporters = [['github-actions', { silent: false }], 'summary'] + baseJestConfig.reporters.push(['github-actions', { silent: false }], 'summary') } export default baseJestConfig diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c6ceb4956..09063f9b36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2787,9 +2787,11 @@ packages: '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.is' '@esbuild-kit/esm-loader@2.6.5': resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.is' '@esbuild/aix-ppc64@0.19.12': resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} diff --git a/test/_community/payload-types.ts b/test/_community/payload-types.ts index 828764d8fa..74282f914a 100644 --- a/test/_community/payload-types.ts +++ b/test/_community/payload-types.ts @@ -273,4 +273,4 @@ export interface Auth { declare module 'payload' { // @ts-ignore export interface GeneratedTypes extends Config {} -} +} \ No newline at end of file diff --git a/test/jest-spec-reporter.cjs b/test/jest-spec-reporter.cjs new file mode 100644 index 0000000000..1af65b4d31 --- /dev/null +++ b/test/jest-spec-reporter.cjs @@ -0,0 +1,100 @@ +// From https://github.com/robertbradleyux/jest-ci-spec-reporter/blob/main/src/jest-ci-spec-reporter.ts +/* +MIT License + +Copyright (c) 2023 Robert Bradley + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +'use strict' +Object.defineProperty(exports, '__esModule', { value: true }) +class JestCiSpecReporter { + onRunStart({ numTotalTestSuites }) { + console.log() + console.log(`Found ${numTotalTestSuites} test suites.`) + console.log() + } + onRunComplete(_, results) { + const { + numFailedTests, + numPassedTests, + numPendingTests, + testResults, + numTotalTests, + startTime, + } = results + testResults.forEach(({ failureMessage }) => { + if (failureMessage) { + console.log(failureMessage) + } + }) + const testResultText = numFailedTests === 0 ? 'SUCCESS' : 'FAILED' + const numNotSkippedTests = numPassedTests + numFailedTests + const runDuration = this._getRunDuration(startTime) + console.log() + console.log( + `Executed ${numNotSkippedTests} of ${numTotalTests} (skipped ${numPendingTests}) ${testResultText} (${runDuration})`, + ) + console.log(`TOTAL: ${numNotSkippedTests} ${testResultText}`) + } + onTestResult(test, { testResults }) { + testResults.forEach((result) => { + var _a, _b + const { title, duration, status, ancestorTitles } = result + const { name } = + (_b = (_a = test.context.config) === null || _a === void 0 ? void 0 : _a.displayName) !== + null && _b !== void 0 + ? _b + : {} + if (name) { + ancestorTitles.unshift(name) + } + const breadcrumbs = `${ancestorTitles.join(' > ')} >` + + console.log( + ` ${this._getTestStatus(status)} ${breadcrumbs} ${title} ${this._getTestDuration(duration)}`, + ) + }) + } + getLastError() { + return undefined + } + _getRunDuration(startTime) { + const deltaInMillis = new Date().getTime() - new Date(startTime).getTime() + const seconds = ((deltaInMillis % 60000) / 1000).toFixed(3) + return `${seconds} secs` + } + _getTestDuration(duration) { + return `\x1b[1m\x1b[30m(${duration !== null && duration !== void 0 ? duration : 0}ms)\x1b[0m` + } + _getTestStatus(status) { + switch (status) { + case 'passed': + return '\x1b[1m\x1b[32m[PASS]\x1b[0m' + case 'pending': + return '\x1b[1m\x1b[33m[SKIP]\x1b[0m' + case 'todo': + return '\x1b[1m\x1b[34m[TODO]\x1b[0m' + case 'failed': + default: + return '\x1b[1m\x1b[31m[FAIL]\x1b[0m' + } + } +} +exports.default = JestCiSpecReporter diff --git a/test/jest.config.js b/test/jest.config.js index 40c5eed18d..06d34a82c6 100644 --- a/test/jest.config.js +++ b/test/jest.config.js @@ -22,8 +22,4 @@ const customJestConfig = { }, } -if (process.env.CI) { - customJestConfig.reporters = [['github-actions', { silent: false }], 'summary'] -} - export default customJestConfig diff --git a/test/jest.setup.js b/test/jest.setup.js index 3d5ca8adcf..1e8f74cce7 100644 --- a/test/jest.setup.js +++ b/test/jest.setup.js @@ -1,3 +1,6 @@ +import console from 'console' +global.console = console + import { generateDatabaseAdapter } from './generateDatabaseAdapter.js' process.env.PAYLOAD_DISABLE_ADMIN = 'true' diff --git a/test/jestreporter.cjs b/test/jestreporter.cjs new file mode 100644 index 0000000000..6eac18a61a --- /dev/null +++ b/test/jestreporter.cjs @@ -0,0 +1,16 @@ +class CustomReporter { + constructor(globalConfig, reporterOptions, reporterContext) { + this._globalConfig = globalConfig + this._options = reporterOptions + this._context = reporterContext + } + + onTestCaseResult(test, testCaseResult) { + if (testCaseResult.status === 'passed') { + return + } + console.log('Test case result:', testCaseResult) + } +} + +module.exports = CustomReporter From 6be665f88708c99d77ad9622fe0a35e3ecb03f6e Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Mon, 14 Oct 2024 02:10:47 +0300 Subject: [PATCH 036/110] chore(eslint): payload-logger proper usage works with template literals (#8660) Improves this https://github.com/payloadcms/payload/pull/8578 to work with template literals as well, This is invalid: ```ts this.payload.logger.error('Failed to create database', err) ``` But this is valid: ```ts this.payload.logger.error(`Failed to create database ${dbName}`, err) ``` This PR fixes that image --- packages/db-postgres/src/connect.ts | 5 ++++- packages/db-vercel-postgres/src/connect.ts | 5 ++++- packages/drizzle/src/migrateReset.ts | 2 +- packages/drizzle/src/postgres/createDatabase.ts | 6 +++--- .../customRules/proper-payload-logger-usage.js | 12 ++++++------ .../tests/proper-payload-logger-usage.js | 13 +++++++++++++ .../payload/src/database/migrations/migrateReset.ts | 2 +- 7 files changed, 32 insertions(+), 13 deletions(-) diff --git a/packages/db-postgres/src/connect.ts b/packages/db-postgres/src/connect.ts index a88a62dfa8..37c077c0f3 100644 --- a/packages/db-postgres/src/connect.ts +++ b/packages/db-postgres/src/connect.ts @@ -88,7 +88,10 @@ export const connect: Connect = async function connect( return } } else { - this.payload.logger.error(`Error: cannot connect to Postgres. Details: ${err.message}`, err) + this.payload.logger.error({ + err, + msg: `Error: cannot connect to Postgres. Details: ${err.message}`, + }) } if (typeof this.rejectInitializing === 'function') { diff --git a/packages/db-vercel-postgres/src/connect.ts b/packages/db-vercel-postgres/src/connect.ts index 30644bc908..1da8676f9a 100644 --- a/packages/db-vercel-postgres/src/connect.ts +++ b/packages/db-vercel-postgres/src/connect.ts @@ -51,7 +51,10 @@ export const connect: Connect = async function connect( return } } else { - this.payload.logger.error(`Error: cannot connect to Postgres. Details: ${err.message}`, err) + this.payload.logger.error({ + err, + msg: `Error: cannot connect to Postgres. Details: ${err.message}`, + }) } if (typeof this.rejectInitializing === 'function') { diff --git a/packages/drizzle/src/migrateReset.ts b/packages/drizzle/src/migrateReset.ts index bf5588204a..b611140698 100644 --- a/packages/drizzle/src/migrateReset.ts +++ b/packages/drizzle/src/migrateReset.ts @@ -84,7 +84,7 @@ export async function migrateReset(this: DrizzleAdapter): Promise { }, }) } catch (err: unknown) { - payload.logger.error({ error: err, msg: 'Error deleting dev migration' }) + payload.logger.error({ err, msg: 'Error deleting dev migration' }) } } } diff --git a/packages/drizzle/src/postgres/createDatabase.ts b/packages/drizzle/src/postgres/createDatabase.ts index a19dc71793..f7524d2dbf 100644 --- a/packages/drizzle/src/postgres/createDatabase.ts +++ b/packages/drizzle/src/postgres/createDatabase.ts @@ -98,10 +98,10 @@ export const createDatabase = async function (this: BasePostgresAdapter, args: A return true } catch (err) { - this.payload.logger.error( - `Error: failed to create database ${dbName}. Details: ${err.message}`, + this.payload.logger.error({ err, - ) + msg: `Error: failed to create database ${dbName}. Details: ${err.message}`, + }) return false } finally { diff --git a/packages/eslint-plugin/customRules/proper-payload-logger-usage.js b/packages/eslint-plugin/customRules/proper-payload-logger-usage.js index 01817687f9..84b0076218 100644 --- a/packages/eslint-plugin/customRules/proper-payload-logger-usage.js +++ b/packages/eslint-plugin/customRules/proper-payload-logger-usage.js @@ -34,11 +34,11 @@ export const rule = { if (isPayloadLoggerError(callee)) { const args = node.arguments - // Case 1: Single string is passed as the argument + // Case 1: Single string / templated string is passed as the argument if ( args.length === 1 && - args[0].type === 'Literal' && - typeof args[0].value === 'string' + ((args[0].type === 'Literal' && typeof args[0].value === 'string') || + args[0].type === 'TemplateLiteral') ) { return // Valid: single string argument } @@ -67,11 +67,11 @@ export const rule = { return // Valid object, checked for 'err'/'error' keys } - // Case 3: Improper usage (string + error or additional err/error) + // Case 3: Improper usage (string / templated string + error or additional err/error) if ( args.length > 1 && - args[0].type === 'Literal' && - typeof args[0].value === 'string' && + ((args[0].type === 'Literal' && typeof args[0].value === 'string') || + args[0].type === 'TemplateLiteral') && args[1].type === 'Identifier' && (args[1].name === 'err' || args[1].name === 'error') ) { diff --git a/packages/eslint-plugin/tests/proper-payload-logger-usage.js b/packages/eslint-plugin/tests/proper-payload-logger-usage.js index 1eccd5123f..050b21a963 100644 --- a/packages/eslint-plugin/tests/proper-payload-logger-usage.js +++ b/packages/eslint-plugin/tests/proper-payload-logger-usage.js @@ -14,6 +14,10 @@ ruleTester.run('no-improper-payload-logger-error', rule, { { code: "payload.logger.error('Some error message')", }, + // Valid: payload.logger.error with a templated string + { + code: 'payload.logger.error(`Some error message`)', + }, // Valid: *.payload.logger.error with object { code: "this.payload.logger.error({ msg: 'another message', err })", @@ -33,6 +37,15 @@ ruleTester.run('no-improper-payload-logger-error', rule, { }, ], }, + // Invalid: payload.logger.error with both templated string and error + { + code: 'payload.logger.error(`Some error message`, err)', + errors: [ + { + messageId: 'improperUsage', + }, + ], + }, // Invalid: *.payload.logger.error with both string and error { code: "this.payload.logger.error('Some error message', error)", diff --git a/packages/payload/src/database/migrations/migrateReset.ts b/packages/payload/src/database/migrations/migrateReset.ts index 070a357163..7cd1b0b0ac 100644 --- a/packages/payload/src/database/migrations/migrateReset.ts +++ b/packages/payload/src/database/migrations/migrateReset.ts @@ -62,6 +62,6 @@ export async function migrateReset(this: BaseDatabaseAdapter): Promise { }, }) } catch (err: unknown) { - payload.logger.error({ error: err, msg: 'Error deleting dev migration' }) + payload.logger.error({ err, msg: 'Error deleting dev migration' }) } } From 855fcf34bc1adcb54a1c516f7b3c520a33e12a44 Mon Sep 17 00:00:00 2001 From: Because789 Date: Mon, 14 Oct 2024 15:08:09 +0200 Subject: [PATCH 037/110] docs: correct useTranslation import in i18n docs (#8645) --- docs/configuration/i18n.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/configuration/i18n.mdx b/docs/configuration/i18n.mdx index 7946bb2886..321de8804f 100644 --- a/docs/configuration/i18n.mdx +++ b/docs/configuration/i18n.mdx @@ -195,7 +195,7 @@ export const customTranslations: Config['i18n']['translations'] = { }, } -export type CustomTranslationsObject = typeof customTranslationsObject.en +export type CustomTranslationsObject = typeof customTranslations.en export type CustomTranslationsKeys = NestedKeysStripped ``` @@ -224,7 +224,7 @@ Import the shared translation types to use in your [Custom Component](../admin/c 'use client' import type React from 'react' -import { useTranslation } from '@payloadcms/ui/providers/Translation' +import { useTranslation } from '@payloadcms/ui' import type { CustomTranslationsObject, CustomTranslationsKeys } from '../custom-translations' From 793dfe87e77b22803f87e2e38939763412e4b2fd Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Mon, 14 Oct 2024 08:46:29 -0600 Subject: [PATCH 038/110] fix: ensure Component is not required in MappedComponent types (#8687) Component is not required if RenderedComponent is passed --- packages/payload/src/admin/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/payload/src/admin/types.ts b/packages/payload/src/admin/types.ts index ba612444a2..b053a6aff1 100644 --- a/packages/payload/src/admin/types.ts +++ b/packages/payload/src/admin/types.ts @@ -353,14 +353,14 @@ export type { } from './views/types.js' export type MappedServerComponent = { - Component: React.ComponentType + Component?: React.ComponentType props?: Partial RenderedComponent: React.ReactNode type: 'server' } export type MappedClientComponent = { - Component: React.ComponentType + Component?: React.ComponentType props?: Partial RenderedComponent?: React.ReactNode type: 'client' From a4f1af48b445e436f13b25c48a71804b7225635a Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 14 Oct 2024 08:52:00 -0600 Subject: [PATCH 039/110] fix(ui): hasMany selecting single docs clicking through instead of selecting a document (#8624) Fixes https://github.com/payloadcms/payload/issues/8500 --- .../src/elements/ListDrawer/DrawerContent.tsx | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/ui/src/elements/ListDrawer/DrawerContent.tsx b/packages/ui/src/elements/ListDrawer/DrawerContent.tsx index edae4ec536..5bb1e1b641 100644 --- a/packages/ui/src/elements/ListDrawer/DrawerContent.tsx +++ b/packages/ui/src/elements/ListDrawer/DrawerContent.tsx @@ -304,6 +304,33 @@ export const ListDrawerContent: React.FC = ({ return null } + /** + * Cell props for the table columns, we want the first item to be a clickable cell + */ + const tableColumnCellProps = [ + { + className: `${baseClass}__first-cell`, + link: false, + onClick: ({ collectionSlug: rowColl, rowData }) => { + if (typeof onSelect === 'function') { + onSelect({ + collectionSlug: rowColl, + docID: rowData.id as string, + }) + } + }, + }, + ] + + /** + * Table column cell props are being assigned by the column index + * so if enableRowSelections is true, we need to add an extra cellProps object to the start of the array + * to account for the first cell being the checkbox for row selection. + */ + if (enableRowSelections) { + tableColumnCellProps.unshift(undefined) + } + return ( <> {showLoadingOverlay && } @@ -386,20 +413,7 @@ export const ListDrawerContent: React.FC = ({ preferenceKey={preferencesKey} > { - if (typeof onSelect === 'function') { - onSelect({ - collectionSlug: rowColl, - docID: rowData.id as string, - }) - } - }, - }, - ]} + cellProps={tableColumnCellProps} collectionSlug={selectedCollectionConfig.slug} enableRowSelections={enableRowSelections} preferenceKey={preferencesKey} From e4fd1e3e0be52cc8dadefdaa3813571e851a2cf0 Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Mon, 14 Oct 2024 11:25:49 -0400 Subject: [PATCH 040/110] fix(ui): export useListRelationships (#8658) fixes https://github.com/payloadcms/payload/issues/8568 --- packages/ui/src/exports/client/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/exports/client/index.ts b/packages/ui/src/exports/client/index.ts index d62666514f..525b0963ab 100644 --- a/packages/ui/src/exports/client/index.ts +++ b/packages/ui/src/exports/client/index.ts @@ -85,7 +85,10 @@ export { SortColumn } from '../../elements/SortColumn/index.js' export { SetStepNav } from '../../elements/StepNav/SetStepNav.js' export { useStepNav } from '../../elements/StepNav/index.js' export type { StepNavItem } from '../../elements/StepNav/types.js' -export { RelationshipProvider } from '../../elements/Table/RelationshipProvider/index.js' +export { + RelationshipProvider, + useListRelationships, +} from '../../elements/Table/RelationshipProvider/index.js' export { TableCellProvider, useTableCell } from '../../elements/Table/TableCellProvider/index.js' export { type Column, Table } from '../../elements/Table/index.js' export { DefaultCell } from '../../elements/Table/DefaultCell/index.js' From 3f128c5b28dad08b8d08c41f1f312a700e3defa2 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:35:51 -0400 Subject: [PATCH 041/110] fix: ensure dropzone respects canCreate permissions (#8689) Prioritize user permissions for upload creation instead of only looking at `admin.allowCreate` --- packages/ui/src/fields/Upload/Input.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/fields/Upload/Input.tsx b/packages/ui/src/fields/Upload/Input.tsx index be6599ecef..5e52043260 100644 --- a/packages/ui/src/fields/Upload/Input.tsx +++ b/packages/ui/src/fields/Upload/Input.tsx @@ -158,6 +158,10 @@ export function UploadInput(props: UploadInputProps) { const loadedValueDocsRef = React.useRef(false) const canCreate = useMemo(() => { + if (readOnly || !allowCreate) { + return false + } + if (typeof activeRelationTo === 'string') { if (permissions?.collections && permissions.collections?.[activeRelationTo]?.create) { if (permissions.collections[activeRelationTo].create?.permission === true) { @@ -167,7 +171,7 @@ export function UploadInput(props: UploadInputProps) { } return false - }, [activeRelationTo, permissions]) + }, [activeRelationTo, permissions, readOnly, allowCreate]) const onChange = React.useCallback( (newValue) => { @@ -491,10 +495,14 @@ export function UploadInput(props: UploadInputProps) { ) : null} {showDropzone ? ( - +
- {allowCreate && ( + {canCreate && ( <>
- {allowCreate && ( + {canCreate && (

{t('general:or')} {t('upload:dragAndDrop')}

From 65d4f37dfb599a27557f067d4a77520479a6cc9e Mon Sep 17 00:00:00 2001 From: Said Akhrarov <36972061+akhrarovsaid@users.noreply.github.com> Date: Mon, 14 Oct 2024 13:51:52 -0400 Subject: [PATCH 042/110] fix(ui): show configured description on active tabs (#8675) fixes #8672 --- packages/ui/src/fields/Tabs/index.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/fields/Tabs/index.tsx b/packages/ui/src/fields/Tabs/index.tsx index fce304258a..b7e1f18bce 100644 --- a/packages/ui/src/fields/Tabs/index.tsx +++ b/packages/ui/src/fields/Tabs/index.tsx @@ -112,6 +112,12 @@ const TabsFieldComponent: TabsFieldClientComponent = (props) => { return tabPath } + const activeTabDescription = activeTabConfig.description + const activeTabStaticDescription = + typeof activeTabDescription === 'function' + ? activeTabDescription({ t: i18n.t }) + : activeTabDescription + return (
{ .filter(Boolean) .join(' ')} > - + Date: Mon, 14 Oct 2024 14:29:37 -0400 Subject: [PATCH 043/110] fix: validate should not always equate valid to true (#8696) In some instances, form states incorrectly setting valid to true even when they should not be, just because no validate function is present. This was apparent when using bulk upload drawers inside the multi-tenant example which inserts a custom field for the TenantSelector on documents. Reported internally https://payloadcms.slack.com/archives/C079W6WT0R1/p1726670927732309 --- packages/ui/src/forms/useField/index.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/forms/useField/index.tsx b/packages/ui/src/forms/useField/index.tsx index 1c39c762eb..df087e2d44 100644 --- a/packages/ui/src/forms/useField/index.tsx +++ b/packages/ui/src/forms/useField/index.tsx @@ -69,7 +69,6 @@ export const useField = (options: Options): FieldType => { const setValue = useCallback( (e, disableModifyingForm = false) => { const val = e && e.target ? e.target.value : e - dispatchField({ type: 'UPDATE', disableFormData: disableFormData || (hasRows && val > 0), @@ -176,7 +175,9 @@ export const useField = (options: Options): FieldType => { } as unknown as PayloadRequest, siblingData: getSiblingData(path), }) - : true + : typeof prevErrorMessage.current === 'string' + ? prevErrorMessage.current + : prevValid.current if (typeof isValid === 'string') { valid = false From 08f883166e42b8b92ee2fe0baea8ec6845b3df97 Mon Sep 17 00:00:00 2001 From: Patrik Date: Mon, 14 Oct 2024 14:36:47 -0400 Subject: [PATCH 044/110] fix(ui): prevents `react-select` styles being injected into `hasMany` `number` fields (#8695) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before: ![Screenshot 2024-10-14 at 1 35 16 PM](https://github.com/user-attachments/assets/0b121693-1160-493c-8c73-638394fe542e) After: ![Screenshot 2024-10-14 at 1 35 30 PM](https://github.com/user-attachments/assets/2c73d345-30b1-49ba-826b-fb20066a2e43) --- packages/ui/src/elements/ReactSelect/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ui/src/elements/ReactSelect/index.tsx b/packages/ui/src/elements/ReactSelect/index.tsx index f37fe4e3d6..e257cce6bb 100644 --- a/packages/ui/src/elements/ReactSelect/index.tsx +++ b/packages/ui/src/elements/ReactSelect/index.tsx @@ -183,6 +183,7 @@ const SelectAdapter: React.FC = (props) => { onMenuClose={onMenuClose} onMenuOpen={onMenuOpen} options={options} + unstyled={true} value={value} /> ) From d781624a86b7939fe1cfa6bf31f14c6c93cdce54 Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Mon, 14 Oct 2024 14:39:20 -0400 Subject: [PATCH 045/110] feat: add disableTransaction to local api (#8697) --- docs/database/transactions.mdx | 17 +++++++- docs/local-api/overview.mdx | 29 +++++++------- .../src/collections/operations/create.ts | 3 +- .../src/collections/operations/delete.ts | 3 +- .../src/collections/operations/deleteByID.ts | 3 +- .../src/collections/operations/duplicate.ts | 3 +- .../collections/operations/local/create.ts | 3 ++ .../collections/operations/local/delete.ts | 3 ++ .../collections/operations/local/duplicate.ts | 3 ++ .../collections/operations/local/update.ts | 3 ++ .../src/collections/operations/update.ts | 3 +- .../src/collections/operations/updateByID.ts | 3 +- .../payload/src/globals/operations/update.ts | 4 +- test/database/config.ts | 10 +++++ test/database/int.spec.ts | 40 +++++++++++++++++++ 15 files changed, 108 insertions(+), 22 deletions(-) diff --git a/docs/database/transactions.mdx b/docs/database/transactions.mdx index 373e67a0d8..70bb026838 100644 --- a/docs/database/transactions.mdx +++ b/docs/database/transactions.mdx @@ -8,7 +8,7 @@ desc: Database transactions are fully supported within Payload. Database transactions allow your application to make a series of database changes in an all-or-nothing commit. Consider an HTTP request that creates a new **Order** and has an `afterChange` hook to update the stock count of related **Items**. If an error occurs when updating an **Item** and an HTTP error is returned to the user, you would not want the new **Order** to be persisted or any other items to be changed either. This kind of interaction with the database is handled seamlessly with transactions. -By default, Payload will use transactions for all operations, as long as it is supported by the configured database. Database changes are contained within all Payload operations and any errors thrown will result in all changes being rolled back without being committed. When transactions are not supported by the database, Payload will continue to operate as expected without them. +By default, Payload will use transactions for all data changing operations, as long as it is supported by the configured database. Database changes are contained within all Payload operations and any errors thrown will result in all changes being rolled back without being committed. When transactions are not supported by the database, Payload will continue to operate as expected without them. Note: @@ -114,3 +114,18 @@ standalonePayloadScript() ## Disabling Transactions If you wish to disable transactions entirely, you can do so by passing `false` as the `transactionOptions` in your database adapter configuration. All the official Payload database adapters support this option. + +In addition to allowing database transactions to be disabled at the adapter level. You can prevent Payload from using a transaction in direct calls to the local API by adding `disableTransaction: true` to the args. For example: + +```ts +await payload.update({ + collection: 'posts', + data: { + some: 'data', + }, + where: { + slug: { equals: 'my-slug' } + }, + req: { disableTransaction: true }, +}) +``` diff --git a/docs/local-api/overview.mdx b/docs/local-api/overview.mdx index 537e031a42..c6ddb5783b 100644 --- a/docs/local-api/overview.mdx +++ b/docs/local-api/overview.mdx @@ -77,20 +77,21 @@ Both options function in exactly the same way outside of one having HMR support You can specify more options within the Local API vs. REST or GraphQL due to the server-only context that they are executed in. -| Local Option | Description | -| ------------------ | ------------ | -| `collection` | Required for Collection operations. Specifies the Collection slug to operate against. | -| `data` | The data to use within the operation. Required for `create`, `update`. | -| `depth` | [Control auto-population](../queries/depth) of nested relationship and upload fields. | -| `locale` | Specify [locale](/docs/configuration/localization) for any returned documents. | -| `fallbackLocale` | Specify a [fallback locale](/docs/configuration/localization) to use for any returned documents. | -| `overrideAccess` | Skip access control. By default, this property is set to true within all Local API operations. | -| `overrideLock` | By default, document locks are ignored (`true`). Set to `false` to enforce locks and prevent operations when a document is locked by another user. [More details](../admin/locked-documents).| -| `user` | If you set `overrideAccess` to `false`, you can pass a user to use against the access control checks. | -| `showHiddenFields` | Opt-in to receiving hidden fields. By default, they are hidden from returned documents in accordance to your config. | -| `pagination` | Set to false to return all documents and avoid querying for document counts. | -| `context` | [Context](/docs/hooks/context), which will then be passed to `context` and `req.context`, which can be read by hooks. Useful if you want to pass additional information to the hooks which shouldn't be necessarily part of the document, for example a `triggerBeforeChange` option which can be read by the BeforeChange hook to determine if it should run or not. | -| `disableErrors` | When set to `true`, errors will not be thrown. Instead, the `findByID` operation will return `null`, and the `find` operation will return an empty documents array. | +| Local Option | Description | +|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `collection` | Required for Collection operations. Specifies the Collection slug to operate against. | +| `data` | The data to use within the operation. Required for `create`, `update`. | +| `depth` | [Control auto-population](../queries/depth) of nested relationship and upload fields. | +| `locale` | Specify [locale](/docs/configuration/localization) for any returned documents. | +| `fallbackLocale` | Specify a [fallback locale](/docs/configuration/localization) to use for any returned documents. | +| `overrideAccess` | Skip access control. By default, this property is set to true within all Local API operations. | +| `overrideLock` | By default, document locks are ignored (`true`). Set to `false` to enforce locks and prevent operations when a document is locked by another user. [More details](../admin/locked-documents). | +| `user` | If you set `overrideAccess` to `false`, you can pass a user to use against the access control checks. | +| `showHiddenFields` | Opt-in to receiving hidden fields. By default, they are hidden from returned documents in accordance to your config. | +| `pagination` | Set to false to return all documents and avoid querying for document counts. | +| `context` | [Context](/docs/hooks/context), which will then be passed to `context` and `req.context`, which can be read by hooks. Useful if you want to pass additional information to the hooks which shouldn't be necessarily part of the document, for example a `triggerBeforeChange` option which can be read by the BeforeChange hook to determine if it should run or not. | +| `disableErrors` | When set to `true`, errors will not be thrown. Instead, the `findByID` operation will return `null`, and the `find` operation will return an empty documents array. | +| `disableTransaction` | When set to `true`, a [database transactions](../database/transactions) will not be initialized. | _There are more options available on an operation by operation basis outlined below._ diff --git a/packages/payload/src/collections/operations/create.ts b/packages/payload/src/collections/operations/create.ts index fd239fd7a8..bb223a100d 100644 --- a/packages/payload/src/collections/operations/create.ts +++ b/packages/payload/src/collections/operations/create.ts @@ -34,6 +34,7 @@ export type Arguments = { collection: Collection data: RequiredDataFromCollectionSlug depth?: number + disableTransaction?: boolean disableVerificationEmail?: boolean draft?: boolean overrideAccess?: boolean @@ -48,7 +49,7 @@ export const createOperation = async ( let args = incomingArgs try { - const shouldCommit = await initTransaction(args.req) + const shouldCommit = !args.disableTransaction && (await initTransaction(args.req)) ensureUsernameOrEmail({ authOptions: args.collection.config.auth, diff --git a/packages/payload/src/collections/operations/delete.ts b/packages/payload/src/collections/operations/delete.ts index b6b2b24e3c..9eabf12f7a 100644 --- a/packages/payload/src/collections/operations/delete.ts +++ b/packages/payload/src/collections/operations/delete.ts @@ -22,6 +22,7 @@ import { buildAfterOperation } from './utils.js' export type Arguments = { collection: Collection depth?: number + disableTransaction?: boolean overrideAccess?: boolean overrideLock?: boolean req: PayloadRequest @@ -41,7 +42,7 @@ export const deleteOperation = async ( let args = incomingArgs try { - const shouldCommit = await initTransaction(args.req) + const shouldCommit = !args.disableTransaction && (await initTransaction(args.req)) // ///////////////////////////////////// // beforeOperation - Collection // ///////////////////////////////////// diff --git a/packages/payload/src/collections/operations/deleteByID.ts b/packages/payload/src/collections/operations/deleteByID.ts index c9eb68ae0c..eced5be71b 100644 --- a/packages/payload/src/collections/operations/deleteByID.ts +++ b/packages/payload/src/collections/operations/deleteByID.ts @@ -19,6 +19,7 @@ import { buildAfterOperation } from './utils.js' export type Arguments = { collection: Collection depth?: number + disableTransaction?: boolean id: number | string overrideAccess?: boolean overrideLock?: boolean @@ -32,7 +33,7 @@ export const deleteByIDOperation = async ( let args = incomingArgs try { - const shouldCommit = await initTransaction(args.req) + const shouldCommit = !args.disableTransaction && (await initTransaction(args.req)) // ///////////////////////////////////// // beforeOperation - Collection diff --git a/packages/payload/src/collections/operations/duplicate.ts b/packages/payload/src/collections/operations/duplicate.ts index 6539b802e9..4fe5e4c588 100644 --- a/packages/payload/src/collections/operations/duplicate.ts +++ b/packages/payload/src/collections/operations/duplicate.ts @@ -28,6 +28,7 @@ import { buildAfterOperation } from './utils.js' export type Arguments = { collection: Collection depth?: number + disableTransaction?: boolean draft?: boolean id: number | string overrideAccess?: boolean @@ -42,7 +43,7 @@ export const duplicateOperation = async ( const operation = 'create' try { - const shouldCommit = await initTransaction(args.req) + const shouldCommit = !args.disableTransaction && (await initTransaction(args.req)) // ///////////////////////////////////// // beforeOperation - Collection diff --git a/packages/payload/src/collections/operations/local/create.ts b/packages/payload/src/collections/operations/local/create.ts index c4d26ef18c..7a63c327c8 100644 --- a/packages/payload/src/collections/operations/local/create.ts +++ b/packages/payload/src/collections/operations/local/create.ts @@ -16,6 +16,7 @@ export type Options = { context?: RequestContext data: RequiredDataFromCollectionSlug depth?: number + disableTransaction?: boolean disableVerificationEmail?: boolean draft?: boolean fallbackLocale?: TypedLocale @@ -38,6 +39,7 @@ export default async function createLocal( collection: collectionSlug, data, depth, + disableTransaction, disableVerificationEmail, draft, file, @@ -61,6 +63,7 @@ export default async function createLocal( collection, data, depth, + disableTransaction, disableVerificationEmail, draft, overrideAccess, diff --git a/packages/payload/src/collections/operations/local/delete.ts b/packages/payload/src/collections/operations/local/delete.ts index b418455e83..8d9191faad 100644 --- a/packages/payload/src/collections/operations/local/delete.ts +++ b/packages/payload/src/collections/operations/local/delete.ts @@ -14,6 +14,7 @@ export type BaseOptions = { */ context?: RequestContext depth?: number + disableTransaction?: boolean fallbackLocale?: TypedLocale locale?: TypedLocale overrideAccess?: boolean @@ -55,6 +56,7 @@ async function deleteLocal( id, collection: collectionSlug, depth, + disableTransaction, overrideAccess = true, overrideLock, showHiddenFields, @@ -73,6 +75,7 @@ async function deleteLocal( id, collection, depth, + disableTransaction, overrideAccess, overrideLock, req: await createLocalReq(options, payload), diff --git a/packages/payload/src/collections/operations/local/duplicate.ts b/packages/payload/src/collections/operations/local/duplicate.ts index fb2463400f..5e7097f6ab 100644 --- a/packages/payload/src/collections/operations/local/duplicate.ts +++ b/packages/payload/src/collections/operations/local/duplicate.ts @@ -14,6 +14,7 @@ export type Options = { */ context?: RequestContext depth?: number + disableTransaction?: boolean draft?: boolean fallbackLocale?: TypedLocale id: number | string @@ -32,6 +33,7 @@ export async function duplicate( id, collection: collectionSlug, depth, + disableTransaction, draft, overrideAccess = true, showHiddenFields, @@ -57,6 +59,7 @@ export async function duplicate( id, collection, depth, + disableTransaction, draft, overrideAccess, req, diff --git a/packages/payload/src/collections/operations/local/update.ts b/packages/payload/src/collections/operations/local/update.ts index 6177e3b003..609661c3e6 100644 --- a/packages/payload/src/collections/operations/local/update.ts +++ b/packages/payload/src/collections/operations/local/update.ts @@ -24,6 +24,7 @@ export type BaseOptions = { context?: RequestContext data: DeepPartial> depth?: number + disableTransaction?: boolean draft?: boolean fallbackLocale?: TypedLocale file?: File @@ -73,6 +74,7 @@ async function updateLocal( collection: collectionSlug, data, depth, + disableTransaction, draft, file, filePath, @@ -101,6 +103,7 @@ async function updateLocal( collection, data, depth, + disableTransaction, draft, overrideAccess, overrideLock, diff --git a/packages/payload/src/collections/operations/update.ts b/packages/payload/src/collections/operations/update.ts index baab4f3fb8..ffcba363c2 100644 --- a/packages/payload/src/collections/operations/update.ts +++ b/packages/payload/src/collections/operations/update.ts @@ -38,6 +38,7 @@ export type Arguments = { collection: Collection data: DeepPartial> depth?: number + disableTransaction?: boolean disableVerificationEmail?: boolean draft?: boolean limit?: number @@ -55,7 +56,7 @@ export const updateOperation = async ( let args = incomingArgs try { - const shouldCommit = await initTransaction(args.req) + const shouldCommit = !args.disableTransaction && (await initTransaction(args.req)) // ///////////////////////////////////// // beforeOperation - Collection diff --git a/packages/payload/src/collections/operations/updateByID.ts b/packages/payload/src/collections/operations/updateByID.ts index f9146b6211..6fe0942484 100644 --- a/packages/payload/src/collections/operations/updateByID.ts +++ b/packages/payload/src/collections/operations/updateByID.ts @@ -39,6 +39,7 @@ export type Arguments = { collection: Collection data: DeepPartial> depth?: number + disableTransaction?: boolean disableVerificationEmail?: boolean draft?: boolean id: number | string @@ -56,7 +57,7 @@ export const updateByIDOperation = async ( let args = incomingArgs try { - const shouldCommit = await initTransaction(args.req) + const shouldCommit = !args.disableTransaction && (await initTransaction(args.req)) // ///////////////////////////////////// // beforeOperation - Collection diff --git a/packages/payload/src/globals/operations/update.ts b/packages/payload/src/globals/operations/update.ts index 9d981b8e37..d6d01c8880 100644 --- a/packages/payload/src/globals/operations/update.ts +++ b/packages/payload/src/globals/operations/update.ts @@ -21,6 +21,7 @@ type Args = { autosave?: boolean data: DeepPartial, 'id'>> depth?: number + disableTransaction?: boolean draft?: boolean globalConfig: SanitizedGlobalConfig overrideAccess?: boolean @@ -42,6 +43,7 @@ export const updateOperation = async ( slug, autosave, depth, + disableTransaction, draft: draftArg, globalConfig, overrideAccess, @@ -53,7 +55,7 @@ export const updateOperation = async ( } = args try { - const shouldCommit = await initTransaction(req) + const shouldCommit = !disableTransaction && (await initTransaction(req)) let { data } = args diff --git a/test/database/config.ts b/test/database/config.ts index e267435c21..0d243cea37 100644 --- a/test/database/config.ts +++ b/test/database/config.ts @@ -28,6 +28,16 @@ export default buildConfigWithDefaults({ type: 'text', required: true, }, + { + name: 'hasTransaction', + type: 'checkbox', + hooks: { + beforeChange: [({ req }) => !!req.transactionID], + }, + admin: { + readOnly: true, + }, + }, { name: 'throwAfterChange', type: 'checkbox', diff --git a/test/database/int.spec.ts b/test/database/int.spec.ts index 5c27156156..5bd207bbf2 100644 --- a/test/database/int.spec.ts +++ b/test/database/int.spec.ts @@ -458,6 +458,46 @@ describe('database', () => { ).rejects.toThrow('Not Found') }) } + + describe('disableTransaction', () => { + let disabledTransactionPost + beforeAll(async () => { + disabledTransactionPost = await payload.create({ + collection, + data: { + title, + }, + disableTransaction: true, + }) + }) + it('should not use transaction calling create() with disableTransaction', () => { + expect(disabledTransactionPost.hasTransaction).toBeFalsy() + }) + it('should not use transaction calling update() with disableTransaction', async () => { + const result = await payload.update({ + collection, + id: disabledTransactionPost.id, + data: { + title, + }, + disableTransaction: true, + }) + + expect(result.hasTransaction).toBeFalsy() + }) + it('should not use transaction calling delete() with disableTransaction', async () => { + const result = await payload.delete({ + collection, + id: disabledTransactionPost.id, + data: { + title, + }, + disableTransaction: true, + }) + + expect(result.hasTransaction).toBeFalsy() + }) + }) }) }) From e3957d746be1665d32e7362a9139769e66b62f19 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 14 Oct 2024 13:20:52 -0600 Subject: [PATCH 046/110] fix(ui): react-datepicker in number fields and datepicker visual issues (#8694) Fixes https://github.com/payloadcms/payload/issues/8683 Number fields now display correctly ![image](https://github.com/user-attachments/assets/edf5e8d9-2292-49d2-99b7-c10e940b2a49) Fixes issue with react-datepicker by manually copying in the css of the library so it can be layered in ![image](https://github.com/user-attachments/assets/fcaec51a-5914-4fb5-be12-7fa2cf44a176) --- .../ui/src/elements/DatePicker/DatePicker.tsx | 2 +- .../ui/src/elements/DatePicker/library.scss | 859 ++++++++++++++++++ 2 files changed, 860 insertions(+), 1 deletion(-) create mode 100644 packages/ui/src/elements/DatePicker/library.scss diff --git a/packages/ui/src/elements/DatePicker/DatePicker.tsx b/packages/ui/src/elements/DatePicker/DatePicker.tsx index 3e505dd8b3..8b79442238 100644 --- a/packages/ui/src/elements/DatePicker/DatePicker.tsx +++ b/packages/ui/src/elements/DatePicker/DatePicker.tsx @@ -5,7 +5,6 @@ import React from 'react' import ReactDatePickerDefaultImport, { registerLocale } from 'react-datepicker' const ReactDatePicker = (ReactDatePickerDefaultImport.default || ReactDatePickerDefaultImport) as unknown as typeof ReactDatePickerDefaultImport.default -import 'react-datepicker/dist/react-datepicker.css' import type { Props } from './types.js' @@ -13,6 +12,7 @@ import { CalendarIcon } from '../../icons/Calendar/index.js' import { XIcon } from '../../icons/X/index.js' import { useTranslation } from '../../providers/Translation/index.js' import { getFormattedLocale } from './getFormattedLocale.js' +import './library.scss' import './index.scss' const baseClass = 'date-time-picker' diff --git a/packages/ui/src/elements/DatePicker/library.scss b/packages/ui/src/elements/DatePicker/library.scss new file mode 100644 index 0000000000..7bedf4e1d9 --- /dev/null +++ b/packages/ui/src/elements/DatePicker/library.scss @@ -0,0 +1,859 @@ +// CSS manually copied into the payload-default layer from the react-datepicker library +// see: /node_modules/react-datepicker/dist/react-datepicker.css + +@layer payload-default { + .react-datepicker__year-read-view--down-arrow, + .react-datepicker__month-read-view--down-arrow, + .react-datepicker__month-year-read-view--down-arrow, + .react-datepicker__navigation-icon::before { + border-color: #ccc; + border-style: solid; + border-width: 3px 3px 0 0; + content: ''; + display: block; + height: 9px; + position: absolute; + top: 6px; + width: 9px; + } + .react-datepicker-wrapper { + display: inline-block; + padding: 0; + border: 0; + } + + .react-datepicker { + font-family: 'Helvetica Neue', helvetica, arial, sans-serif; + font-size: 0.8rem; + background-color: #fff; + color: #000; + border: 1px solid #aeaeae; + border-radius: 0.3rem; + display: inline-block; + position: relative; + line-height: initial; + } + + .react-datepicker--time-only .react-datepicker__time-container { + border-left: 0; + } + .react-datepicker--time-only .react-datepicker__time, + .react-datepicker--time-only .react-datepicker__time-box { + border-bottom-left-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; + } + + .react-datepicker-popper { + z-index: 1; + line-height: 0; + } + .react-datepicker-popper .react-datepicker__triangle { + stroke: #aeaeae; + } + .react-datepicker-popper[data-placement^='bottom'] .react-datepicker__triangle { + fill: #f0f0f0; + color: #f0f0f0; + } + .react-datepicker-popper[data-placement^='top'] .react-datepicker__triangle { + fill: #fff; + color: #fff; + } + + .react-datepicker__header { + text-align: center; + background-color: #f0f0f0; + border-bottom: 1px solid #aeaeae; + border-top-left-radius: 0.3rem; + padding: 8px 0; + position: relative; + } + .react-datepicker__header--time { + padding-bottom: 8px; + padding-left: 5px; + padding-right: 5px; + } + .react-datepicker__header--time:not(.react-datepicker__header--time--only) { + border-top-left-radius: 0; + } + .react-datepicker__header:not(.react-datepicker__header--has-time-select) { + border-top-right-radius: 0.3rem; + } + + .react-datepicker__year-dropdown-container--select, + .react-datepicker__month-dropdown-container--select, + .react-datepicker__month-year-dropdown-container--select, + .react-datepicker__year-dropdown-container--scroll, + .react-datepicker__month-dropdown-container--scroll, + .react-datepicker__month-year-dropdown-container--scroll { + display: inline-block; + margin: 0 15px; + } + + .react-datepicker__current-month, + .react-datepicker-time__header, + .react-datepicker-year-header { + margin-top: 0; + color: #000; + font-weight: bold; + font-size: 0.944rem; + } + + .react-datepicker-time__header { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + .react-datepicker__navigation { + align-items: center; + background: none; + display: flex; + justify-content: center; + text-align: center; + cursor: pointer; + position: absolute; + top: 2px; + padding: 0; + border: none; + z-index: 1; + height: 32px; + width: 32px; + text-indent: -999em; + overflow: hidden; + } + .react-datepicker__navigation--previous { + left: 2px; + } + .react-datepicker__navigation--next { + right: 2px; + } + .react-datepicker__navigation--next--with-time:not( + .react-datepicker__navigation--next--with-today-button + ) { + right: 85px; + } + .react-datepicker__navigation--years { + position: relative; + top: 0; + display: block; + margin-left: auto; + margin-right: auto; + } + .react-datepicker__navigation--years-previous { + top: 4px; + } + .react-datepicker__navigation--years-upcoming { + top: -4px; + } + .react-datepicker__navigation:hover *::before { + border-color: #a6a6a6; + } + + .react-datepicker__navigation-icon { + position: relative; + top: -1px; + font-size: 20px; + width: 0; + } + .react-datepicker__navigation-icon--next { + left: -2px; + } + .react-datepicker__navigation-icon--next::before { + transform: rotate(45deg); + left: -7px; + } + .react-datepicker__navigation-icon--previous { + right: -2px; + } + .react-datepicker__navigation-icon--previous::before { + transform: rotate(225deg); + right: -7px; + } + + .react-datepicker__month-container { + float: left; + } + + .react-datepicker__year { + margin: 0.4rem; + text-align: center; + } + .react-datepicker__year-wrapper { + display: flex; + flex-wrap: wrap; + max-width: 180px; + } + .react-datepicker__year .react-datepicker__year-text { + display: inline-block; + width: 4rem; + margin: 2px; + } + + .react-datepicker__month { + margin: 0.4rem; + text-align: center; + } + .react-datepicker__month .react-datepicker__month-text, + .react-datepicker__month .react-datepicker__quarter-text { + display: inline-block; + width: 4rem; + margin: 2px; + } + + .react-datepicker__input-time-container { + clear: both; + width: 100%; + float: left; + margin: 5px 0 10px 15px; + text-align: left; + } + .react-datepicker__input-time-container .react-datepicker-time__caption { + display: inline-block; + } + .react-datepicker__input-time-container .react-datepicker-time__input-container { + display: inline-block; + } + .react-datepicker__input-time-container + .react-datepicker-time__input-container + .react-datepicker-time__input { + display: inline-block; + margin-left: 10px; + } + .react-datepicker__input-time-container + .react-datepicker-time__input-container + .react-datepicker-time__input + input { + width: auto; + } + .react-datepicker__input-time-container + .react-datepicker-time__input-container + .react-datepicker-time__input + input[type='time']::-webkit-inner-spin-button, + .react-datepicker__input-time-container + .react-datepicker-time__input-container + .react-datepicker-time__input + input[type='time']::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + } + .react-datepicker__input-time-container + .react-datepicker-time__input-container + .react-datepicker-time__input + input[type='time'] { + -moz-appearance: textfield; + } + .react-datepicker__input-time-container + .react-datepicker-time__input-container + .react-datepicker-time__delimiter { + margin-left: 5px; + display: inline-block; + } + + .react-datepicker__time-container { + float: right; + border-left: 1px solid #aeaeae; + width: 85px; + } + .react-datepicker__time-container--with-today-button { + display: inline; + border: 1px solid #aeaeae; + border-radius: 0.3rem; + position: absolute; + right: -87px; + top: 0; + } + .react-datepicker__time-container .react-datepicker__time { + position: relative; + background: white; + border-bottom-right-radius: 0.3rem; + } + .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box { + width: 85px; + overflow-x: hidden; + margin: 0 auto; + text-align: center; + border-bottom-right-radius: 0.3rem; + } + .react-datepicker__time-container + .react-datepicker__time + .react-datepicker__time-box + ul.react-datepicker__time-list { + list-style: none; + margin: 0; + height: calc(195px + 1.7rem / 2); + overflow-y: scroll; + padding-right: 0; + padding-left: 0; + width: 100%; + box-sizing: content-box; + } + .react-datepicker__time-container + .react-datepicker__time + .react-datepicker__time-box + ul.react-datepicker__time-list + li.react-datepicker__time-list-item { + height: 30px; + padding: 5px 10px; + white-space: nowrap; + } + .react-datepicker__time-container + .react-datepicker__time + .react-datepicker__time-box + ul.react-datepicker__time-list + li.react-datepicker__time-list-item:hover { + cursor: pointer; + background-color: #f0f0f0; + } + .react-datepicker__time-container + .react-datepicker__time + .react-datepicker__time-box + ul.react-datepicker__time-list + li.react-datepicker__time-list-item--selected { + background-color: #216ba5; + color: white; + font-weight: bold; + } + .react-datepicker__time-container + .react-datepicker__time + .react-datepicker__time-box + ul.react-datepicker__time-list + li.react-datepicker__time-list-item--selected:hover { + background-color: #216ba5; + } + .react-datepicker__time-container + .react-datepicker__time + .react-datepicker__time-box + ul.react-datepicker__time-list + li.react-datepicker__time-list-item--disabled { + color: #ccc; + } + .react-datepicker__time-container + .react-datepicker__time + .react-datepicker__time-box + ul.react-datepicker__time-list + li.react-datepicker__time-list-item--disabled:hover { + cursor: default; + background-color: transparent; + } + + .react-datepicker__week-number { + color: #ccc; + display: inline-block; + width: 1.7rem; + line-height: 1.7rem; + text-align: center; + margin: 0.166rem; + } + .react-datepicker__week-number.react-datepicker__week-number--clickable { + cursor: pointer; + } + .react-datepicker__week-number.react-datepicker__week-number--clickable:not( + .react-datepicker__week-number--selected, + .react-datepicker__week-number--keyboard-selected + ):hover { + border-radius: 0.3rem; + background-color: #f0f0f0; + } + .react-datepicker__week-number--selected { + border-radius: 0.3rem; + background-color: #216ba5; + color: #fff; + } + .react-datepicker__week-number--selected:hover { + background-color: #1d5d90; + } + .react-datepicker__week-number--keyboard-selected { + border-radius: 0.3rem; + background-color: #2a87d0; + color: #fff; + } + .react-datepicker__week-number--keyboard-selected:hover { + background-color: #1d5d90; + } + + .react-datepicker__day-names { + white-space: nowrap; + margin-bottom: -8px; + } + + .react-datepicker__week { + white-space: nowrap; + } + + .react-datepicker__day-name, + .react-datepicker__day, + .react-datepicker__time-name { + color: #000; + display: inline-block; + width: 1.7rem; + line-height: 1.7rem; + text-align: center; + margin: 0.166rem; + } + + .react-datepicker__day, + .react-datepicker__month-text, + .react-datepicker__quarter-text, + .react-datepicker__year-text { + cursor: pointer; + } + .react-datepicker__day:hover, + .react-datepicker__month-text:hover, + .react-datepicker__quarter-text:hover, + .react-datepicker__year-text:hover { + border-radius: 0.3rem; + background-color: #f0f0f0; + } + .react-datepicker__day--today, + .react-datepicker__month-text--today, + .react-datepicker__quarter-text--today, + .react-datepicker__year-text--today { + font-weight: bold; + } + .react-datepicker__day--highlighted, + .react-datepicker__month-text--highlighted, + .react-datepicker__quarter-text--highlighted, + .react-datepicker__year-text--highlighted { + border-radius: 0.3rem; + background-color: #3dcc4a; + color: #fff; + } + .react-datepicker__day--highlighted:hover, + .react-datepicker__month-text--highlighted:hover, + .react-datepicker__quarter-text--highlighted:hover, + .react-datepicker__year-text--highlighted:hover { + background-color: #32be3f; + } + .react-datepicker__day--highlighted-custom-1, + .react-datepicker__month-text--highlighted-custom-1, + .react-datepicker__quarter-text--highlighted-custom-1, + .react-datepicker__year-text--highlighted-custom-1 { + color: magenta; + } + .react-datepicker__day--highlighted-custom-2, + .react-datepicker__month-text--highlighted-custom-2, + .react-datepicker__quarter-text--highlighted-custom-2, + .react-datepicker__year-text--highlighted-custom-2 { + color: green; + } + .react-datepicker__day--holidays, + .react-datepicker__month-text--holidays, + .react-datepicker__quarter-text--holidays, + .react-datepicker__year-text--holidays { + position: relative; + border-radius: 0.3rem; + background-color: #ff6803; + color: #fff; + } + .react-datepicker__day--holidays .overlay, + .react-datepicker__month-text--holidays .overlay, + .react-datepicker__quarter-text--holidays .overlay, + .react-datepicker__year-text--holidays .overlay { + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%); + background-color: #333; + color: #fff; + padding: 4px; + border-radius: 4px; + white-space: nowrap; + visibility: hidden; + opacity: 0; + transition: + visibility 0s, + opacity 0.3s ease-in-out; + } + .react-datepicker__day--holidays:hover, + .react-datepicker__month-text--holidays:hover, + .react-datepicker__quarter-text--holidays:hover, + .react-datepicker__year-text--holidays:hover { + background-color: #cf5300; + } + .react-datepicker__day--holidays:hover .overlay, + .react-datepicker__month-text--holidays:hover .overlay, + .react-datepicker__quarter-text--holidays:hover .overlay, + .react-datepicker__year-text--holidays:hover .overlay { + visibility: visible; + opacity: 1; + } + .react-datepicker__day--selected, + .react-datepicker__day--in-selecting-range, + .react-datepicker__day--in-range, + .react-datepicker__month-text--selected, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__month-text--in-range, + .react-datepicker__quarter-text--selected, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__quarter-text--in-range, + .react-datepicker__year-text--selected, + .react-datepicker__year-text--in-selecting-range, + .react-datepicker__year-text--in-range { + border-radius: 0.3rem; + background-color: #216ba5; + color: #fff; + } + .react-datepicker__day--selected:hover, + .react-datepicker__day--in-selecting-range:hover, + .react-datepicker__day--in-range:hover, + .react-datepicker__month-text--selected:hover, + .react-datepicker__month-text--in-selecting-range:hover, + .react-datepicker__month-text--in-range:hover, + .react-datepicker__quarter-text--selected:hover, + .react-datepicker__quarter-text--in-selecting-range:hover, + .react-datepicker__quarter-text--in-range:hover, + .react-datepicker__year-text--selected:hover, + .react-datepicker__year-text--in-selecting-range:hover, + .react-datepicker__year-text--in-range:hover { + background-color: #1d5d90; + } + .react-datepicker__day--keyboard-selected, + .react-datepicker__month-text--keyboard-selected, + .react-datepicker__quarter-text--keyboard-selected, + .react-datepicker__year-text--keyboard-selected { + border-radius: 0.3rem; + background-color: #bad9f1; + color: rgb(0, 0, 0); + } + .react-datepicker__day--keyboard-selected:hover, + .react-datepicker__month-text--keyboard-selected:hover, + .react-datepicker__quarter-text--keyboard-selected:hover, + .react-datepicker__year-text--keyboard-selected:hover { + background-color: #1d5d90; + } + .react-datepicker__day--in-selecting-range:not( + .react-datepicker__day--in-range, + .react-datepicker__month-text--in-range, + .react-datepicker__quarter-text--in-range, + .react-datepicker__year-text--in-range + ), + .react-datepicker__month-text--in-selecting-range:not( + .react-datepicker__day--in-range, + .react-datepicker__month-text--in-range, + .react-datepicker__quarter-text--in-range, + .react-datepicker__year-text--in-range + ), + .react-datepicker__quarter-text--in-selecting-range:not( + .react-datepicker__day--in-range, + .react-datepicker__month-text--in-range, + .react-datepicker__quarter-text--in-range, + .react-datepicker__year-text--in-range + ), + .react-datepicker__year-text--in-selecting-range:not( + .react-datepicker__day--in-range, + .react-datepicker__month-text--in-range, + .react-datepicker__quarter-text--in-range, + .react-datepicker__year-text--in-range + ) { + background-color: rgba(33, 107, 165, 0.5); + } + .react-datepicker__month--selecting-range + .react-datepicker__day--in-range:not( + .react-datepicker__day--in-selecting-range, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__year-text--in-selecting-range + ), + .react-datepicker__year--selecting-range + .react-datepicker__day--in-range:not( + .react-datepicker__day--in-selecting-range, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__year-text--in-selecting-range + ), + .react-datepicker__month--selecting-range + .react-datepicker__month-text--in-range:not( + .react-datepicker__day--in-selecting-range, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__year-text--in-selecting-range + ), + .react-datepicker__year--selecting-range + .react-datepicker__month-text--in-range:not( + .react-datepicker__day--in-selecting-range, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__year-text--in-selecting-range + ), + .react-datepicker__month--selecting-range + .react-datepicker__quarter-text--in-range:not( + .react-datepicker__day--in-selecting-range, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__year-text--in-selecting-range + ), + .react-datepicker__year--selecting-range + .react-datepicker__quarter-text--in-range:not( + .react-datepicker__day--in-selecting-range, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__year-text--in-selecting-range + ), + .react-datepicker__month--selecting-range + .react-datepicker__year-text--in-range:not( + .react-datepicker__day--in-selecting-range, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__year-text--in-selecting-range + ), + .react-datepicker__year--selecting-range + .react-datepicker__year-text--in-range:not( + .react-datepicker__day--in-selecting-range, + .react-datepicker__month-text--in-selecting-range, + .react-datepicker__quarter-text--in-selecting-range, + .react-datepicker__year-text--in-selecting-range + ) { + background-color: #f0f0f0; + color: #000; + } + .react-datepicker__day--disabled, + .react-datepicker__month-text--disabled, + .react-datepicker__quarter-text--disabled, + .react-datepicker__year-text--disabled { + cursor: default; + color: #ccc; + } + .react-datepicker__day--disabled:hover, + .react-datepicker__month-text--disabled:hover, + .react-datepicker__quarter-text--disabled:hover, + .react-datepicker__year-text--disabled:hover { + background-color: transparent; + } + .react-datepicker__day--disabled .overlay, + .react-datepicker__month-text--disabled .overlay, + .react-datepicker__quarter-text--disabled .overlay, + .react-datepicker__year-text--disabled .overlay { + position: absolute; + bottom: 70%; + left: 50%; + transform: translateX(-50%); + background-color: #333; + color: #fff; + padding: 4px; + border-radius: 4px; + white-space: nowrap; + visibility: hidden; + opacity: 0; + transition: + visibility 0s, + opacity 0.3s ease-in-out; + } + + .react-datepicker__input-container { + position: relative; + display: inline-block; + width: 100%; + } + .react-datepicker__input-container .react-datepicker__calendar-icon { + position: absolute; + padding: 0.5rem; + box-sizing: content-box; + } + + .react-datepicker__view-calendar-icon input { + padding: 6px 10px 5px 25px; + } + + .react-datepicker__year-read-view, + .react-datepicker__month-read-view, + .react-datepicker__month-year-read-view { + border: 1px solid transparent; + border-radius: 0.3rem; + position: relative; + } + .react-datepicker__year-read-view:hover, + .react-datepicker__month-read-view:hover, + .react-datepicker__month-year-read-view:hover { + cursor: pointer; + } + .react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow, + .react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow, + .react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow, + .react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow, + .react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow, + .react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow { + border-top-color: #b3b3b3; + } + .react-datepicker__year-read-view--down-arrow, + .react-datepicker__month-read-view--down-arrow, + .react-datepicker__month-year-read-view--down-arrow { + transform: rotate(135deg); + right: -16px; + top: 0; + } + + .react-datepicker__year-dropdown, + .react-datepicker__month-dropdown, + .react-datepicker__month-year-dropdown { + background-color: #f0f0f0; + position: absolute; + width: 50%; + left: 25%; + top: 30px; + z-index: 1; + text-align: center; + border-radius: 0.3rem; + border: 1px solid #aeaeae; + } + .react-datepicker__year-dropdown:hover, + .react-datepicker__month-dropdown:hover, + .react-datepicker__month-year-dropdown:hover { + cursor: pointer; + } + .react-datepicker__year-dropdown--scrollable, + .react-datepicker__month-dropdown--scrollable, + .react-datepicker__month-year-dropdown--scrollable { + height: 150px; + overflow-y: scroll; + } + + .react-datepicker__year-option, + .react-datepicker__month-option, + .react-datepicker__month-year-option { + line-height: 20px; + width: 100%; + display: block; + margin-left: auto; + margin-right: auto; + } + .react-datepicker__year-option:first-of-type, + .react-datepicker__month-option:first-of-type, + .react-datepicker__month-year-option:first-of-type { + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; + } + .react-datepicker__year-option:last-of-type, + .react-datepicker__month-option:last-of-type, + .react-datepicker__month-year-option:last-of-type { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border-bottom-left-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; + } + .react-datepicker__year-option:hover, + .react-datepicker__month-option:hover, + .react-datepicker__month-year-option:hover { + background-color: #ccc; + } + .react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming, + .react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming, + .react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming { + border-bottom-color: #b3b3b3; + } + .react-datepicker__year-option:hover .react-datepicker__navigation--years-previous, + .react-datepicker__month-option:hover .react-datepicker__navigation--years-previous, + .react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous { + border-top-color: #b3b3b3; + } + .react-datepicker__year-option--selected, + .react-datepicker__month-option--selected, + .react-datepicker__month-year-option--selected { + position: absolute; + left: 15px; + } + + .react-datepicker__close-icon { + cursor: pointer; + background-color: transparent; + border: 0; + outline: 0; + padding: 0 6px 0 0; + position: absolute; + top: 0; + right: 0; + height: 100%; + display: table-cell; + vertical-align: middle; + } + .react-datepicker__close-icon::after { + cursor: pointer; + background-color: #216ba5; + color: #fff; + border-radius: 50%; + height: 16px; + width: 16px; + padding: 2px; + font-size: 12px; + line-height: 1; + text-align: center; + display: table-cell; + vertical-align: middle; + content: '×'; + } + .react-datepicker__close-icon--disabled { + cursor: default; + } + .react-datepicker__close-icon--disabled::after { + cursor: default; + background-color: #ccc; + } + + .react-datepicker__today-button { + background: #f0f0f0; + border-top: 1px solid #aeaeae; + cursor: pointer; + text-align: center; + font-weight: bold; + padding: 5px 0; + clear: left; + } + + .react-datepicker__portal { + position: fixed; + width: 100vw; + height: 100vh; + background-color: rgba(0, 0, 0, 0.8); + left: 0; + top: 0; + justify-content: center; + align-items: center; + display: flex; + z-index: 2147483647; + } + .react-datepicker__portal .react-datepicker__day-name, + .react-datepicker__portal .react-datepicker__day, + .react-datepicker__portal .react-datepicker__time-name { + width: 3rem; + line-height: 3rem; + } + @media (max-width: 400px), (max-height: 550px) { + .react-datepicker__portal .react-datepicker__day-name, + .react-datepicker__portal .react-datepicker__day, + .react-datepicker__portal .react-datepicker__time-name { + width: 2rem; + line-height: 2rem; + } + } + .react-datepicker__portal .react-datepicker__current-month, + .react-datepicker__portal .react-datepicker-time__header { + font-size: 1.44rem; + } + + .react-datepicker__children-container { + width: 13.8rem; + margin: 0.4rem; + padding-right: 0.2rem; + padding-left: 0.2rem; + height: auto; + } + + .react-datepicker__aria-live { + position: absolute; + clip-path: circle(0); + border: 0; + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + width: 1px; + white-space: nowrap; + } + + .react-datepicker__calendar-icon { + width: 1em; + height: 1em; + vertical-align: -0.125em; + } +} From f1ebf56691124e1feca5889f398124e714f6c5f5 Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Mon, 14 Oct 2024 14:02:26 -0600 Subject: [PATCH 047/110] chore: when dev server restarts, ensure exiting the parent process kills child process (#8703) --- test/dev.ts | 13 +++++++++++-- test/safelyRunScript.ts | 22 ++++++++++++++-------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/test/dev.ts b/test/dev.ts index 21432f3a51..583ab613a9 100644 --- a/test/dev.ts +++ b/test/dev.ts @@ -9,7 +9,7 @@ import { loadEnv } from 'payload/node' import { getNextRootDir } from './helpers/getNextRootDir.js' import { runInit } from './runInit.js' -import { safelyRunScriptFunction } from './safelyRunScript.js' +import { child, safelyRunScriptFunction } from './safelyRunScript.js' import { createTestHooks } from './testHooks.js' const prod = process.argv.includes('--prod') @@ -59,6 +59,15 @@ await nextDev({ port }, 'default', rootDir) void fetch(`http://localhost:${port}${adminRoute}`) // This ensures that the next-server process is killed when this process is killed and doesn't linger around. -process.on('SIGINT', function () { +process.on('SIGINT', () => { + if (child) { + child.kill('SIGINT') + } process.exit(0) }) +process.on('SIGTERM', () => { + if (child) { + child.kill('SIGINT') + } + process.exit(0) // Exit the parent process +}) diff --git a/test/safelyRunScript.ts b/test/safelyRunScript.ts index 94c579fabc..706bc0930c 100644 --- a/test/safelyRunScript.ts +++ b/test/safelyRunScript.ts @@ -1,6 +1,8 @@ import { spawn } from 'child_process' import path from 'path' +export let child + /** * Sometimes, running certain functions in certain scripts from the command line will cause the script to be terminated * with a "Detected unsettled top-level await" error. This often happens if that function imports the payload config. @@ -29,7 +31,7 @@ export async function safelyRunScriptFunction( }) } -function restartProcess(reason: string): never { +function restartProcess(reason: string) { console.warn(`Restarting process: ${reason}`) // Get the path to the current script @@ -37,14 +39,18 @@ function restartProcess(reason: string): never { const absoluteScriptPath = path.resolve(scriptPath) // Spawn a new process - const child = spawn('tsx', [absoluteScriptPath, ...process.argv.slice(2)], { + child = spawn('tsx', [absoluteScriptPath, ...process.argv.slice(2)], { stdio: 'inherit', - detached: true, + // detached: true, }) - // Unref the child process so the parent can exit - child.unref() - - // Exit the current process - process.exit(0) + // Setup signal handlers to ensure child process exits correctly + process.on('SIGINT', () => { + child.kill('SIGINT') // Forward SIGINT to child process + process.exit(0) // Exit the parent process + }) + process.on('SIGTERM', () => { + child.kill('SIGTERM') // Forward SIGTERM to child process + process.exit(0) // Exit the parent process + }) } From 3110c1b01b5518d605f073284e6b690220455a20 Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Mon, 14 Oct 2024 19:05:13 -0400 Subject: [PATCH 048/110] fix: local update limit (#8704) --- .../collections/operations/local/update.ts | 3 ++ test/database/int.spec.ts | 39 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/packages/payload/src/collections/operations/local/update.ts b/packages/payload/src/collections/operations/local/update.ts index 609661c3e6..502ab87fdb 100644 --- a/packages/payload/src/collections/operations/local/update.ts +++ b/packages/payload/src/collections/operations/local/update.ts @@ -41,6 +41,7 @@ export type BaseOptions = { export type ByIDOptions = { id: number | string + limit?: never where?: never } & BaseOptions @@ -78,6 +79,7 @@ async function updateLocal( draft, file, filePath, + limit, overrideAccess = true, overrideLock, overwriteExistingFiles = false, @@ -105,6 +107,7 @@ async function updateLocal( depth, disableTransaction, draft, + limit, overrideAccess, overrideLock, overwriteExistingFiles, diff --git a/test/database/int.spec.ts b/test/database/int.spec.ts index 5bd207bbf2..5d7e52c10f 100644 --- a/test/database/int.spec.ts +++ b/test/database/int.spec.ts @@ -501,6 +501,45 @@ describe('database', () => { }) }) + describe('local API', () => { + it('should support `limit` arg in bulk updates', async () => { + for (let i = 0; i < 10; i++) { + await payload.create({ + collection, + data: { + title: 'hello', + }, + }) + } + + const updateResult = await payload.update({ + collection, + data: { + title: 'world', + }, + where: { + title: { equals: 'hello' }, + }, + limit: 5, + }) + + const findResult = await payload.find({ + collection, + where: { + title: { exists: true }, + }, + }) + + const helloDocs = findResult.docs.filter((doc) => doc.title === 'hello') + const worldDocs = findResult.docs.filter((doc) => doc.title === 'world') + + expect(updateResult.docs).toHaveLength(5) + expect(updateResult.docs[0].title).toStrictEqual('world') + expect(helloDocs).toHaveLength(5) + expect(worldDocs).toHaveLength(5) + }) + }) + describe('defaultValue', () => { it('should set default value from db.create', async () => { // call the db adapter create directly to bypass Payload's default value assignment From a9e7d4884e7739296516dacd831c702f396c9a76 Mon Sep 17 00:00:00 2001 From: Jessica Chowdhury <67977755+JessChowdhury@users.noreply.github.com> Date: Mon, 14 Oct 2024 19:12:28 -0400 Subject: [PATCH 049/110] fix: ensure beforeValidate hook runs for reset password (#8433) Adds `beforeValidate` hook to reset password operation. **Closes** https://github.com/payloadcms/payload/issues/7582 --- .../src/auth/operations/resetPassword.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/payload/src/auth/operations/resetPassword.ts b/packages/payload/src/auth/operations/resetPassword.ts index ea31e55121..4fb114ebed 100644 --- a/packages/payload/src/auth/operations/resetPassword.ts +++ b/packages/payload/src/auth/operations/resetPassword.ts @@ -83,6 +83,25 @@ export const resetPasswordOperation = async (args: Arguments): Promise = if (collectionConfig.auth.verify) { user._verified = Boolean(user._verified) } + // ///////////////////////////////////// + // beforeValidate - Collection + // ///////////////////////////////////// + + await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => { + await priorHook + + await hook({ + collection: args.collection?.config, + context: req.context, + data: user, + operation: 'update', + req, + }) + }, Promise.resolve()) + + // ///////////////////////////////////// + // Update new password + // ///////////////////////////////////// const doc = await payload.db.updateOne({ id: user.id, From 3f2b828298756af5ff6fb8e8813dc9a32192ab9b Mon Sep 17 00:00:00 2001 From: Patrik Date: Mon, 14 Oct 2024 19:23:22 -0400 Subject: [PATCH 050/110] fix(drizzle, ui): properly filters out number field values with the exists operator filter (#8706) Filtering by `null` `number` field values or normal values with the `exists` operator was not working in `postgres` & `sqlite`. Was previously fixed for `mongodb` [here](https://github.com/payloadcms/payload/pull/8416) Now fixed for `postgres` & `sqlite` adapters as well. --- packages/drizzle/src/queries/sanitizeQueryValue.ts | 7 +++++-- packages/ui/src/elements/Table/DefaultCell/index.tsx | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/drizzle/src/queries/sanitizeQueryValue.ts b/packages/drizzle/src/queries/sanitizeQueryValue.ts index 0baaec0116..38a1f891bc 100644 --- a/packages/drizzle/src/queries/sanitizeQueryValue.ts +++ b/packages/drizzle/src/queries/sanitizeQueryValue.ts @@ -223,8 +223,11 @@ export const sanitizeQueryValue = ({ } if (operator === 'exists') { - formattedValue = formattedValue === 'true' || formattedValue === true - if (formattedValue === false) { + formattedValue = val === 'true' || val === true + + if (formattedValue) { + operator = 'exists' + } else { operator = 'isNull' } } diff --git a/packages/ui/src/elements/Table/DefaultCell/index.tsx b/packages/ui/src/elements/Table/DefaultCell/index.tsx index 29f538013d..2eea6053b5 100644 --- a/packages/ui/src/elements/Table/DefaultCell/index.tsx +++ b/packages/ui/src/elements/Table/DefaultCell/index.tsx @@ -133,13 +133,13 @@ export const DefaultCell: React.FC = (props) => { } else { return ( - {(cellData === '' || typeof cellData === 'undefined') && + {(cellData === '' || typeof cellData === 'undefined' || cellData === null) && i18n.t('general:noLabel', { label: getTranslation(('label' in field ? field.label : null) || 'data', i18n), })} {typeof cellData === 'string' && cellData} {typeof cellData === 'number' && cellData} - {typeof cellData === 'object' && JSON.stringify(cellData)} + {typeof cellData === 'object' && cellData !== null && JSON.stringify(cellData)} ) } From 35a5199c872d5675614aa1f1a5ea86cf369d0dd7 Mon Sep 17 00:00:00 2001 From: Jacob Fletcher Date: Mon, 14 Oct 2024 19:39:30 -0400 Subject: [PATCH 051/110] fix(next): returns proper document id type from init page result (#8700) --- .../src/utilities/initPage/handleAdminPage.ts | 21 ++++-- packages/next/src/utilities/initPage/index.ts | 1 + packages/next/src/views/Account/index.tsx | 2 +- packages/next/src/views/Versions/index.tsx | 2 +- packages/payload/src/admin/views/types.ts | 2 +- test/joins/payload-types.ts | 64 +++++++++---------- 6 files changed, 53 insertions(+), 39 deletions(-) diff --git a/packages/next/src/utilities/initPage/handleAdminPage.ts b/packages/next/src/utilities/initPage/handleAdminPage.ts index 5ef40467fe..45e31beec8 100644 --- a/packages/next/src/utilities/initPage/handleAdminPage.ts +++ b/packages/next/src/utilities/initPage/handleAdminPage.ts @@ -1,28 +1,41 @@ -import type { SanitizedCollectionConfig, SanitizedConfig, SanitizedGlobalConfig } from 'payload' +import type { + Payload, + SanitizedCollectionConfig, + SanitizedConfig, + SanitizedGlobalConfig, +} from 'payload' import { getRouteWithoutAdmin, isAdminRoute } from './shared.js' type Args = { adminRoute: string config: SanitizedConfig + defaultIDType: Payload['db']['defaultIDType'] route: string } + type RouteInfo = { collectionConfig?: SanitizedCollectionConfig collectionSlug?: string - docID?: string + docID?: number | string globalConfig?: SanitizedGlobalConfig globalSlug?: string } -export function getRouteInfo({ adminRoute, config, route }: Args): RouteInfo { +export function getRouteInfo({ adminRoute, config, defaultIDType, route }: Args): RouteInfo { if (isAdminRoute({ adminRoute, config, route })) { const routeWithoutAdmin = getRouteWithoutAdmin({ adminRoute, route }) const routeSegments = routeWithoutAdmin.split('/').filter(Boolean) const [entityType, entitySlug, createOrID] = routeSegments const collectionSlug = entityType === 'collections' ? entitySlug : undefined const globalSlug = entityType === 'globals' ? entitySlug : undefined - const docID = collectionSlug && createOrID !== 'create' ? createOrID : undefined + + const docID = + collectionSlug && createOrID !== 'create' + ? defaultIDType === 'number' + ? Number(createOrID) + : createOrID + : undefined let collectionConfig: SanitizedCollectionConfig | undefined let globalConfig: SanitizedGlobalConfig | undefined diff --git a/packages/next/src/utilities/initPage/index.ts b/packages/next/src/utilities/initPage/index.ts index fb402c3ab4..e744d2d918 100644 --- a/packages/next/src/utilities/initPage/index.ts +++ b/packages/next/src/utilities/initPage/index.ts @@ -146,6 +146,7 @@ export const initPage = async ({ const { collectionConfig, collectionSlug, docID, globalConfig, globalSlug } = getRouteInfo({ adminRoute, config: payload.config, + defaultIDType: payload.db.defaultIDType, route, }) diff --git a/packages/next/src/views/Account/index.tsx b/packages/next/src/views/Account/index.tsx index e586bfe0f8..fa0d59cc09 100644 --- a/packages/next/src/views/Account/index.tsx +++ b/packages/next/src/views/Account/index.tsx @@ -95,7 +95,7 @@ export const Account: React.FC = async ({ docPermissions={docPermissions} hasPublishPermission={hasPublishPermission} hasSavePermission={hasSavePermission} - id={user?.id.toString()} + id={user?.id} initialData={data} initialState={formState} isEditing diff --git a/packages/next/src/views/Versions/index.tsx b/packages/next/src/views/Versions/index.tsx index e61d975838..66c51c8363 100644 --- a/packages/next/src/views/Versions/index.tsx +++ b/packages/next/src/views/Versions/index.tsx @@ -48,7 +48,7 @@ export const VersionsView: PayloadServerReactComponent = asyn if (collectionSlug) { limitToUse = limitToUse || collectionConfig.admin.pagination.defaultLimit const whereQuery: { - and: Array<{ parent?: { equals: string }; snapshot?: { not_equals: boolean } }> + and: Array<{ parent?: { equals: number | string }; snapshot?: { not_equals: boolean } }> } = { and: [ { diff --git a/packages/payload/src/admin/views/types.ts b/packages/payload/src/admin/views/types.ts index cda94b4780..62f90fb612 100644 --- a/packages/payload/src/admin/views/types.ts +++ b/packages/payload/src/admin/views/types.ts @@ -48,7 +48,7 @@ export type VisibleEntities = { export type InitPageResult = { collectionConfig?: SanitizedCollectionConfig cookies: Map - docID?: string + docID?: number | string globalConfig?: SanitizedGlobalConfig languageOptions: LanguageOptions locale?: Locale diff --git a/test/joins/payload-types.ts b/test/joins/payload-types.ts index 6fb3e55ba2..b792dfa96d 100644 --- a/test/joins/payload-types.ts +++ b/test/joins/payload-types.ts @@ -22,7 +22,7 @@ export interface Config { 'payload-migrations': PayloadMigration; }; db: { - defaultIDType: string; + defaultIDType: number; }; globals: {}; locale: 'en' | 'es'; @@ -53,15 +53,15 @@ export interface UserAuthOperations { * via the `definition` "posts". */ export interface Post { - id: string; + id: number; title?: string | null; - upload?: (string | null) | Upload; - category?: (string | null) | Category; - categories?: (string | Category)[] | null; - categoriesLocalized?: (string | Category)[] | null; + upload?: (number | null) | Upload; + category?: (number | null) | Category; + categories?: (number | Category)[] | null; + categoriesLocalized?: (number | Category)[] | null; group?: { - category?: (string | null) | Category; - camelCaseCategory?: (string | null) | Category; + category?: (number | null) | Category; + camelCaseCategory?: (number | null) | Category; }; updatedAt: string; createdAt: string; @@ -71,9 +71,9 @@ export interface Post { * via the `definition` "uploads". */ export interface Upload { - id: string; + id: number; relatedPosts?: { - docs?: (string | Post)[] | null; + docs?: (number | Post)[] | null; hasNextPage?: boolean | null; } | null; updatedAt: string; @@ -93,27 +93,27 @@ export interface Upload { * via the `definition` "categories". */ export interface Category { - id: string; + id: number; name?: string | null; relatedPosts?: { - docs?: (string | Post)[] | null; + docs?: (number | Post)[] | null; hasNextPage?: boolean | null; } | null; hasManyPosts?: { - docs?: (string | Post)[] | null; + docs?: (number | Post)[] | null; hasNextPage?: boolean | null; } | null; hasManyPostsLocalized?: { - docs?: (string | Post)[] | null; + docs?: (number | Post)[] | null; hasNextPage?: boolean | null; } | null; group?: { relatedPosts?: { - docs?: (string | Post)[] | null; + docs?: (number | Post)[] | null; hasNextPage?: boolean | null; } | null; camelCasePosts?: { - docs?: (string | Post)[] | null; + docs?: (number | Post)[] | null; hasNextPage?: boolean | null; } | null; }; @@ -125,9 +125,9 @@ export interface Category { * via the `definition` "localized-posts". */ export interface LocalizedPost { - id: string; + id: number; title?: string | null; - category?: (string | null) | LocalizedCategory; + category?: (number | null) | LocalizedCategory; updatedAt: string; createdAt: string; } @@ -136,10 +136,10 @@ export interface LocalizedPost { * via the `definition` "localized-categories". */ export interface LocalizedCategory { - id: string; + id: number; name?: string | null; relatedPosts?: { - docs?: (string | LocalizedPost)[] | null; + docs?: (number | LocalizedPost)[] | null; hasNextPage?: boolean | null; } | null; updatedAt: string; @@ -150,7 +150,7 @@ export interface LocalizedCategory { * via the `definition` "users". */ export interface User { - id: string; + id: number; updatedAt: string; createdAt: string; email: string; @@ -167,36 +167,36 @@ export interface User { * via the `definition` "payload-locked-documents". */ export interface PayloadLockedDocument { - id: string; + id: number; document?: | ({ relationTo: 'posts'; - value: string | Post; + value: number | Post; } | null) | ({ relationTo: 'categories'; - value: string | Category; + value: number | Category; } | null) | ({ relationTo: 'uploads'; - value: string | Upload; + value: number | Upload; } | null) | ({ relationTo: 'localized-posts'; - value: string | LocalizedPost; + value: number | LocalizedPost; } | null) | ({ relationTo: 'localized-categories'; - value: string | LocalizedCategory; + value: number | LocalizedCategory; } | null) | ({ relationTo: 'users'; - value: string | User; + value: number | User; } | null); globalSlug?: string | null; user: { relationTo: 'users'; - value: string | User; + value: number | User; }; updatedAt: string; createdAt: string; @@ -206,10 +206,10 @@ export interface PayloadLockedDocument { * via the `definition` "payload-preferences". */ export interface PayloadPreference { - id: string; + id: number; user: { relationTo: 'users'; - value: string | User; + value: number | User; }; key?: string | null; value?: @@ -229,7 +229,7 @@ export interface PayloadPreference { * via the `definition` "payload-migrations". */ export interface PayloadMigration { - id: string; + id: number; name?: string | null; batch?: number | null; updatedAt: string; From 85e87c15fa0f3f20d1ce7477850483cc2fbf5a55 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Tue, 15 Oct 2024 09:51:54 -0400 Subject: [PATCH 052/110] chore(release): v3.0.0-beta.114 [skip ci] --- package.json | 2 +- packages/create-payload-app/package.json | 2 +- packages/db-mongodb/package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- packages/drizzle/package.json | 2 +- packages/email-nodemailer/package.json | 2 +- packages/email-resend/package.json | 2 +- packages/graphql/package.json | 2 +- packages/live-preview-react/package.json | 2 +- packages/live-preview-vue/package.json | 2 +- packages/live-preview/package.json | 2 +- packages/next/package.json | 2 +- packages/payload/package.json | 2 +- packages/plugin-cloud-storage/package.json | 2 +- packages/plugin-cloud/package.json | 2 +- packages/plugin-form-builder/package.json | 2 +- packages/plugin-nested-docs/package.json | 2 +- packages/plugin-redirects/package.json | 2 +- packages/plugin-search/package.json | 2 +- packages/plugin-sentry/package.json | 2 +- packages/plugin-seo/package.json | 2 +- packages/plugin-stripe/package.json | 2 +- packages/richtext-lexical/package.json | 2 +- packages/richtext-slate/package.json | 2 +- packages/storage-azure/package.json | 2 +- packages/storage-gcs/package.json | 2 +- packages/storage-s3/package.json | 2 +- packages/storage-uploadthing/package.json | 2 +- packages/storage-vercel-blob/package.json | 2 +- packages/translations/package.json | 2 +- packages/ui/package.json | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index b128054b45..9b32be94a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "private": true, "type": "module", "scripts": { diff --git a/packages/create-payload-app/package.json b/packages/create-payload-app/package.json index 06a5595140..5717902aeb 100644 --- a/packages/create-payload-app/package.json +++ b/packages/create-payload-app/package.json @@ -1,6 +1,6 @@ { "name": "create-payload-app", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index 0ada58db05..09119b5ab6 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The officially supported MongoDB database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index 064288938c..d5557b8114 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The officially supported Postgres database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index 6c949c4c7d..476703f474 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-sqlite", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The officially supported SQLite database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 16f26cbca1..1bad6c3f77 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-vercel-postgres", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Vercel Postgres adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index d1246143ba..4c68f2c2f1 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/drizzle", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "A library of shared functions used by different payload database adapters", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-nodemailer/package.json b/packages/email-nodemailer/package.json index c724404d16..76b8c245f9 100644 --- a/packages/email-nodemailer/package.json +++ b/packages/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-nodemailer", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Payload Nodemailer Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-resend/package.json b/packages/email-resend/package.json index 511806c871..a9f19adf2c 100644 --- a/packages/email-resend/package.json +++ b/packages/email-resend/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-resend", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Payload Resend Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/graphql/package.json b/packages/graphql/package.json index e6320b18c1..22ffa1f736 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index 9bc3f3489a..9b4a82b99c 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-react", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The official React SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview-vue/package.json b/packages/live-preview-vue/package.json index 461ffd783e..28fdbacd0f 100644 --- a/packages/live-preview-vue/package.json +++ b/packages/live-preview-vue/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-vue", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The official Vue SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview/package.json b/packages/live-preview/package.json index 1ce6c464d9..2abf746cfe 100644 --- a/packages/live-preview/package.json +++ b/packages/live-preview/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The official live preview JavaScript SDK for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/next/package.json b/packages/next/package.json index 4b95dc54c8..8c6675c309 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/payload/package.json b/packages/payload/package.json index c7949d3d29..6099554798 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Node, React, Headless CMS and Application Framework built on Next.js", "keywords": [ "admin panel", diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index 1d0683f748..20d6c28f81 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud-storage", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The official cloud storage plugin for Payload CMS", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index af57a253b4..9cebb5b464 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The official Payload Cloud plugin", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index f409249544..514ddd500d 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-form-builder", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Form builder plugin for Payload CMS", "keywords": [ "payload", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index 3f4db45eff..782c43b844 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The official Nested Docs plugin for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index 52f4a58883..598c395912 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Redirects plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index 0b093d2ee1..25409820cc 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Search plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-sentry/package.json b/packages/plugin-sentry/package.json index 917cc8bb10..41e7889a44 100644 --- a/packages/plugin-sentry/package.json +++ b/packages/plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-sentry", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Sentry plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index 1878bf4ae4..33ba8d9d98 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "SEO plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-stripe/package.json b/packages/plugin-stripe/package.json index b8bdc3c9a5..867466d96d 100644 --- a/packages/plugin-stripe/package.json +++ b/packages/plugin-stripe/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-stripe", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Stripe plugin for Payload", "keywords": [ "payload", diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index ef53cbaedc..821fcf9786 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The officially supported Lexical richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index 93d885f6a0..6073b3f86e 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "The officially supported Slate richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-azure/package.json b/packages/storage-azure/package.json index 690bf06fdd..f67a006833 100644 --- a/packages/storage-azure/package.json +++ b/packages/storage-azure/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-azure", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Payload storage adapter for Azure Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-gcs/package.json b/packages/storage-gcs/package.json index 0d6fd78ff5..94678d0a6c 100644 --- a/packages/storage-gcs/package.json +++ b/packages/storage-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-gcs", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Payload storage adapter for Google Cloud Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-s3/package.json b/packages/storage-s3/package.json index dddd19fbf7..4570509b59 100644 --- a/packages/storage-s3/package.json +++ b/packages/storage-s3/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-s3", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Payload storage adapter for Amazon S3", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-uploadthing/package.json b/packages/storage-uploadthing/package.json index 06978e01c6..406d5b92d2 100644 --- a/packages/storage-uploadthing/package.json +++ b/packages/storage-uploadthing/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-uploadthing", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Payload storage adapter for uploadthing", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-vercel-blob/package.json b/packages/storage-vercel-blob/package.json index 8b5a03c5b4..21486c0439 100644 --- a/packages/storage-vercel-blob/package.json +++ b/packages/storage-vercel-blob/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-vercel-blob", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "description": "Payload storage adapter for Vercel Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/translations/package.json b/packages/translations/package.json index 60e450c1b3..0ab91e026b 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/ui/package.json b/packages/ui/package.json index b8072b6be4..2f6991c732 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-beta.113", + "version": "3.0.0-beta.114", "homepage": "https://payloadcms.com", "repository": { "type": "git", From 2315719c28060ea13e5a2a6295052eda3afa982d Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Tue, 15 Oct 2024 09:58:28 -0400 Subject: [PATCH 053/110] chore(deps): bump turbo --- package.json | 2 +- pnpm-lock.yaml | 133 ++++++++++++++++++++----------------------------- 2 files changed, 54 insertions(+), 81 deletions(-) diff --git a/package.json b/package.json index 9b32be94a0..b12e09ef9f 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,7 @@ "swc-plugin-transform-remove-imports": "1.15.0", "tempy": "1.0.1", "tsx": "4.19.1", - "turbo": "^2.1.2", + "turbo": "^2.1.3", "typescript": "5.6.2" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09063f9b36..612c46fc9e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,7 +47,7 @@ importers: version: 1.46.0 '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) '@sentry/node': specifier: ^8.33.1 version: 8.33.1 @@ -149,7 +149,7 @@ importers: version: 9.4.1(@aws-sdk/credential-providers@3.630.0(@aws-sdk/client-sso-oidc@3.629.0(@aws-sdk/client-sts@3.629.0))) next: specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) open: specifier: ^10.1.0 version: 10.1.0 @@ -202,8 +202,8 @@ importers: specifier: 4.19.1 version: 4.19.1 turbo: - specifier: ^2.1.2 - version: 2.1.2 + specifier: ^2.1.3 + version: 2.1.3 typescript: specifier: 5.6.2 version: 5.6.2 @@ -966,7 +966,7 @@ importers: version: link:../payload ts-jest: specifier: ^29.1.0 - version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) + version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) packages/plugin-cloud-storage: dependencies: @@ -1086,7 +1086,7 @@ importers: dependencies: '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) '@sentry/types': specifier: ^8.33.1 version: 8.33.1 @@ -1418,7 +1418,7 @@ importers: version: link:../plugin-cloud-storage uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) devDependencies: payload: specifier: workspace:* @@ -1704,7 +1704,7 @@ importers: version: link:../packages/ui '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) '@sentry/react': specifier: ^7.77.0 version: 7.118.0(react@19.0.0-rc-3edc000d-20240926) @@ -1749,7 +1749,7 @@ importers: version: 0.18.0 next: specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) payload: specifier: workspace:* version: link:../packages/payload @@ -1779,7 +1779,7 @@ importers: version: 5.6.2 uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) uuid: specifier: 10.0.0 version: 10.0.0 @@ -7552,6 +7552,7 @@ packages: libsql@0.3.19: resolution: {integrity: sha512-Aj5cQ5uk/6fHdmeW0TiXK42FqUlwx7ytmMLPSaUQPin5HKKKuUPD62MAbN4OEweGBBI7q1BekoEN4gPUEL6MZA==} + cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lie@3.1.1: @@ -9565,38 +9566,38 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.1.2: - resolution: {integrity: sha512-3TEBxHWh99h2yIzkuIigMEOXt/ItYQp0aPiJjPd1xN4oDcsKK5AxiFKPH9pdtfIBzYsY59kQhZiFj0ELnSP7Bw==} + turbo-darwin-64@2.1.3: + resolution: {integrity: sha512-ouJOm0g0YyoBuhmikEujVCBGo3Zr0lbSOWFIsQtWUTItC88F2w2byhjtsYGPXQwMlTbXwmoBU2lOCfWNkeEwHQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.1.2: - resolution: {integrity: sha512-he0miWNq2WxJzsH82jS2Z4MXpnkzn9SH8a79iPXiJkq25QREImucscM4RPasXm8wARp91pyysJMq6aasD45CeA==} + turbo-darwin-arm64@2.1.3: + resolution: {integrity: sha512-j2FOJsK4LAOtHQlb3Oom0yWB/Vi0nF1ljInr311mVzHoFAJRZtfW2fRvdZRb/lBUwjSp8be58qWHzANIcrA0OA==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.1.2: - resolution: {integrity: sha512-fKUBcc0rK8Vdqv5a/E3CSpMBLG1bzwv+Q0Q83F8fG2ZfNCNKGbcEYABdonNZkkx141Rj03cZQFCgxu3MVEGU+A==} + turbo-linux-64@2.1.3: + resolution: {integrity: sha512-ubRHkI1gSel7H7wsmxKK8C9UlLWqg/2dkCC88LFupaK6TKgvBKqDqA0Z1M9C/escK0Jsle2k0H8bybV9OYIl4Q==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.1.2: - resolution: {integrity: sha512-sV8Bpmm0WiuxgbhxymcC7wSsuxfBBieI98GegSwbr/bs1ANAgzCg93urIrdKdQ3/b31zZxQwcaP4FBF1wx1Qdg==} + turbo-linux-arm64@2.1.3: + resolution: {integrity: sha512-LffUL+e5wv7BtD6DgnM2kKOlDkMo2eRjhbAjVnrCD3wi2ug0tl6NDzajnHHjtaMyOnIf4AvzSKdLWsBxafGBQA==} cpu: [arm64] os: [linux] - turbo-windows-64@2.1.2: - resolution: {integrity: sha512-wcmIJZI9ORT9ykHGliFE6kWRQrlH930QGSjSgWC8uFChFFuOyUlvC7ttcxuSvU9VqC7NF4C+GVAcFJQ8lTjN7g==} + turbo-windows-64@2.1.3: + resolution: {integrity: sha512-S9SvcZZoaq5jKr6kA6eF7/xgQhVn8Vh7PVy5lono9zybvhyL4eY++y2PaLToIgL8G9IcbLmgOC73ExNjFBg9XQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.1.2: - resolution: {integrity: sha512-zdnXjrhk7YO6CP+Q5wPueEvOCLH4lDa6C4rrwiakcWcPgcQGbVozJlo4uaQ6awo8HLWQEvOwu84RkWTdLAc/Hw==} + turbo-windows-arm64@2.1.3: + resolution: {integrity: sha512-twlEo8lRrGbrR6T/ZklUIquW3IlFCEtywklgVA81aIrSBm56+GEVpSrHhIlsx1hiYeSNrs+GpDwZGe+V7fvEVQ==} cpu: [arm64] os: [win32] - turbo@2.1.2: - resolution: {integrity: sha512-Jb0rbU4iHEVQ18An/YfakdIv9rKnd3zUfSE117EngrfWXFHo3RndVH96US3GsT8VHpwTncPePDBT2t06PaFLrw==} + turbo@2.1.3: + resolution: {integrity: sha512-lY0yj2GH2a2a3NExZ3rGe+rHUVeFE2aXuRAue57n+08E7Z7N7YCmynju0kPC1grAQzERmoLpKrmzmWd+PNiADw==} hasBin: true type-check@0.4.0: @@ -13332,7 +13333,7 @@ snapshots: '@sentry/utils': 7.118.0 localforage: 1.10.0 - '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': + '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -13345,14 +13346,14 @@ snapshots: '@sentry/types': 8.33.1 '@sentry/utils': 8.33.1 '@sentry/vercel-edge': 8.33.1 - '@sentry/webpack-plugin': 2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + '@sentry/webpack-plugin': 2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) chalk: 3.0.0 - next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) resolve: 1.22.8 rollup: 3.29.5 stacktrace-parser: 0.1.10 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12) transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/core' @@ -13456,12 +13457,12 @@ snapshots: '@sentry/types': 8.33.1 '@sentry/utils': 8.33.1 - '@sentry/webpack-plugin@2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': + '@sentry/webpack-plugin@2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12))': dependencies: '@sentry/bundler-plugin-core': 2.22.3 unplugin: 1.0.1 uuid: 9.0.0 - webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12) transitivePeerDependencies: - encoding - supports-color @@ -18017,36 +18018,6 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): - dependencies: - '@next/env': 15.0.0-canary.173 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.13 - busboy: 1.6.0 - caniuse-lite: 1.0.30001651 - postcss: 8.4.31 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) - styled-jsx: 5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-3edc000d-20240926) - optionalDependencies: - '@next/swc-darwin-arm64': 15.0.0-canary.173 - '@next/swc-darwin-x64': 15.0.0-canary.173 - '@next/swc-linux-arm64-gnu': 15.0.0-canary.173 - '@next/swc-linux-arm64-musl': 15.0.0-canary.173 - '@next/swc-linux-x64-gnu': 15.0.0-canary.173 - '@next/swc-linux-x64-musl': 15.0.0-canary.173 - '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 - '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 - '@next/swc-win32-x64-msvc': 15.0.0-canary.173 - '@opentelemetry/api': 1.9.0 - '@playwright/test': 1.46.0 - babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 - sass: 1.77.4 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - nice-napi@1.0.2: dependencies: node-addon-api: 3.2.1 @@ -19600,16 +19571,17 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))): + terser-webpack-plugin@5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12) optionalDependencies: '@swc/core': 1.7.10(@swc/helpers@0.5.13) + esbuild: 0.19.12 terser@5.34.1: dependencies: @@ -19714,7 +19686,7 @@ snapshots: optionalDependencies: typescript: 5.6.2 - ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2): + ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -19732,6 +19704,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.2) + esbuild: 0.19.12 ts-pattern@5.3.1: {} @@ -19750,32 +19723,32 @@ snapshots: dependencies: safe-buffer: 5.2.1 - turbo-darwin-64@2.1.2: + turbo-darwin-64@2.1.3: optional: true - turbo-darwin-arm64@2.1.2: + turbo-darwin-arm64@2.1.3: optional: true - turbo-linux-64@2.1.2: + turbo-linux-64@2.1.3: optional: true - turbo-linux-arm64@2.1.2: + turbo-linux-arm64@2.1.3: optional: true - turbo-windows-64@2.1.2: + turbo-windows-64@2.1.3: optional: true - turbo-windows-arm64@2.1.2: + turbo-windows-arm64@2.1.3: optional: true - turbo@2.1.2: + turbo@2.1.3: optionalDependencies: - turbo-darwin-64: 2.1.2 - turbo-darwin-arm64: 2.1.2 - turbo-linux-64: 2.1.2 - turbo-linux-arm64: 2.1.2 - turbo-windows-64: 2.1.2 - turbo-windows-arm64: 2.1.2 + turbo-darwin-64: 2.1.3 + turbo-darwin-arm64: 2.1.3 + turbo-linux-64: 2.1.3 + turbo-linux-arm64: 2.1.3 + turbo-windows-64: 2.1.3 + turbo-windows-arm64: 2.1.3 type-check@0.4.0: dependencies: @@ -19908,7 +19881,7 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 - uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): + uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): dependencies: '@effect/schema': 0.68.12(effect@3.4.5) '@uploadthing/mime-types': 0.2.10 @@ -19918,7 +19891,7 @@ snapshots: std-env: 3.7.0 optionalDependencies: express: 4.19.2 - next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) uri-js@4.4.1: dependencies: @@ -20022,7 +19995,7 @@ snapshots: webpack-virtual-modules@0.5.0: {} - webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)): + webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12): dependencies: '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 @@ -20044,7 +20017,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: From 303a22407247be3aaa60d993d54ad1a3b965a399 Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 15 Oct 2024 09:10:34 -0600 Subject: [PATCH 054/110] fix(templates): website template issue with previewing drafts (#8714) Fixes https://github.com/payloadcms/payload/issues/8708 --- templates/website/src/app/(frontend)/next/preview/route.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/website/src/app/(frontend)/next/preview/route.ts b/templates/website/src/app/(frontend)/next/preview/route.ts index 4a36569531..a68ef127ff 100644 --- a/templates/website/src/app/(frontend)/next/preview/route.ts +++ b/templates/website/src/app/(frontend)/next/preview/route.ts @@ -68,6 +68,7 @@ export async function GET( try { const docs = await payload.find({ collection: collection, + draft: true, where: { slug: { equals: slug, From 8d10737b2f4bce9762d941e17332ba5abb00bad7 Mon Sep 17 00:00:00 2001 From: Patrik Date: Tue, 15 Oct 2024 15:58:36 -0400 Subject: [PATCH 055/110] fix(ui): removes `overflow: hidden` style from actions wrapper (#8717) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `Before`: ![Screenshot 2024-10-15 at 2 55 22 PM](https://github.com/user-attachments/assets/39b261c4-bb72-4497-ab47-01d430255773) `After`: ![Screenshot 2024-10-15 at 2 55 07 PM](https://github.com/user-attachments/assets/8913479a-9e0b-4edf-baa1-130dc179af34) --- packages/ui/src/elements/AppHeader/index.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/ui/src/elements/AppHeader/index.scss b/packages/ui/src/elements/AppHeader/index.scss index 22150e8e1f..6a56b0c531 100644 --- a/packages/ui/src/elements/AppHeader/index.scss +++ b/packages/ui/src/elements/AppHeader/index.scss @@ -107,7 +107,6 @@ &__actions-wrapper { position: relative; - overflow: hidden; display: flex; align-items: center; gap: calc(var(--base) / 2); From 93545f3103e92b65aabaefd0016182e3bc67929b Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Tue, 15 Oct 2024 16:20:50 -0400 Subject: [PATCH 056/110] fix(db-postgres, db-sqlite)!: bump drizzle-kit drizzle-orm @libsql/client (#8617) Inheriting all the fixes from drizzle moving to latest versions ## BREAKING CHANGES If you have a prior version of @libsql/client installed in your project, you must upgrade to 0.14.0 --- package.json | 6 +- packages/db-postgres/package.json | 4 +- packages/db-sqlite/package.json | 6 +- packages/db-sqlite/src/connect.ts | 2 +- packages/db-sqlite/src/defaultSnapshot.ts | 1 + packages/db-sqlite/src/types.ts | 4 +- packages/db-vercel-postgres/package.json | 4 +- packages/drizzle/package.json | 4 +- .../drizzle/src/postgres/defaultSnapshot.ts | 1 + packages/drizzle/src/postgres/types.ts | 4 +- pnpm-lock.yaml | 256 ++++++++++-------- test/package.json | 2 +- 12 files changed, 166 insertions(+), 128 deletions(-) diff --git a/package.json b/package.json index b12e09ef9f..208686465e 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ }, "devDependencies": { "@jest/globals": "29.7.0", - "@libsql/client": "0.6.2", + "@libsql/client": "0.14.0", "@next/bundle-analyzer": "15.0.0-canary.173", "@payloadcms/db-postgres": "workspace:*", "@payloadcms/eslint-config": "workspace:*", @@ -132,8 +132,8 @@ "create-payload-app": "workspace:*", "cross-env": "7.0.3", "dotenv": "16.4.5", - "drizzle-kit": "0.23.2-df9e596", - "drizzle-orm": "0.32.1", + "drizzle-kit": "0.26.0", + "drizzle-orm": "0.35.0", "escape-html": "^1.0.3", "execa": "5.1.1", "form-data": "3.0.1", diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index d5557b8114..8331b90238 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -50,8 +50,8 @@ "@payloadcms/drizzle": "workspace:*", "@types/pg": "8.10.2", "console-table-printer": "2.11.2", - "drizzle-kit": "0.23.2-df9e596", - "drizzle-orm": "0.32.1", + "drizzle-kit": "0.26.0", + "drizzle-orm": "0.35.0", "pg": "8.11.3", "prompts": "2.4.2", "to-snake-case": "1.0.0", diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index 476703f474..3fd0f44991 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -45,11 +45,11 @@ "prepublishOnly": "pnpm clean && pnpm turbo build" }, "dependencies": { - "@libsql/client": "^0.6.2", + "@libsql/client": "0.14.0", "@payloadcms/drizzle": "workspace:*", "console-table-printer": "2.11.2", - "drizzle-kit": "0.23.2-df9e596", - "drizzle-orm": "0.32.1", + "drizzle-kit": "0.26.0", + "drizzle-orm": "0.35.0", "prompts": "2.4.2", "to-snake-case": "1.0.0", "uuid": "9.0.0" diff --git a/packages/db-sqlite/src/connect.ts b/packages/db-sqlite/src/connect.ts index b88bf588cc..6662c1dd16 100644 --- a/packages/db-sqlite/src/connect.ts +++ b/packages/db-sqlite/src/connect.ts @@ -27,7 +27,7 @@ export const connect: Connect = async function connect( } const logger = this.logger || false - this.drizzle = drizzle(this.client, { logger, schema: this.schema }) as LibSQLDatabase + this.drizzle = drizzle(this.client, { logger, schema: this.schema }) if (!hotReload) { if (process.env.PAYLOAD_DROP_DATABASE === 'true') { diff --git a/packages/db-sqlite/src/defaultSnapshot.ts b/packages/db-sqlite/src/defaultSnapshot.ts index 6ac4531420..48f21bee66 100644 --- a/packages/db-sqlite/src/defaultSnapshot.ts +++ b/packages/db-sqlite/src/defaultSnapshot.ts @@ -11,4 +11,5 @@ export const defaultDrizzleSnapshot: DrizzleSQLiteSnapshotJSON = { prevId: '00000000-0000-0000-0000-00000000000', tables: {}, version: '6', + views: {}, } diff --git a/packages/db-sqlite/src/types.ts b/packages/db-sqlite/src/types.ts index eb11826c20..53e4fe9c22 100644 --- a/packages/db-sqlite/src/types.ts +++ b/packages/db-sqlite/src/types.ts @@ -117,7 +117,9 @@ export type SQLiteAdapter = { countDistinct: CountDistinct defaultDrizzleSnapshot: any deleteWhere: DeleteWhere - drizzle: LibSQLDatabase + drizzle: { $client: Client } & LibSQLDatabase< + Record & Record + > dropDatabase: DropDatabase execute: Execute /** diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 1bad6c3f77..647c95f17f 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -50,8 +50,8 @@ "@payloadcms/drizzle": "workspace:*", "@vercel/postgres": "^0.9.0", "console-table-printer": "2.11.2", - "drizzle-kit": "0.23.2-df9e596", - "drizzle-orm": "0.32.1", + "drizzle-kit": "0.26.0", + "drizzle-orm": "0.35.0", "pg": "8.11.3", "prompts": "2.4.2", "to-snake-case": "1.0.0", diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index 4c68f2c2f1..b9cd2a41e4 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -46,13 +46,13 @@ }, "dependencies": { "console-table-printer": "2.11.2", - "drizzle-orm": "0.32.1", + "drizzle-orm": "0.34.1-1f15bfd", "prompts": "2.4.2", "to-snake-case": "1.0.0", "uuid": "9.0.0" }, "devDependencies": { - "@libsql/client": "^0.6.2", + "@libsql/client": "0.14.0", "@payloadcms/eslint-config": "workspace:*", "@types/pg": "8.10.2", "@types/to-snake-case": "1.0.0", diff --git a/packages/drizzle/src/postgres/defaultSnapshot.ts b/packages/drizzle/src/postgres/defaultSnapshot.ts index 8516c5e4ca..482d9c7ac5 100644 --- a/packages/drizzle/src/postgres/defaultSnapshot.ts +++ b/packages/drizzle/src/postgres/defaultSnapshot.ts @@ -14,4 +14,5 @@ export const defaultDrizzleSnapshot: DrizzleSnapshotJSON = { sequences: {}, tables: {}, version: '7', + views: {}, } diff --git a/packages/drizzle/src/postgres/types.ts b/packages/drizzle/src/postgres/types.ts index 2e2d407555..bd22caa7ed 100644 --- a/packages/drizzle/src/postgres/types.ts +++ b/packages/drizzle/src/postgres/types.ts @@ -106,7 +106,7 @@ export type CreateDatabase = (args?: { type Schema = | { enum: typeof pgEnum - table: PgTableFn + table: PgTableFn } | PgSchema @@ -149,7 +149,7 @@ export type BasePostgresAdapter = { localesSuffix?: string logger: DrizzleConfig['logger'] operators: Operators - pgSchema?: Schema + pgSchema: Schema poolOptions?: ClientConfig prodMigrations?: { down: (args: MigrateDownArgs) => Promise diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 612c46fc9e..3c7969a92d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ overrides: copyfiles: 2.4.1 cross-env: 7.0.3 dotenv: 16.4.5 - drizzle-orm: 0.32.1 + drizzle-orm: 0.35.0 graphql: ^16.8.1 mongodb-memory-server: ^9.0 react: 19.0.0-rc-3edc000d-20240926 @@ -25,8 +25,8 @@ importers: specifier: 29.7.0 version: 29.7.0 '@libsql/client': - specifier: 0.6.2 - version: 0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) + specifier: 0.14.0 + version: 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@next/bundle-analyzer': specifier: 15.0.0-canary.173 version: 15.0.0-canary.173(bufferutil@4.0.8) @@ -47,7 +47,7 @@ importers: version: 1.46.0 '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/node': specifier: ^8.33.1 version: 8.33.1 @@ -109,11 +109,11 @@ importers: specifier: 16.4.5 version: 16.4.5 drizzle-kit: - specifier: 0.23.2-df9e596 - version: 0.23.2-df9e596 + specifier: 0.26.0 + version: 0.26.0 drizzle-orm: - specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.0 + version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) escape-html: specifier: ^1.0.3 version: 1.0.3 @@ -149,7 +149,7 @@ importers: version: 9.4.1(@aws-sdk/credential-providers@3.630.0(@aws-sdk/client-sso-oidc@3.629.0(@aws-sdk/client-sts@3.629.0))) next: specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) open: specifier: ^10.1.0 version: 10.1.0 @@ -315,11 +315,11 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.23.2-df9e596 - version: 0.23.2-df9e596 + specifier: 0.26.0 + version: 0.26.0 drizzle-orm: - specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.0 + version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) pg: specifier: 8.11.3 version: 8.11.3 @@ -352,8 +352,8 @@ importers: packages/db-sqlite: dependencies: '@libsql/client': - specifier: ^0.6.2 - version: 0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) + specifier: 0.14.0 + version: 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@payloadcms/drizzle': specifier: workspace:* version: link:../drizzle @@ -361,11 +361,11 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.23.2-df9e596 - version: 0.23.2-df9e596 + specifier: 0.26.0 + version: 0.26.0 drizzle-orm: - specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.0 + version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) prompts: specifier: 2.4.2 version: 2.4.2 @@ -401,11 +401,11 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.23.2-df9e596 - version: 0.23.2-df9e596 + specifier: 0.26.0 + version: 0.26.0 drizzle-orm: - specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.0 + version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) pg: specifier: 8.11.3 version: 8.11.3 @@ -444,8 +444,8 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-orm: - specifier: 0.32.1 - version: 0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.0 + version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) prompts: specifier: 2.4.2 version: 2.4.2 @@ -457,8 +457,8 @@ importers: version: 9.0.0 devDependencies: '@libsql/client': - specifier: ^0.6.2 - version: 0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) + specifier: 0.14.0 + version: 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@payloadcms/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -966,7 +966,7 @@ importers: version: link:../payload ts-jest: specifier: ^29.1.0 - version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) + version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) packages/plugin-cloud-storage: dependencies: @@ -1086,7 +1086,7 @@ importers: dependencies: '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/types': specifier: ^8.33.1 version: 8.33.1 @@ -1418,7 +1418,7 @@ importers: version: link:../plugin-cloud-storage uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) devDependencies: payload: specifier: workspace:* @@ -1704,7 +1704,7 @@ importers: version: link:../packages/ui '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/react': specifier: ^7.77.0 version: 7.118.0(react@19.0.0-rc-3edc000d-20240926) @@ -1727,8 +1727,8 @@ importers: specifier: 16.4.5 version: 16.4.5 drizzle-kit: - specifier: 0.23.2-df9e596 - version: 0.23.2-df9e596 + specifier: 0.26.0 + version: 0.26.0 eslint-plugin-playwright: specifier: 1.6.2 version: 1.6.2(eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6)) @@ -1749,7 +1749,7 @@ importers: version: 0.18.0 next: specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) payload: specifier: workspace:* version: link:../packages/payload @@ -1779,7 +1779,7 @@ importers: version: 5.6.2 uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) uuid: specifier: 10.0.0 version: 10.0.0 @@ -2724,8 +2724,8 @@ packages: peerDependencies: react: 19.0.0-rc-3edc000d-20240926 - '@drizzle-team/brocli@0.8.2': - resolution: {integrity: sha512-zTrFENsqGvOkBOuHDC1pXCkDXNd2UhP4lI3gYGhQ1R1SPeAAfqzPsV1dcpMy4uNU6kB5VpU5NGhvwxVNETR02A==} + '@drizzle-team/brocli@0.10.1': + resolution: {integrity: sha512-AHy0vjc+n/4w/8Mif+w86qpppHuF3AyXbcWW+R/W7GNA3F5/p2nuhlkCJaTXSLZheB4l1rtHzOfr9A7NwoR/Zg==} '@effect/schema@0.68.12': resolution: {integrity: sha512-UWJsFXzeYTBQYnftwI1KR2uaxIZ8fk+kffDS7BnJwnGjPPgODq3/AzeoBDSu1MAlnwBKOz+QRdMuSMxrT/pHig==} @@ -3642,54 +3642,54 @@ packages: peerDependencies: yjs: '>=13.5.22' - '@libsql/client@0.6.2': - resolution: {integrity: sha512-xRNfRLv/dOCbV4qd+M0baQwGmvuZpMd2wG2UAPs8XmcdaPvu5ErkcaeITkxlm3hDEJVabQM1cFhMBxsugWW9fQ==} + '@libsql/client@0.14.0': + resolution: {integrity: sha512-/9HEKfn6fwXB5aTEEoMeFh4CtG0ZzbncBb1e++OCdVpgKZ/xyMsIVYXm0w7Pv4RUel803vE6LwniB3PqD72R0Q==} - '@libsql/core@0.6.2': - resolution: {integrity: sha512-c2P4M+4u/4b2L02A0KjggO3UW51rGkhxr/7fzJO0fEAqsqrWGxuNj2YtRkina/oxfYvAof6xjp8RucNoIV/Odw==} + '@libsql/core@0.14.0': + resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==} - '@libsql/darwin-arm64@0.3.19': - resolution: {integrity: sha512-rmOqsLcDI65zzxlUOoEiPJLhqmbFsZF6p4UJQ2kMqB+Kc0Rt5/A1OAdOZ/Wo8fQfJWjR1IbkbpEINFioyKf+nQ==} + '@libsql/darwin-arm64@0.4.6': + resolution: {integrity: sha512-45i604CJ2Lubbg7NqtDodjarF6VgST8rS5R8xB++MoRqixtDns9PZ6tocT9pRJDWuTWEiy2sjthPOFWMKwYAsg==} cpu: [arm64] os: [darwin] - '@libsql/darwin-x64@0.3.19': - resolution: {integrity: sha512-q9O55B646zU+644SMmOQL3FIfpmEvdWpRpzubwFc2trsa+zoBlSkHuzU9v/C+UNoPHQVRMP7KQctJ455I/h/xw==} + '@libsql/darwin-x64@0.4.6': + resolution: {integrity: sha512-dRKliflhfr5zOPSNgNJ6C2nZDd4YA8bTXF3MUNqNkcxQ8BffaH9uUwL9kMq89LkFIZQHcyP75bBgZctxfJ/H5Q==} cpu: [x64] os: [darwin] - '@libsql/hrana-client@0.6.2': - resolution: {integrity: sha512-MWxgD7mXLNf9FXXiM0bc90wCjZSpErWKr5mGza7ERy2FJNNMXd7JIOv+DepBA1FQTIfI8TFO4/QDYgaQC0goNw==} + '@libsql/hrana-client@0.7.0': + resolution: {integrity: sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==} - '@libsql/isomorphic-fetch@0.2.5': - resolution: {integrity: sha512-8s/B2TClEHms2yb+JGpsVRTPBfy1ih/Pq6h6gvyaNcYnMVJvgQRY7wAa8U2nD0dppbCuDU5evTNMEhrQ17ZKKg==} + '@libsql/isomorphic-fetch@0.3.1': + resolution: {integrity: sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==} engines: {node: '>=18.0.0'} '@libsql/isomorphic-ws@0.1.5': resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - '@libsql/linux-arm64-gnu@0.3.19': - resolution: {integrity: sha512-mgeAUU1oqqh57k7I3cQyU6Trpdsdt607eFyEmH5QO7dv303ti+LjUvh1pp21QWV6WX7wZyjeJV1/VzEImB+jRg==} + '@libsql/linux-arm64-gnu@0.4.6': + resolution: {integrity: sha512-DMPavVyY6vYPAYcQR1iOotHszg+5xSjHSg6F9kNecPX0KKdGq84zuPJmORfKOPtaWvzPewNFdML/e+s1fu09XQ==} cpu: [arm64] os: [linux] - '@libsql/linux-arm64-musl@0.3.19': - resolution: {integrity: sha512-VEZtxghyK6zwGzU9PHohvNxthruSxBEnRrX7BSL5jQ62tN4n2JNepJ6SdzXp70pdzTfwroOj/eMwiPt94gkVRg==} + '@libsql/linux-arm64-musl@0.4.6': + resolution: {integrity: sha512-whuHSYAZyclGjM3L0mKGXyWqdAy7qYvPPn+J1ve7FtGkFlM0DiIPjA5K30aWSGJSRh72sD9DBZfnu8CpfSjT6w==} cpu: [arm64] os: [linux] - '@libsql/linux-x64-gnu@0.3.19': - resolution: {integrity: sha512-2t/J7LD5w2f63wGihEO+0GxfTyYIyLGEvTFEsMO16XI5o7IS9vcSHrxsvAJs4w2Pf907uDjmc7fUfMg6L82BrQ==} + '@libsql/linux-x64-gnu@0.4.6': + resolution: {integrity: sha512-0ggx+5RwEbYabIlDBBAvavdfIJCZ757u6nDZtBeQIhzW99EKbWG3lvkXHM3qudFb/pDWSUY4RFBm6vVtF1cJGA==} cpu: [x64] os: [linux] - '@libsql/linux-x64-musl@0.3.19': - resolution: {integrity: sha512-BLsXyJaL8gZD8+3W2LU08lDEd9MIgGds0yPy5iNPp8tfhXx3pV/Fge2GErN0FC+nzt4DYQtjL+A9GUMglQefXQ==} + '@libsql/linux-x64-musl@0.4.6': + resolution: {integrity: sha512-SWNrv7Hz72QWlbM/ZsbL35MPopZavqCUmQz2HNDZ55t0F+kt8pXuP+bbI2KvmaQ7wdsoqAA4qBmjol0+bh4ndw==} cpu: [x64] os: [linux] - '@libsql/win32-x64-msvc@0.3.19': - resolution: {integrity: sha512-ay1X9AobE4BpzG0XPw1gplyLZPGHIgJOovvW23gUrukRegiUP62uzhpRbKNogLlUOynyXeq//prHgPXiebUfWg==} + '@libsql/win32-x64-msvc@0.4.6': + resolution: {integrity: sha512-Q0axn110zDNELfkEog3Nl8p9BU4eI/UvgaHevGyOiSDN7s0KPfj0j6jwVHk4oz3o/d/Gg3DRIxomZ4ftfTOy/g==} cpu: [x64] os: [win32] @@ -5869,17 +5869,17 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - drizzle-kit@0.23.2-df9e596: - resolution: {integrity: sha512-MOvoeDE1c05XGevXLqhRVu/TNHwueibPZqMUH/kG1v6DOHD5pB2poRpjphr4sjae2QDS6h+PU5pCfzqEa6le6Q==} + drizzle-kit@0.26.0: + resolution: {integrity: sha512-bTtqvQZW21zFjAfIUJSkuHMWyxaHGTtvC05ivmu9na6m3fu7AlJ+rfKgh5vGR7+Jnga7t7evONkQHrs0hxqJXg==} hasBin: true - drizzle-orm@0.32.1: - resolution: {integrity: sha512-Wq1J+lL8PzwR5K3a1FfoWsbs8powjr3pGA4+5+2ueN1VTLDNFYEolUyUWFtqy8DVRvYbL2n7sXZkgVmK9dQkng==} + drizzle-orm@0.35.0: + resolution: {integrity: sha512-fyTKnQ6WZQqSUy6yM4Do2tJPBg1ALR0vJtO9xUTLLubD+0qS1PPuu8aVOeLZQo+g8RPJn+Vqoh30/3lSS8/a2w==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' '@electric-sql/pglite': '>=0.1.1' - '@libsql/client': '*' + '@libsql/client': '>=0.10.0' '@neondatabase/serverless': '>=0.1' '@op-engineering/op-sqlite': '>=2' '@opentelemetry/api': ^1.4.1 @@ -7550,8 +7550,8 @@ packages: engines: {node: '>=16'} hasBin: true - libsql@0.3.19: - resolution: {integrity: sha512-Aj5cQ5uk/6fHdmeW0TiXK42FqUlwx7ytmMLPSaUQPin5HKKKuUPD62MAbN4OEweGBBI7q1BekoEN4gPUEL6MZA==} + libsql@0.4.6: + resolution: {integrity: sha512-F5M+ltteK6dCcpjMahrkgT96uFJvVI8aQ4r9f2AzHQjC7BkAYtvfMSTWGvRBezRgMUIU2h1Sy0pF9nOGOD5iyA==} cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] @@ -8432,6 +8432,9 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + promise-limit@2.7.0: + resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -11684,7 +11687,7 @@ snapshots: react: 19.0.0-rc-5dcb0097-20240918 tslib: 2.6.3 - '@drizzle-team/brocli@0.8.2': {} + '@drizzle-team/brocli@0.10.1': {} '@effect/schema@0.68.12(effect@3.4.5)': dependencies: @@ -12688,29 +12691,30 @@ snapshots: lexical: 0.18.0 yjs: 13.6.18 - '@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4)': + '@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)': dependencies: - '@libsql/core': 0.6.2 - '@libsql/hrana-client': 0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@libsql/core': 0.14.0 + '@libsql/hrana-client': 0.7.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) js-base64: 3.7.7 - libsql: 0.3.19 + libsql: 0.4.6 + promise-limit: 2.7.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@libsql/core@0.6.2': + '@libsql/core@0.14.0': dependencies: js-base64: 3.7.7 - '@libsql/darwin-arm64@0.3.19': + '@libsql/darwin-arm64@0.4.6': optional: true - '@libsql/darwin-x64@0.3.19': + '@libsql/darwin-x64@0.4.6': optional: true - '@libsql/hrana-client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4)': + '@libsql/hrana-client@0.7.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)': dependencies: - '@libsql/isomorphic-fetch': 0.2.5 + '@libsql/isomorphic-fetch': 0.3.1 '@libsql/isomorphic-ws': 0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.4) js-base64: 3.7.7 node-fetch: 3.3.2 @@ -12718,7 +12722,7 @@ snapshots: - bufferutil - utf-8-validate - '@libsql/isomorphic-fetch@0.2.5': {} + '@libsql/isomorphic-fetch@0.3.1': {} '@libsql/isomorphic-ws@0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.4)': dependencies: @@ -12728,19 +12732,19 @@ snapshots: - bufferutil - utf-8-validate - '@libsql/linux-arm64-gnu@0.3.19': + '@libsql/linux-arm64-gnu@0.4.6': optional: true - '@libsql/linux-arm64-musl@0.3.19': + '@libsql/linux-arm64-musl@0.4.6': optional: true - '@libsql/linux-x64-gnu@0.3.19': + '@libsql/linux-x64-gnu@0.4.6': optional: true - '@libsql/linux-x64-musl@0.3.19': + '@libsql/linux-x64-musl@0.4.6': optional: true - '@libsql/win32-x64-msvc@0.3.19': + '@libsql/win32-x64-msvc@0.4.6': optional: true '@mole-inc/bin-wrapper@8.0.1': @@ -13333,7 +13337,7 @@ snapshots: '@sentry/utils': 7.118.0 localforage: 1.10.0 - '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12))': + '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -13346,14 +13350,14 @@ snapshots: '@sentry/types': 8.33.1 '@sentry/utils': 8.33.1 '@sentry/vercel-edge': 8.33.1 - '@sentry/webpack-plugin': 2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) + '@sentry/webpack-plugin': 2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) chalk: 3.0.0 - next: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) resolve: 1.22.8 rollup: 3.29.5 stacktrace-parser: 0.1.10 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12) + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/core' @@ -13457,12 +13461,12 @@ snapshots: '@sentry/types': 8.33.1 '@sentry/utils': 8.33.1 - '@sentry/webpack-plugin@2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12))': + '@sentry/webpack-plugin@2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': dependencies: '@sentry/bundler-plugin-core': 2.22.3 unplugin: 1.0.1 uuid: 9.0.0 - webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12) + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) transitivePeerDependencies: - encoding - supports-color @@ -15433,18 +15437,18 @@ snapshots: dotenv@16.4.5: {} - drizzle-kit@0.23.2-df9e596: + drizzle-kit@0.26.0: dependencies: - '@drizzle-team/brocli': 0.8.2 + '@drizzle-team/brocli': 0.10.1 '@esbuild-kit/esm-loader': 2.6.5 esbuild: 0.19.12 esbuild-register: 3.6.0(esbuild@0.19.12) transitivePeerDependencies: - supports-color - drizzle-orm@0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + drizzle-orm@0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): optionalDependencies: - '@libsql/client': 0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@neondatabase/serverless': 0.9.4 '@opentelemetry/api': 1.9.0 '@types/pg': 8.10.2 @@ -15453,9 +15457,9 @@ snapshots: pg: 8.11.3 react: 19.0.0-rc-3edc000d-20240926 - drizzle-orm@0.32.1(@libsql/client@0.6.2(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + drizzle-orm@0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): optionalDependencies: - '@libsql/client': 0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4) + '@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@neondatabase/serverless': 0.9.4 '@opentelemetry/api': 1.9.0 '@types/pg': 8.11.6 @@ -17588,18 +17592,18 @@ snapshots: dependencies: isomorphic.js: 0.2.5 - libsql@0.3.19: + libsql@0.4.6: dependencies: '@neon-rs/load': 0.0.4 detect-libc: 2.0.2 optionalDependencies: - '@libsql/darwin-arm64': 0.3.19 - '@libsql/darwin-x64': 0.3.19 - '@libsql/linux-arm64-gnu': 0.3.19 - '@libsql/linux-arm64-musl': 0.3.19 - '@libsql/linux-x64-gnu': 0.3.19 - '@libsql/linux-x64-musl': 0.3.19 - '@libsql/win32-x64-msvc': 0.3.19 + '@libsql/darwin-arm64': 0.4.6 + '@libsql/darwin-x64': 0.4.6 + '@libsql/linux-arm64-gnu': 0.4.6 + '@libsql/linux-arm64-musl': 0.4.6 + '@libsql/linux-x64-gnu': 0.4.6 + '@libsql/linux-x64-musl': 0.4.6 + '@libsql/win32-x64-msvc': 0.4.6 lie@3.1.1: dependencies: @@ -18018,6 +18022,36 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): + dependencies: + '@next/env': 15.0.0-canary.173 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.13 + busboy: 1.6.0 + caniuse-lite: 1.0.30001651 + postcss: 8.4.31 + react: 19.0.0-rc-3edc000d-20240926 + react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + styled-jsx: 5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-3edc000d-20240926) + optionalDependencies: + '@next/swc-darwin-arm64': 15.0.0-canary.173 + '@next/swc-darwin-x64': 15.0.0-canary.173 + '@next/swc-linux-arm64-gnu': 15.0.0-canary.173 + '@next/swc-linux-arm64-musl': 15.0.0-canary.173 + '@next/swc-linux-x64-gnu': 15.0.0-canary.173 + '@next/swc-linux-x64-musl': 15.0.0-canary.173 + '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 + '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 + '@next/swc-win32-x64-msvc': 15.0.0-canary.173 + '@opentelemetry/api': 1.9.0 + '@playwright/test': 1.46.0 + babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 + sass: 1.77.4 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + nice-napi@1.0.2: dependencies: node-addon-api: 3.2.1 @@ -18504,6 +18538,8 @@ snapshots: progress@2.0.3: {} + promise-limit@2.7.0: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -19571,17 +19607,16 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)): + terser-webpack-plugin@5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12) + webpack: 5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)) optionalDependencies: '@swc/core': 1.7.10(@swc/helpers@0.5.13) - esbuild: 0.19.12 terser@5.34.1: dependencies: @@ -19686,7 +19721,7 @@ snapshots: optionalDependencies: typescript: 5.6.2 - ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2): + ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -19704,7 +19739,6 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.2) - esbuild: 0.19.12 ts-pattern@5.3.1: {} @@ -19881,7 +19915,7 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 - uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): + uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): dependencies: '@effect/schema': 0.68.12(effect@3.4.5) '@uploadthing/mime-types': 0.2.10 @@ -19891,7 +19925,7 @@ snapshots: std-env: 3.7.0 optionalDependencies: express: 4.19.2 - next: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) uri-js@4.4.1: dependencies: @@ -19995,7 +20029,7 @@ snapshots: webpack-virtual-modules@0.5.0: {} - webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12): + webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)): dependencies: '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 @@ -20017,7 +20051,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(esbuild@0.19.12)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.10(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: diff --git a/test/package.json b/test/package.json index 34f56bd24d..e13ae85e4e 100644 --- a/test/package.json +++ b/test/package.json @@ -64,7 +64,7 @@ "comment-json": "^4.2.3", "create-payload-app": "workspace:*", "dotenv": "16.4.5", - "drizzle-kit": "0.23.2-df9e596", + "drizzle-kit": "0.26.0", "eslint-plugin-playwright": "1.6.2", "execa": "5.1.1", "file-type": "19.3.0", From 6d0676ab098454aa02a92dc1eb8a2546281db74f Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Tue, 15 Oct 2024 17:12:40 -0400 Subject: [PATCH 057/110] chore: bump drizzle-kit 0.26.1 (#8721) --- package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- pnpm-lock.yaml | 27 ++++++++++++------------ test/package.json | 2 +- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 208686465e..468d080e6f 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "create-payload-app": "workspace:*", "cross-env": "7.0.3", "dotenv": "16.4.5", - "drizzle-kit": "0.26.0", + "drizzle-kit": "0.26.1", "drizzle-orm": "0.35.0", "escape-html": "^1.0.3", "execa": "5.1.1", diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index 8331b90238..7f4c102c29 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -50,7 +50,7 @@ "@payloadcms/drizzle": "workspace:*", "@types/pg": "8.10.2", "console-table-printer": "2.11.2", - "drizzle-kit": "0.26.0", + "drizzle-kit": "0.26.1", "drizzle-orm": "0.35.0", "pg": "8.11.3", "prompts": "2.4.2", diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index 3fd0f44991..cc1b3dcace 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -48,7 +48,7 @@ "@libsql/client": "0.14.0", "@payloadcms/drizzle": "workspace:*", "console-table-printer": "2.11.2", - "drizzle-kit": "0.26.0", + "drizzle-kit": "0.26.1", "drizzle-orm": "0.35.0", "prompts": "2.4.2", "to-snake-case": "1.0.0", diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 647c95f17f..36f74b2a83 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -50,7 +50,7 @@ "@payloadcms/drizzle": "workspace:*", "@vercel/postgres": "^0.9.0", "console-table-printer": "2.11.2", - "drizzle-kit": "0.26.0", + "drizzle-kit": "0.26.1", "drizzle-orm": "0.35.0", "pg": "8.11.3", "prompts": "2.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3c7969a92d..0bd918dcfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -109,8 +109,8 @@ importers: specifier: 16.4.5 version: 16.4.5 drizzle-kit: - specifier: 0.26.0 - version: 0.26.0 + specifier: 0.26.1 + version: 0.26.1 drizzle-orm: specifier: 0.35.0 version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) @@ -315,8 +315,8 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.26.0 - version: 0.26.0 + specifier: 0.26.1 + version: 0.26.1 drizzle-orm: specifier: 0.35.0 version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) @@ -361,8 +361,8 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.26.0 - version: 0.26.0 + specifier: 0.26.1 + version: 0.26.1 drizzle-orm: specifier: 0.35.0 version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) @@ -401,8 +401,8 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.26.0 - version: 0.26.0 + specifier: 0.26.1 + version: 0.26.1 drizzle-orm: specifier: 0.35.0 version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) @@ -1727,8 +1727,8 @@ importers: specifier: 16.4.5 version: 16.4.5 drizzle-kit: - specifier: 0.26.0 - version: 0.26.0 + specifier: 0.26.1 + version: 0.26.1 eslint-plugin-playwright: specifier: 1.6.2 version: 1.6.2(eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6)) @@ -5869,8 +5869,8 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - drizzle-kit@0.26.0: - resolution: {integrity: sha512-bTtqvQZW21zFjAfIUJSkuHMWyxaHGTtvC05ivmu9na6m3fu7AlJ+rfKgh5vGR7+Jnga7t7evONkQHrs0hxqJXg==} + drizzle-kit@0.26.1: + resolution: {integrity: sha512-5/e1tzOPicPDooCm/uJIU9mWK3eD5dhW5EY61TQyVVo29xYxFLmZpXlBdOYlbfDHBsNhVzhb0XjWFmAAj7d7WA==} hasBin: true drizzle-orm@0.35.0: @@ -7552,7 +7552,6 @@ packages: libsql@0.4.6: resolution: {integrity: sha512-F5M+ltteK6dCcpjMahrkgT96uFJvVI8aQ4r9f2AzHQjC7BkAYtvfMSTWGvRBezRgMUIU2h1Sy0pF9nOGOD5iyA==} - cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lie@3.1.1: @@ -15437,7 +15436,7 @@ snapshots: dotenv@16.4.5: {} - drizzle-kit@0.26.0: + drizzle-kit@0.26.1: dependencies: '@drizzle-team/brocli': 0.10.1 '@esbuild-kit/esm-loader': 2.6.5 diff --git a/test/package.json b/test/package.json index e13ae85e4e..e9e0b06628 100644 --- a/test/package.json +++ b/test/package.json @@ -64,7 +64,7 @@ "comment-json": "^4.2.3", "create-payload-app": "workspace:*", "dotenv": "16.4.5", - "drizzle-kit": "0.26.0", + "drizzle-kit": "0.26.1", "eslint-plugin-playwright": "1.6.2", "execa": "5.1.1", "file-type": "19.3.0", From e6a1ca5049b9ddd7cf0e0ee3f172a56ecf10dabe Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 15 Oct 2024 19:58:50 -0600 Subject: [PATCH 058/110] fix(ui): add missing styles under the payload-default css layer (#8723) --- .../DocumentHeader/Tabs/Tab/index.scss | 156 +++++----- .../elements/DocumentHeader/Tabs/index.scss | 82 ++--- .../src/elements/DocumentHeader/index.scss | 88 +++--- .../src/elements/DocumentLocked/index.scss | 56 ++-- .../src/elements/DocumentTakeOver/index.scss | 56 ++-- .../next/src/elements/FormHeader/index.scss | 12 +- .../elements/LeaveWithoutSaving/index.scss | 56 ++-- .../src/elements/Nav/NavWrapper/index.scss | 38 +-- packages/next/src/elements/Nav/index.scss | 284 +++++++++--------- .../src/templates/Default/Wrapper/index.scss | 84 +++--- .../next/src/templates/Default/index.scss | 124 ++++---- .../next/src/templates/Minimal/index.scss | 42 +-- .../next/src/views/API/RenderJSON/index.scss | 154 +++++----- .../nodes/unknownConvertedNode/index.scss | 24 +- .../nodes/unknownConvertedNode/index.scss | 24 +- .../toolbars/shared/ToolbarButton/index.scss | 68 +++-- .../shared/ToolbarDropdown/index.scss | 206 ++++++------- .../src/field/elements/blockquote/index.scss | 12 +- .../field/elements/link/Element/index.scss | 134 +++++---- .../field/elements/link/LinkDrawer/index.scss | 86 +++--- .../src/field/elements/ol/index.scss | 8 +- .../elements/relationship/Button/index.scss | 10 +- .../elements/relationship/Element/index.scss | 158 +++++----- .../src/field/elements/ul/index.scss | 8 +- .../field/elements/upload/Button/index.scss | 10 +- .../field/elements/upload/Element/index.scss | 262 ++++++++-------- 26 files changed, 1147 insertions(+), 1095 deletions(-) diff --git a/packages/next/src/elements/DocumentHeader/Tabs/Tab/index.scss b/packages/next/src/elements/DocumentHeader/Tabs/Tab/index.scss index e0fe6ed83a..9f8e62eccc 100644 --- a/packages/next/src/elements/DocumentHeader/Tabs/Tab/index.scss +++ b/packages/next/src/elements/DocumentHeader/Tabs/Tab/index.scss @@ -1,93 +1,95 @@ @import '../../../../scss/styles.scss'; -.doc-tab { - @extend %h5; - position: relative; +@layer payload-default { + .doc-tab { + @extend %h5; + position: relative; - &__link { - text-decoration: none; - display: flex; - justify-content: center; - align-items: center; - white-space: nowrap; + &__link { + text-decoration: none; + display: flex; + justify-content: center; + align-items: center; + white-space: nowrap; - // Use a pseudo element for the accessability so that it doesn't take up DOM space - // Also because the parent element has `overflow: hidden` which would clip an outline - &:focus-visible::after { - content: ''; - border: var(--accessibility-outline); - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - pointer-events: none; - } - } - - &:focus:not(:focus-visible) { - opacity: 1; - } - - &::before { - content: ''; - display: block; - position: absolute; - width: 100%; - height: 100%; - border-radius: var(--style-radius-s); - background-color: var(--theme-elevation-50); - opacity: 0; - } - - &:hover { - &::before { - opacity: 1; - } - - .doc-tab__count { - background-color: var(--theme-elevation-150); - } - } - - &--active { - font-weight: 600; - &::before { - opacity: 1; - background-color: var(--theme-elevation-100); - } - - .doc-tab { - &__count { - background-color: var(--theme-elevation-250); + // Use a pseudo element for the accessability so that it doesn't take up DOM space + // Also because the parent element has `overflow: hidden` which would clip an outline + &:focus-visible::after { + content: ''; + border: var(--accessibility-outline); + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + pointer-events: none; } } + &:focus:not(:focus-visible) { + opacity: 1; + } + + &::before { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + border-radius: var(--style-radius-s); + background-color: var(--theme-elevation-50); + opacity: 0; + } + &:hover { + &::before { + opacity: 1; + } + + .doc-tab__count { + background-color: var(--theme-elevation-150); + } + } + + &--active { + font-weight: 600; + &::before { + opacity: 1; + background-color: var(--theme-elevation-100); + } + .doc-tab { &__count { background-color: var(--theme-elevation-250); } } + + &:hover { + .doc-tab { + &__count { + background-color: var(--theme-elevation-250); + } + } + } + } + + &__label { + display: flex; + position: relative; + align-items: center; + gap: 4px; + width: 100%; + height: 100%; + line-height: base(1.2); + padding: base(0.2) base(0.6); + } + + &__count { + line-height: base(0.8); + min-width: base(0.8); + text-align: center; + background-color: var(--theme-elevation-100); + border-radius: var(--style-radius-s); } } - - &__label { - display: flex; - position: relative; - align-items: center; - gap: 4px; - width: 100%; - height: 100%; - line-height: base(1.2); - padding: base(0.2) base(0.6); - } - - &__count { - line-height: base(0.8); - min-width: base(0.8); - text-align: center; - background-color: var(--theme-elevation-100); - border-radius: var(--style-radius-s); - } } diff --git a/packages/next/src/elements/DocumentHeader/Tabs/index.scss b/packages/next/src/elements/DocumentHeader/Tabs/index.scss index c06f39cb90..3a16014d8c 100644 --- a/packages/next/src/elements/DocumentHeader/Tabs/index.scss +++ b/packages/next/src/elements/DocumentHeader/Tabs/index.scss @@ -1,52 +1,54 @@ @import '../../../scss/styles.scss'; -.doc-tabs { - display: flex; - - &__tabs { +@layer payload-default { + .doc-tabs { display: flex; - gap: calc(var(--base) / 2); - list-style: none; - align-items: center; - margin: 0; - padding-left: 0; - } - - @include mid-break { - width: 100%; - padding: 0; - overflow: auto; - - // this container has a gradient overlay as visual indication of `overflow: scroll` - &::-webkit-scrollbar { - display: none; - } - - &::after { - content: ''; - display: block; - position: sticky; - right: 0; - width: calc(var(--base) * 2); - height: calc(var(--base) * 2); - background: linear-gradient(to right, transparent, var(--theme-bg)); - flex-shrink: 0; - z-index: 1111; - pointer-events: none; - } &__tabs { + display: flex; + gap: calc(var(--base) / 2); + list-style: none; + align-items: center; + margin: 0; + padding-left: 0; + } + + @include mid-break { + width: 100%; padding: 0; - } - } + overflow: auto; - @include small-break { - &__tabs-container { - margin-right: var(--gutter-h); + // this container has a gradient overlay as visual indication of `overflow: scroll` + &::-webkit-scrollbar { + display: none; + } + + &::after { + content: ''; + display: block; + position: sticky; + right: 0; + width: calc(var(--base) * 2); + height: calc(var(--base) * 2); + background: linear-gradient(to right, transparent, var(--theme-bg)); + flex-shrink: 0; + z-index: 1111; + pointer-events: none; + } + + &__tabs { + padding: 0; + } } - &__tabs { - gap: var(--gutter-h); + @include small-break { + &__tabs-container { + margin-right: var(--gutter-h); + } + + &__tabs { + gap: var(--gutter-h); + } } } } diff --git a/packages/next/src/elements/DocumentHeader/index.scss b/packages/next/src/elements/DocumentHeader/index.scss index fc5d2118ec..60a534ef07 100644 --- a/packages/next/src/elements/DocumentHeader/index.scss +++ b/packages/next/src/elements/DocumentHeader/index.scss @@ -1,52 +1,54 @@ @import '../../scss/styles.scss'; -.doc-header { - width: 100%; - margin-top: base(0.4); - padding-bottom: calc(var(--base) * 1.2); - display: flex; - align-items: center; - position: relative; - display: flex; - gap: calc(var(--base) / 2); - - &::after { - content: ''; - display: block; - position: absolute; - height: 1px; - background: var(--theme-elevation-100); +@layer payload-default { + .doc-header { width: 100%; - left: 0; - top: calc(100% - 1px); - } - - &__title { - flex-grow: 1; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - margin: 0; - padding-bottom: base(0.4); - line-height: 1; - vertical-align: top; - } - - @include mid-break { - padding-left: 0; - padding-right: 0; - margin-top: base(0.25); - padding-bottom: calc(var(--base) / 1.5); - flex-direction: column; + margin-top: base(0.4); + padding-bottom: calc(var(--base) * 1.2); + display: flex; + align-items: center; + position: relative; + display: flex; gap: calc(var(--base) / 2); - padding-bottom: calc(var(--base) / 2); + + &::after { + content: ''; + display: block; + position: absolute; + height: 1px; + background: var(--theme-elevation-100); + width: 100%; + left: 0; + top: calc(100% - 1px); + } &__title { - width: 100%; + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + padding-bottom: base(0.4); + line-height: 1; + vertical-align: top; + } + + @include mid-break { + padding-left: 0; + padding-right: 0; + margin-top: base(0.25); + padding-bottom: calc(var(--base) / 1.5); + flex-direction: column; + gap: calc(var(--base) / 2); + padding-bottom: calc(var(--base) / 2); + + &__title { + width: 100%; + } + } + + @include small-break { + margin-top: 0; } } - - @include small-break { - margin-top: 0; - } } diff --git a/packages/next/src/elements/DocumentLocked/index.scss b/packages/next/src/elements/DocumentLocked/index.scss index d2e6d392dd..3918f430ce 100644 --- a/packages/next/src/elements/DocumentLocked/index.scss +++ b/packages/next/src/elements/DocumentLocked/index.scss @@ -1,37 +1,39 @@ @import '../../scss/styles.scss'; -.document-locked { - @include blur-bg; - display: flex; - align-items: center; - justify-content: center; - height: 100%; - - &__wrapper { - z-index: 1; - position: relative; +@layer payload-default { + .document-locked { + @include blur-bg; display: flex; - flex-direction: column; - gap: var(--base); - padding: base(2); - } + align-items: center; + justify-content: center; + height: 100%; - &__content { - display: flex; - flex-direction: column; - gap: var(--base); - - > * { - margin: 0; + &__wrapper { + z-index: 1; + position: relative; + display: flex; + flex-direction: column; + gap: var(--base); + padding: base(2); } - } - &__controls { - display: flex; - gap: var(--base); + &__content { + display: flex; + flex-direction: column; + gap: var(--base); - .btn { - margin: 0; + > * { + margin: 0; + } + } + + &__controls { + display: flex; + gap: var(--base); + + .btn { + margin: 0; + } } } } diff --git a/packages/next/src/elements/DocumentTakeOver/index.scss b/packages/next/src/elements/DocumentTakeOver/index.scss index 58bbec7166..a9dc269c98 100644 --- a/packages/next/src/elements/DocumentTakeOver/index.scss +++ b/packages/next/src/elements/DocumentTakeOver/index.scss @@ -1,37 +1,39 @@ @import '../../scss/styles.scss'; -.document-take-over { - @include blur-bg; - display: flex; - align-items: center; - justify-content: center; - height: 100%; - - &__wrapper { - z-index: 1; - position: relative; +@layer payload-default { + .document-take-over { + @include blur-bg; display: flex; - flex-direction: column; - gap: var(--base); - padding: base(2); - } + align-items: center; + justify-content: center; + height: 100%; - &__content { - display: flex; - flex-direction: column; - gap: var(--base); - - > * { - margin: 0; + &__wrapper { + z-index: 1; + position: relative; + display: flex; + flex-direction: column; + gap: var(--base); + padding: base(2); } - } - &__controls { - display: flex; - gap: var(--base); + &__content { + display: flex; + flex-direction: column; + gap: var(--base); - .btn { - margin: 0; + > * { + margin: 0; + } + } + + &__controls { + display: flex; + gap: var(--base); + + .btn { + margin: 0; + } } } } diff --git a/packages/next/src/elements/FormHeader/index.scss b/packages/next/src/elements/FormHeader/index.scss index 950597471b..88896041ca 100644 --- a/packages/next/src/elements/FormHeader/index.scss +++ b/packages/next/src/elements/FormHeader/index.scss @@ -1,6 +1,8 @@ -.form-header { - display: flex; - flex-direction: column; - gap: calc(var(--base) * .5); - margin-bottom: var(--base); +@layer payload-default { + .form-header { + display: flex; + flex-direction: column; + gap: calc(var(--base) * 0.5); + margin-bottom: var(--base); + } } diff --git a/packages/next/src/elements/LeaveWithoutSaving/index.scss b/packages/next/src/elements/LeaveWithoutSaving/index.scss index 45765f2b52..efca3fad57 100644 --- a/packages/next/src/elements/LeaveWithoutSaving/index.scss +++ b/packages/next/src/elements/LeaveWithoutSaving/index.scss @@ -1,37 +1,39 @@ @import '../../scss/styles.scss'; -.leave-without-saving { - @include blur-bg; - display: flex; - align-items: center; - justify-content: center; - height: 100%; - - &__wrapper { - z-index: 1; - position: relative; +@layer payload-default { + .leave-without-saving { + @include blur-bg; display: flex; - flex-direction: column; - gap: base(0.8); - padding: base(2); - } + align-items: center; + justify-content: center; + height: 100%; - &__content { - display: flex; - flex-direction: column; - gap: base(0.4); - - > * { - margin: 0; + &__wrapper { + z-index: 1; + position: relative; + display: flex; + flex-direction: column; + gap: base(0.8); + padding: base(2); } - } - &__controls { - display: flex; - gap: base(0.4); + &__content { + display: flex; + flex-direction: column; + gap: base(0.4); - .btn { - margin: 0; + > * { + margin: 0; + } + } + + &__controls { + display: flex; + gap: base(0.4); + + .btn { + margin: 0; + } } } } diff --git a/packages/next/src/elements/Nav/NavWrapper/index.scss b/packages/next/src/elements/Nav/NavWrapper/index.scss index ce98d2aed4..4c0688900d 100644 --- a/packages/next/src/elements/Nav/NavWrapper/index.scss +++ b/packages/next/src/elements/Nav/NavWrapper/index.scss @@ -1,25 +1,27 @@ @import '../../../scss/styles.scss'; -.nav { - position: sticky; - top: 0; - left: 0; - flex-shrink: 0; - height: 100vh; - width: var(--nav-width); - border-right: 1px solid var(--theme-elevation-100); - opacity: 0; +@layer payload-default { + .nav { + position: sticky; + top: 0; + left: 0; + flex-shrink: 0; + height: 100vh; + width: var(--nav-width); + border-right: 1px solid var(--theme-elevation-100); + opacity: 0; - [dir='rtl'] & { - border-right: none; - border-left: 1px solid var(--theme-elevation-100); - } + [dir='rtl'] & { + border-right: none; + border-left: 1px solid var(--theme-elevation-100); + } - &--nav-animate { - transition: opacity var(--nav-trans-time) ease-in-out; - } + &--nav-animate { + transition: opacity var(--nav-trans-time) ease-in-out; + } - &--nav-open { - opacity: 1; + &--nav-open { + opacity: 1; + } } } diff --git a/packages/next/src/elements/Nav/index.scss b/packages/next/src/elements/Nav/index.scss index 26f8285b1b..93c03802f9 100644 --- a/packages/next/src/elements/Nav/index.scss +++ b/packages/next/src/elements/Nav/index.scss @@ -1,160 +1,162 @@ @import '../../scss/styles.scss'; -.nav { - position: sticky; - top: 0; - left: 0; - flex-shrink: 0; - height: 100vh; - width: var(--nav-width); - border-right: 1px solid var(--theme-elevation-100); - opacity: 0; - overflow: hidden; - - [dir='rtl'] & { - border-right: none; - border-left: 1px solid var(--theme-elevation-100); - } - - &--nav-animate { - transition: opacity var(--nav-trans-time) ease-in-out; - } - - &--nav-open { - opacity: 1; - } - - &__header { - position: absolute; +@layer payload-default { + .nav { + position: sticky; top: 0; - width: 100vw; - height: var(--app-header-height); - } + left: 0; + flex-shrink: 0; + height: 100vh; + width: var(--nav-width); + border-right: 1px solid var(--theme-elevation-100); + opacity: 0; + overflow: hidden; - &__header-content { - z-index: 1; - position: relative; - height: 100%; - width: 100%; - } - - &__mobile-close { - display: none; - background: none; - border: 0; - outline: 0; - padding: base(0.8) 0; - } - - &__scroll { - height: 100%; - display: flex; - flex-direction: column; - padding: var(--app-header-height) base(1) base(2) base(1); - overflow-y: auto; - - // remove the scrollbar here to prevent layout shift as nav groups are toggled - &::-webkit-scrollbar { - display: none; - } - } - - &__wrap { - width: 100%; - display: flex; - flex-direction: column; - align-items: flex-start; - flex-grow: 1; - } - - &__label { - color: var(--theme-elevation-400); - } - - &__controls { - margin-top: auto; - margin-bottom: 0; - - > * { - margin-top: base(1); + [dir='rtl'] & { + border-right: none; + border-left: 1px solid var(--theme-elevation-100); } - a:focus-visible { - outline: var(--accessibility-outline); + &--nav-animate { + transition: opacity var(--nav-trans-time) ease-in-out; } - } - &__log-out { - &:hover { - g { - transform: translateX(-#{base(0.125)}); - } + &--nav-open { + opacity: 1; } - } - nav { - a { + &__header { + position: absolute; + top: 0; + width: 100vw; + height: var(--app-header-height); + } + + &__header-content { + z-index: 1; position: relative; - padding-block: base(0.125); - padding-inline-start: 0; - padding-inline-end: base(1.5); - display: flex; - text-decoration: none; - - &:focus:not(:focus-visible) { - box-shadow: none; - font-weight: 600; - } - - &:hover, - &:focus-visible { - text-decoration: underline; - } - - &.active { - font-weight: normal; - padding-left: 0; - font-weight: 600; - } - } - } - - &__link { - display: flex; - align-items: center; - } - - &__link-indicator { - position: absolute; - display: block; - // top: 0; - inset-inline-start: base(-1); - width: 2px; - height: 16px; - border-start-end-radius: 2px; - border-end-end-radius: 2px; - background: var(--theme-text); - } - - @include mid-break { - &__scroll { - padding: var(--app-header-height) base(0.5) base(2); - } - } - - @include small-break { - &__scroll { - padding: var(--app-header-height) var(--gutter-h) base(2); - } - - nav a { - font-size: base(0.875); - line-height: base(1.5); + height: 100%; + width: 100%; } &__mobile-close { + display: none; + background: none; + border: 0; + outline: 0; + padding: base(0.8) 0; + } + + &__scroll { + height: 100%; + display: flex; + flex-direction: column; + padding: var(--app-header-height) base(1) base(2) base(1); + overflow-y: auto; + + // remove the scrollbar here to prevent layout shift as nav groups are toggled + &::-webkit-scrollbar { + display: none; + } + } + + &__wrap { + width: 100%; + display: flex; + flex-direction: column; + align-items: flex-start; + flex-grow: 1; + } + + &__label { + color: var(--theme-elevation-400); + } + + &__controls { + margin-top: auto; + margin-bottom: 0; + + > * { + margin-top: base(1); + } + + a:focus-visible { + outline: var(--accessibility-outline); + } + } + + &__log-out { + &:hover { + g { + transform: translateX(-#{base(0.125)}); + } + } + } + + nav { + a { + position: relative; + padding-block: base(0.125); + padding-inline-start: 0; + padding-inline-end: base(1.5); + display: flex; + text-decoration: none; + + &:focus:not(:focus-visible) { + box-shadow: none; + font-weight: 600; + } + + &:hover, + &:focus-visible { + text-decoration: underline; + } + + &.active { + font-weight: normal; + padding-left: 0; + font-weight: 600; + } + } + } + + &__link { display: flex; align-items: center; } + + &__link-indicator { + position: absolute; + display: block; + // top: 0; + inset-inline-start: base(-1); + width: 2px; + height: 16px; + border-start-end-radius: 2px; + border-end-end-radius: 2px; + background: var(--theme-text); + } + + @include mid-break { + &__scroll { + padding: var(--app-header-height) base(0.5) base(2); + } + } + + @include small-break { + &__scroll { + padding: var(--app-header-height) var(--gutter-h) base(2); + } + + nav a { + font-size: base(0.875); + line-height: base(1.5); + } + + &__mobile-close { + display: flex; + align-items: center; + } + } } } diff --git a/packages/next/src/templates/Default/Wrapper/index.scss b/packages/next/src/templates/Default/Wrapper/index.scss index 22b858e40d..381b2766ae 100644 --- a/packages/next/src/templates/Default/Wrapper/index.scss +++ b/packages/next/src/templates/Default/Wrapper/index.scss @@ -1,55 +1,57 @@ @import '../../../scss/styles.scss'; -.template-default { - min-height: 100vh; - display: grid; - position: relative; - isolation: isolate; - - @media (prefers-reduced-motion) { - transition: none; - } - - &--nav-animate { - transition: grid-template-columns var(--nav-trans-time) linear; - } - - &--nav-open { - .template-default { - &__nav-overlay { - transition: opacity var(--nav-trans-time) linear; - } - } - } -} - -@media (min-width: 1441px) { +@layer payload-default { .template-default { - grid-template-columns: 0 auto; + min-height: 100vh; + display: grid; + position: relative; + isolation: isolate; + + @media (prefers-reduced-motion) { + transition: none; + } + + &--nav-animate { + transition: grid-template-columns var(--nav-trans-time) linear; + } &--nav-open { - grid-template-columns: var(--nav-width) auto; + .template-default { + &__nav-overlay { + transition: opacity var(--nav-trans-time) linear; + } + } } } -} -@media (max-width: 1440px) { - .template-default--nav-hydrated.template-default--nav-open { - grid-template-columns: var(--nav-width) auto; - } - - .template-default { - grid-template-columns: 1fr auto; - - .nav { - display: none; - } - - &--nav-hydrated { + @media (min-width: 1441px) { + .template-default { grid-template-columns: 0 auto; + &--nav-open { + grid-template-columns: var(--nav-width) auto; + } + } + } + + @media (max-width: 1440px) { + .template-default--nav-hydrated.template-default--nav-open { + grid-template-columns: var(--nav-width) auto; + } + + .template-default { + grid-template-columns: 1fr auto; + .nav { - display: unset; + display: none; + } + + &--nav-hydrated { + grid-template-columns: 0 auto; + + .nav { + display: unset; + } } } } diff --git a/packages/next/src/templates/Default/index.scss b/packages/next/src/templates/Default/index.scss index 9711bcb749..041455573d 100644 --- a/packages/next/src/templates/Default/index.scss +++ b/packages/next/src/templates/Default/index.scss @@ -1,76 +1,78 @@ @import '../../scss/styles.scss'; -.template-default { - background-color: var(--theme-bg); - color: var(--theme-text); - - [dir='rtl'] &__nav-toggler-wrapper { - left: unset; - right: 0; - } - - &__nav-toggler-wrapper { - position: sticky; - z-index: var(--z-modal); - top: 0; - left: 0; - height: 0; - width: var(--gutter-h); - display: flex; - justify-content: center; - } - - &__nav-toggler-container { - height: var(--app-header-height); - display: flex; - align-items: center; - } - - &__nav-toggler { - display: flex; - align-items: center; - } - - &__wrap { - min-width: 0; - width: 100%; - flex-grow: 1; - position: relative; +@layer payload-default { + .template-default { background-color: var(--theme-bg); - &:before { - content: ''; - display: block; - position: absolute; - inset: 0; - background-color: inherit; - opacity: 0; - z-index: var(--z-status); - visibility: hidden; - transition: all var(--nav-trans-time) linear; + color: var(--theme-text); + + [dir='rtl'] &__nav-toggler-wrapper { + left: unset; + right: 0; } - } - @include mid-break { &__nav-toggler-wrapper { - .hamburger { - left: unset; - } + position: sticky; + z-index: var(--z-modal); + top: 0; + left: 0; + height: 0; + width: var(--gutter-h); + display: flex; + justify-content: center; } - } - @include small-break { - &__nav-toggler-wrapper { - width: unset; - justify-content: unset; + &__nav-toggler-container { + height: var(--app-header-height); + display: flex; + align-items: center; + } - .hamburger { - display: none; + &__nav-toggler { + display: flex; + align-items: center; + } + + &__wrap { + min-width: 0; + width: 100%; + flex-grow: 1; + position: relative; + background-color: var(--theme-bg); + &:before { + content: ''; + display: block; + position: absolute; + inset: 0; + background-color: inherit; + opacity: 0; + z-index: var(--z-status); + visibility: hidden; + transition: all var(--nav-trans-time) linear; } } - .template-default { - &__wrap { - min-width: 100%; + @include mid-break { + &__nav-toggler-wrapper { + .hamburger { + left: unset; + } + } + } + + @include small-break { + &__nav-toggler-wrapper { + width: unset; + justify-content: unset; + + .hamburger { + display: none; + } + } + + .template-default { + &__wrap { + min-width: 100%; + } } } } diff --git a/packages/next/src/templates/Minimal/index.scss b/packages/next/src/templates/Minimal/index.scss index 7a265a590d..1eb8714107 100644 --- a/packages/next/src/templates/Minimal/index.scss +++ b/packages/next/src/templates/Minimal/index.scss @@ -1,28 +1,30 @@ @import '../../scss/styles'; -.template-minimal { - display: flex; - width: 100%; - justify-content: center; - align-items: center; - padding: base(3) $baseline; - margin-left: auto; - margin-right: auto; - min-height: 100%; - background-color: var(--theme-bg-color); - color: var(--theme-text); +@layer payload-default { + .template-minimal { + display: flex; + width: 100%; + justify-content: center; + align-items: center; + padding: base(3) $baseline; + margin-left: auto; + margin-right: auto; + min-height: 100%; + background-color: var(--theme-bg-color); + color: var(--theme-text); - &--width-normal { - .template-minimal__wrap { - max-width: base(24); - width: 100%; + &--width-normal { + .template-minimal__wrap { + max-width: base(24); + width: 100%; + } } - } - &--width-wide { - .template-minimal__wrap { - max-width: base(48); - width: 100%; + &--width-wide { + .template-minimal__wrap { + max-width: base(48); + width: 100%; + } } } } diff --git a/packages/next/src/views/API/RenderJSON/index.scss b/packages/next/src/views/API/RenderJSON/index.scss index 5049de3e2d..1b1c3e9dad 100644 --- a/packages/next/src/views/API/RenderJSON/index.scss +++ b/packages/next/src/views/API/RenderJSON/index.scss @@ -1,90 +1,92 @@ @import '../../../scss/styles.scss'; -.query-inspector { - &__json-children { - position: relative; +@layer payload-default { + .query-inspector { + &__json-children { + position: relative; - &:before { - content: ''; - position: absolute; - top: 0; - left: 8px; - width: 1px; - height: 100%; - border-left: 1px dashed var(--theme-elevation-200); - } - } - - &__list-wrap { - position: relative; - } - - &__list-toggle { - all: unset; - width: 100%; - text-align: left; - cursor: pointer; - border-radius: 3px; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - position: relative; - display: flex; - gap: 10px; - align-items: center; - left: -3px; - width: calc(100% + 3px); - - svg { - margin-left: 5px; - } - - svg .stroke { - stroke: var(--theme-elevation-400); - } - - &:hover { - background-color: var(--theme-elevation-100); - } - - &--empty { - cursor: default; - pointer-events: none; - } - } - - &__toggle-row-icon { - &--open { - transform: rotate(0deg); - } - &--closed { - transform: rotate(-90deg); - } - } - - &__value-type { - &--number { - .query-inspector__value { - color: var(--number-color); + &:before { + content: ''; + position: absolute; + top: 0; + left: 8px; + width: 1px; + height: 100%; + border-left: 1px dashed var(--theme-elevation-200); } } - &--string { - .query-inspector__value { - color: var(--string-color); + &__list-wrap { + position: relative; + } + + &__list-toggle { + all: unset; + width: 100%; + text-align: left; + cursor: pointer; + border-radius: 3px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + position: relative; + display: flex; + gap: 10px; + align-items: center; + left: -3px; + width: calc(100% + 3px); + + svg { + margin-left: 5px; + } + + svg .stroke { + stroke: var(--theme-elevation-400); + } + + &:hover { + background-color: var(--theme-elevation-100); + } + + &--empty { + cursor: default; + pointer-events: none; } } - } - &__row-line--nested { - margin-left: 25px; - } + &__toggle-row-icon { + &--open { + transform: rotate(0deg); + } + &--closed { + transform: rotate(-90deg); + } + } - &__bracket { - position: relative; + &__value-type { + &--number { + .query-inspector__value { + color: var(--number-color); + } + } - &--position-end { - left: 5px; - width: calc(100% - 5px); + &--string { + .query-inspector__value { + color: var(--string-color); + } + } + } + + &__row-line--nested { + margin-left: 25px; + } + + &__bracket { + position: relative; + + &--position-end { + left: 5px; + width: calc(100% - 5px); + } } } } diff --git a/packages/richtext-lexical/src/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.scss b/packages/richtext-lexical/src/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.scss index 8d09311145..6e16223c97 100644 --- a/packages/richtext-lexical/src/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.scss +++ b/packages/richtext-lexical/src/features/migrations/lexicalPluginToLexical/nodes/unknownConvertedNode/index.scss @@ -1,14 +1,16 @@ -span.unknownConverted { - text-transform: uppercase; - font-family: 'Roboto Mono', monospace; - letter-spacing: 2px; - font-size: calc(var(--base) * 0.5); - margin: 0 0 var(--base); - background: red; - color: white; - display: inline-block; - - div { +@layer payload-default { + span.unknownConverted { + text-transform: uppercase; + font-family: 'Roboto Mono', monospace; + letter-spacing: 2px; + font-size: calc(var(--base) * 0.5); + margin: 0 0 var(--base); background: red; + color: white; + display: inline-block; + + div { + background: red; + } } } diff --git a/packages/richtext-lexical/src/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.scss b/packages/richtext-lexical/src/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.scss index 8d09311145..6e16223c97 100644 --- a/packages/richtext-lexical/src/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.scss +++ b/packages/richtext-lexical/src/features/migrations/slateToLexical/nodes/unknownConvertedNode/index.scss @@ -1,14 +1,16 @@ -span.unknownConverted { - text-transform: uppercase; - font-family: 'Roboto Mono', monospace; - letter-spacing: 2px; - font-size: calc(var(--base) * 0.5); - margin: 0 0 var(--base); - background: red; - color: white; - display: inline-block; - - div { +@layer payload-default { + span.unknownConverted { + text-transform: uppercase; + font-family: 'Roboto Mono', monospace; + letter-spacing: 2px; + font-size: calc(var(--base) * 0.5); + margin: 0 0 var(--base); background: red; + color: white; + display: inline-block; + + div { + background: red; + } } } diff --git a/packages/richtext-lexical/src/features/toolbars/shared/ToolbarButton/index.scss b/packages/richtext-lexical/src/features/toolbars/shared/ToolbarButton/index.scss index 78f06a91aa..f027e91dc0 100644 --- a/packages/richtext-lexical/src/features/toolbars/shared/ToolbarButton/index.scss +++ b/packages/richtext-lexical/src/features/toolbars/shared/ToolbarButton/index.scss @@ -1,44 +1,46 @@ @import '../../../../scss/styles'; -.toolbar-popup__button { - display: flex; - align-items: center; - vertical-align: middle; - justify-content: center; - height: 30px; - width: 30px; - border: 0; - background: none; - border-radius: $style-radius-m; - cursor: pointer; - padding: 0; - transition: background-color 0.15s cubic-bezier(0, 0.2, 0.2, 1); +@layer payload-default { + .toolbar-popup__button { + display: flex; + align-items: center; + vertical-align: middle; + justify-content: center; + height: 30px; + width: 30px; + border: 0; + background: none; + border-radius: $style-radius-m; + cursor: pointer; + padding: 0; + transition: background-color 0.15s cubic-bezier(0, 0.2, 0.2, 1); - &.spaced { - margin-right: 2px; - } - - &:hover:not(.disabled) { - background-color: var(--theme-elevation-100); - } - - &.active { - background-color: var(--theme-elevation-150); - color: var(--theme-text); - &:hover { - background-color: var(--theme-elevation-200); + &.spaced { + margin-right: 2px; } - .icon { - opacity: 1; + &:hover:not(.disabled) { + background-color: var(--theme-elevation-100); } - } - &.disabled { - cursor: not-allowed; + &.active { + background-color: var(--theme-elevation-150); + color: var(--theme-text); + &:hover { + background-color: var(--theme-elevation-200); + } - .icon { - opacity: 0.2; + .icon { + opacity: 1; + } + } + + &.disabled { + cursor: not-allowed; + + .icon { + opacity: 0.2; + } } } } diff --git a/packages/richtext-lexical/src/features/toolbars/shared/ToolbarDropdown/index.scss b/packages/richtext-lexical/src/features/toolbars/shared/ToolbarDropdown/index.scss index cd60bb842f..d6efb7871e 100644 --- a/packages/richtext-lexical/src/features/toolbars/shared/ToolbarDropdown/index.scss +++ b/packages/richtext-lexical/src/features/toolbars/shared/ToolbarDropdown/index.scss @@ -1,119 +1,121 @@ @import '../../../../scss/styles'; -.toolbar-popup__dropdown { - display: flex; - align-items: center; - vertical-align: middle; - justify-content: center; - gap: base(0.2); - height: base(1.5); - border: 0; - background: none; - border-radius: $style-radius-m; - cursor: pointer; - position: relative; - padding: 0 base(0.4) 0 base(0.3); - transition: background-color 0.15s cubic-bezier(0, 0.2, 0.2, 1); - - &-label { - color: var(--theme-elevation-600); - padding-block: 0; - padding-inline: base(0.2) base(0.4); - } - - &:disabled { - cursor: not-allowed; - opacity: 0.2; - } - - &:hover:not([disabled]) { - background-color: var(--theme-elevation-100); - } - - .active { - background-color: var(--theme-elevation-100); - - .toolbar-popup__dropdown-caret { - &:after { - transform: rotate(0deg); - } - } - } - - &-caret { - width: base(0.4); +@layer payload-default { + .toolbar-popup__dropdown { display: flex; align-items: center; + vertical-align: middle; justify-content: center; - transform: rotate(45deg); - &:after { - display: block; - content: ' '; - position: absolute; - - /* Vector 3 */ - - width: 4px; - height: 4px; - transform: translateY(-2px); - border: solid 1px var(--theme-elevation-600); - border-width: 0 1px 1px 0; - } - } - - &-items { - position: absolute; - background: var(--theme-elevation-0); + gap: base(0.2); + height: base(1.5); + border: 0; + background: none; border-radius: $style-radius-m; - min-width: 132.5px; - max-width: 200px; - z-index: 100; + cursor: pointer; + position: relative; + padding: 0 base(0.4) 0 base(0.3); + transition: background-color 0.15s cubic-bezier(0, 0.2, 0.2, 1); - .toolbar-popup__dropdown-item { - all: unset; // reset all default button styles - cursor: pointer; - color: var(--theme-elevation-900); - transition: background-color 0.15s cubic-bezier(0, 0.2, 0.2, 1); + &-label { + color: var(--theme-elevation-600); + padding-block: 0; + padding-inline: base(0.2) base(0.4); + } - .text { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; + &:disabled { + cursor: not-allowed; + opacity: 0.2; + } + + &:hover:not([disabled]) { + background-color: var(--theme-elevation-100); + } + + .active { + background-color: var(--theme-elevation-100); + + .toolbar-popup__dropdown-caret { + &:after { + transform: rotate(0deg); + } } + } - &:hover:not([disabled]), - &.active { - background-color: var(--theme-elevation-100); - } - &.disabled { - cursor: not-allowed; - opacity: 0.2; - } - - padding-left: 6.25px; - padding-right: 6.25px; - width: 100%; - height: 30px; - border-radius: $style-radius-m; - box-sizing: border-box; + &-caret { + width: base(0.4); display: flex; align-items: center; - gap: 6.25px; + justify-content: center; + transform: rotate(45deg); + &:after { + display: block; + content: ' '; + position: absolute; - .icon { - min-width: 20px; - height: 20px; - color: var(--theme-elevation-600); + /* Vector 3 */ + + width: 4px; + height: 4px; + transform: translateY(-2px); + border: solid 1px var(--theme-elevation-600); + border-width: 0 1px 1px 0; + } + } + + &-items { + position: absolute; + background: var(--theme-elevation-0); + border-radius: $style-radius-m; + min-width: 132.5px; + max-width: 200px; + z-index: 100; + + .toolbar-popup__dropdown-item { + all: unset; // reset all default button styles + cursor: pointer; + color: var(--theme-elevation-900); + transition: background-color 0.15s cubic-bezier(0, 0.2, 0.2, 1); + + .text { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + &:hover:not([disabled]), + &.active { + background-color: var(--theme-elevation-100); + } + &.disabled { + cursor: not-allowed; + opacity: 0.2; + } + + padding-left: 6.25px; + padding-right: 6.25px; + width: 100%; + height: 30px; + border-radius: $style-radius-m; + box-sizing: border-box; + display: flex; + align-items: center; + gap: 6.25px; + + .icon { + min-width: 20px; + height: 20px; + color: var(--theme-elevation-600); + } + } + } + } + + html[data-theme='light'] { + .toolbar-popup__dropdown { + &-items { + position: absolute; + @include shadow-m; } } } } - -html[data-theme='light'] { - .toolbar-popup__dropdown { - &-items { - position: absolute; - @include shadow-m; - } - } -} diff --git a/packages/richtext-slate/src/field/elements/blockquote/index.scss b/packages/richtext-slate/src/field/elements/blockquote/index.scss index cf5cc1d11f..e42e66ca51 100644 --- a/packages/richtext-slate/src/field/elements/blockquote/index.scss +++ b/packages/richtext-slate/src/field/elements/blockquote/index.scss @@ -1,9 +1,11 @@ @import '../../../scss/styles.scss'; -.rich-text-blockquote { - &[data-slate-node='element'] { - margin: base(0.625) 0; - padding-left: base(0.625); - border-left: 1px solid var(--theme-elevation-200); +@layer payload-default { + .rich-text-blockquote { + &[data-slate-node='element'] { + margin: base(0.625) 0; + padding-left: base(0.625); + border-left: 1px solid var(--theme-elevation-200); + } } } diff --git a/packages/richtext-slate/src/field/elements/link/Element/index.scss b/packages/richtext-slate/src/field/elements/link/Element/index.scss index 404d7b93ef..c16c5337a7 100644 --- a/packages/richtext-slate/src/field/elements/link/Element/index.scss +++ b/packages/richtext-slate/src/field/elements/link/Element/index.scss @@ -1,88 +1,90 @@ @import '../../../../scss/styles.scss'; -.rich-text-link { - position: relative; +@layer payload-default { + .rich-text-link { + position: relative; - .popup { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; + .popup { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; - .popup__hide-scrollbar, - .popup__scroll-container { - overflow: visible; + .popup__hide-scrollbar, + .popup__scroll-container { + overflow: visible; + } + + .popup__scroll-content { + white-space: pre; + } } - .popup__scroll-content { - white-space: pre; + .icon--x line { + stroke-width: 2px; } - } - .icon--x line { - stroke-width: 2px; - } + &__popup { + @extend %body; + font-family: var(--font-body); + display: flex; - &__popup { - @extend %body; - font-family: var(--font-body); - display: flex; - - button { - @extend %btn-reset; - font-weight: 600; - cursor: pointer; - margin: 0; + button { + @extend %btn-reset; + font-weight: 600; + cursor: pointer; + margin: 0; + } } - } - &__link-label { - max-width: base(8); - overflow: hidden; - text-overflow: ellipsis; - border-radius: 2px; + &__link-label { + max-width: base(8); + overflow: hidden; + text-overflow: ellipsis; + border-radius: 2px; - &:hover { - background-color: var(--popup-button-highlight); - } - } -} - -.rich-text-link__popup { - display: flex; - gap: calc(var(--base) * 0.25); - button { - &:hover { - .btn__icon { + &:hover { background-color: var(--popup-button-highlight); - .fill { - fill: var(--theme-text); - } - .stroke { - stroke: var(--theme-text); + } + } + } + + .rich-text-link__popup { + display: flex; + gap: calc(var(--base) * 0.25); + button { + &:hover { + .btn__icon { + background-color: var(--popup-button-highlight); + .fill { + fill: var(--theme-text); + } + .stroke { + stroke: var(--theme-text); + } } } } } -} -.rich-text-link__popup-toggler { - position: relative; - border: 0; - background-color: transparent; - padding: 0; - color: var(--theme-success-600); - text-decoration: none; - border-bottom: 1px dotted; - cursor: text; + .rich-text-link__popup-toggler { + position: relative; + border: 0; + background-color: transparent; + padding: 0; + color: var(--theme-success-600); + text-decoration: none; + border-bottom: 1px dotted; + cursor: text; - &:focus, - &:focus-within { - outline: none; - } + &:focus, + &:focus-within { + outline: none; + } - &--open { - z-index: var(--z-popup); + &--open { + z-index: var(--z-popup); + } } } diff --git a/packages/richtext-slate/src/field/elements/link/LinkDrawer/index.scss b/packages/richtext-slate/src/field/elements/link/LinkDrawer/index.scss index af09f59142..b2a5b8f9a2 100644 --- a/packages/richtext-slate/src/field/elements/link/LinkDrawer/index.scss +++ b/packages/richtext-slate/src/field/elements/link/LinkDrawer/index.scss @@ -1,49 +1,51 @@ @import '../../../../scss/styles.scss'; -.rich-text-link-edit-modal { - &__template { - position: relative; - z-index: 1; - padding-top: base(1); - padding-bottom: base(2); - } - - &__header { - width: 100%; - margin-bottom: $baseline; - display: flex; - justify-content: space-between; - margin-top: base(2.5); - margin-bottom: base(1); - - @include mid-break { - margin-top: base(1.5); - } - } - - &__header-text { - margin: 0; - } - - &__header-close { - border: 0; - background-color: transparent; - padding: 0; - cursor: pointer; - overflow: hidden; - width: base(1); - height: base(1); - - svg { - width: base(2); - height: base(2); +@layer payload-default { + .rich-text-link-edit-modal { + &__template { position: relative; - inset-inline-start: base(-0.5); - top: base(-0.5); + z-index: 1; + padding-top: base(1); + padding-bottom: base(2); + } - .stroke { - stroke-width: 2px; - vector-effect: non-scaling-stroke; + &__header { + width: 100%; + margin-bottom: $baseline; + display: flex; + justify-content: space-between; + margin-top: base(2.5); + margin-bottom: base(1); + + @include mid-break { + margin-top: base(1.5); + } + } + + &__header-text { + margin: 0; + } + + &__header-close { + border: 0; + background-color: transparent; + padding: 0; + cursor: pointer; + overflow: hidden; + width: base(1); + height: base(1); + + svg { + width: base(2); + height: base(2); + position: relative; + inset-inline-start: base(-0.5); + top: base(-0.5); + + .stroke { + stroke-width: 2px; + vector-effect: non-scaling-stroke; + } } } } diff --git a/packages/richtext-slate/src/field/elements/ol/index.scss b/packages/richtext-slate/src/field/elements/ol/index.scss index 75fe03f6db..cbd75c6557 100644 --- a/packages/richtext-slate/src/field/elements/ol/index.scss +++ b/packages/richtext-slate/src/field/elements/ol/index.scss @@ -1,7 +1,9 @@ @import '../../../scss/styles.scss'; -.rich-text-ol { - &[data-slate-node='element'] { - margin: base(0.625) 0; +@layer payload-default { + .rich-text-ol { + &[data-slate-node='element'] { + margin: base(0.625) 0; + } } } diff --git a/packages/richtext-slate/src/field/elements/relationship/Button/index.scss b/packages/richtext-slate/src/field/elements/relationship/Button/index.scss index 6293fc586b..48db7ebc31 100644 --- a/packages/richtext-slate/src/field/elements/relationship/Button/index.scss +++ b/packages/richtext-slate/src/field/elements/relationship/Button/index.scss @@ -1,7 +1,9 @@ @import '../../../../scss/styles.scss'; -.relationship-rich-text-button { - display: flex; - align-items: center; - height: 100%; +@layer payload-default { + .relationship-rich-text-button { + display: flex; + align-items: center; + height: 100%; + } } diff --git a/packages/richtext-slate/src/field/elements/relationship/Element/index.scss b/packages/richtext-slate/src/field/elements/relationship/Element/index.scss index 5205500b60..4e8a5ccf81 100644 --- a/packages/richtext-slate/src/field/elements/relationship/Element/index.scss +++ b/packages/richtext-slate/src/field/elements/relationship/Element/index.scss @@ -1,93 +1,95 @@ @import '../../../../scss/styles.scss'; -.rich-text-relationship { - @extend %body; - @include shadow-sm; - padding: base(0.75); - display: flex; - align-items: center; - background: var(--theme-input-bg); - border: 1px solid var(--theme-elevation-100); - max-width: base(15); - font-family: var(--font-body); - - &:hover { - border: 1px solid var(--theme-elevation-150); - } - - &[data-slate-node='element'] { - margin: base(0.625) 0; - } - - &__label { - margin-bottom: base(0.25); - } - - &__title { - margin: 0; - } - - &__label, - &__title { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - line-height: 1 !important; - } - - &__title { - font-weight: bold; - } - - &__wrap { - flex-grow: 1; - overflow: hidden; - } - - &--selected { - box-shadow: $focus-box-shadow; - outline: none; - } - - .rich-text-relationship__doc-drawer-toggler { - text-decoration: underline; - pointer-events: all; - line-height: inherit; - } - - &__actions { +@layer payload-default { + .rich-text-relationship { + @extend %body; + @include shadow-sm; + padding: base(0.75); display: flex; align-items: center; - flex-shrink: 0; - margin-left: base(0.5); + background: var(--theme-input-bg); + border: 1px solid var(--theme-elevation-100); + max-width: base(15); + font-family: var(--font-body); - & > *:not(:last-child) { - margin-right: base(0.25); - } - } - - &__removeButton { - margin: 0; - - line { - stroke-width: $style-stroke-width-m; + &:hover { + border: 1px solid var(--theme-elevation-150); } - &:disabled { - color: var(--theme-elevation-300); - pointer-events: none; + &[data-slate-node='element'] { + margin: base(0.625) 0; } - } - &__doc-drawer-toggler, - &__list-drawer-toggler { - & > * { + &__label { + margin-bottom: base(0.25); + } + + &__title { margin: 0; } - &:disabled { - color: var(--theme-elevation-300); - pointer-events: none; + &__label, + &__title { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + line-height: 1 !important; + } + + &__title { + font-weight: bold; + } + + &__wrap { + flex-grow: 1; + overflow: hidden; + } + + &--selected { + box-shadow: $focus-box-shadow; + outline: none; + } + + .rich-text-relationship__doc-drawer-toggler { + text-decoration: underline; + pointer-events: all; + line-height: inherit; + } + + &__actions { + display: flex; + align-items: center; + flex-shrink: 0; + margin-left: base(0.5); + + & > *:not(:last-child) { + margin-right: base(0.25); + } + } + + &__removeButton { + margin: 0; + + line { + stroke-width: $style-stroke-width-m; + } + + &:disabled { + color: var(--theme-elevation-300); + pointer-events: none; + } + } + + &__doc-drawer-toggler, + &__list-drawer-toggler { + & > * { + margin: 0; + } + + &:disabled { + color: var(--theme-elevation-300); + pointer-events: none; + } } } } diff --git a/packages/richtext-slate/src/field/elements/ul/index.scss b/packages/richtext-slate/src/field/elements/ul/index.scss index d8a7789ef7..75c383c256 100644 --- a/packages/richtext-slate/src/field/elements/ul/index.scss +++ b/packages/richtext-slate/src/field/elements/ul/index.scss @@ -1,7 +1,9 @@ @import '../../../scss/styles.scss'; -.rich-text-ul { - &[data-slate-node='element'] { - margin: base(0.625) 0; +@layer payload-default { + .rich-text-ul { + &[data-slate-node='element'] { + margin: base(0.625) 0; + } } } diff --git a/packages/richtext-slate/src/field/elements/upload/Button/index.scss b/packages/richtext-slate/src/field/elements/upload/Button/index.scss index 30ec5a8fad..64af922171 100644 --- a/packages/richtext-slate/src/field/elements/upload/Button/index.scss +++ b/packages/richtext-slate/src/field/elements/upload/Button/index.scss @@ -1,7 +1,9 @@ @import '../../../../scss/styles.scss'; -.upload-rich-text-button { - display: flex; - align-items: center; - height: 100%; +@layer payload-default { + .upload-rich-text-button { + display: flex; + align-items: center; + height: 100%; + } } diff --git a/packages/richtext-slate/src/field/elements/upload/Element/index.scss b/packages/richtext-slate/src/field/elements/upload/Element/index.scss index a70740f98c..38e332bc8b 100644 --- a/packages/richtext-slate/src/field/elements/upload/Element/index.scss +++ b/packages/richtext-slate/src/field/elements/upload/Element/index.scss @@ -1,147 +1,149 @@ @import '../../../../scss/styles.scss'; -.rich-text-upload { - @extend %body; - @include shadow-sm; - max-width: base(15); - display: flex; - align-items: center; - background: var(--theme-input-bg); - border: 1px solid var(--theme-elevation-100); - position: relative; - font-family: var(--font-body); - - &:hover { - border: 1px solid var(--theme-elevation-150); - } - - &[data-slate-node='element'] { - margin: base(0.625) 0; - } - - &__card { - @include soft-shadow-bottom; +@layer payload-default { + .rich-text-upload { + @extend %body; + @include shadow-sm; + max-width: base(15); display: flex; - flex-direction: column; - width: 100%; - } - - &__topRow { - display: flex; - } - - &__thumbnail { - width: base(3.25); - height: auto; + align-items: center; + background: var(--theme-input-bg); + border: 1px solid var(--theme-elevation-100); position: relative; - overflow: hidden; - flex-shrink: 0; + font-family: var(--font-body); - img, - svg { - position: absolute; - object-fit: cover; + &:hover { + border: 1px solid var(--theme-elevation-150); + } + + &[data-slate-node='element'] { + margin: base(0.625) 0; + } + + &__card { + @include soft-shadow-bottom; + display: flex; + flex-direction: column; width: 100%; - height: 100%; - background-color: var(--theme-elevation-800); - } - } - - &__topRowRightPanel { - flex-grow: 1; - display: flex; - align-items: center; - padding: base(0.75); - justify-content: space-between; - max-width: calc(100% - #{base(3.25)}); - } - - &__actions { - display: flex; - align-items: center; - flex-shrink: 0; - margin-left: base(0.5); - - .rich-text-upload__doc-drawer-toggler { - pointer-events: all; } - & > *:not(:last-child) { - margin-right: base(0.25); - } - } - - &__removeButton { - margin: 0; - - line { - stroke-width: $style-stroke-width-m; + &__topRow { + display: flex; } - &:disabled { - color: var(--theme-elevation-300); - pointer-events: none; - } - } + &__thumbnail { + width: base(3.25); + height: auto; + position: relative; + overflow: hidden; + flex-shrink: 0; - &__upload-drawer-toggler { - background-color: transparent; - border: none; - padding: 0; - margin: 0; - outline: none; - line-height: inherit; - } - - &__doc-drawer-toggler { - text-decoration: underline; - } - - &__doc-drawer-toggler, - &__list-drawer-toggler, - &__upload-drawer-toggler { - & > * { - margin: 0; + img, + svg { + position: absolute; + object-fit: cover; + width: 100%; + height: 100%; + background-color: var(--theme-elevation-800); + } } - &:disabled { - color: var(--theme-elevation-300); - pointer-events: none; - } - } - - &__collectionLabel { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - &__bottomRow { - padding: base(0.5); - border-top: 1px solid var(--theme-elevation-100); - } - - h5 { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - } - - &__wrap { - padding: base(0.5) base(0.5) base(0.5) base(1); - text-align: left; - overflow: hidden; - text-overflow: ellipsis; - } - - &--selected { - box-shadow: $focus-box-shadow; - outline: none; - } - - @include small-break { &__topRowRightPanel { - padding: base(0.75) base(0.5); + flex-grow: 1; + display: flex; + align-items: center; + padding: base(0.75); + justify-content: space-between; + max-width: calc(100% - #{base(3.25)}); + } + + &__actions { + display: flex; + align-items: center; + flex-shrink: 0; + margin-left: base(0.5); + + .rich-text-upload__doc-drawer-toggler { + pointer-events: all; + } + + & > *:not(:last-child) { + margin-right: base(0.25); + } + } + + &__removeButton { + margin: 0; + + line { + stroke-width: $style-stroke-width-m; + } + + &:disabled { + color: var(--theme-elevation-300); + pointer-events: none; + } + } + + &__upload-drawer-toggler { + background-color: transparent; + border: none; + padding: 0; + margin: 0; + outline: none; + line-height: inherit; + } + + &__doc-drawer-toggler { + text-decoration: underline; + } + + &__doc-drawer-toggler, + &__list-drawer-toggler, + &__upload-drawer-toggler { + & > * { + margin: 0; + } + + &:disabled { + color: var(--theme-elevation-300); + pointer-events: none; + } + } + + &__collectionLabel { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &__bottomRow { + padding: base(0.5); + border-top: 1px solid var(--theme-elevation-100); + } + + h5 { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + + &__wrap { + padding: base(0.5) base(0.5) base(0.5) base(1); + text-align: left; + overflow: hidden; + text-overflow: ellipsis; + } + + &--selected { + box-shadow: $focus-box-shadow; + outline: none; + } + + @include small-break { + &__topRowRightPanel { + padding: base(0.75) base(0.5); + } } } } From a19e8d382d6ab61c93b5127c167e49eac8f79b12 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Wed, 16 Oct 2024 06:59:37 -0400 Subject: [PATCH 059/110] fix: corrects schemaPath passing (#8726) Fixes https://github.com/payloadcms/payload/issues/8690 Fixes an issue where unrelated schema paths were being joined and passed into nested sanitizeFields function calls. --- .../payload/src/fields/config/sanitize.ts | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/payload/src/fields/config/sanitize.ts b/packages/payload/src/fields/config/sanitize.ts index 9ff611488d..d3dc65eac9 100644 --- a/packages/payload/src/fields/config/sanitize.ts +++ b/packages/payload/src/fields/config/sanitize.ts @@ -49,6 +49,13 @@ type Args = { validRelationships: null | string[] } +function generateSchemaPath({ name, path = '' }: { name?: string; path?: string }): string { + if (!name) { + return path + } + return path ? `${path}.${name}` : name +} + export const sanitizeFields = async ({ config, existingFieldNames = new Set(), @@ -57,15 +64,13 @@ export const sanitizeFields = async ({ parentIsLocalized, requireFieldLevelRichTextEditor = false, richTextSanitizationPromises, - schemaPath: schemaPathArg, + schemaPath = '', validRelationships, }: Args): Promise => { if (!fields) { return [] } - let schemaPath = schemaPathArg - for (let i = 0; i < fields.length; i++) { const field = fields[i] @@ -248,9 +253,6 @@ export const sanitizeFields = async ({ } if ('fields' in field && field.fields) { - if ('name' in field && field.name) { - schemaPath = `${schemaPath || ''}${schemaPath ? '.' : ''}${field.name}` - } field.fields = await sanitizeFields({ config, existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames, @@ -259,7 +261,10 @@ export const sanitizeFields = async ({ parentIsLocalized: parentIsLocalized || field.localized, requireFieldLevelRichTextEditor, richTextSanitizationPromises, - schemaPath, + schemaPath: generateSchemaPath({ + name: 'name' in field ? field.name : undefined, + path: schemaPath, + }), validRelationships, }) } @@ -268,7 +273,6 @@ export const sanitizeFields = async ({ for (let j = 0; j < field.tabs.length; j++) { const tab = field.tabs[j] if (tabHasName(tab)) { - schemaPath = `${schemaPath || ''}${schemaPath ? '.' : ''}${tab.name}` if (typeof tab.label === 'undefined') { tab.label = toWords(tab.name) } @@ -282,7 +286,10 @@ export const sanitizeFields = async ({ parentIsLocalized: parentIsLocalized || (tabHasName(tab) && tab.localized), requireFieldLevelRichTextEditor, richTextSanitizationPromises, - schemaPath, + schemaPath: generateSchemaPath({ + name: 'name' in tab ? tab.name : undefined, + path: schemaPath, + }), validRelationships, }) field.tabs[j] = tab From a9c6a91c1ca05df128bca2753041608c52c493d8 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Wed, 16 Oct 2024 08:28:28 -0400 Subject: [PATCH 060/110] chore(examples): correct where path comes from in multi-tenant (#8698) --- .../src/fields/TenantField/components/Field.client.tsx | 6 +++--- .../src/fields/TenantField/components/Field.tsx | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/examples/multi-tenant/src/fields/TenantField/components/Field.client.tsx b/examples/multi-tenant/src/fields/TenantField/components/Field.client.tsx index 7e49b59205..033daa136b 100644 --- a/examples/multi-tenant/src/fields/TenantField/components/Field.client.tsx +++ b/examples/multi-tenant/src/fields/TenantField/components/Field.client.tsx @@ -1,13 +1,13 @@ 'use client' -import { RelationshipField, useField } from '@payloadcms/ui' +import { RelationshipField, useField, useFieldProps } from '@payloadcms/ui' import React from 'react' type Props = { initialValue?: string - path: string readOnly: boolean } -export function TenantFieldComponentClient({ initialValue, path, readOnly }: Props) { +export function TenantFieldComponentClient({ initialValue, readOnly }: Props) { + const { path } = useFieldProps() const { formInitializing, setValue, value } = useField({ path }) const hasSetInitialValue = React.useRef(false) diff --git a/examples/multi-tenant/src/fields/TenantField/components/Field.tsx b/examples/multi-tenant/src/fields/TenantField/components/Field.tsx index 1644c2aa00..fb0dc90c60 100644 --- a/examples/multi-tenant/src/fields/TenantField/components/Field.tsx +++ b/examples/multi-tenant/src/fields/TenantField/components/Field.tsx @@ -6,7 +6,6 @@ import React from 'react' import { TenantFieldComponentClient } from './Field.client' export const TenantFieldComponent: React.FC<{ - path: string payload: Payload readOnly: boolean }> = async (args) => { @@ -22,7 +21,6 @@ export const TenantFieldComponent: React.FC<{ return ( ) From c4fa885e84f0860b70c5ec25bb56f8337a5da097 Mon Sep 17 00:00:00 2001 From: Said Akhrarov <36972061+akhrarovsaid@users.noreply.github.com> Date: Wed, 16 Oct 2024 09:24:21 -0400 Subject: [PATCH 061/110] fix(ui): restrict file picking via upload config mimetypes (#8710) Fixes #8673 This PR restricts inputs with `type="file"` to only those mimetypes specified in collection upload configs. This also works for the input in `bulkUpload` and drag-and-drop capabilities by omitting dropped files if they do not conform to the upload config mimetypes. This PR also assumes that an upload config with an empty mimetype array should accept all files since the negation of that statement makes an upload collection redundant. --- .../BulkUpload/AddFilesView/index.tsx | 4 ++- packages/ui/src/elements/BulkUpload/index.tsx | 28 +++++++++++++++++-- packages/ui/src/elements/Upload/index.tsx | 3 ++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/packages/ui/src/elements/BulkUpload/AddFilesView/index.tsx b/packages/ui/src/elements/BulkUpload/AddFilesView/index.tsx index 18e0b5269e..a608e85173 100644 --- a/packages/ui/src/elements/BulkUpload/AddFilesView/index.tsx +++ b/packages/ui/src/elements/BulkUpload/AddFilesView/index.tsx @@ -11,10 +11,11 @@ import './index.scss' const baseClass = 'bulk-upload--add-files' type Props = { + readonly acceptMimeTypes?: string readonly onCancel: () => void readonly onDrop: (acceptedFiles: FileList) => void } -export function AddFilesView({ onCancel, onDrop }: Props) { +export function AddFilesView({ acceptMimeTypes, onCancel, onDrop }: Props) { const { t } = useTranslation() const inputRef = React.useRef(null) @@ -37,6 +38,7 @@ export function AddFilesView({ onCancel, onDrop }: Props) { {t('upload:selectFile')} col.slug === collectionSlug) + const uploadConfig = uploadCollection.upload + const uploadMimeTypes = uploadConfig.mimeTypes const onDrop = React.useCallback( (acceptedFiles: FileList) => { - void addFiles(acceptedFiles) + const fileTransfer = new DataTransfer() + for (const candidateFile of acceptedFiles) { + if ( + uploadMimeTypes === undefined || + uploadMimeTypes.length === 0 || + uploadMimeTypes?.includes(candidateFile.type) + ) { + fileTransfer.items.add(candidateFile) + } + } + void addFiles(fileTransfer.files) }, - [addFiles], + [addFiles, uploadMimeTypes], ) if (!collectionSlug) { @@ -30,7 +46,13 @@ function DrawerContent() { } if (!forms.length && !isInitializing) { - return closeModal(drawerSlug)} onDrop={onDrop} /> + return ( + closeModal(drawerSlug)} + onDrop={onDrop} + /> + ) } else { return } diff --git a/packages/ui/src/elements/Upload/index.tsx b/packages/ui/src/elements/Upload/index.tsx index 271e6b2907..7454b620b3 100644 --- a/packages/ui/src/elements/Upload/index.tsx +++ b/packages/ui/src/elements/Upload/index.tsx @@ -218,6 +218,8 @@ export const Upload: React.FC = (props) => { const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled) + const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ') + return (
@@ -251,6 +253,7 @@ export const Upload: React.FC = (props) => { {t('upload:selectFile')} Date: Wed, 16 Oct 2024 11:14:20 -0400 Subject: [PATCH 062/110] chore: bump drizzle-orm 0.35.1 (#8742) --- package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- pnpm-lock.yaml | 30 ++++++++++++------------ 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 468d080e6f..122479521e 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "cross-env": "7.0.3", "dotenv": "16.4.5", "drizzle-kit": "0.26.1", - "drizzle-orm": "0.35.0", + "drizzle-orm": "0.35.1", "escape-html": "^1.0.3", "execa": "5.1.1", "form-data": "3.0.1", diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index 7f4c102c29..563e6efdf2 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -51,7 +51,7 @@ "@types/pg": "8.10.2", "console-table-printer": "2.11.2", "drizzle-kit": "0.26.1", - "drizzle-orm": "0.35.0", + "drizzle-orm": "0.35.1", "pg": "8.11.3", "prompts": "2.4.2", "to-snake-case": "1.0.0", diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index cc1b3dcace..c98624dd26 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -49,7 +49,7 @@ "@payloadcms/drizzle": "workspace:*", "console-table-printer": "2.11.2", "drizzle-kit": "0.26.1", - "drizzle-orm": "0.35.0", + "drizzle-orm": "0.35.1", "prompts": "2.4.2", "to-snake-case": "1.0.0", "uuid": "9.0.0" diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 36f74b2a83..ae705bde04 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -51,7 +51,7 @@ "@vercel/postgres": "^0.9.0", "console-table-printer": "2.11.2", "drizzle-kit": "0.26.1", - "drizzle-orm": "0.35.0", + "drizzle-orm": "0.35.1", "pg": "8.11.3", "prompts": "2.4.2", "to-snake-case": "1.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0bd918dcfa..9bd4adaaef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ overrides: copyfiles: 2.4.1 cross-env: 7.0.3 dotenv: 16.4.5 - drizzle-orm: 0.35.0 + drizzle-orm: 0.35.1 graphql: ^16.8.1 mongodb-memory-server: ^9.0 react: 19.0.0-rc-3edc000d-20240926 @@ -112,8 +112,8 @@ importers: specifier: 0.26.1 version: 0.26.1 drizzle-orm: - specifier: 0.35.0 - version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.1 + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) escape-html: specifier: ^1.0.3 version: 1.0.3 @@ -318,8 +318,8 @@ importers: specifier: 0.26.1 version: 0.26.1 drizzle-orm: - specifier: 0.35.0 - version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.1 + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) pg: specifier: 8.11.3 version: 8.11.3 @@ -364,8 +364,8 @@ importers: specifier: 0.26.1 version: 0.26.1 drizzle-orm: - specifier: 0.35.0 - version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.1 + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) prompts: specifier: 2.4.2 version: 2.4.2 @@ -404,8 +404,8 @@ importers: specifier: 0.26.1 version: 0.26.1 drizzle-orm: - specifier: 0.35.0 - version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.1 + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) pg: specifier: 8.11.3 version: 8.11.3 @@ -444,8 +444,8 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-orm: - specifier: 0.35.0 - version: 0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + specifier: 0.35.1 + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) prompts: specifier: 2.4.2 version: 2.4.2 @@ -5873,8 +5873,8 @@ packages: resolution: {integrity: sha512-5/e1tzOPicPDooCm/uJIU9mWK3eD5dhW5EY61TQyVVo29xYxFLmZpXlBdOYlbfDHBsNhVzhb0XjWFmAAj7d7WA==} hasBin: true - drizzle-orm@0.35.0: - resolution: {integrity: sha512-fyTKnQ6WZQqSUy6yM4Do2tJPBg1ALR0vJtO9xUTLLubD+0qS1PPuu8aVOeLZQo+g8RPJn+Vqoh30/3lSS8/a2w==} + drizzle-orm@0.35.1: + resolution: {integrity: sha512-HQxDdYuXlZFuvDPztlUIzrX8TqWa/Ej6uN6L0hkbuGL4slexOUMc3u4nXVU15RQ5QYbk+uLQnR6v1+OIrdCTXQ==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' @@ -15445,7 +15445,7 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + drizzle-orm@0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): optionalDependencies: '@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@neondatabase/serverless': 0.9.4 @@ -15456,7 +15456,7 @@ snapshots: pg: 8.11.3 react: 19.0.0-rc-3edc000d-20240926 - drizzle-orm@0.35.0(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + drizzle-orm@0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): optionalDependencies: '@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@neondatabase/serverless': 0.9.4 From 99228b62ce5f62cbad1db3bf63da296a5e7f8661 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:12:43 -0400 Subject: [PATCH 063/110] chore: improves getLatestCollectionVersion where constraints (#8746) --- .../payload/src/versions/drafts/appendVersionToQueryKey.ts | 2 +- packages/payload/src/versions/getLatestCollectionVersion.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/payload/src/versions/drafts/appendVersionToQueryKey.ts b/packages/payload/src/versions/drafts/appendVersionToQueryKey.ts index b4d5c39f24..f42070ed05 100644 --- a/packages/payload/src/versions/drafts/appendVersionToQueryKey.ts +++ b/packages/payload/src/versions/drafts/appendVersionToQueryKey.ts @@ -1,6 +1,6 @@ import type { Where } from '../../types/index.js' -export const appendVersionToQueryKey = (query: Where): Where => { +export const appendVersionToQueryKey = (query: Where = {}): Where => { return Object.entries(query).reduce((res, [key, val]) => { if (['AND', 'and', 'OR', 'or'].includes(key) && Array.isArray(val)) { return { diff --git a/packages/payload/src/versions/getLatestCollectionVersion.ts b/packages/payload/src/versions/getLatestCollectionVersion.ts index ada7ff212e..4c18faf699 100644 --- a/packages/payload/src/versions/getLatestCollectionVersion.ts +++ b/packages/payload/src/versions/getLatestCollectionVersion.ts @@ -3,6 +3,9 @@ import type { FindOneArgs } from '../database/types.js' import type { Payload, PayloadRequest } from '../types/index.js' import type { TypeWithVersion } from './types.js' +import { combineQueries } from '../database/combineQueries.js' +import { appendVersionToQueryKey } from './drafts/appendVersionToQueryKey.js' + type Args = { config: SanitizedCollectionConfig id: number | string @@ -33,7 +36,7 @@ export const getLatestCollectionVersion = async ({ pagination: false, req, sort: '-updatedAt', - where: whereQuery, + where: combineQueries(appendVersionToQueryKey(query.where), whereQuery), }) ;[latestVersion] = docs } From 0fb92d3a0ada404b7bad94c974636f98472b1b5f Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Wed, 16 Oct 2024 14:12:20 -0400 Subject: [PATCH 064/110] chore(release): v3.0.0-beta.115 [skip ci] --- package.json | 2 +- packages/create-payload-app/package.json | 2 +- packages/db-mongodb/package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- packages/drizzle/package.json | 2 +- packages/email-nodemailer/package.json | 2 +- packages/email-resend/package.json | 2 +- packages/graphql/package.json | 2 +- packages/live-preview-react/package.json | 2 +- packages/live-preview-vue/package.json | 2 +- packages/live-preview/package.json | 2 +- packages/next/package.json | 2 +- packages/payload/package.json | 2 +- packages/plugin-cloud-storage/package.json | 2 +- packages/plugin-cloud/package.json | 2 +- packages/plugin-form-builder/package.json | 2 +- packages/plugin-nested-docs/package.json | 2 +- packages/plugin-redirects/package.json | 2 +- packages/plugin-search/package.json | 2 +- packages/plugin-sentry/package.json | 2 +- packages/plugin-seo/package.json | 2 +- packages/plugin-stripe/package.json | 2 +- packages/richtext-lexical/package.json | 2 +- packages/richtext-slate/package.json | 2 +- packages/storage-azure/package.json | 2 +- packages/storage-gcs/package.json | 2 +- packages/storage-s3/package.json | 2 +- packages/storage-uploadthing/package.json | 2 +- packages/storage-vercel-blob/package.json | 2 +- packages/translations/package.json | 2 +- packages/ui/package.json | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 122479521e..40f31a4990 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "private": true, "type": "module", "scripts": { diff --git a/packages/create-payload-app/package.json b/packages/create-payload-app/package.json index 5717902aeb..29a12e703e 100644 --- a/packages/create-payload-app/package.json +++ b/packages/create-payload-app/package.json @@ -1,6 +1,6 @@ { "name": "create-payload-app", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index 09119b5ab6..cbd5d70c88 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The officially supported MongoDB database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index 563e6efdf2..d414bd2b84 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The officially supported Postgres database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index c98624dd26..69e8796258 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-sqlite", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The officially supported SQLite database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index ae705bde04..1215b84b3e 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-vercel-postgres", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Vercel Postgres adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index b9cd2a41e4..6d6d1095c0 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/drizzle", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "A library of shared functions used by different payload database adapters", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-nodemailer/package.json b/packages/email-nodemailer/package.json index 76b8c245f9..d194292d1f 100644 --- a/packages/email-nodemailer/package.json +++ b/packages/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-nodemailer", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Payload Nodemailer Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-resend/package.json b/packages/email-resend/package.json index a9f19adf2c..d7ebac1489 100644 --- a/packages/email-resend/package.json +++ b/packages/email-resend/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-resend", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Payload Resend Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/graphql/package.json b/packages/graphql/package.json index 22ffa1f736..71036ff0b3 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index 9b4a82b99c..43a1fff244 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-react", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The official React SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview-vue/package.json b/packages/live-preview-vue/package.json index 28fdbacd0f..82c5070657 100644 --- a/packages/live-preview-vue/package.json +++ b/packages/live-preview-vue/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-vue", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The official Vue SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview/package.json b/packages/live-preview/package.json index 2abf746cfe..81d6e05f42 100644 --- a/packages/live-preview/package.json +++ b/packages/live-preview/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The official live preview JavaScript SDK for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/next/package.json b/packages/next/package.json index 8c6675c309..14dfb3b00a 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/payload/package.json b/packages/payload/package.json index 6099554798..2419fdcebd 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Node, React, Headless CMS and Application Framework built on Next.js", "keywords": [ "admin panel", diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index 20d6c28f81..4a1880d88b 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud-storage", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The official cloud storage plugin for Payload CMS", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index 9cebb5b464..9c32e62aea 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The official Payload Cloud plugin", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index 514ddd500d..07af8eb72b 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-form-builder", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Form builder plugin for Payload CMS", "keywords": [ "payload", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index 782c43b844..a659d54f56 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The official Nested Docs plugin for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index 598c395912..65570ab3ae 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Redirects plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index 25409820cc..4d4167e446 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Search plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-sentry/package.json b/packages/plugin-sentry/package.json index 41e7889a44..8bd7a92f72 100644 --- a/packages/plugin-sentry/package.json +++ b/packages/plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-sentry", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Sentry plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index 33ba8d9d98..42690c5a1a 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "SEO plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-stripe/package.json b/packages/plugin-stripe/package.json index 867466d96d..6aac72d681 100644 --- a/packages/plugin-stripe/package.json +++ b/packages/plugin-stripe/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-stripe", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Stripe plugin for Payload", "keywords": [ "payload", diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index 821fcf9786..b0e39707d8 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The officially supported Lexical richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index 6073b3f86e..03489d17e9 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "The officially supported Slate richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-azure/package.json b/packages/storage-azure/package.json index f67a006833..8a28a4c86a 100644 --- a/packages/storage-azure/package.json +++ b/packages/storage-azure/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-azure", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Payload storage adapter for Azure Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-gcs/package.json b/packages/storage-gcs/package.json index 94678d0a6c..b17ad3d5a2 100644 --- a/packages/storage-gcs/package.json +++ b/packages/storage-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-gcs", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Payload storage adapter for Google Cloud Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-s3/package.json b/packages/storage-s3/package.json index 4570509b59..51ae2ee7e5 100644 --- a/packages/storage-s3/package.json +++ b/packages/storage-s3/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-s3", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Payload storage adapter for Amazon S3", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-uploadthing/package.json b/packages/storage-uploadthing/package.json index 406d5b92d2..d96bf926f6 100644 --- a/packages/storage-uploadthing/package.json +++ b/packages/storage-uploadthing/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-uploadthing", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Payload storage adapter for uploadthing", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-vercel-blob/package.json b/packages/storage-vercel-blob/package.json index 21486c0439..a7d1179651 100644 --- a/packages/storage-vercel-blob/package.json +++ b/packages/storage-vercel-blob/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-vercel-blob", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "description": "Payload storage adapter for Vercel Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/translations/package.json b/packages/translations/package.json index 0ab91e026b..490ee1da44 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/ui/package.json b/packages/ui/package.json index 2f6991c732..6c998ecbad 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-beta.114", + "version": "3.0.0-beta.115", "homepage": "https://payloadcms.com", "repository": { "type": "git", From c63b7bc6068675c2e9c010252f5d242f1d98a4f8 Mon Sep 17 00:00:00 2001 From: Patrik Date: Wed, 16 Oct 2024 14:46:39 -0400 Subject: [PATCH 065/110] fix: disables document locking of `payload-locked-documents`, `preferences`, & `migrations` collections (#8744) Fixes #8589 ### Issue: There were problems with updating documents in `payload-locked-documents` collection i.e when "taking over" a document - a `patch` request is sent to `payload-locked-documents` to update the user (owner). However, as a result, this `update` operation would lock that corresponding doc in `payload-locked-documents` and therefore error on the `patch` request. ### Fix: Disable document locking entirely from `payload-locked-documents` & `preferences` & `migrations` collections --- .../migrations/migrationsCollection.ts | 1 + .../lockedDocumentsCollection.ts | 1 + .../src/preferences/preferencesCollection.ts | 1 + .../src/utilities/checkDocumentLockStatus.ts | 6 ++- test/locked-documents/int.spec.ts | 44 +++++++++++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) diff --git a/packages/payload/src/database/migrations/migrationsCollection.ts b/packages/payload/src/database/migrations/migrationsCollection.ts index 999cdc58b7..e625e9366d 100644 --- a/packages/payload/src/database/migrations/migrationsCollection.ts +++ b/packages/payload/src/database/migrations/migrationsCollection.ts @@ -18,4 +18,5 @@ export const migrationsCollection: CollectionConfig = { }, ], graphQL: false, + lockDocuments: false, } diff --git a/packages/payload/src/lockedDocuments/lockedDocumentsCollection.ts b/packages/payload/src/lockedDocuments/lockedDocumentsCollection.ts index e2508ac3df..a8d346d261 100644 --- a/packages/payload/src/lockedDocuments/lockedDocumentsCollection.ts +++ b/packages/payload/src/lockedDocuments/lockedDocumentsCollection.ts @@ -29,4 +29,5 @@ export const getLockedDocumentsCollection = (config: Config): CollectionConfig = required: true, }, ], + lockDocuments: false, }) diff --git a/packages/payload/src/preferences/preferencesCollection.ts b/packages/payload/src/preferences/preferencesCollection.ts index cb33621e86..82f6c40783 100644 --- a/packages/payload/src/preferences/preferencesCollection.ts +++ b/packages/payload/src/preferences/preferencesCollection.ts @@ -70,6 +70,7 @@ const getPreferencesCollection = (config: Config): CollectionConfig => ({ type: 'json', }, ], + lockDocuments: false, }) export default getPreferencesCollection diff --git a/packages/payload/src/utilities/checkDocumentLockStatus.ts b/packages/payload/src/utilities/checkDocumentLockStatus.ts index ff0dece07b..95d269b21a 100644 --- a/packages/payload/src/utilities/checkDocumentLockStatus.ts +++ b/packages/payload/src/utilities/checkDocumentLockStatus.ts @@ -47,8 +47,12 @@ export const checkDocumentLockStatus = async ({ throw new Error('Either collectionSlug or globalSlug must be provided.') } + if (!isLockingEnabled) { + return + } + // Only perform lock checks if overrideLock is false and locking is enabled - if (!overrideLock && isLockingEnabled !== false) { + if (!overrideLock) { const defaultLockErrorMessage = collectionSlug ? `Document with ID ${id} is currently locked by another user and cannot be modified.` : `Global document with slug "${globalSlug}" is currently locked by another user and cannot be modified.` diff --git a/test/locked-documents/int.spec.ts b/test/locked-documents/int.spec.ts index 8d23a60175..5707a7745c 100644 --- a/test/locked-documents/int.spec.ts +++ b/test/locked-documents/int.spec.ts @@ -611,4 +611,48 @@ describe('Locked documents', () => { expect(docsFromLocksCollection.docs).toHaveLength(0) }) + + it('should allow take over on locked doc (simulates take over modal from admin ui)', async () => { + const newPost7 = await payload.create({ + collection: postsSlug, + data: { + text: 'new post 7', + }, + }) + + const lockedDocInstance = await payload.create({ + collection: lockedDocumentCollection, + data: { + editedAt: new Date().toISOString(), + user: { + relationTo: 'users', + value: user2.id, + }, + document: { + relationTo: 'posts', + value: newPost7.id, + }, + globalSlug: undefined, + }, + }) + + // This is the take over action - changing the user to the current user + await payload.update({ + collection: 'payload-locked-documents', + data: { + user: { relationTo: 'users', value: user?.id }, + }, + id: lockedDocInstance.id, + }) + + const docsFromLocksCollection = await payload.find({ + collection: lockedDocumentCollection, + where: { + 'user.value': { equals: user.id }, + }, + }) + + expect(docsFromLocksCollection.docs).toHaveLength(1) + expect(docsFromLocksCollection.docs[0].user.value?.id).toEqual(user.id) + }) }) From b269d33278b9db2d052f9b212f15d56cfdf43a20 Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Wed, 16 Oct 2024 16:32:54 -0400 Subject: [PATCH 066/110] chore: bump drizzle-kit 0.26.2 (#8750) --- package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- pnpm-lock.yaml | 26 ++++++++++++------------ test/package.json | 2 +- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 40f31a4990..4e36a1b32d 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "create-payload-app": "workspace:*", "cross-env": "7.0.3", "dotenv": "16.4.5", - "drizzle-kit": "0.26.1", + "drizzle-kit": "0.26.2", "drizzle-orm": "0.35.1", "escape-html": "^1.0.3", "execa": "5.1.1", diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index d414bd2b84..fdcb9b0fec 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -50,7 +50,7 @@ "@payloadcms/drizzle": "workspace:*", "@types/pg": "8.10.2", "console-table-printer": "2.11.2", - "drizzle-kit": "0.26.1", + "drizzle-kit": "0.26.2", "drizzle-orm": "0.35.1", "pg": "8.11.3", "prompts": "2.4.2", diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index 69e8796258..013d46ea2e 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -48,7 +48,7 @@ "@libsql/client": "0.14.0", "@payloadcms/drizzle": "workspace:*", "console-table-printer": "2.11.2", - "drizzle-kit": "0.26.1", + "drizzle-kit": "0.26.2", "drizzle-orm": "0.35.1", "prompts": "2.4.2", "to-snake-case": "1.0.0", diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 1215b84b3e..579d1e7cfa 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -50,7 +50,7 @@ "@payloadcms/drizzle": "workspace:*", "@vercel/postgres": "^0.9.0", "console-table-printer": "2.11.2", - "drizzle-kit": "0.26.1", + "drizzle-kit": "0.26.2", "drizzle-orm": "0.35.1", "pg": "8.11.3", "prompts": "2.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9bd4adaaef..8ccc36f3f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -109,8 +109,8 @@ importers: specifier: 16.4.5 version: 16.4.5 drizzle-kit: - specifier: 0.26.1 - version: 0.26.1 + specifier: 0.26.2 + version: 0.26.2 drizzle-orm: specifier: 0.35.1 version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) @@ -315,8 +315,8 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.26.1 - version: 0.26.1 + specifier: 0.26.2 + version: 0.26.2 drizzle-orm: specifier: 0.35.1 version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) @@ -361,8 +361,8 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.26.1 - version: 0.26.1 + specifier: 0.26.2 + version: 0.26.2 drizzle-orm: specifier: 0.35.1 version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) @@ -401,8 +401,8 @@ importers: specifier: 2.11.2 version: 2.11.2 drizzle-kit: - specifier: 0.26.1 - version: 0.26.1 + specifier: 0.26.2 + version: 0.26.2 drizzle-orm: specifier: 0.35.1 version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) @@ -1727,8 +1727,8 @@ importers: specifier: 16.4.5 version: 16.4.5 drizzle-kit: - specifier: 0.26.1 - version: 0.26.1 + specifier: 0.26.2 + version: 0.26.2 eslint-plugin-playwright: specifier: 1.6.2 version: 1.6.2(eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6)) @@ -5869,8 +5869,8 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - drizzle-kit@0.26.1: - resolution: {integrity: sha512-5/e1tzOPicPDooCm/uJIU9mWK3eD5dhW5EY61TQyVVo29xYxFLmZpXlBdOYlbfDHBsNhVzhb0XjWFmAAj7d7WA==} + drizzle-kit@0.26.2: + resolution: {integrity: sha512-cMq8omEKywjIy5KcqUo6LvEFxkl8/zYHsgYjFVXjmPWWtuW4blcz+YW9+oIhoaALgs2ebRjzXwsJgN9i6P49Dw==} hasBin: true drizzle-orm@0.35.1: @@ -15436,7 +15436,7 @@ snapshots: dotenv@16.4.5: {} - drizzle-kit@0.26.1: + drizzle-kit@0.26.2: dependencies: '@drizzle-team/brocli': 0.10.1 '@esbuild-kit/esm-loader': 2.6.5 diff --git a/test/package.json b/test/package.json index e9e0b06628..db413251c9 100644 --- a/test/package.json +++ b/test/package.json @@ -64,7 +64,7 @@ "comment-json": "^4.2.3", "create-payload-app": "workspace:*", "dotenv": "16.4.5", - "drizzle-kit": "0.26.1", + "drizzle-kit": "0.26.2", "eslint-plugin-playwright": "1.6.2", "execa": "5.1.1", "file-type": "19.3.0", From 99b4359e89757c35ea2296388259c75b4431169e Mon Sep 17 00:00:00 2001 From: Jarrod Flesch <30633324+JarrodMFlesch@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:54:23 -0400 Subject: [PATCH 067/110] fix: pg where filters not respected in policy generation (#8753) Fixes https://github.com/payloadcms/payload/issues/8224 Fixes an issue with PG `where` filters not being respected when generating doc policies/permissions by utilizing the combineQueries function in getEntityPolicies function. --- packages/payload/src/utilities/getEntityPolicies.ts | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/packages/payload/src/utilities/getEntityPolicies.ts b/packages/payload/src/utilities/getEntityPolicies.ts index 9618a0e25f..477d6a9122 100644 --- a/packages/payload/src/utilities/getEntityPolicies.ts +++ b/packages/payload/src/utilities/getEntityPolicies.ts @@ -5,6 +5,7 @@ import type { Field, FieldAccess } from '../fields/config/types.js' import type { SanitizedGlobalConfig } from '../globals/config/types.js' import type { AllOperations, Document, PayloadRequest, Where } from '../types/index.js' +import { combineQueries } from '../database/combineQueries.js' import { tabHasName } from '../fields/config/types.js' type Args = { @@ -63,17 +64,7 @@ export async function getEntityPolicies(args: T): Promise Date: Thu, 17 Oct 2024 04:52:48 +0300 Subject: [PATCH 068/110] fix(drizzle): select hasMany nested to array + tab/group (#8737) Fixes https://github.com/payloadcms/payload/issues/8732 --- .../src/transform/write/traverseFields.ts | 18 +++- test/fields/collections/Select/index.ts | 82 +++++++++++++++++++ test/fields/int.spec.ts | 48 +++++++++++ test/fields/payload-types.ts | 27 ++++++ 4 files changed, 173 insertions(+), 2 deletions(-) diff --git a/packages/drizzle/src/transform/write/traverseFields.ts b/packages/drizzle/src/transform/write/traverseFields.ts index 6834c1184b..f0addcf5d2 100644 --- a/packages/drizzle/src/transform/write/traverseFields.ts +++ b/packages/drizzle/src/transform/write/traverseFields.ts @@ -212,6 +212,9 @@ export const traverseFields = ({ if (typeof data[field.name] === 'object' && data[field.name] !== null) { if (field.localized) { Object.entries(data[field.name]).forEach(([localeKey, localeData]) => { + // preserve array ID if there is + localeData._uuid = data.id || data._uuid + traverseFields({ adapter, arrays, @@ -237,6 +240,10 @@ export const traverseFields = ({ }) }) } else { + // preserve array ID if there is + const groupData = data[field.name] as Record + groupData._uuid = data.id || data._uuid + traverseFields({ adapter, arrays, @@ -244,7 +251,7 @@ export const traverseFields = ({ blocks, blocksToDelete, columnPrefix: `${columnName}_`, - data: data[field.name] as Record, + data: groupData, existingLocales, fieldPrefix: `${fieldName}_`, fields: field.fields, @@ -275,6 +282,9 @@ export const traverseFields = ({ if (typeof data[tab.name] === 'object' && data[tab.name] !== null) { if (tab.localized) { Object.entries(data[tab.name]).forEach(([localeKey, localeData]) => { + // preserve array ID if there is + localeData._uuid = data.id || data._uuid + traverseFields({ adapter, arrays, @@ -300,6 +310,10 @@ export const traverseFields = ({ }) }) } else { + const tabData = data[tab.name] as Record + // preserve array ID if there is + tabData._uuid = data.id || data._uuid + traverseFields({ adapter, arrays, @@ -307,7 +321,7 @@ export const traverseFields = ({ blocks, blocksToDelete, columnPrefix: `${columnPrefix || ''}${toSnakeCase(tab.name)}_`, - data: data[tab.name] as Record, + data: tabData, existingLocales, fieldPrefix: `${fieldPrefix || ''}${tab.name}_`, fields: tab.fields, diff --git a/test/fields/collections/Select/index.ts b/test/fields/collections/Select/index.ts index 5f208d441d..976fef4f92 100644 --- a/test/fields/collections/Select/index.ts +++ b/test/fields/collections/Select/index.ts @@ -82,6 +82,88 @@ const SelectFields: CollectionConfig = { }, ], }, + { + name: 'array', + type: 'array', + fields: [ + { + name: 'selectHasMany', + hasMany: true, + type: 'select', + admin: { + isClearable: true, + isSortable: true, + }, + options: [ + { + label: 'Value One', + value: 'one', + }, + { + label: 'Value Two', + value: 'two', + }, + { + label: 'Value Three', + value: 'three', + }, + { + label: 'Value Four', + value: 'four', + }, + { + label: 'Value Five', + value: 'five', + }, + { + label: 'Value Six', + value: 'six', + }, + ], + }, + { + name: 'group', + type: 'group', + fields: [ + { + name: 'selectHasMany', + hasMany: true, + type: 'select', + admin: { + isClearable: true, + isSortable: true, + }, + options: [ + { + label: 'Value One', + value: 'one', + }, + { + label: 'Value Two', + value: 'two', + }, + { + label: 'Value Three', + value: 'three', + }, + { + label: 'Value Four', + value: 'four', + }, + { + label: 'Value Five', + value: 'five', + }, + { + label: 'Value Six', + value: 'six', + }, + ], + }, + ], + }, + ], + }, { name: 'selectHasManyLocalized', type: 'select', diff --git a/test/fields/int.spec.ts b/test/fields/int.spec.ts index fe528cacc6..6b0db2021d 100644 --- a/test/fields/int.spec.ts +++ b/test/fields/int.spec.ts @@ -552,6 +552,54 @@ describe('Fields', () => { expect(hitResult).toBeDefined() expect(missResult).toBeFalsy() }) + + it('should CRUD within array hasMany', async () => { + const doc = await payload.create({ + collection: 'select-fields', + data: { array: [{ selectHasMany: ['one', 'two'] }] }, + }) + + expect(doc.array[0].selectHasMany).toStrictEqual(['one', 'two']) + + const upd = await payload.update({ + collection: 'select-fields', + id: doc.id, + data: { + array: [ + { + id: doc.array[0].id, + selectHasMany: ['six'], + }, + ], + }, + }) + + expect(upd.array[0].selectHasMany).toStrictEqual(['six']) + }) + + it('should CRUD within array + group hasMany', async () => { + const doc = await payload.create({ + collection: 'select-fields', + data: { array: [{ group: { selectHasMany: ['one', 'two'] } }] }, + }) + + expect(doc.array[0].group.selectHasMany).toStrictEqual(['one', 'two']) + + const upd = await payload.update({ + collection: 'select-fields', + id: doc.id, + data: { + array: [ + { + id: doc.array[0].id, + group: { selectHasMany: ['six'] }, + }, + ], + }, + }) + + expect(upd.array[0].group.selectHasMany).toStrictEqual(['six']) + }) }) describe('number', () => { diff --git a/test/fields/payload-types.ts b/test/fields/payload-types.ts index 7d60e22422..5208445770 100644 --- a/test/fields/payload-types.ts +++ b/test/fields/payload-types.ts @@ -60,6 +60,7 @@ export interface Config { 'uploads-multi': UploadsMulti; 'uploads-poly': UploadsPoly; 'uploads-multi-poly': UploadsMultiPoly; + 'uploads-restricted': UploadsRestricted; 'ui-fields': UiField; 'payload-locked-documents': PayloadLockedDocument; 'payload-preferences': PayloadPreference; @@ -1328,6 +1329,15 @@ export interface SelectField { select?: ('one' | 'two' | 'three') | null; selectReadOnly?: ('one' | 'two' | 'three') | null; selectHasMany?: ('one' | 'two' | 'three' | 'four' | 'five' | 'six')[] | null; + array?: + | { + selectHasMany?: ('one' | 'two' | 'three' | 'four' | 'five' | 'six')[] | null; + group?: { + selectHasMany?: ('one' | 'two' | 'three' | 'four' | 'five' | 'six')[] | null; + }; + id?: string | null; + }[] + | null; selectHasManyLocalized?: ('one' | 'two')[] | null; selectI18n?: ('one' | 'two' | 'three') | null; simple?: ('One' | 'Two' | 'Three') | null; @@ -1619,6 +1629,19 @@ export interface UploadsMultiPoly { updatedAt: string; createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "uploads-restricted". + */ +export interface UploadsRestricted { + id: string; + text?: string | null; + uploadWithoutRestriction?: (string | null) | Upload; + uploadWithAllowCreateFalse?: (string | null) | Upload; + uploadMultipleWithAllowCreateFalse?: (string | Upload)[] | null; + updatedAt: string; + createdAt: string; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "ui-fields". @@ -1764,6 +1787,10 @@ export interface PayloadLockedDocument { relationTo: 'uploads-multi-poly'; value: string | UploadsMultiPoly; } | null) + | ({ + relationTo: 'uploads-restricted'; + value: string | UploadsRestricted; + } | null) | ({ relationTo: 'ui-fields'; value: string | UiField; From 90bca15f52d75d8db479aa893f408a9c0e7f45e5 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 17 Oct 2024 05:05:27 +0300 Subject: [PATCH 069/110] fix(drizzle): enforce uniqueness on index names (#8754) Fixes https://github.com/payloadcms/payload/issues/8752 Previously, trying to define a config like this: ```ts { type: 'text', name: 'someText', index: true, }, { type: 'array', name: 'some', index: true, fields: [ { type: 'text', name: 'text', index: true, }, ], } ``` Lead to the error: ``` Warning We've found duplicated index name across public schema. Please rename your index in either the demonstration table or the table with the duplicated index name ``` Now, if we encounter duplicates, we increment the name like this: `collection_some_text_idx` `collection_some_text_1_idx` --------- Co-authored-by: Dan Ribbens --- packages/db-postgres/src/index.ts | 1 + packages/db-sqlite/src/index.ts | 1 + packages/db-sqlite/src/schema/build.ts | 21 +++++++++------- packages/db-sqlite/src/schema/createIndex.ts | 9 ++++--- .../db-sqlite/src/schema/traverseFields.ts | 13 +++++++--- packages/db-vercel-postgres/src/index.ts | 1 + packages/drizzle/src/index.ts | 1 + packages/drizzle/src/postgres/schema/build.ts | 19 +++++++++------ .../src/postgres/schema/createIndex.ts | 9 ++++--- .../src/postgres/schema/traverseFields.ts | 9 ++++--- packages/drizzle/src/types.ts | 1 + .../drizzle/src/utilities/buildIndexName.ts | 24 +++++++++++++++++++ test/fields/collections/Indexed/index.ts | 17 +++++++++++++ test/fields/payload-types.ts | 7 ++++++ 14 files changed, 102 insertions(+), 31 deletions(-) create mode 100644 packages/drizzle/src/utilities/buildIndexName.ts diff --git a/packages/db-postgres/src/index.ts b/packages/db-postgres/src/index.ts index 841c6fefe9..2fb83585cc 100644 --- a/packages/db-postgres/src/index.ts +++ b/packages/db-postgres/src/index.ts @@ -136,6 +136,7 @@ export function postgresAdapter(args: Args): DatabaseAdapterObj findGlobalVersions, findOne, findVersions, + indexes: new Set(), init, insert, migrate, diff --git a/packages/db-sqlite/src/index.ts b/packages/db-sqlite/src/index.ts index 1fd396292b..12b6420b0e 100644 --- a/packages/db-sqlite/src/index.ts +++ b/packages/db-sqlite/src/index.ts @@ -133,6 +133,7 @@ export function sqliteAdapter(args: Args): DatabaseAdapterObj { findGlobalVersions, findOne, findVersions, + indexes: new Set(), init, insert, migrate, diff --git a/packages/db-sqlite/src/schema/build.ts b/packages/db-sqlite/src/schema/build.ts index 9646e3e812..b65df477c8 100644 --- a/packages/db-sqlite/src/schema/build.ts +++ b/packages/db-sqlite/src/schema/build.ts @@ -1,3 +1,4 @@ +import type { DrizzleAdapter } from '@payloadcms/drizzle/types' import type { Relation } from 'drizzle-orm' import type { AnySQLiteColumn, @@ -9,7 +10,7 @@ import type { } from 'drizzle-orm/sqlite-core' import type { Field, SanitizedJoins } from 'payload' -import { createTableName } from '@payloadcms/drizzle' +import { buildIndexName, createTableName } from '@payloadcms/drizzle' import { relations, sql } from 'drizzle-orm' import { foreignKey, @@ -416,21 +417,25 @@ export const buildTable = ({ foreignColumns: [adapter.tables[formattedRelationTo].id], }).onDelete('cascade') - const indexName = [colName] + const indexColumns = [colName] const unique = !disableUnique && uniqueRelationships.has(relationTo) if (unique) { - indexName.push('path') + indexColumns.push('path') } if (hasLocalizedRelationshipField) { - indexName.push('locale') + indexColumns.push('locale') } - relationExtraConfig[`${relationTo}IdIdx`] = createIndex({ - name: indexName, - columnName: `${formattedRelationTo}_id`, - tableName: relationshipsTableName, + const indexName = buildIndexName({ + name: `${relationshipsTableName}_${formattedRelationTo}_id`, + adapter: adapter as unknown as DrizzleAdapter, + }) + + relationExtraConfig[indexName] = createIndex({ + name: indexColumns, + indexName, unique, }) }) diff --git a/packages/db-sqlite/src/schema/createIndex.ts b/packages/db-sqlite/src/schema/createIndex.ts index b687ac3d90..ea3a52c917 100644 --- a/packages/db-sqlite/src/schema/createIndex.ts +++ b/packages/db-sqlite/src/schema/createIndex.ts @@ -3,13 +3,12 @@ import type { AnySQLiteColumn } from 'drizzle-orm/sqlite-core' import { index, uniqueIndex } from 'drizzle-orm/sqlite-core' type CreateIndexArgs = { - columnName: string + indexName: string name: string | string[] - tableName: string unique?: boolean } -export const createIndex = ({ name, columnName, tableName, unique }: CreateIndexArgs) => { +export const createIndex = ({ name, indexName, unique }: CreateIndexArgs) => { return (table: { [x: string]: AnySQLiteColumn }) => { let columns if (Array.isArray(name)) { @@ -21,8 +20,8 @@ export const createIndex = ({ name, columnName, tableName, unique }: CreateIndex columns = [table[name]] } if (unique) { - return uniqueIndex(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1)) + return uniqueIndex(indexName).on(columns[0], ...columns.slice(1)) } - return index(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1)) + return index(indexName).on(columns[0], ...columns.slice(1)) } } diff --git a/packages/db-sqlite/src/schema/traverseFields.ts b/packages/db-sqlite/src/schema/traverseFields.ts index 725679c00d..d1896eed7d 100644 --- a/packages/db-sqlite/src/schema/traverseFields.ts +++ b/packages/db-sqlite/src/schema/traverseFields.ts @@ -1,8 +1,10 @@ +import type { DrizzleAdapter } from '@payloadcms/drizzle/types' import type { Relation } from 'drizzle-orm' import type { IndexBuilder, SQLiteColumnBuilder } from 'drizzle-orm/sqlite-core' import type { Field, SanitizedJoins, TabAsField } from 'payload' import { + buildIndexName, createTableName, hasLocalesTable, validateExistingBlockIsIdentical, @@ -164,10 +166,15 @@ export const traverseFields = ({ } adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue } - targetIndexes[`${newTableName}_${field.name}Idx`] = createIndex({ + + const indexName = buildIndexName({ + name: `${newTableName}_${columnName}`, + adapter: adapter as unknown as DrizzleAdapter, + }) + + targetIndexes[indexName] = createIndex({ name: field.localized ? [fieldName, '_locale'] : fieldName, - columnName, - tableName: newTableName, + indexName, unique, }) } diff --git a/packages/db-vercel-postgres/src/index.ts b/packages/db-vercel-postgres/src/index.ts index 635907d35e..ebde82d9d0 100644 --- a/packages/db-vercel-postgres/src/index.ts +++ b/packages/db-vercel-postgres/src/index.ts @@ -90,6 +90,7 @@ export function vercelPostgresAdapter(args: Args = {}): DatabaseAdapterObj(), initializing, localesSuffix: args.localesSuffix || '_locales', logger: args.logger, diff --git a/packages/drizzle/src/index.ts b/packages/drizzle/src/index.ts index 64d2dd8282..d31b0226ee 100644 --- a/packages/drizzle/src/index.ts +++ b/packages/drizzle/src/index.ts @@ -32,6 +32,7 @@ export { updateGlobal } from './updateGlobal.js' export { updateGlobalVersion } from './updateGlobalVersion.js' export { updateVersion } from './updateVersion.js' export { upsertRow } from './upsertRow/index.js' +export { buildIndexName } from './utilities/buildIndexName.js' export { executeSchemaHooks } from './utilities/executeSchemaHooks.js' export { extendDrizzleTable } from './utilities/extendDrizzleTable.js' export { hasLocalesTable } from './utilities/hasLocalesTable.js' diff --git a/packages/drizzle/src/postgres/schema/build.ts b/packages/drizzle/src/postgres/schema/build.ts index 8b3fd1219a..c374b329f8 100644 --- a/packages/drizzle/src/postgres/schema/build.ts +++ b/packages/drizzle/src/postgres/schema/build.ts @@ -30,6 +30,7 @@ import type { } from '../types.js' import { createTableName } from '../../createTableName.js' +import { buildIndexName } from '../../utilities/buildIndexName.js' import { createIndex } from './createIndex.js' import { parentIDColumnMap } from './parentIDColumnMap.js' import { setColumnID } from './setColumnID.js' @@ -389,21 +390,25 @@ export const buildTable = ({ foreignColumns: [adapter.tables[formattedRelationTo].id], }).onDelete('cascade') - const indexName = [colName] + const indexColumns = [colName] const unique = !disableUnique && uniqueRelationships.has(relationTo) if (unique) { - indexName.push('path') + indexColumns.push('path') } if (hasLocalizedRelationshipField) { - indexName.push('locale') + indexColumns.push('locale') } - relationExtraConfig[`${relationTo}IdIdx`] = createIndex({ - name: indexName, - columnName: `${formattedRelationTo}_id`, - tableName: relationshipsTableName, + const indexName = buildIndexName({ + name: `${relationshipsTableName}_${formattedRelationTo}_id`, + adapter, + }) + + relationExtraConfig[indexName] = createIndex({ + name: indexColumns, + indexName, unique, }) }) diff --git a/packages/drizzle/src/postgres/schema/createIndex.ts b/packages/drizzle/src/postgres/schema/createIndex.ts index 347bf59d07..0a28648432 100644 --- a/packages/drizzle/src/postgres/schema/createIndex.ts +++ b/packages/drizzle/src/postgres/schema/createIndex.ts @@ -3,13 +3,12 @@ import { index, uniqueIndex } from 'drizzle-orm/pg-core' import type { GenericColumn } from '../types.js' type CreateIndexArgs = { - columnName: string + indexName: string name: string | string[] - tableName: string unique?: boolean } -export const createIndex = ({ name, columnName, tableName, unique }: CreateIndexArgs) => { +export const createIndex = ({ name, indexName, unique }: CreateIndexArgs) => { return (table: { [x: string]: GenericColumn }) => { let columns if (Array.isArray(name)) { @@ -21,8 +20,8 @@ export const createIndex = ({ name, columnName, tableName, unique }: CreateIndex columns = [table[name]] } if (unique) { - return uniqueIndex(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1)) + return uniqueIndex(indexName).on(columns[0], ...columns.slice(1)) } - return index(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1)) + return index(indexName).on(columns[0], ...columns.slice(1)) } } diff --git a/packages/drizzle/src/postgres/schema/traverseFields.ts b/packages/drizzle/src/postgres/schema/traverseFields.ts index d334ec3db9..81f8a82378 100644 --- a/packages/drizzle/src/postgres/schema/traverseFields.ts +++ b/packages/drizzle/src/postgres/schema/traverseFields.ts @@ -30,6 +30,7 @@ import type { } from '../types.js' import { createTableName } from '../../createTableName.js' +import { buildIndexName } from '../../utilities/buildIndexName.js' import { hasLocalesTable } from '../../utilities/hasLocalesTable.js' import { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js' import { buildTable } from './build.js' @@ -169,10 +170,12 @@ export const traverseFields = ({ } adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue } - targetIndexes[`${newTableName}_${field.name}Idx`] = createIndex({ + + const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter }) + + targetIndexes[indexName] = createIndex({ name: field.localized ? [fieldName, '_locale'] : fieldName, - columnName, - tableName: newTableName, + indexName, unique, }) } diff --git a/packages/drizzle/src/types.ts b/packages/drizzle/src/types.ts index ca3023bac8..c614e8d454 100644 --- a/packages/drizzle/src/types.ts +++ b/packages/drizzle/src/types.ts @@ -174,6 +174,7 @@ export interface DrizzleAdapter extends BaseDatabaseAdapter { fieldConstraints: Record> getMigrationTemplate: (args: MigrationTemplateArgs) => string idType: 'serial' | 'uuid' + indexes: Set initializing: Promise insert: Insert localesSuffix?: string diff --git a/packages/drizzle/src/utilities/buildIndexName.ts b/packages/drizzle/src/utilities/buildIndexName.ts new file mode 100644 index 0000000000..b2d45f03ba --- /dev/null +++ b/packages/drizzle/src/utilities/buildIndexName.ts @@ -0,0 +1,24 @@ +import type { DrizzleAdapter } from '../types.js' + +export const buildIndexName = ({ + name, + adapter, + number = 0, +}: { + adapter: DrizzleAdapter + name: string + number?: number +}): string => { + const indexName = `${name}${number ? `_${number}` : ''}_idx` + + if (!adapter.indexes.has(indexName)) { + adapter.indexes.add(indexName) + return indexName + } + + return buildIndexName({ + name, + adapter, + number: number + 1, + }) +} diff --git a/test/fields/collections/Indexed/index.ts b/test/fields/collections/Indexed/index.ts index 3a717c15f1..a7cd472608 100644 --- a/test/fields/collections/Indexed/index.ts +++ b/test/fields/collections/Indexed/index.ts @@ -120,6 +120,23 @@ const IndexedFields: CollectionConfig = { ], label: 'Collapsible', }, + { + type: 'text', + name: 'someText', + index: true, + }, + { + type: 'array', + name: 'some', + index: true, + fields: [ + { + type: 'text', + name: 'text', + index: true, + }, + ], + }, ], versions: true, } diff --git a/test/fields/payload-types.ts b/test/fields/payload-types.ts index 5208445770..07a4b25d5e 100644 --- a/test/fields/payload-types.ts +++ b/test/fields/payload-types.ts @@ -1062,6 +1062,13 @@ export interface IndexedField { }; collapsibleLocalizedUnique?: string | null; collapsibleTextUnique?: string | null; + someText?: string | null; + some?: + | { + text?: string | null; + id?: string | null; + }[] + | null; updatedAt: string; createdAt: string; } From f37e47675816646b4254e9a0d2a9668633563f29 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 17 Oct 2024 13:02:30 +0300 Subject: [PATCH 070/110] fix(db-postgres): esm compatible import of pg (#8758) Fixes this error that doesn't occur in our monorepo but on users projects. image --- packages/drizzle/src/postgres/createDatabase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/drizzle/src/postgres/createDatabase.ts b/packages/drizzle/src/postgres/createDatabase.ts index f7524d2dbf..4e52f9ff86 100644 --- a/packages/drizzle/src/postgres/createDatabase.ts +++ b/packages/drizzle/src/postgres/createDatabase.ts @@ -54,7 +54,7 @@ export const createDatabase = async function (this: BasePostgresAdapter, args: A } // import pg only when createDatabase is used - const pg = await import('pg') + const pg = await import('pg').then((mod) => mod.default) const managementClient = new pg.Client(managementClientConfig) From 73102e97fecec0873144c2ad958ef4864425fbe2 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 17 Oct 2024 14:14:02 +0300 Subject: [PATCH 071/110] fix(drizzle): bump drizzle-orm in drizzle package to 0.35.1 (#8759) Fixes https://github.com/payloadcms/payload/issues/8757. Other packages have `drizzle-orm` `0.35.1`, but this does not (`0.34.1-1f15bfd`). --- packages/drizzle/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index 6d6d1095c0..d97acea12b 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -46,7 +46,7 @@ }, "dependencies": { "console-table-printer": "2.11.2", - "drizzle-orm": "0.34.1-1f15bfd", + "drizzle-orm": "0.35.1", "prompts": "2.4.2", "to-snake-case": "1.0.0", "uuid": "9.0.0" From 7136515f8d5e70559c270e85347fc814ac69f29e Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Thu, 17 Oct 2024 09:05:45 -0400 Subject: [PATCH 072/110] chore(release): v3.0.0-beta.116 [skip ci] --- package.json | 2 +- packages/create-payload-app/package.json | 2 +- packages/db-mongodb/package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- packages/drizzle/package.json | 2 +- packages/email-nodemailer/package.json | 2 +- packages/email-resend/package.json | 2 +- packages/graphql/package.json | 2 +- packages/live-preview-react/package.json | 2 +- packages/live-preview-vue/package.json | 2 +- packages/live-preview/package.json | 2 +- packages/next/package.json | 2 +- packages/payload/package.json | 2 +- packages/plugin-cloud-storage/package.json | 2 +- packages/plugin-cloud/package.json | 2 +- packages/plugin-form-builder/package.json | 2 +- packages/plugin-nested-docs/package.json | 2 +- packages/plugin-redirects/package.json | 2 +- packages/plugin-search/package.json | 2 +- packages/plugin-sentry/package.json | 2 +- packages/plugin-seo/package.json | 2 +- packages/plugin-stripe/package.json | 2 +- packages/richtext-lexical/package.json | 2 +- packages/richtext-slate/package.json | 2 +- packages/storage-azure/package.json | 2 +- packages/storage-gcs/package.json | 2 +- packages/storage-s3/package.json | 2 +- packages/storage-uploadthing/package.json | 2 +- packages/storage-vercel-blob/package.json | 2 +- packages/translations/package.json | 2 +- packages/ui/package.json | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 4e36a1b32d..01954deaf4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "private": true, "type": "module", "scripts": { diff --git a/packages/create-payload-app/package.json b/packages/create-payload-app/package.json index 29a12e703e..f8ce1d2291 100644 --- a/packages/create-payload-app/package.json +++ b/packages/create-payload-app/package.json @@ -1,6 +1,6 @@ { "name": "create-payload-app", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index cbd5d70c88..a10729114e 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The officially supported MongoDB database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index fdcb9b0fec..396cb47a2e 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The officially supported Postgres database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index 013d46ea2e..d95106ed8e 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-sqlite", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The officially supported SQLite database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 579d1e7cfa..e780912b3d 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-vercel-postgres", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Vercel Postgres adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index d97acea12b..1690036e25 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/drizzle", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "A library of shared functions used by different payload database adapters", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-nodemailer/package.json b/packages/email-nodemailer/package.json index d194292d1f..4b09d576b5 100644 --- a/packages/email-nodemailer/package.json +++ b/packages/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-nodemailer", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Payload Nodemailer Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-resend/package.json b/packages/email-resend/package.json index d7ebac1489..21342aef90 100644 --- a/packages/email-resend/package.json +++ b/packages/email-resend/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-resend", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Payload Resend Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/graphql/package.json b/packages/graphql/package.json index 71036ff0b3..2b36bc2d2a 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index 43a1fff244..a2c43b6e14 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-react", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The official React SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview-vue/package.json b/packages/live-preview-vue/package.json index 82c5070657..e5ec38ebdc 100644 --- a/packages/live-preview-vue/package.json +++ b/packages/live-preview-vue/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-vue", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The official Vue SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview/package.json b/packages/live-preview/package.json index 81d6e05f42..86b4ac7824 100644 --- a/packages/live-preview/package.json +++ b/packages/live-preview/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The official live preview JavaScript SDK for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/next/package.json b/packages/next/package.json index 14dfb3b00a..ec62f761a3 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/payload/package.json b/packages/payload/package.json index 2419fdcebd..5a5f27be49 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Node, React, Headless CMS and Application Framework built on Next.js", "keywords": [ "admin panel", diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index 4a1880d88b..0d2c4399dc 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud-storage", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The official cloud storage plugin for Payload CMS", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index 9c32e62aea..9421565d11 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The official Payload Cloud plugin", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index 07af8eb72b..1797b80dc5 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-form-builder", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Form builder plugin for Payload CMS", "keywords": [ "payload", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index a659d54f56..770d30c17e 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The official Nested Docs plugin for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index 65570ab3ae..f04f71ec93 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Redirects plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index 4d4167e446..6625c3cfa8 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Search plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-sentry/package.json b/packages/plugin-sentry/package.json index 8bd7a92f72..9daaca7100 100644 --- a/packages/plugin-sentry/package.json +++ b/packages/plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-sentry", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Sentry plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index 42690c5a1a..43f4fa2451 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "SEO plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-stripe/package.json b/packages/plugin-stripe/package.json index 6aac72d681..e4aa43d524 100644 --- a/packages/plugin-stripe/package.json +++ b/packages/plugin-stripe/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-stripe", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Stripe plugin for Payload", "keywords": [ "payload", diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index b0e39707d8..7e5fe401c6 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The officially supported Lexical richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index 03489d17e9..4452d9857b 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "The officially supported Slate richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-azure/package.json b/packages/storage-azure/package.json index 8a28a4c86a..34a291f217 100644 --- a/packages/storage-azure/package.json +++ b/packages/storage-azure/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-azure", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Payload storage adapter for Azure Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-gcs/package.json b/packages/storage-gcs/package.json index b17ad3d5a2..869ee73f09 100644 --- a/packages/storage-gcs/package.json +++ b/packages/storage-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-gcs", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Payload storage adapter for Google Cloud Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-s3/package.json b/packages/storage-s3/package.json index 51ae2ee7e5..fcc4f8a7c4 100644 --- a/packages/storage-s3/package.json +++ b/packages/storage-s3/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-s3", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Payload storage adapter for Amazon S3", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-uploadthing/package.json b/packages/storage-uploadthing/package.json index d96bf926f6..3ba8ccb975 100644 --- a/packages/storage-uploadthing/package.json +++ b/packages/storage-uploadthing/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-uploadthing", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Payload storage adapter for uploadthing", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-vercel-blob/package.json b/packages/storage-vercel-blob/package.json index a7d1179651..8ffd86861c 100644 --- a/packages/storage-vercel-blob/package.json +++ b/packages/storage-vercel-blob/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-vercel-blob", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "description": "Payload storage adapter for Vercel Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/translations/package.json b/packages/translations/package.json index 490ee1da44..10b6233347 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/ui/package.json b/packages/ui/package.json index 6c998ecbad..677f784746 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-beta.115", + "version": "3.0.0-beta.116", "homepage": "https://payloadcms.com", "repository": { "type": "git", From c91f21bb78656d3595456b338569638fa89be679 Mon Sep 17 00:00:00 2001 From: Said Akhrarov <36972061+akhrarovsaid@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:13:37 -0400 Subject: [PATCH 073/110] docs: fix incorrect link for outside-nextjs in local-api importing it section (#8764) Currently in the `beta` docs at the bottom of [Local API Overview Import It section](https://payloadcms.com/docs/beta/local-api/overview#importing-it) there is a link for _Outside Nextjs_ which incorrectly sends you to `/docs/beta/beta/local-api/outside-nextjs` instead of `docs/beta/local-api/outside-nextjs`. Interestingly enough, a `Not Found` component/message is not rendered and instead you see a blank screen. --------- Co-authored-by: Sasha <64744993+r1tsuu@users.noreply.github.com> --- docs/admin/components.mdx | 2 +- docs/authentication/cookies.mdx | 4 ++-- docs/cloud/projects.mdx | 2 +- docs/database/migrations.mdx | 2 +- docs/database/postgres.mdx | 2 +- docs/database/sqlite.mdx | 2 +- docs/local-api/overview.mdx | 2 +- docs/plugins/form-builder.mdx | 4 ++-- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/admin/components.mdx b/docs/admin/components.mdx index a63b4dae5b..e8a38464d6 100644 --- a/docs/admin/components.mdx +++ b/docs/admin/components.mdx @@ -145,7 +145,7 @@ Instead, we utilize component paths to reference React Components. This method e When constructing the `ClientConfig`, Payload uses the component paths as keys to fetch the corresponding React Component imports from the Import Map. It then substitutes the `PayloadComponent` with a `MappedComponent`. A `MappedComponent` includes the React Component and additional metadata, such as whether it's a server or a client component and which props it should receive. These components are then rendered through the `` component within the Payload Admin Panel. -Import maps are regenerated whenever you modify any element related to component paths. This regeneration occurs at startup and whenever Hot Module Replacement (HMR) runs. If the import maps fail to regenerate during HMR, you can restart your application and execute the `payload generate:importmap` command to manually create a new import map. If you encounter any errors running this command, see the [Troubleshooting](/docs/beta/local-api/outside-nextjs#troubleshooting) section. +Import maps are regenerated whenever you modify any element related to component paths. This regeneration occurs at startup and whenever Hot Module Replacement (HMR) runs. If the import maps fail to regenerate during HMR, you can restart your application and execute the `payload generate:importmap` command to manually create a new import map. If you encounter any errors running this command, see the [Troubleshooting](../local-api/outside-nextjs#troubleshooting) section. ### Component paths in external packages diff --git a/docs/authentication/cookies.mdx b/docs/authentication/cookies.mdx index a40842ffbe..f0413a651b 100644 --- a/docs/authentication/cookies.mdx +++ b/docs/authentication/cookies.mdx @@ -97,7 +97,7 @@ Cookies can cross subdomains without being considered third party cookies, for e ##### 2. Configure cookies -If option 1 isn't possible, then you can get around this limitation by [configuring your cookies](https://payloadcms.com/docs/beta/authentication/overview#config-options) on your authentication collection to achieve the following setup: +If option 1 isn't possible, then you can get around this limitation by [configuring your cookies](./overview#config-options) on your authentication collection to achieve the following setup: ``` SameSite: None // allows the cookie to cross domains @@ -122,7 +122,7 @@ Configuration example: }, ``` -If you're configuring [cors](https://payloadcms.com/docs/beta/production/preventing-abuse#cross-origin-resource-sharing-cors) in your Payload config, you won't be able to use a wildcard anymore, you'll need to specify the list of allowed domains. +If you're configuring [cors](../production/preventing-abuse#cross-origin-resource-sharing-cors) in your Payload config, you won't be able to use a wildcard anymore, you'll need to specify the list of allowed domains. diff --git a/docs/cloud/projects.mdx b/docs/cloud/projects.mdx index 298642d51b..abf5c0ca59 100644 --- a/docs/cloud/projects.mdx +++ b/docs/cloud/projects.mdx @@ -84,7 +84,7 @@ export default buildConfig({ ## Email -Powered by [Resend](https://resend.com), Payload Cloud comes with integrated email support out of the box. No configuration is needed, and you can use `payload.sendEmail()` to send email right from your Payload app. To learn more about sending email with Payload, checkout the [Email Configuration](https://payloadcms.com/docs/email/overview) overview. +Powered by [Resend](https://resend.com), Payload Cloud comes with integrated email support out of the box. No configuration is needed, and you can use `payload.sendEmail()` to send email right from your Payload app. To learn more about sending email with Payload, checkout the [Email Configuration](../email/overview) overview. If you are on the Pro or Enterprise plan, you can add your own custom Email domain name. From the Email page of your project’s Settings, add the domain you wish to use for email delivery. This will generate a set of DNS records. Add these records to your DNS provider and click verify to check that your records are resolving properly. Once verified, your emails will now be sent from your custom domain name. diff --git a/docs/database/migrations.mdx b/docs/database/migrations.mdx index 76f50854ed..db8c09cf90 100644 --- a/docs/database/migrations.mdx +++ b/docs/database/migrations.mdx @@ -157,7 +157,7 @@ You can disable this setting and solely use migrations to manage your local deve For this reason, we suggest that you leave `push` as its default setting and treat your local dev database as a sandbox. -For more information about push mode and prototyping in development, [click here](/docs/beta/database/postgres#prototyping-in-dev-mode). +For more information about push mode and prototyping in development, [click here](./postgres#prototyping-in-dev-mode). The typical workflow in Payload is to build out your Payload configs, install plugins, and make progress in development mode - allowing Drizzle to push your changes to your local database for you. Once you're finished, you can create a migration. diff --git a/docs/database/postgres.mdx b/docs/database/postgres.mdx index f2d86860ec..e19c73f322 100644 --- a/docs/database/postgres.mdx +++ b/docs/database/postgres.mdx @@ -99,7 +99,7 @@ Alternatively, you can disable `push` and rely solely on migrations to keep your In Postgres, migrations are a fundamental aspect of working with Payload and you should become familiar with how they work. -For more information about migrations, [click here](/docs/beta/database/migrations#when-to-run-migrations). +For more information about migrations, [click here](./migrations#when-to-run-migrations). ## Drizzle schema hooks diff --git a/docs/database/sqlite.mdx b/docs/database/sqlite.mdx index 3eecf0ca50..eea85e8e87 100644 --- a/docs/database/sqlite.mdx +++ b/docs/database/sqlite.mdx @@ -78,7 +78,7 @@ Alternatively, you can disable `push` and rely solely on migrations to keep your In SQLite, migrations are a fundamental aspect of working with Payload and you should become familiar with how they work. -For more information about migrations, [click here](/docs/beta/database/migrations#when-to-run-migrations). +For more information about migrations, [click here](./migrations#when-to-run-migrations). ## Drizzle schema hooks diff --git a/docs/local-api/overview.mdx b/docs/local-api/overview.mdx index c6ddb5783b..eca5e20a07 100644 --- a/docs/local-api/overview.mdx +++ b/docs/local-api/overview.mdx @@ -71,7 +71,7 @@ import config from '@payload-config' const payload = await getPayload({ config }) ``` -Both options function in exactly the same way outside of one having HMR support and the other not. For more information about using Payload outside of Next.js, [click here](/docs/beta/local-api/outside-nextjs). +Both options function in exactly the same way outside of one having HMR support and the other not. For more information about using Payload outside of Next.js, [click here](./outside-nextjs). ## Local options available diff --git a/docs/plugins/form-builder.mdx b/docs/plugins/form-builder.mdx index ff3b33fe5b..a0b8849ac5 100644 --- a/docs/plugins/form-builder.mdx +++ b/docs/plugins/form-builder.mdx @@ -138,7 +138,7 @@ const beforeEmail: BeforeEmail = (emailsToSend, beforeChangePara ### `defaultToEmail` -Provide a fallback for the email address to send form submissions to. If the email in form configuration does not have a to email set, this email address will be used. If this is not provided then it falls back to the `defaultFromAddress` in your [email configuration](https://payloadcms.com/docs/beta/email/overview). +Provide a fallback for the email address to send form submissions to. If the email in form configuration does not have a to email set, this email address will be used. If this is not provided then it falls back to the `defaultFromAddress` in your [email configuration](../email/overview). ```ts // payload.config.ts @@ -412,7 +412,7 @@ formBuilder({ ## Email -This plugin relies on the [email configuration](https://payloadcms.com/docs/beta/email/overview) defined in your payload configuration. It will read from your config and attempt to send your emails using the credentials provided. +This plugin relies on the [email configuration](../email/overview) defined in your payload configuration. It will read from your config and attempt to send your emails using the credentials provided. ### Email formatting From 1f0d8da1823f5293766befb5d0758407486d341d Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 17 Oct 2024 13:28:54 -0600 Subject: [PATCH 074/110] fix(plugin-seo): description and title fields now respect given minLength and maxLength rules for passing validation (#8765) Previously minLength or maxLength was not being respected and the components would use default values only. --- docs/plugins/seo.mdx | 4 ++++ .../MetaDescriptionComponent.tsx | 7 +++++- .../fields/MetaTitle/MetaTitleComponent.tsx | 7 +++++- .../src/fields/Overview/OverviewComponent.tsx | 24 ++++++++++++++----- .../plugin-seo/src/fields/Overview/index.tsx | 12 ++++++++++ 5 files changed, 46 insertions(+), 8 deletions(-) diff --git a/docs/plugins/seo.mdx b/docs/plugins/seo.mdx index b42f088e8a..8e892db353 100644 --- a/docs/plugins/seo.mdx +++ b/docs/plugins/seo.mdx @@ -276,6 +276,10 @@ OverviewField({ }) ``` + +Tip: You can override the length rules by changing the minLength and maxLength props on the fields. In the case of the OverviewField you can use `titleOverrides` and `descriptionOverrides` to override the length rules. + + ## TypeScript All types can be directly imported: diff --git a/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx b/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx index 8ceda3be3f..bb24c7ead9 100644 --- a/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx @@ -22,7 +22,7 @@ import type { GenerateDescription } from '../../types.js' import { defaults } from '../../defaults.js' import { LengthIndicator } from '../../ui/LengthIndicator.js' -const { maxLength, minLength } = defaults.description +const { maxLength: maxLengthDefault, minLength: minLengthDefault } = defaults.description type MetaDescriptionProps = { readonly hasGenerateDescriptionFn: boolean @@ -35,6 +35,8 @@ export const MetaDescriptionComponent: React.FC = (props) components: { Label }, }, label, + maxLength: maxLengthFromProps, + minLength: minLengthFromProps, required, }, hasGenerateDescriptionFn, @@ -55,6 +57,9 @@ export const MetaDescriptionComponent: React.FC = (props) const { getData } = useForm() const docInfo = useDocumentInfo() + const maxLength = maxLengthFromProps || maxLengthDefault + const minLength = minLengthFromProps || minLengthDefault + const field: FieldType = useField({ path: pathFromContext, } as Options) diff --git a/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx b/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx index 3c496c234b..5c6dbadfe5 100644 --- a/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx @@ -23,7 +23,7 @@ import { defaults } from '../../defaults.js' import { LengthIndicator } from '../../ui/LengthIndicator.js' import '../index.scss' -const { maxLength, minLength } = defaults.title +const { maxLength: maxLengthDefault, minLength: minLengthDefault } = defaults.title type MetaTitleProps = { readonly hasGenerateTitleFn: boolean @@ -36,6 +36,8 @@ export const MetaTitleComponent: React.FC = (props) => { components: { Label }, }, label, + maxLength: maxLengthFromProps, + minLength: minLengthFromProps, required, }, field: fieldFromProps, @@ -60,6 +62,9 @@ export const MetaTitleComponent: React.FC = (props) => { const { getData } = useForm() const docInfo = useDocumentInfo() + const minLength = minLengthFromProps || minLengthDefault + const maxLength = maxLengthFromProps || maxLengthDefault + const { errorMessage, setValue, showError, value } = field const regenerateTitle = useCallback(async () => { diff --git a/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx b/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx index 300da0ffd8..26c72e1ded 100644 --- a/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx +++ b/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx @@ -10,25 +10,32 @@ import type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../tran import { defaults } from '../../defaults.js' const { - description: { maxLength: maxDesc, minLength: minDesc }, - title: { maxLength: maxTitle, minLength: minTitle }, + description: { maxLength: maxDescDefault, minLength: minDescDefault }, + title: { maxLength: maxTitleDefault, minLength: minTitleDefault }, } = defaults type OverviewProps = { + descriptionOverrides?: { + maxLength?: number + minLength?: number + } descriptionPath?: string imagePath?: string + titleOverrides?: { + maxLength?: number + minLength?: number + } titlePath?: string } & UIField export const OverviewComponent: React.FC = ({ + descriptionOverrides, descriptionPath: descriptionPathFromContext, imagePath: imagePathFromContext, + titleOverrides, titlePath: titlePathFromContext, }) => { - const { - // dispatchFields, - getFields, - } = useForm() + const { getFields } = useForm() const descriptionPath = descriptionPathFromContext || 'meta.description' const titlePath = titlePathFromContext || 'meta.title' @@ -47,6 +54,11 @@ export const OverviewComponent: React.FC = ({ const [descIsValid, setDescIsValid] = useState() const [imageIsValid, setImageIsValid] = useState() + const minDesc = descriptionOverrides?.minLength || minDescDefault + const maxDesc = descriptionOverrides?.maxLength || maxDescDefault + const minTitle = titleOverrides?.minLength || minTitleDefault + const maxTitle = titleOverrides?.maxLength || maxTitleDefault + const resetAll = useCallback(() => { const fields = getFields() const fieldsWithoutMeta = fields diff --git a/packages/plugin-seo/src/fields/Overview/index.tsx b/packages/plugin-seo/src/fields/Overview/index.tsx index 313aab02ad..6285f5c1d3 100644 --- a/packages/plugin-seo/src/fields/Overview/index.tsx +++ b/packages/plugin-seo/src/fields/Overview/index.tsx @@ -1,6 +1,10 @@ import type { UIField } from 'payload' interface FieldFunctionProps { + descriptionOverrides?: { + maxLength?: number + minLength?: number + } /** * Path to the description field to use for the preview * @@ -14,6 +18,10 @@ interface FieldFunctionProps { */ imagePath?: string overrides?: Partial + titleOverrides?: { + maxLength?: number + minLength?: number + } /** * Path to the title field to use for the preview * @@ -25,9 +33,11 @@ interface FieldFunctionProps { type FieldFunction = ({ overrides }: FieldFunctionProps) => UIField export const OverviewField: FieldFunction = ({ + descriptionOverrides, descriptionPath, imagePath, overrides, + titleOverrides, titlePath, }) => { return { @@ -37,8 +47,10 @@ export const OverviewField: FieldFunction = ({ components: { Field: { clientProps: { + descriptionOverrides, descriptionPath, imagePath, + titleOverrides, titlePath, }, path: '@payloadcms/plugin-seo/client#OverviewComponent', From a7895560a645cd86a08ec6574f31d10552316180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Jablo=C3=B1ski?= <43938777+GermanJablo@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:36:14 -0300 Subject: [PATCH 075/110] fix(richtext-lexical): fix CLS on collapsed/expanded state of Lexical blocks (#8029) ## Description The goal is to reduce CLS on collapsed/expanded state of Lexical blocks. That state is stored as "preferences" and is different for each user. As Payload has been working so far, if the state of a Lexical block was "collapsed", it was rendered expanded, and when the correct state was obtained from the server, it was collapsed producing a CLS with a poor UX. My original idea was to get the correct state on the first render. Talking to @AlessioGr and @jmikrut, we saw that this can be a bit difficult or challenging, since the feature on the server does not have access to the Payload object, nor to the user who is making the request. I was instructed to mimic the behavior of blocks not in Lexial (`\ui\src\fields\Collapsible\index.tsx`). There the blocks are rendered after the collapse/expand state is obtained in a useEffect. In the following video, the case where the first block is collapsed is shown, rendering everything with a "fast 4G" connection throttle. https://github.com/user-attachments/assets/078e37c7-6540-4183-a266-bd751cc9d78e Yes, it's a slight improvement over current behavior. But it could be much better. There are request waterfalls several levels deep, and plenty of CLS still. Unless there is some very big tradeoff that I'm not aware of, I think it's worth exposing the Payload object and the user to the server in order to get the correct state on the first render. And if that's not possible and the request has to be made on the client, I think initializing the state as collapsed and then expanding it is better than not showing it at all. Another observation that is evident from the video, is that there are several sources or causes of CLS besides the expanded/collapsed state of the blocks. - [x] I have read and understand the [CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md) document in this repository. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## Checklist: - [x] I have added tests that prove my fix is effective or that my feature works - [x] Existing test suite passes locally with my changes - [x] I have made corresponding changes to the documentation --- .../blocks/client/component/BlockContent.tsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/richtext-lexical/src/features/blocks/client/component/BlockContent.tsx b/packages/richtext-lexical/src/features/blocks/client/component/BlockContent.tsx index 4d3af4a0ff..c4b42dad8f 100644 --- a/packages/richtext-lexical/src/features/blocks/client/component/BlockContent.tsx +++ b/packages/richtext-lexical/src/features/blocks/client/component/BlockContent.tsx @@ -17,7 +17,7 @@ import { } from '@payloadcms/ui' import { dequal } from 'dequal/lite' import { $getNodeByKey } from 'lexical' -import React, { useCallback } from 'react' +import React, { useCallback, useEffect } from 'react' import type { LexicalRichTextFieldProps } from '../../../../types.js' import type { BlockFields } from '../../server/nodes/BlocksNode.js' @@ -70,21 +70,15 @@ export const BlockContent: React.FC = (props) => { // is important to consider for the data path used in setDocFieldPreferences const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo() - const [isCollapsed, setIsCollapsed] = React.useState(() => { - let initialState = false + const [isCollapsed, setIsCollapsed] = React.useState() + useEffect(() => { void getDocPreferences().then((currentDocPreferences) => { const currentFieldPreferences = currentDocPreferences?.fields[field.name] - const collapsedArray = currentFieldPreferences?.collapsed - - if (collapsedArray && collapsedArray.includes(formData.id)) { - initialState = true - setIsCollapsed(true) - } + setIsCollapsed(collapsedArray ? collapsedArray.includes(formData.id) : false) }) - return initialState - }) + }, [field.name, formData.id, getDocPreferences]) const hasSubmitted = useFormSubmitted() @@ -180,6 +174,10 @@ export const BlockContent: React.FC = (props) => { }) }, [editor, nodeKey]) + if (typeof isCollapsed !== 'boolean') { + return null + } + return ( Date: Thu, 17 Oct 2024 13:46:28 -0600 Subject: [PATCH 076/110] fix(ui): padding on relationship fields when no options or loading text is displayed (#8767) --- packages/ui/src/elements/ReactSelect/index.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/ui/src/elements/ReactSelect/index.scss b/packages/ui/src/elements/ReactSelect/index.scss index 4c96cb55c9..a76e639335 100644 --- a/packages/ui/src/elements/ReactSelect/index.scss +++ b/packages/ui/src/elements/ReactSelect/index.scss @@ -13,6 +13,10 @@ flex-wrap: nowrap; } + .rs__menu-notice { + padding: base(0.5) base(0.6); + } + .rs__indicators { gap: calc(var(--base) / 4); } From 9056b9fe9ba9c8259fa8037f4d1bbdd4a3c3890a Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 17 Oct 2024 23:23:45 +0300 Subject: [PATCH 077/110] fix(db-mongodb): virtual fields within row / collapsible / tabs (#8733) Fixes https://github.com/payloadcms/payload/issues/8674 --- packages/db-mongodb/src/models/buildSchema.ts | 14 ++++++++ test/database/config.ts | 36 +++++++++++++++++++ test/database/int.spec.ts | 15 ++++++++ test/database/payload-types.ts | 14 ++++---- 4 files changed, 72 insertions(+), 7 deletions(-) diff --git a/packages/db-mongodb/src/models/buildSchema.ts b/packages/db-mongodb/src/models/buildSchema.ts index d986d41a18..c2c8a4fcc6 100644 --- a/packages/db-mongodb/src/models/buildSchema.ts +++ b/packages/db-mongodb/src/models/buildSchema.ts @@ -246,6 +246,10 @@ const fieldToSchemaMap: Record = { buildSchemaOptions: BuildSchemaOptions, ): void => { field.fields.forEach((subField: Field) => { + if (fieldIsVirtual(subField)) { + return + } + const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type] if (addFieldSchema) { @@ -501,6 +505,10 @@ const fieldToSchemaMap: Record = { buildSchemaOptions: BuildSchemaOptions, ): void => { field.fields.forEach((subField: Field) => { + if (fieldIsVirtual(subField)) { + return + } + const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type] if (addFieldSchema) { @@ -545,6 +553,9 @@ const fieldToSchemaMap: Record = { ): void => { field.tabs.forEach((tab) => { if (tabHasName(tab)) { + if (fieldIsVirtual(tab)) { + return + } const baseSchema = { type: buildSchema(config, tab.fields, { disableUnique: buildSchemaOptions.disableUnique, @@ -562,6 +573,9 @@ const fieldToSchemaMap: Record = { }) } else { tab.fields.forEach((subField: Field) => { + if (fieldIsVirtual(subField)) { + return + } const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type] if (addFieldSchema) { diff --git a/test/database/config.ts b/test/database/config.ts index 0d243cea37..2d23bd29a0 100644 --- a/test/database/config.ts +++ b/test/database/config.ts @@ -318,6 +318,42 @@ export default buildConfigWithDefaults({ virtual: true, fields: [], }, + { + type: 'row', + fields: [ + { + type: 'text', + name: 'textWithinRow', + virtual: true, + }, + ], + }, + { + type: 'collapsible', + fields: [ + { + type: 'text', + name: 'textWithinCollapsible', + virtual: true, + }, + ], + label: 'Colllapsible', + }, + { + type: 'tabs', + tabs: [ + { + label: 'tab', + fields: [ + { + type: 'text', + name: 'textWithinTabs', + virtual: true, + }, + ], + }, + ], + }, ], }, ], diff --git a/test/database/int.spec.ts b/test/database/int.spec.ts index 5d7e52c10f..189e6f425f 100644 --- a/test/database/int.spec.ts +++ b/test/database/int.spec.ts @@ -810,6 +810,21 @@ describe('database', () => { expect(resLocal.textHooked).toBe('hooked') }) + + it('should not save a nested field to tabs/row/collapsible with virtual: true to the db', async () => { + const res = await payload.create({ + data: { + textWithinCollapsible: '1', + textWithinRow: '2', + textWithinTabs: '3', + }, + collection: 'fields-persistance', + }) + + expect(res.textWithinCollapsible).toBeUndefined() + expect(res.textWithinRow).toBeUndefined() + expect(res.textWithinTabs).toBeUndefined() + }) }) it('should not allow to query by a field with `virtual: true`', async () => { diff --git a/test/database/payload-types.ts b/test/database/payload-types.ts index 76b08c09c9..354c1c8356 100644 --- a/test/database/payload-types.ts +++ b/test/database/payload-types.ts @@ -60,6 +60,7 @@ export interface UserAuthOperations { export interface Post { id: string; title: string; + hasTransaction?: boolean | null; throwAfterChange?: boolean | null; updatedAt: string; createdAt: string; @@ -225,6 +226,9 @@ export interface FieldsPersistance { id?: string | null; }[] | null; + textWithinRow?: string | null; + textWithinCollapsible?: string | null; + textWithinTabs?: string | null; updatedAt: string; createdAt: string; } @@ -289,14 +293,10 @@ export interface PayloadLockedDocument { value: string | User; } | null); globalSlug?: string | null; - _lastEdited: { - user: { - relationTo: 'users'; - value: string | User; - }; - editedAt?: string | null; + user: { + relationTo: 'users'; + value: string | User; }; - isLocked?: boolean | null; updatedAt: string; createdAt: string; } From aedf3c8a76cabc6a73b9ff9457c4b84a604d9386 Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Thu, 17 Oct 2024 21:22:05 -0600 Subject: [PATCH 078/110] fix(richtext-*): ensure admin panel doesn't freeze with some field configurations consisting of 2+ richtext fields (#8773) See comments in code for proper explanation. In some cases, where 2 richtext `editor`s referencing the same `editor` are used, the admin panel will hang. That's because the server will send their client props that have the same object reference down to the client twice. Next.js sometimes does not like this and, ever since one of the v15 canaries, started to hang --- .../Config/createClientConfig/fields.tsx | 27 +++++++++++-- .../collections/Lexical/e2e/main/e2e.spec.ts | 8 ++++ .../LexicalObjectReferenceBug/index.ts | 38 +++++++++++++++++++ test/fields/config.ts | 2 + 4 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 test/fields/collections/LexicalObjectReferenceBug/index.ts diff --git a/packages/ui/src/providers/Config/createClientConfig/fields.tsx b/packages/ui/src/providers/Config/createClientConfig/fields.tsx index 3d81051dcf..e5cc281bb5 100644 --- a/packages/ui/src/providers/Config/createClientConfig/fields.tsx +++ b/packages/ui/src/providers/Config/createClientConfig/fields.tsx @@ -13,6 +13,7 @@ import type { LabelsClient, MappedComponent, Payload, + PayloadComponent, RadioFieldClient, RichTextFieldClient, RichTextGenerateComponentMap, @@ -25,7 +26,7 @@ import type { TabsFieldClient, } from 'payload' -import { MissingEditorProp } from 'payload' +import { deepCopyObjectSimple, MissingEditorProp } from 'payload' import { fieldAffectsData, fieldIsPresentationalOnly } from 'payload/shared' import { getComponent } from './getComponent.js' @@ -247,15 +248,35 @@ export const createClientField = ({ field.admin.components = {} } + /** + * We have to deep copy all the props we send to the client (= FieldComponent.clientProps). + * That way, every editor's field / cell props we send to the client have their own object references. + * + * If we send the same object reference to the client twice (e.g. through some configurations where 2 or more fields + * reference the same editor object, like the root editor), the admin panel may hang indefinitely. This has been happening since + * a newer Next.js update that made it break when sending the same object reference to the client twice. + * + * We can use deepCopyObjectSimple as client props should be JSON-serializable. + */ + const FieldComponent: PayloadComponent = incomingField.editor.FieldComponent + if (typeof FieldComponent === 'object' && FieldComponent.clientProps) { + FieldComponent.clientProps = deepCopyObjectSimple(FieldComponent.clientProps) + } + field.admin.components.Field = createMappedComponent( - incomingField.editor.FieldComponent, + FieldComponent, serverProps, undefined, 'incomingField.editor.FieldComponent', ) + const CellComponent: PayloadComponent = incomingField.editor.CellComponent + if (typeof CellComponent === 'object' && CellComponent.clientProps) { + CellComponent.clientProps = deepCopyObjectSimple(CellComponent.clientProps) + } + field.admin.components.Cell = createMappedComponent( - incomingField.editor.CellComponent, + CellComponent, serverProps, undefined, 'incomingField.editor.CellComponent', diff --git a/test/fields/collections/Lexical/e2e/main/e2e.spec.ts b/test/fields/collections/Lexical/e2e/main/e2e.spec.ts index 885bd9157f..8fb68e2a16 100644 --- a/test/fields/collections/Lexical/e2e/main/e2e.spec.ts +++ b/test/fields/collections/Lexical/e2e/main/e2e.spec.ts @@ -553,6 +553,14 @@ describe('lexicalMain', () => { await expect(relationshipListDrawer).toHaveText('Array Fields') }) + test('ensure navigation to collection that used to cause admin panel freeze due to object references bug is possible', async () => { + const url: AdminUrlUtil = new AdminUrlUtil(serverURL, 'lexicalObjectReferenceBug') + await page.goto(url.create) + + await expect(page.locator('.rich-text-lexical').nth(0)).toBeVisible() + await expect(page.locator('.rich-text-lexical').nth(1)).toBeVisible() + }) + describe('localization', () => { test.skip('ensure simple localized lexical field works', async () => { await navigateToLexicalFields(true, true) diff --git a/test/fields/collections/LexicalObjectReferenceBug/index.ts b/test/fields/collections/LexicalObjectReferenceBug/index.ts new file mode 100644 index 0000000000..1a94b8aa5a --- /dev/null +++ b/test/fields/collections/LexicalObjectReferenceBug/index.ts @@ -0,0 +1,38 @@ +import type { CollectionConfig } from 'payload' + +import { lexicalEditor, UploadFeature } from '@payloadcms/richtext-lexical' + +/** + * Do not change this specific CollectionConfig. Simply having this config in payload used to cause the admin panel to hang. + * Thus, simply having this config in the test suite is enough to test the bug fix and prevent regressions. In case of regression, + * the entire admin panel will hang again and all tests will fail. + */ +export const LexicalObjectReferenceBugCollection: CollectionConfig = { + slug: 'lexicalObjectReferenceBug', + fields: [ + { + name: 'lexicalDefault', + type: 'richText', + }, + { + name: 'lexicalEditor', + type: 'richText', + editor: lexicalEditor({ + features: [ + UploadFeature({ + collections: { + media: { + fields: [ + { + name: 'caption', + type: 'richText', + }, + ], + }, + }, + }), + ], + }), + }, + ], +} diff --git a/test/fields/config.ts b/test/fields/config.ts index 257ee45065..10a68beadb 100644 --- a/test/fields/config.ts +++ b/test/fields/config.ts @@ -20,6 +20,7 @@ import JSONFields from './collections/JSON/index.js' import { LexicalFields } from './collections/Lexical/index.js' import { LexicalLocalizedFields } from './collections/LexicalLocalized/index.js' import { LexicalMigrateFields } from './collections/LexicalMigrate/index.js' +import { LexicalObjectReferenceBugCollection } from './collections/LexicalObjectReferenceBug/index.js' import { LexicalRelationshipsFields } from './collections/LexicalRelationships/index.js' import NumberFields from './collections/Number/index.js' import PointFields from './collections/Point/index.js' @@ -46,6 +47,7 @@ export const collectionSlugs: CollectionConfig[] = [ LexicalFields, LexicalMigrateFields, LexicalLocalizedFields, + LexicalObjectReferenceBugCollection, { slug: 'users', admin: { From fa492150782d6dc91e74243e446e7e1a396623ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Jablo=C3=B1ski?= <43938777+GermanJablo@users.noreply.github.com> Date: Fri, 18 Oct 2024 00:50:31 -0300 Subject: [PATCH 079/110] chore: add internationalization guidelines to CONTRIBUTING.md (#8755) --- CONTRIBUTING.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5229ddfdfd..6a517ab7ce 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -122,3 +122,19 @@ This is how you can preview changes you made locally to the docs: 4. Add a `DOCS_DIR` environment variable to the `.env` file which points to the absolute path of your modified docs folder. For example `DOCS_DIR=/Users/yourname/Documents/GitHub/payload/docs` 5. Run `yarn run fetchDocs:local`. If this was successful, you should see no error messages and the following output: _Docs successfully written to /.../website/src/app/docs.json_. There could be error messages if you have incorrect markdown in your local docs folder. In this case, it will tell you how you can fix it 6. You're done! Now you can start the website locally using `yarn run dev` and preview the docs under [http://localhost:3000/docs/](http://localhost:3000/docs/) + +## Internationalization (i18n) + +If your PR adds a string to the UI, we need to make sure to translate it into all the languages ​​that Payload supports. To do that: + +- Find the appropriate internationalization file for your package. These are typically located in `packages/translations/src/languages`, although some packages (e.g., richtext-lexical) have separate i18n files for each feature. +- Add the string to the English locale "en". +- Translate it to other languages. You can use the `translateNewKeys` script if you have an OpenAI API key in your `.env` (under `OPENAI_KEY`), or you can use ChatGPT or Google translate - whatever is easier for you. For payload core translations (in packages/translations) you can run the `translateNewKeys` script using `cd packages/translations && pnpm translateNewKeys`. For lexical translations, you can run it using `cd packages/richtext-lexical && pnpm translateNewKeys`. External contributors can skip this step and leave it to us. + +To display translation strings in the UI, make sure to use the `t` utility of the `useTranslation` hook: + +```ts +const { t } = useTranslation() +// ... +t('yourStringKey') +``` From f3bec93d7685f91ee0695d009512224adc29b8e6 Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Thu, 17 Oct 2024 23:38:48 -0600 Subject: [PATCH 080/110] fix(richtext-lexical): richtext fields in drawers aren't editable, inline toolbar artifacts are shown for readOnly editors (#8774) Fixes this: https://github.com/user-attachments/assets/cf78082d-9054-4324-90cd-c81219a4f26d --- .../toolbars/inline/client/Toolbar/index.tsx | 30 ++-- packages/richtext-lexical/src/field/Field.tsx | 9 +- .../src/lexical/LexicalProvider.tsx | 10 +- test/buildConfigWithDefaults.ts | 2 + .../Lexical/e2e/blocks/e2e.spec.ts | 26 ++-- .../collections/Lexical/e2e/main/e2e.spec.ts | 139 +++++++++++++++++- test/fields/collections/Lexical/index.ts | 4 + test/fields/payload-types.ts | 59 ++++++++ 8 files changed, 235 insertions(+), 44 deletions(-) diff --git a/packages/richtext-lexical/src/features/toolbars/inline/client/Toolbar/index.tsx b/packages/richtext-lexical/src/features/toolbars/inline/client/Toolbar/index.tsx index ee2bba68f5..29864d7132 100644 --- a/packages/richtext-lexical/src/features/toolbars/inline/client/Toolbar/index.tsx +++ b/packages/richtext-lexical/src/features/toolbars/inline/client/Toolbar/index.tsx @@ -295,22 +295,18 @@ function InlineToolbar({ return (
- {editor.isEditable() && ( - - {editorConfig?.features && - editorConfig.features?.toolbarInline?.groups.map((group, i) => { - return ( - - ) - })} - - )} + {editorConfig?.features && + editorConfig.features?.toolbarInline?.groups.map((group, i) => { + return ( + + ) + })}
) } @@ -392,7 +388,7 @@ function useInlineToolbar( ) }, [editor, updatePopup]) - if (!isText) { + if (!isText || !editor.isEditable()) { return null } diff --git a/packages/richtext-lexical/src/field/Field.tsx b/packages/richtext-lexical/src/field/Field.tsx index 46bfa5185b..390eeb6a59 100644 --- a/packages/richtext-lexical/src/field/Field.tsx +++ b/packages/richtext-lexical/src/field/Field.tsx @@ -5,6 +5,7 @@ import { FieldDescription, FieldError, FieldLabel, + useEditDepth, useField, useFieldProps, withCondition, @@ -47,6 +48,8 @@ const RichTextComponent: React.FC< const Label = components?.Label const readOnlyFromProps = readOnlyFromTopLevelProps || readOnlyFromAdmin + const editDepth = useEditDepth() + const memoizedValidate = useCallback( (value, validationOptions) => { if (typeof validate === 'function') { @@ -82,10 +85,12 @@ const RichTextComponent: React.FC< .filter(Boolean) .join(' ') + const pathWithEditDepth = `${path}.${editDepth}` + return (
{}}> diff --git a/packages/richtext-lexical/src/lexical/LexicalProvider.tsx b/packages/richtext-lexical/src/lexical/LexicalProvider.tsx index 177464696a..ef1b08ae79 100644 --- a/packages/richtext-lexical/src/lexical/LexicalProvider.tsx +++ b/packages/richtext-lexical/src/lexical/LexicalProvider.tsx @@ -17,10 +17,10 @@ import { LexicalEditor as LexicalEditorComponent } from './LexicalEditor.js' import { getEnabledNodes } from './nodes/index.js' export type LexicalProviderProps = { + composerKey: string editorConfig: SanitizedClientEditorConfig field: LexicalRichTextFieldProps['field'] onChange: (editorState: EditorState, editor: LexicalEditor, tags: Set) => void - path: string readOnly: boolean value: SerializedEditorState } @@ -41,7 +41,7 @@ const NestProviders = ({ children, providers }) => { } export const LexicalProvider: React.FC = (props) => { - const { editorConfig, field, onChange, path, readOnly, value } = props + const { composerKey, editorConfig, field, onChange, readOnly, value } = props const parentContext = useEditorConfigContext() @@ -82,7 +82,7 @@ export const LexicalProvider: React.FC = (props) => { editable: readOnly !== true, editorState: processedValue != null ? JSON.stringify(processedValue) : undefined, namespace: editorConfig.lexical.namespace, - nodes: [...getEnabledNodes({ editorConfig })], + nodes: getEnabledNodes({ editorConfig }), onError: (error: Error) => { throw error }, @@ -94,8 +94,10 @@ export const LexicalProvider: React.FC = (props) => { return

Loading...

} + // We need to add initialConfig.editable to the key to force a re-render when the readOnly prop changes. + // Without it, there were cases where lexical editors inside drawers turn readOnly initially - a few miliseconds later they turn editable, but the editor does not re-render and stays readOnly. return ( - + { describe('nested lexical editor in block', () => { test('should type and save typed text', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -157,7 +157,7 @@ describe('lexicalBlocks', () => { test('should be able to bold text using floating select toolbar', async () => { // Reproduces https://github.com/payloadcms/payload/issues/4025 await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -239,7 +239,7 @@ describe('lexicalBlocks', () => { test('should be able to select text, make it an external link and receive the updated link value', async () => { // Reproduces https://github.com/payloadcms/payload/issues/4025 await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -323,7 +323,7 @@ describe('lexicalBlocks', () => { test('ensure slash menu is not hidden behind other blocks', async () => { // This test makes sure there are no z-index issues here await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -396,7 +396,7 @@ describe('lexicalBlocks', () => { }) test('should allow adding new blocks to a sub-blocks field, part of a parent lexical blocks field', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -471,7 +471,7 @@ describe('lexicalBlocks', () => { // Big test which tests a bunch of things: Creation of blocks via slash commands, creation of deeply nested sub-lexical-block fields via slash commands, properly populated deeply nested fields within those test('ensure creation of a lexical, lexical-field-block, which contains another lexical, lexical-and-upload-field-block, works and that the sub-upload field is properly populated', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -690,7 +690,7 @@ describe('lexicalBlocks', () => { // This test ensures that https://github.com/payloadcms/payload/issues/3911 does not happen again await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -762,7 +762,7 @@ describe('lexicalBlocks', () => { // 3. In the issue, after writing one character, the cursor focuses back into the parent editor await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -802,7 +802,7 @@ describe('lexicalBlocks', () => { }) const shouldRespectRowRemovalTest = async () => { - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -859,7 +859,7 @@ describe('lexicalBlocks', () => { await navigateToLexicalFields() // Wait for lexical to be loaded up fully - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -882,7 +882,7 @@ describe('lexicalBlocks', () => { test('ensure pre-seeded uploads node is visible', async () => { // Due to issues with the relationships condition, we had issues with that not being visible. Checking for visibility ensures there is no breakage there again await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -897,7 +897,7 @@ describe('lexicalBlocks', () => { test('should respect required error state in deeply nested text field', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -946,7 +946,7 @@ describe('lexicalBlocks', () => { // Reproduces https://github.com/payloadcms/payload/issues/6631 test('ensure tabs field within lexical block correctly loads and saves data', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() diff --git a/test/fields/collections/Lexical/e2e/main/e2e.spec.ts b/test/fields/collections/Lexical/e2e/main/e2e.spec.ts index 8fb68e2a16..5dda165068 100644 --- a/test/fields/collections/Lexical/e2e/main/e2e.spec.ts +++ b/test/fields/collections/Lexical/e2e/main/e2e.spec.ts @@ -103,7 +103,7 @@ describe('lexicalMain', () => { await navigateToLexicalFields() await expect( - page.locator('.rich-text-lexical').nth(1).locator('.lexical-block').first(), + page.locator('.rich-text-lexical').nth(2).locator('.lexical-block').first(), ).toBeVisible() // Navigate to some different page, away from the current document @@ -116,7 +116,7 @@ describe('lexicalMain', () => { test('should not warn about unsaved changes when navigating to lexical editor with blocks node and then leaving the page after making a change and saving', async () => { // Relevant issue: https://github.com/payloadcms/payload/issues/4115 await navigateToLexicalFields() - const thirdBlock = page.locator('.rich-text-lexical').nth(1).locator('.lexical-block').nth(2) + const thirdBlock = page.locator('.rich-text-lexical').nth(2).locator('.lexical-block').nth(2) await thirdBlock.scrollIntoViewIfNeeded() await expect(thirdBlock).toBeVisible() @@ -150,7 +150,7 @@ describe('lexicalMain', () => { test('should type and save typed text', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -194,7 +194,7 @@ describe('lexicalMain', () => { }) test('should be able to bold text using floating select toolbar', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -299,7 +299,7 @@ describe('lexicalMain', () => { // This test makes sure there are no z-index issues here await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').first() + const richTextField = page.locator('.rich-text-lexical').nth(1) await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -360,7 +360,7 @@ describe('lexicalMain', () => { // This reproduces an issue where if you create an upload node, the document drawer opens, you select a collection other than the default one, create a NEW upload document and save, it throws a lexical error test('ensure creation of new upload document within upload node works', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() @@ -439,10 +439,13 @@ describe('lexicalMain', () => { // This reproduces https://github.com/payloadcms/payload/issues/7128 test('ensure newly created upload node has fields, saves them, and loads them correctly', async () => { await navigateToLexicalFields() - const richTextField = page.locator('.rich-text-lexical').nth(1) // second + const richTextField = page.locator('.rich-text-lexical').nth(2) // second await richTextField.scrollIntoViewIfNeeded() await expect(richTextField).toBeVisible() + // Wait until there at least 10 blocks visible in that richtext field - thus wait for it to be fully loaded + await expect(richTextField.locator('.lexical-block')).toHaveCount(10) + const lastParagraph = richTextField.locator('p').last() await lastParagraph.scrollIntoViewIfNeeded() await expect(lastParagraph).toBeVisible() @@ -503,7 +506,7 @@ describe('lexicalMain', () => { await wait(300) const reloadedUploadNode = page .locator('.rich-text-lexical') - .nth(1) + .nth(2) .locator('.lexical-upload') .nth(1) await reloadedUploadNode.scrollIntoViewIfNeeded() @@ -561,6 +564,126 @@ describe('lexicalMain', () => { await expect(page.locator('.rich-text-lexical').nth(1)).toBeVisible() }) + /** + * There was a bug where the inline toolbar inside a lexical editor in a drawer was not shown + */ + test('ensure lexical editor within drawer within relationship within lexical field has fully-functioning inline toolbar', async () => { + await navigateToLexicalFields() + const richTextField = page.locator('.rich-text-lexical').first() + await richTextField.scrollIntoViewIfNeeded() + await expect(richTextField).toBeVisible() + + const paragraph = richTextField.locator('.LexicalEditorTheme__paragraph').first() + await paragraph.scrollIntoViewIfNeeded() + await expect(paragraph).toBeVisible() + + /** + * Create new relationship node + */ + // type / to open the slash menu + await paragraph.click() + await page.keyboard.press('/') + await page.keyboard.type('Relationship') + + // Create Relationship node + const slashMenuPopover = page.locator('#slash-menu .slash-menu-popup') + await expect(slashMenuPopover).toBeVisible() + + const relationshipSelectButton = slashMenuPopover.locator('button').first() + await expect(relationshipSelectButton).toBeVisible() + await expect(relationshipSelectButton).toHaveText('Relationship') + await relationshipSelectButton.click() + await expect(slashMenuPopover).toBeHidden() + + await wait(500) // wait for drawer form state to initialize (it's a flake) + const relationshipListDrawer = page.locator('dialog[id^=list-drawer_1_]').first() // IDs starting with list-drawer_1_ (there's some other symbol after the underscore) + await expect(relationshipListDrawer).toBeVisible() + await wait(500) + + await expect(relationshipListDrawer.locator('.rs__single-value')).toHaveText('Lexical Field') + + await relationshipListDrawer.locator('button').getByText('Rich Text').first().click() + await expect(relationshipListDrawer).toBeHidden() + + const newRelationshipNode = richTextField.locator('.lexical-relationship').first() + await newRelationshipNode.scrollIntoViewIfNeeded() + await expect(newRelationshipNode).toBeVisible() + + await newRelationshipNode.locator('.doc-drawer__toggler').first().click() + await wait(500) // wait for drawer form state to initialize (it's a flake) + + /** + * Now we are inside the doc drawer containing the richtext field. + * Let's test if its inline toolbar works + */ + const docDrawer = page.locator('dialog[id^=doc-drawer_lexical-fields_1_]').first() // IDs starting with list-drawer_1_ (there's some other symbol after the underscore) + await expect(docDrawer).toBeVisible() + await wait(500) + + const docRichTextField = docDrawer.locator('.rich-text-lexical').first() + await docRichTextField.scrollIntoViewIfNeeded() + await expect(docRichTextField).toBeVisible() + + const docParagraph = docRichTextField.locator('.LexicalEditorTheme__paragraph').first() + await docParagraph.scrollIntoViewIfNeeded() + await expect(docParagraph).toBeVisible() + await docParagraph.click() + await page.keyboard.type('Some text') + // Select "text" by pressing shift + arrow left + for (let i = 0; i < 4; i++) { + await page.keyboard.press('Shift+ArrowLeft') + } + // Ensure inline toolbar appeared + const inlineToolbar = docRichTextField.locator('.inline-toolbar-popup') + await expect(inlineToolbar).toBeVisible() + + const boldButton = inlineToolbar.locator('.toolbar-popup__button-bold') + await expect(boldButton).toBeVisible() + + // make text bold + await boldButton.click() + + // Save drawer + await docDrawer.locator('button').getByText('Save').first().click() + await expect(docDrawer).toBeHidden() + await wait(1500) // Ensure doc is saved in the database + + // Do not save the main page, as it will still have the stale, previous data. // TODO: This should eventually be fixed. It's a separate issue than what this test is about though. + + // Check if the text is bold. It's a self-relationship, so no need to follow relationship + await expect(async () => { + const lexicalDoc: LexicalField = ( + await payload.find({ + collection: lexicalFieldsSlug, + depth: 0, + overrideAccess: true, + where: { + title: { + equals: lexicalDocData.title, + }, + }, + }) + ).docs[0] as never + + const lexicalField: SerializedEditorState = lexicalDoc.lexicalRootEditor + const firstParagraph: SerializedParagraphNode = lexicalField.root + .children[0] as SerializedParagraphNode + + expect(firstParagraph.children).toHaveLength(2) + + const textNode: SerializedTextNode = firstParagraph.children[0] as SerializedTextNode + const boldNode: SerializedTextNode = firstParagraph.children[1] as SerializedTextNode + + expect(textNode.text).toBe('Some ') + expect(textNode.format).toBe(0) + + expect(boldNode.text).toBe('text') + expect(boldNode.format).toBe(1) + }).toPass({ + timeout: POLL_TOPASS_TIMEOUT, + }) + }) + describe('localization', () => { test.skip('ensure simple localized lexical field works', async () => { await navigateToLexicalFields(true, true) diff --git a/test/fields/collections/Lexical/index.ts b/test/fields/collections/Lexical/index.ts index d8fbfc2d1b..fb691070bf 100644 --- a/test/fields/collections/Lexical/index.ts +++ b/test/fields/collections/Lexical/index.ts @@ -123,6 +123,10 @@ export const LexicalFields: CollectionConfig = { type: 'text', required: true, }, + { + name: 'lexicalRootEditor', + type: 'richText', + }, { name: 'lexicalSimple', type: 'richText', diff --git a/test/fields/payload-types.ts b/test/fields/payload-types.ts index 07a4b25d5e..d3daae2085 100644 --- a/test/fields/payload-types.ts +++ b/test/fields/payload-types.ts @@ -31,6 +31,7 @@ export interface Config { 'lexical-fields': LexicalField; 'lexical-migrate-fields': LexicalMigrateField; 'lexical-localized-fields': LexicalLocalizedField; + lexicalObjectReferenceBug: LexicalObjectReferenceBug; users: User; 'array-fields': ArrayField; 'block-fields': BlockField; @@ -102,6 +103,21 @@ export interface UserAuthOperations { export interface LexicalField { id: string; title: string; + lexicalRootEditor?: { + root: { + type: string; + children: { + type: string; + version: number; + [k: string]: unknown; + }[]; + direction: ('ltr' | 'rtl') | null; + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; + indent: number; + version: number; + }; + [k: string]: unknown; + } | null; lexicalSimple?: { root: { type: string; @@ -271,6 +287,45 @@ export interface LexicalLocalizedField { updatedAt: string; createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "lexicalObjectReferenceBug". + */ +export interface LexicalObjectReferenceBug { + id: string; + lexicalDefault?: { + root: { + type: string; + children: { + type: string; + version: number; + [k: string]: unknown; + }[]; + direction: ('ltr' | 'rtl') | null; + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; + indent: number; + version: number; + }; + [k: string]: unknown; + } | null; + lexicalEditor?: { + root: { + type: string; + children: { + type: string; + version: number; + [k: string]: unknown; + }[]; + direction: ('ltr' | 'rtl') | null; + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; + indent: number; + version: number; + }; + [k: string]: unknown; + } | null; + updatedAt: string; + createdAt: string; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "users". @@ -1678,6 +1733,10 @@ export interface PayloadLockedDocument { relationTo: 'lexical-localized-fields'; value: string | LexicalLocalizedField; } | null) + | ({ + relationTo: 'lexicalObjectReferenceBug'; + value: string | LexicalObjectReferenceBug; + } | null) | ({ relationTo: 'users'; value: string | User; From fa929120e7e369a2cfd7f228b80520b74140e251 Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Fri, 18 Oct 2024 00:09:51 -0600 Subject: [PATCH 081/110] chore: upgrade typescript from 5.6.2 to 5.6.3, upgrade playwright from 1.46.0 to 1.48.1 (#8775) --- package.json | 8 +- packages/eslint-config/package.json | 2 +- packages/eslint-plugin/package.json | 2 +- packages/translations/package.json | 2 +- pnpm-lock.yaml | 472 ++++++++++---------- templates/_template/package.json | 2 +- templates/blank/package.json | 2 +- templates/vercel-postgres/package.json | 2 +- templates/website/package.json | 2 +- templates/with-payload-cloud/package.json | 2 +- templates/with-postgres/package.json | 2 +- templates/with-vercel-mongodb/package.json | 2 +- templates/with-vercel-postgres/package.json | 2 +- test/package.json | 4 +- 14 files changed, 253 insertions(+), 253 deletions(-) diff --git a/package.json b/package.json index 01954deaf4..c3cc66b937 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "@payloadcms/eslint-config": "workspace:*", "@payloadcms/eslint-plugin": "workspace:*", "@payloadcms/live-preview-react": "workspace:*", - "@playwright/test": "1.46.0", + "@playwright/test": "1.48.1", "@sentry/nextjs": "^8.33.1", "@sentry/node": "^8.33.1", "@swc-node/register": "1.10.9", @@ -148,8 +148,8 @@ "next": "15.0.0-canary.173", "open": "^10.1.0", "p-limit": "^5.0.0", - "playwright": "1.46.0", - "playwright-core": "1.46.0", + "playwright": "1.48.1", + "playwright-core": "1.48.1", "prettier": "3.3.3", "prompts": "2.4.2", "react": "19.0.0-rc-3edc000d-20240926", @@ -164,7 +164,7 @@ "tempy": "1.0.1", "tsx": "4.19.1", "turbo": "^2.1.3", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "peerDependencies": { "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 1743ec0cc4..1dec8d7787 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -33,7 +33,7 @@ "eslint-plugin-react-hooks": "5.1.0-rc-a19a8ab4-20240829", "eslint-plugin-regexp": "2.6.0", "globals": "15.9.0", - "typescript": "5.6.2", + "typescript": "5.6.3", "typescript-eslint": "8.3.0" } } diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 4464bf4cac..d48bde9baf 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -32,7 +32,7 @@ "eslint-plugin-react-hooks": "5.1.0-rc-a19a8ab4-20240829", "eslint-plugin-regexp": "2.6.0", "globals": "15.9.0", - "typescript": "5.6.2", + "typescript": "5.6.3", "typescript-eslint": "8.3.0" } } diff --git a/packages/translations/package.json b/packages/translations/package.json index 10b6233347..1ab8790fe6 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -54,7 +54,7 @@ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "dotenv": "16.4.5", "prettier": "3.3.3", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "publishConfig": { "exports": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ccc36f3f4..f9cd8080f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,7 @@ overrides: mongodb-memory-server: ^9.0 react: 19.0.0-rc-3edc000d-20240926 react-dom: 19.0.0-rc-3edc000d-20240926 - typescript: 5.6.2 + typescript: 5.6.3 importers: @@ -43,17 +43,17 @@ importers: specifier: workspace:* version: link:packages/live-preview-react '@playwright/test': - specifier: 1.46.0 - version: 1.46.0 + specifier: 1.48.1 + version: 1.48.1 '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/node': specifier: ^8.33.1 version: 8.33.1 '@swc-node/register': specifier: 1.10.9 - version: 1.10.9(@swc/core@1.7.10(@swc/helpers@0.5.13))(@swc/types@0.1.12)(typescript@5.6.2) + version: 1.10.9(@swc/core@1.7.10(@swc/helpers@0.5.13))(@swc/types@0.1.12)(typescript@5.6.3) '@swc/cli': specifier: 0.4.0 version: 0.4.0(@swc/core@1.7.10(@swc/helpers@0.5.13))(chokidar@3.6.0) @@ -149,7 +149,7 @@ importers: version: 9.4.1(@aws-sdk/credential-providers@3.630.0(@aws-sdk/client-sso-oidc@3.629.0(@aws-sdk/client-sts@3.629.0))) next: specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) open: specifier: ^10.1.0 version: 10.1.0 @@ -157,11 +157,11 @@ importers: specifier: ^5.0.0 version: 5.0.0 playwright: - specifier: 1.46.0 - version: 1.46.0 + specifier: 1.48.1 + version: 1.48.1 playwright-core: - specifier: 1.46.0 - version: 1.46.0 + specifier: 1.48.1 + version: 1.48.1 prettier: specifier: 3.3.3 version: 3.3.3 @@ -205,8 +205,8 @@ importers: specifier: ^2.1.3 version: 2.1.3 typescript: - specifier: 5.6.2 - version: 5.6.2 + specifier: 5.6.3 + version: 5.6.3 packages/create-payload-app: dependencies: @@ -501,7 +501,7 @@ importers: dependencies: '@eslint-react/eslint-plugin': specifier: 1.12.3 - version: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint/js': specifier: 9.9.1 version: 9.9.1 @@ -516,7 +516,7 @@ importers: version: 8.42.3 '@typescript-eslint/parser': specifier: 8.3.0 - version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: specifier: 9.9.1 version: 9.9.1(jiti@1.21.6) @@ -525,10 +525,10 @@ importers: version: 9.1.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-import-x: specifier: 4.1.1 - version: 4.1.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 4.1.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint-plugin-jest: specifier: 28.8.1 - version: 28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) + version: 28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.3) eslint-plugin-jest-dom: specifier: 5.4.0 version: 5.4.0(eslint@9.9.1(jiti@1.21.6)) @@ -537,7 +537,7 @@ importers: version: 6.9.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-perfectionist: specifier: 3.3.0 - version: 3.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 3.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint-plugin-react-hooks: specifier: 5.1.0-rc-a19a8ab4-20240829 version: 5.1.0-rc-a19a8ab4-20240829(eslint@9.9.1(jiti@1.21.6)) @@ -548,17 +548,17 @@ importers: specifier: 15.9.0 version: 15.9.0 typescript: - specifier: 5.6.2 - version: 5.6.2 + specifier: 5.6.3 + version: 5.6.3 typescript-eslint: specifier: 8.3.0 - version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) packages/eslint-plugin: dependencies: '@eslint-react/eslint-plugin': specifier: 1.12.3 - version: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint/js': specifier: 9.9.1 version: 9.9.1 @@ -570,7 +570,7 @@ importers: version: 8.42.3 '@typescript-eslint/parser': specifier: 8.3.0 - version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: specifier: 9.9.1 version: 9.9.1(jiti@1.21.6) @@ -579,10 +579,10 @@ importers: version: 9.1.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-import-x: specifier: 4.1.1 - version: 4.1.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 4.1.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint-plugin-jest: specifier: 28.8.1 - version: 28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) + version: 28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.3) eslint-plugin-jest-dom: specifier: 5.4.0 version: 5.4.0(eslint@9.9.1(jiti@1.21.6)) @@ -591,7 +591,7 @@ importers: version: 6.9.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-perfectionist: specifier: 3.3.0 - version: 3.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 3.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint-plugin-react-hooks: specifier: 5.1.0-rc-a19a8ab4-20240829 version: 5.1.0-rc-a19a8ab4-20240829(eslint@9.9.1(jiti@1.21.6)) @@ -602,11 +602,11 @@ importers: specifier: 15.9.0 version: 15.9.0 typescript: - specifier: 5.6.2 - version: 5.6.2 + specifier: 5.6.3 + version: 5.6.3 typescript-eslint: specifier: 8.3.0 - version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) packages/graphql: dependencies: @@ -621,7 +621,7 @@ importers: version: 8.0.0 ts-essentials: specifier: 10.0.2 - version: 10.0.2(typescript@5.6.2) + version: 10.0.2(typescript@5.6.3) tsx: specifier: 4.19.1 version: 4.19.1 @@ -687,7 +687,7 @@ importers: version: link:../payload vue: specifier: ^3.0.0 - version: 3.4.37(typescript@5.6.2) + version: 3.4.37(typescript@5.6.3) packages/next: dependencies: @@ -723,7 +723,7 @@ importers: version: 1.6.2 next: specifier: ^15.0.0-canary.173 - version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4) + version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4) path-to-regexp: specifier: ^6.2.1 version: 6.2.2 @@ -874,7 +874,7 @@ importers: version: 2.1.0 ts-essentials: specifier: 10.0.2 - version: 10.0.2(typescript@5.6.2) + version: 10.0.2(typescript@5.6.3) tsx: specifier: 4.19.1 version: 4.19.1 @@ -966,7 +966,7 @@ importers: version: link:../payload ts-jest: specifier: ^29.1.0 - version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) + version: 29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.3) packages/plugin-cloud-storage: dependencies: @@ -1086,7 +1086,7 @@ importers: dependencies: '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/types': specifier: ^8.33.1 version: 8.33.1 @@ -1418,7 +1418,7 @@ importers: version: link:../plugin-cloud-storage uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) devDependencies: payload: specifier: workspace:* @@ -1462,8 +1462,8 @@ importers: specifier: 3.3.3 version: 3.3.3 typescript: - specifier: 5.6.2 - version: 5.6.2 + specifier: 5.6.3 + version: 5.6.3 packages/ui: dependencies: @@ -1505,7 +1505,7 @@ importers: version: 2.3.0 next: specifier: ^15.0.0-canary.173 - version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) object-to-formdata: specifier: 4.5.1 version: 4.5.1 @@ -1538,7 +1538,7 @@ importers: version: 1.5.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) ts-essentials: specifier: 10.0.2 - version: 10.0.2(typescript@5.6.2) + version: 10.0.2(typescript@5.6.3) use-context-selector: specifier: 2.0.0 version: 2.0.0(react@19.0.0-rc-3edc000d-20240926)(scheduler@0.0.0-experimental-3edc000d-20240926) @@ -1704,7 +1704,7 @@ importers: version: link:../packages/ui '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/react': specifier: ^7.77.0 version: 7.118.0(react@19.0.0-rc-3edc000d-20240926) @@ -1730,8 +1730,8 @@ importers: specifier: 0.26.2 version: 0.26.2 eslint-plugin-playwright: - specifier: 1.6.2 - version: 1.6.2(eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6)) + specifier: 1.7.0 + version: 1.7.0(eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6)) execa: specifier: 5.1.1 version: 5.1.1 @@ -1749,7 +1749,7 @@ importers: version: 0.18.0 next: specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) payload: specifier: workspace:* version: link:../packages/payload @@ -1773,13 +1773,13 @@ importers: version: 1.0.1 ts-essentials: specifier: 10.0.2 - version: 10.0.2(typescript@5.6.2) + version: 10.0.2(typescript@5.6.3) typescript: - specifier: 5.6.2 - version: 5.6.2 + specifier: 5.6.3 + version: 5.6.3 uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) uuid: specifier: 10.0.0 version: 10.0.0 @@ -3228,7 +3228,7 @@ packages: engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -4064,8 +4064,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.46.0': - resolution: {integrity: sha512-/QYft5VArOrGRP5pgkrfKksqsKA6CEFyGQ/gjNe6q0y4tZ1aaPfq4gIjudr1s3D+pXyrPRdsy4opKDrjBabE5w==} + '@playwright/test@1.48.1': + resolution: {integrity: sha512-s9RtWoxkOLmRJdw3oFvhFbs9OJS0BzrLUc8Hf6l2UdCNd1rqeEyD4BhCJkvzeEoD1FsK4mirsWwGerhVmYKtZg==} engines: {node: '>=18'} hasBin: true @@ -4503,7 +4503,7 @@ packages: resolution: {integrity: sha512-iXy2sjP0phPEpK2yivjRC3PAgoLaT4sjSk0LDWCTdcTBJmR4waEog0E6eJbvoOkLkOtWw37SB8vCkl/bbh4+8A==} peerDependencies: '@swc/core': '>= 1.4.13' - typescript: 5.6.2 + typescript: 5.6.3 '@swc-node/sourcemap-support@0.5.1': resolution: {integrity: sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==} @@ -6186,8 +6186,8 @@ packages: vue-eslint-parser: optional: true - eslint-plugin-playwright@1.6.2: - resolution: {integrity: sha512-mraN4Em3b5jLt01q7qWPyLg0Q5v3KAWfJSlEWwldyUXoa7DSPrBR4k6B6LROLqipsG8ndkwWMdjl1Ffdh15tag==} + eslint-plugin-playwright@1.7.0: + resolution: {integrity: sha512-pDp2jFeWbBmlwDfZ39Ypdlz1+IafmRKvFTnnonX0TbS7hAByy4oh7Y6ioZRKvLGE+djd/e2VbqOo9sxgZSY2ow==} engines: {node: '>=16.6.0'} peerDependencies: eslint: '>=8.40.0' @@ -6207,7 +6207,7 @@ packages: engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -6217,7 +6217,7 @@ packages: engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -6227,7 +6227,7 @@ packages: engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -6243,7 +6243,7 @@ packages: engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -6253,7 +6253,7 @@ packages: engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -6263,7 +6263,7 @@ packages: engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -7081,7 +7081,7 @@ packages: resolution: {integrity: sha512-mcvHasqbRBWJznuPqqHRKiJgYAz60sZ0mvO3bN70JbkuK7ksfmgc489aKZYxMEjIbRvyOseaTjaRZLRF/xFeRA==} peerDependencies: eslint: '*' - typescript: 5.6.2 + typescript: 5.6.3 is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} @@ -8321,13 +8321,13 @@ packages: pkg-types@1.1.3: resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} - playwright-core@1.46.0: - resolution: {integrity: sha512-9Y/d5UIwuJk8t3+lhmMSAJyNP1BUC/DqP3cQJDQQL/oWqAiuPTLgy7Q5dzglmTLwcBRdetzgNM/gni7ckfTr6A==} + playwright-core@1.48.1: + resolution: {integrity: sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==} engines: {node: '>=18'} hasBin: true - playwright@1.46.0: - resolution: {integrity: sha512-XYJ5WvfefWONh1uPAUAi0H2xXV5S3vrtcnXe6uAOgdGi3aSpqOSXX08IAjXW34xitfuOJsvXU5anXZxPSEQiJw==} + playwright@1.48.1: + resolution: {integrity: sha512-j8CiHW/V6HxmbntOfyB4+T/uk08tBy6ph0MpBXwuoofkSnLmlfdYNNkFTYD6ofzzlSqLA1fwH4vwvVFvJgLN0w==} engines: {node: '>=18'} hasBin: true @@ -9512,17 +9512,17 @@ packages: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 ts-declaration-location@1.0.4: resolution: {integrity: sha512-r4JoxYhKULbZuH81Pjrp9OEG5St7XWk7zXwGkLKhmVcjiBVHTJXV5wK6dEa9JKW5QGSTW6b1lOjxAKp8R1SQhg==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 ts-essentials@10.0.2: resolution: {integrity: sha512-Xwag0TULqriaugXqVdDiGZ5wuZpqABZlpwQ2Ho4GDyiu/R2Xjkp/9+zcFxL7uzeLl/QCPrflnvpVYyS3ouT7Zw==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -9538,7 +9538,7 @@ packages: babel-jest: ^29.0.0 esbuild: '*' jest: ^29.0.0 - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: '@babel/core': optional: true @@ -9665,8 +9665,8 @@ packages: typescript: optional: true - typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true @@ -9824,7 +9824,7 @@ packages: vue@3.4.37: resolution: {integrity: sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==} peerDependencies: - typescript: 5.6.2 + typescript: 5.6.3 peerDependenciesMeta: typescript: optional: true @@ -12007,13 +12007,13 @@ snapshots: '@eslint-community/regexpp@4.11.0': {} - '@eslint-react/ast@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@eslint-react/ast@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) birecord: 0.1.1 string-ts: 2.2.0 ts-pattern: 5.3.1 @@ -12022,18 +12022,18 @@ snapshots: - supports-color - typescript - '@eslint-react/core@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@eslint-react/core@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 - '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) birecord: 0.1.1 short-unique-id: 5.2.0 ts-pattern: 5.3.1 @@ -12042,46 +12042,46 @@ snapshots: - supports-color - typescript - '@eslint-react/eslint-plugin@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@eslint-react/eslint-plugin@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 - '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) - eslint-plugin-react-debug: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - eslint-plugin-react-dom: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - eslint-plugin-react-hooks-extra: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - eslint-plugin-react-naming-convention: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - eslint-plugin-react-web-api: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - eslint-plugin-react-x: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + eslint-plugin-react-debug: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + eslint-plugin-react-dom: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + eslint-plugin-react-hooks-extra: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + eslint-plugin-react-naming-convention: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + eslint-plugin-react-web-api: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + eslint-plugin-react-x: 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@eslint-react/jsx@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@eslint-react/jsx@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) ts-pattern: 5.3.1 transitivePeerDependencies: - eslint - supports-color - typescript - '@eslint-react/shared@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@eslint-react/shared@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-react/tools': 1.12.3 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) picomatch: 4.0.2 transitivePeerDependencies: - eslint @@ -12090,24 +12090,24 @@ snapshots: '@eslint-react/tools@1.12.3': {} - '@eslint-react/types@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@eslint-react/types@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-react/tools': 1.12.3 '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) transitivePeerDependencies: - eslint - supports-color - typescript - '@eslint-react/var@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@eslint-react/var@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) ts-pattern: 5.3.1 transitivePeerDependencies: - eslint @@ -13152,9 +13152,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.46.0': + '@playwright/test@1.48.1': dependencies: - playwright: 1.46.0 + playwright: 1.48.1 '@polka/url@1.0.0-next.25': {} @@ -13336,7 +13336,7 @@ snapshots: '@sentry/utils': 7.118.0 localforage: 1.10.0 - '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': + '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -13351,7 +13351,7 @@ snapshots: '@sentry/vercel-edge': 8.33.1 '@sentry/webpack-plugin': 2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) chalk: 3.0.0 - next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) resolve: 1.22.8 rollup: 3.29.5 stacktrace-parser: 0.1.10 @@ -13826,7 +13826,7 @@ snapshots: '@swc/core': 1.7.10(@swc/helpers@0.5.13) '@swc/types': 0.1.12 - '@swc-node/register@1.10.9(@swc/core@1.7.10(@swc/helpers@0.5.13))(@swc/types@0.1.12)(typescript@5.6.2)': + '@swc-node/register@1.10.9(@swc/core@1.7.10(@swc/helpers@0.5.13))(@swc/types@0.1.12)(typescript@5.6.3)': dependencies: '@swc-node/core': 1.13.3(@swc/core@1.7.10(@swc/helpers@0.5.13))(@swc/types@0.1.12) '@swc-node/sourcemap-support': 0.5.1 @@ -13836,7 +13836,7 @@ snapshots: oxc-resolver: 1.10.2 pirates: 4.0.6 tslib: 2.6.3 - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - '@swc/types' - supports-color @@ -14195,34 +14195,34 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 - '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.3.0 eslint: 9.9.1(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.3.0 '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.3.0 debug: 4.3.6 eslint: 9.9.1(jiti@1.21.6) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -14231,21 +14231,21 @@ snapshots: '@typescript-eslint/types': 8.3.0 '@typescript-eslint/visitor-keys': 8.3.0 - '@typescript-eslint/type-utils@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@typescript-eslint/type-utils@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) debug: 4.3.6 - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color '@typescript-eslint/types@8.3.0': {} - '@typescript-eslint/typescript-estree@8.3.0(typescript@5.6.2)': + '@typescript-eslint/typescript-estree@8.3.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.3.0 '@typescript-eslint/visitor-keys': 8.3.0 @@ -14254,18 +14254,18 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)': + '@typescript-eslint/utils@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) '@typescript-eslint/scope-manager': 8.3.0 '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) transitivePeerDependencies: - supports-color @@ -14344,11 +14344,11 @@ snapshots: '@vue/shared': 3.4.37 csstype: 3.1.3 - '@vue/server-renderer@3.4.37(vue@3.4.37(typescript@5.6.2))': + '@vue/server-renderer@3.4.37(vue@3.4.37(typescript@5.6.3))': dependencies: '@vue/compiler-ssr': 3.4.37 '@vue/shared': 3.4.37 - vue: 3.4.37(typescript@5.6.2) + vue: 3.4.37(typescript@5.6.3) '@vue/shared@3.4.37': {} @@ -15761,10 +15761,10 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.1.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + eslint-plugin-import-x@4.1.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) debug: 4.3.6 doctrine: 3.0.0 eslint: 9.9.1(jiti@1.21.6) @@ -15785,12 +15785,12 @@ snapshots: eslint: 9.9.1(jiti@1.21.6) requireindex: 1.2.0 - eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2): + eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) jest: 29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - supports-color @@ -15816,10 +15816,10 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - eslint-plugin-perfectionist@3.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + eslint-plugin-perfectionist@3.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) minimatch: 10.0.1 natural-compare-lite: 1.4.0 @@ -15827,12 +15827,12 @@ snapshots: - supports-color - typescript - eslint-plugin-playwright@1.6.2(eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6)): + eslint-plugin-playwright@1.7.0(eslint-plugin-jest@28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6)): dependencies: eslint: 9.9.1(jiti@1.21.6) globals: 13.24.0 optionalDependencies: - eslint-plugin-jest: 28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2) + eslint-plugin-jest: 28.8.1(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.3) eslint-plugin-react-compiler@0.0.0-experimental-7670337-20240918(eslint@9.9.1(jiti@1.21.6)): dependencies: @@ -15846,63 +15846,63 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-debug@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + eslint-plugin-react-debug@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 - '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) string-ts: 2.2.0 ts-pattern: 5.3.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-dom@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + eslint-plugin-react-dom@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) ts-pattern: 5.3.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks-extra@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + eslint-plugin-react-hooks-extra@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 - '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) ts-pattern: 5.3.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -15910,63 +15910,63 @@ snapshots: dependencies: eslint: 9.9.1(jiti@1.21.6) - eslint-plugin-react-naming-convention@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + eslint-plugin-react-naming-convention@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 - '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) ts-pattern: 5.3.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-web-api@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + eslint-plugin-react-web-api@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) birecord: 0.1.1 eslint: 9.9.1(jiti@1.21.6) ts-pattern: 5.3.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-x@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + eslint-plugin-react-x@1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/ast': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/core': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/jsx': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/shared': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@eslint-react/tools': 1.12.3 - '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@eslint-react/types': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@eslint-react/var': 1.12.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.3.0 - '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/types': 8.3.0 - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) - is-immutable-type: 5.0.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + is-immutable-type: 5.0.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) ts-pattern: 5.3.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -16907,13 +16907,13 @@ snapshots: is-hotkey@0.2.0: {} - is-immutable-type@5.0.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + is-immutable-type@5.0.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.9.1(jiti@1.21.6) - ts-api-utils: 1.3.0(typescript@5.6.2) - ts-declaration-location: 1.0.4(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.6.3) + ts-declaration-location: 1.0.4(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -17961,7 +17961,7 @@ snapshots: transitivePeerDependencies: - supports-color - next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): + next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): dependencies: '@next/env': 15.0.0-canary.173 '@swc/counter': 0.1.3 @@ -17983,7 +17983,7 @@ snapshots: '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 '@next/swc-win32-x64-msvc': 15.0.0-canary.173 '@opentelemetry/api': 1.9.0 - '@playwright/test': 1.46.0 + '@playwright/test': 1.48.1 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 sass: 1.77.4 sharp: 0.33.5 @@ -17991,7 +17991,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4): + next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4): dependencies: '@next/env': 15.0.0-canary.173 '@swc/counter': 0.1.3 @@ -18013,7 +18013,7 @@ snapshots: '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 '@next/swc-win32-x64-msvc': 15.0.0-canary.173 '@opentelemetry/api': 1.9.0 - '@playwright/test': 1.46.0 + '@playwright/test': 1.48.1 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 sass: 1.77.4 sharp: 0.33.5 @@ -18021,7 +18021,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): + next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): dependencies: '@next/env': 15.0.0-canary.173 '@swc/counter': 0.1.3 @@ -18043,7 +18043,7 @@ snapshots: '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 '@next/swc-win32-x64-msvc': 15.0.0-canary.173 '@opentelemetry/api': 1.9.0 - '@playwright/test': 1.46.0 + '@playwright/test': 1.48.1 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 sass: 1.77.4 sharp: 0.33.5 @@ -18441,11 +18441,11 @@ snapshots: mlly: 1.7.1 pathe: 1.1.2 - playwright-core@1.46.0: {} + playwright-core@1.48.1: {} - playwright@1.46.0: + playwright@1.48.1: dependencies: - playwright-core: 1.46.0 + playwright-core: 1.48.1 optionalDependencies: fsevents: 2.3.2 @@ -19707,20 +19707,20 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@1.3.0(typescript@5.6.2): + ts-api-utils@1.3.0(typescript@5.6.3): dependencies: - typescript: 5.6.2 + typescript: 5.6.3 - ts-declaration-location@1.0.4(typescript@5.6.2): + ts-declaration-location@1.0.4(typescript@5.6.3): dependencies: minimatch: 10.0.1 - typescript: 5.6.2 + typescript: 5.6.3 - ts-essentials@10.0.2(typescript@5.6.2): + ts-essentials@10.0.2(typescript@5.6.3): optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 - ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.2): + ts-jest@29.2.4(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(babel-plugin-macros@3.1.0))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -19731,7 +19731,7 @@ snapshots: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.6.2 + typescript: 5.6.3 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.25.2 @@ -19845,18 +19845,18 @@ snapshots: dependencies: csstype: 3.1.3 - typescript-eslint@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2): + typescript-eslint@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color - typescript@5.6.2: {} + typescript@5.6.3: {} ufo@1.5.4: {} @@ -19914,7 +19914,7 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 - uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): + uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): dependencies: '@effect/schema': 0.68.12(effect@3.4.5) '@uploadthing/mime-types': 0.2.10 @@ -19924,7 +19924,7 @@ snapshots: std-env: 3.7.0 optionalDependencies: express: 4.19.2 - next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) uri-js@4.4.1: dependencies: @@ -19976,15 +19976,15 @@ snapshots: vary@1.1.2: optional: true - vue@3.4.37(typescript@5.6.2): + vue@3.4.37(typescript@5.6.3): dependencies: '@vue/compiler-dom': 3.4.37 '@vue/compiler-sfc': 3.4.37 '@vue/runtime-dom': 3.4.37 - '@vue/server-renderer': 3.4.37(vue@3.4.37(typescript@5.6.2)) + '@vue/server-renderer': 3.4.37(vue@3.4.37(typescript@5.6.3)) '@vue/shared': 3.4.37 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 w3c-xmlserializer@4.0.0: dependencies: diff --git a/templates/_template/package.json b/templates/_template/package.json index 2699cf71f3..074a118a0c 100644 --- a/templates/_template/package.json +++ b/templates/_template/package.json @@ -33,7 +33,7 @@ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", "eslint-config-next": "15.0.0-canary.173", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/templates/blank/package.json b/templates/blank/package.json index 2699cf71f3..074a118a0c 100644 --- a/templates/blank/package.json +++ b/templates/blank/package.json @@ -33,7 +33,7 @@ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", "eslint-config-next": "15.0.0-canary.173", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/templates/vercel-postgres/package.json b/templates/vercel-postgres/package.json index e237a28458..3aa99115fc 100644 --- a/templates/vercel-postgres/package.json +++ b/templates/vercel-postgres/package.json @@ -33,7 +33,7 @@ "eslint-config-next": "15.0.0-canary.173", "postcss": "^8", "tailwindcss": "^3.3.0", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/templates/website/package.json b/templates/website/package.json index e7f0d8a53d..5cb33d4a4d 100644 --- a/templates/website/package.json +++ b/templates/website/package.json @@ -68,7 +68,7 @@ "postcss": "^8.4.38", "prettier": "^3.0.3", "tailwindcss": "^3.4.3", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/templates/with-payload-cloud/package.json b/templates/with-payload-cloud/package.json index 064b75604d..488741323c 100644 --- a/templates/with-payload-cloud/package.json +++ b/templates/with-payload-cloud/package.json @@ -33,7 +33,7 @@ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", "eslint-config-next": "15.0.0-canary.173", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/templates/with-postgres/package.json b/templates/with-postgres/package.json index be24aee8b4..4ded39823a 100644 --- a/templates/with-postgres/package.json +++ b/templates/with-postgres/package.json @@ -34,7 +34,7 @@ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", "eslint-config-next": "15.0.0-canary.173", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/templates/with-vercel-mongodb/package.json b/templates/with-vercel-mongodb/package.json index f95887b8bc..cea0e0564b 100644 --- a/templates/with-vercel-mongodb/package.json +++ b/templates/with-vercel-mongodb/package.json @@ -33,7 +33,7 @@ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", "eslint-config-next": "15.0.0-canary.173", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/templates/with-vercel-postgres/package.json b/templates/with-vercel-postgres/package.json index ccd60b25f6..6ec1b0bf9f 100644 --- a/templates/with-vercel-postgres/package.json +++ b/templates/with-vercel-postgres/package.json @@ -34,7 +34,7 @@ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", "eslint-config-next": "15.0.0-canary.173", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/test/package.json b/test/package.json index db413251c9..13fe463839 100644 --- a/test/package.json +++ b/test/package.json @@ -65,7 +65,7 @@ "create-payload-app": "workspace:*", "dotenv": "16.4.5", "drizzle-kit": "0.26.2", - "eslint-plugin-playwright": "1.6.2", + "eslint-plugin-playwright": "1.7.0", "execa": "5.1.1", "file-type": "19.3.0", "http-status": "1.6.2", @@ -80,7 +80,7 @@ "slate": "0.91.4", "tempy": "^1.0.1", "ts-essentials": "10.0.2", - "typescript": "5.6.2", + "typescript": "5.6.3", "uploadthing": "^6.10.1", "uuid": "10.0.0" }, From 062a33377953370a8f6905ae79b06794504963dd Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Fri, 18 Oct 2024 00:58:56 -0600 Subject: [PATCH 082/110] perf: upgrade pino and pino-pretty, reducing the total amount of dependencies (#8776) BEFORE: 22 dependencies, 2MB total size ![CleanShot 2024-10-18 at 00 11 48@2x](https://github.com/user-attachments/assets/abd20ac1-fc66-4d5b-bbda-bdcf89846a0a) AFTER: 12 dependencies, 1MB total size ![CleanShot 2024-10-18 at 00 12 44@2x](https://github.com/user-attachments/assets/6f22e2e3-0eed-4b48-8e51-1f5156e9efd3) --- packages/payload/package.json | 4 +-- packages/payload/src/utilities/logger.ts | 6 ++-- pnpm-lock.yaml | 39 ++++++++++++------------ 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/packages/payload/package.json b/packages/payload/package.json index 5a5f27be49..9550566a60 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -101,8 +101,8 @@ "json-schema-to-typescript": "15.0.1", "jsonwebtoken": "9.0.2", "minimist": "1.2.8", - "pino": "9.3.1", - "pino-pretty": "11.2.1", + "pino": "9.5.0", + "pino-pretty": "11.3.0", "pluralize": "8.0.0", "sanitize-filename": "1.6.3", "scmp": "2.1.0", diff --git a/packages/payload/src/utilities/logger.ts b/packages/payload/src/utilities/logger.ts index ba8d263ed2..5a8fb73565 100644 --- a/packages/payload/src/utilities/logger.ts +++ b/packages/payload/src/utilities/logger.ts @@ -1,5 +1,5 @@ import { type Logger, pino } from 'pino' -import { build, type PrettyOptions } from 'pino-pretty' +import { build, type PinoPretty, type PrettyOptions } from 'pino-pretty' import type { Config } from '../config/types.js' @@ -15,13 +15,13 @@ const prettyOptions: PrettyOptions = { translateTime: 'SYS:HH:MM:ss', } -export const prettySyncLoggerDestination = build({ +export const prettySyncLoggerDestination: PinoPretty.PrettyStream = build({ ...prettyOptions, destination: 1, // stdout sync: true, }) -export const defaultLoggerOptions = build(prettyOptions) +export const defaultLoggerOptions: PinoPretty.PrettyStream = build(prettyOptions) export const getLogger = (name = 'payload', logger?: Config['logger']): PayloadLogger => { if (!logger) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9cd8080f1..215e798d56 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -858,11 +858,11 @@ importers: specifier: 1.2.8 version: 1.2.8 pino: - specifier: 9.3.1 - version: 9.3.1 + specifier: 9.5.0 + version: 9.5.0 pino-pretty: - specifier: 11.2.1 - version: 11.2.1 + specifier: 11.3.0 + version: 11.3.0 pluralize: specifier: 8.0.0 version: 8.0.0 @@ -8293,18 +8293,18 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pino-abstract-transport@1.2.0: - resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} - pino-pretty@11.2.1: - resolution: {integrity: sha512-O05NuD9tkRasFRWVaF/uHLOvoRDFD7tb5VMertr78rbsYFjYp48Vg3477EshVAF5eZaEw+OpDl/tu+B0R5o+7g==} + pino-pretty@11.3.0: + resolution: {integrity: sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==} hasBin: true pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@9.3.1: - resolution: {integrity: sha512-afSfrq/hUiW/MFmQcLEwV9Zh8Ry6MrMTOyBU53o/fc0gEl+1OZ/Fks/xQCM2nOC0C/OfDtQMnT2d8c3kpcfSzA==} + pino@9.5.0: + resolution: {integrity: sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==} hasBin: true pirates@4.0.6: @@ -8420,8 +8420,8 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process-warning@3.0.0: - resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + process-warning@4.0.0: + resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} @@ -18387,12 +18387,11 @@ snapshots: pify@4.0.1: {} - pino-abstract-transport@1.2.0: + pino-abstract-transport@2.0.0: dependencies: - readable-stream: 4.5.2 split2: 4.2.0 - pino-pretty@11.2.1: + pino-pretty@11.3.0: dependencies: colorette: 2.0.20 dateformat: 4.6.3 @@ -18402,7 +18401,7 @@ snapshots: joycon: 3.1.1 minimist: 1.2.8 on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.2.0 + pino-abstract-transport: 2.0.0 pump: 3.0.0 readable-stream: 4.5.2 secure-json-parse: 2.7.0 @@ -18411,14 +18410,14 @@ snapshots: pino-std-serializers@7.0.0: {} - pino@9.3.1: + pino@9.5.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.2.0 + pino-abstract-transport: 2.0.0 pino-std-serializers: 7.0.0 - process-warning: 3.0.0 + process-warning: 4.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 @@ -18531,7 +18530,7 @@ snapshots: process-nextick-args@2.0.1: {} - process-warning@3.0.0: {} + process-warning@4.0.0: {} process@0.11.10: {} From 36acfee2889b6bcb08a1abee23a9ba3e2cf8ddf5 Mon Sep 17 00:00:00 2001 From: Because789 Date: Fri, 18 Oct 2024 09:47:31 +0200 Subject: [PATCH 083/110] docs: fix missing TextField import (#8688) Fixes a missing import in field prop example in docs/beta/admin/fields.mdx. --- docs/admin/fields.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/admin/fields.mdx b/docs/admin/fields.mdx index 11bef66b51..f13eb6c81a 100644 --- a/docs/admin/fields.mdx +++ b/docs/admin/fields.mdx @@ -217,6 +217,7 @@ Client Component: 'use client' import React from 'react' import type { TextFieldClientComponent } from 'payload' +import { TextField } from '@payloadcms/ui' export const MyTextField: TextFieldClientComponent = ({ field }) => { return From 197e3bc01079b1822231db03abae35b3ea2abc91 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Fri, 18 Oct 2024 10:47:47 +0300 Subject: [PATCH 084/110] docs: corrects old imports (#8769) 1 `import type { Field } from 'payload/types'` to `import type { Field } from 'payload'` 2 `import { buildConfig } from 'payload/config'` to `import { buildConfig } from 'payload'` 3 ``` import { SelectInput, useField } from 'payload/components/forms'; import { useAuth } from 'payload/components/utilities'; ``` to `import { SelectInput, useAuth, useField } from '@payloadcms/ui'` 4 uses `import type` for `import type { CollectionConfig } from 'payload'` --- docs/access-control/collections.mdx | 2 +- docs/access-control/fields.mdx | 2 +- docs/admin/collections.mdx | 8 ++++---- docs/admin/locked-documents.mdx | 2 +- docs/admin/metadata.mdx | 2 +- docs/authentication/custom-strategies.mdx | 2 +- docs/authentication/email.mdx | 12 ++++++------ docs/authentication/overview.mdx | 4 ++-- docs/configuration/collections.mdx | 2 +- docs/configuration/i18n.mdx | 2 +- docs/configuration/overview.mdx | 4 ++-- docs/fields/array.mdx | 6 +++--- docs/fields/blocks.mdx | 4 ++-- docs/fields/checkbox.mdx | 4 ++-- docs/fields/code.mdx | 6 +++--- docs/fields/collapsible.mdx | 6 +++--- docs/fields/date.mdx | 6 +++--- docs/fields/email.mdx | 6 +++--- docs/fields/group.mdx | 6 +++--- docs/fields/join.mdx | 2 +- docs/fields/json.mdx | 10 +++++----- docs/fields/number.mdx | 6 +++--- docs/fields/point.mdx | 4 ++-- docs/fields/radio.mdx | 6 +++--- docs/fields/relationship.mdx | 6 +++--- docs/fields/rich-text.mdx | 2 +- docs/fields/row.mdx | 4 ++-- docs/fields/select.mdx | 9 ++++----- docs/fields/tabs.mdx | 4 ++-- docs/fields/text.mdx | 6 +++--- docs/fields/textarea.mdx | 6 +++--- docs/fields/ui.mdx | 4 ++-- docs/fields/upload.mdx | 4 ++-- docs/plugins/nested-docs.mdx | 2 +- docs/rest-api/overview.mdx | 2 +- docs/rich-text/slate.mdx | 2 +- docs/upload/overview.mdx | 8 ++++---- 37 files changed, 86 insertions(+), 87 deletions(-) diff --git a/docs/access-control/collections.mdx b/docs/access-control/collections.mdx index 2901f6505e..a75ee45cb6 100644 --- a/docs/access-control/collections.mdx +++ b/docs/access-control/collections.mdx @@ -79,7 +79,7 @@ Returns a boolean which allows/denies access to the `create` request. To add create Access Control to a Collection, use the `create` property in the [Collection Config](../collections/overview): ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const CollectionWithCreateAccess: CollectionConfig = { // ... diff --git a/docs/access-control/fields.mdx b/docs/access-control/fields.mdx index 3cbe41e4fa..4f0e7c3454 100644 --- a/docs/access-control/fields.mdx +++ b/docs/access-control/fields.mdx @@ -33,7 +33,7 @@ Access Control is specific to the operation of the request. To add Access Control to a Field, use the `access` property in the [Field Config](../fields/overview): ```ts -import { CollectionConfig } from 'payload'; +import type { CollectionConfig } from 'payload'; export const Posts: CollectionConfig = { slug: 'posts', diff --git a/docs/admin/collections.mdx b/docs/admin/collections.mdx index 9675b53bfa..ffa8c7f764 100644 --- a/docs/admin/collections.mdx +++ b/docs/admin/collections.mdx @@ -11,7 +11,7 @@ The behavior of [Collections](../configuration/collections) within the [Admin Pa To configure Admin Options for Collections, use the `admin` property in your Collection Config: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const MyCollection: CollectionConfig = { // ... @@ -89,7 +89,7 @@ It is possible to display a Preview Button within the Edit View of the Admin Pan To configure the Preview Button, set the `admin.preview` property to a function in your [Collection Config](../configuration/collections): ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Posts: CollectionConfig = { // ... @@ -126,7 +126,7 @@ All Collections receive their own List View which displays a paginated list of d To configure pagination options, use the `admin.pagination` property in your [Collection Config](../configuration/collections): ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Posts: CollectionConfig = { // ... @@ -155,7 +155,7 @@ In the List View, there is a "search" box that allows you to quickly find a docu To define which fields should be searched, use the `admin.listSearchableFields` property in your [Collection Config](../configuration/collections): ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Posts: CollectionConfig = { // ... diff --git a/docs/admin/locked-documents.mdx b/docs/admin/locked-documents.mdx index 6076874941..cca39f892e 100644 --- a/docs/admin/locked-documents.mdx +++ b/docs/admin/locked-documents.mdx @@ -29,7 +29,7 @@ The lockDocuments property exists on both the Collection Config and the Global C Here’s an example configuration for document locking: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Posts: CollectionConfig = { slug: 'posts', diff --git a/docs/admin/metadata.mdx b/docs/admin/metadata.mdx index a91e2fc05b..798f5806c2 100644 --- a/docs/admin/metadata.mdx +++ b/docs/admin/metadata.mdx @@ -151,7 +151,7 @@ Collection Metadata is the metadata that is applied to all pages within any give To customize Collection Metadata, use the `admin.meta` key within your Collection Config: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const MyCollection: CollectionConfig = { // ... diff --git a/docs/authentication/custom-strategies.mdx b/docs/authentication/custom-strategies.mdx index dc7b2ef2c0..027080d8a0 100644 --- a/docs/authentication/custom-strategies.mdx +++ b/docs/authentication/custom-strategies.mdx @@ -38,7 +38,7 @@ At its core a strategy simply takes information from the incoming request and re Your `authenticate` method should return an object containing a Payload user document and any optional headers that you'd like Payload to set for you when we return a response. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Users: CollectionConfig = { slug: 'users', diff --git a/docs/authentication/email.mdx b/docs/authentication/email.mdx index dbf57263e2..7971f9cbb5 100644 --- a/docs/authentication/email.mdx +++ b/docs/authentication/email.mdx @@ -15,7 +15,7 @@ Email Verification forces users to prove they have access to the email address t To enable Email Verification, use the `auth.verify` property on your [Collection Config](../configuration/collections): ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Customers: CollectionConfig = { // ... @@ -42,7 +42,7 @@ The following options are available: Function that accepts one argument, containing `{ req, token, user }`, that allows for overriding the HTML within emails that are sent to users indicating how to validate their account. The function should return a string that supports HTML, which can optionally be a full HTML email. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Customers: CollectionConfig = { // ... @@ -74,7 +74,7 @@ export const Customers: CollectionConfig = { Similarly to the above `generateEmailHTML`, you can also customize the subject of the email. The function argument are the same but you can only return a string - not HTML. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Customers: CollectionConfig = { // ... @@ -95,7 +95,7 @@ export const Customers: CollectionConfig = { You can customize how the Forgot Password workflow operates with the following options on the `auth.forgotPassword` property: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Customers: CollectionConfig = { // ... @@ -119,7 +119,7 @@ The following options are available: This function allows for overriding the HTML within emails that are sent to users attempting to reset their password. The function should return a string that supports HTML, which can be a full HTML email. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Customers: CollectionConfig = { // ... @@ -179,7 +179,7 @@ The following arguments are passed to the `generateEmailHTML` function: Similarly to the above `generateEmailHTML`, you can also customize the subject of the email. The function argument are the same but you can only return a string - not HTML. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Customers: CollectionConfig = { // ... diff --git a/docs/authentication/overview.mdx b/docs/authentication/overview.mdx index 2f9dbb30ee..f29eb16de5 100644 --- a/docs/authentication/overview.mdx +++ b/docs/authentication/overview.mdx @@ -25,7 +25,7 @@ When Authentication is enabled on a [Collection](../configuration/collections), To enable Authentication on a Collection, use the `auth` property in the [Collection Config](../configuration/collection#auth): ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Users: CollectionConfig = { // ... @@ -48,7 +48,7 @@ Any [Collection](../configuration/collections) can opt-in to supporting Authenti To enable Authentication on a Collection, use the `auth` property in the [Collection Config](../configuration/collections): ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Admins: CollectionConfig = { // ... diff --git a/docs/configuration/collections.mdx b/docs/configuration/collections.mdx index e1180ff8b1..9c96785b3f 100644 --- a/docs/configuration/collections.mdx +++ b/docs/configuration/collections.mdx @@ -37,7 +37,7 @@ It's often best practice to write your Collections in separate files and then im Here is what a simple Collection Config might look like: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Posts: CollectionConfig = { slug: 'posts', diff --git a/docs/configuration/i18n.mdx b/docs/configuration/i18n.mdx index 321de8804f..85d41029df 100644 --- a/docs/configuration/i18n.mdx +++ b/docs/configuration/i18n.mdx @@ -117,7 +117,7 @@ While Payload's built-in features come fully translated, you may also want to tr To do this, provide the translations wherever applicable, keyed to the language code: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Articles: CollectionConfig = { slug: 'articles', diff --git a/docs/configuration/overview.mdx b/docs/configuration/overview.mdx index 031adfa843..1dff3e7116 100644 --- a/docs/configuration/overview.mdx +++ b/docs/configuration/overview.mdx @@ -216,7 +216,7 @@ Cross-origin resource sharing (CORS) can be configured with either a whitelist a Here's an example showing how to allow incoming requests from any domain: ```ts -import { buildConfig } from 'payload/config' +import { buildConfig } from 'payload' export default buildConfig({ // ... @@ -227,7 +227,7 @@ export default buildConfig({ Here's an example showing how to append a new header (`x-custom-header`) in `Access-Control-Allow-Headers`: ```ts -import { buildConfig } from 'payload/config' +import { buildConfig } from 'payload' export default buildConfig({ // ... diff --git a/docs/fields/array.mdx b/docs/fields/array.mdx index 4e46406bad..7e8473668e 100644 --- a/docs/fields/array.mdx +++ b/docs/fields/array.mdx @@ -24,7 +24,7 @@ Arrays are useful for many different types of content from simple to complex, su To create an Array Field, set the `type` to `array` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyArrayField: Field = { // ... @@ -69,7 +69,7 @@ _\* An asterisk denotes that a property is required._ To customize the appearance and behavior of the Array Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyArrayField: Field = { // ... @@ -92,7 +92,7 @@ The Array Field inherits all of the default options from the base [Field Admin C In this example, we have an Array Field called `slider` that contains a set of fields for a simple image slider. Each row in the array has a `title`, `image`, and `caption`. We also customize the row label to display the title if it exists, or a default label if it doesn't. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/blocks.mdx b/docs/fields/blocks.mdx index e7c10e7713..e4c5c514b6 100644 --- a/docs/fields/blocks.mdx +++ b/docs/fields/blocks.mdx @@ -24,7 +24,7 @@ Blocks are a great way to create a flexible content model that can be used to bu To add a Blocks Field, set the `type` to `blocks` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyBlocksField: Field = { // ... @@ -67,7 +67,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Blocks Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyBlocksField: Field = { // ... diff --git a/docs/fields/checkbox.mdx b/docs/fields/checkbox.mdx index 797395c159..d5cfdf9cc4 100644 --- a/docs/fields/checkbox.mdx +++ b/docs/fields/checkbox.mdx @@ -18,7 +18,7 @@ The Checkbox Field saves a boolean in the database. To add a Checkbox Field, set the `type` to `checkbox` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyCheckboxField: Field = { // ... @@ -53,7 +53,7 @@ _\* An asterisk denotes that a property is required._ Here is an example of a Checkbox Field in a Collection: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/code.mdx b/docs/fields/code.mdx index 16faa8fbd6..005a2457e5 100644 --- a/docs/fields/code.mdx +++ b/docs/fields/code.mdx @@ -19,7 +19,7 @@ The Code Field saves a string in the database, but provides the [Admin Panel](.. To add a Code Field, set the `type` to `code` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyBlocksField: Field = { // ... @@ -57,7 +57,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Code Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyCodeField: Field = { // ... @@ -79,7 +79,7 @@ The Code Field inherits all of the default options from the base [Field Admin Co `collections/ExampleCollection.ts ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/collapsible.mdx b/docs/fields/collapsible.mdx index 513f6b1c94..0c75ca295c 100644 --- a/docs/fields/collapsible.mdx +++ b/docs/fields/collapsible.mdx @@ -18,7 +18,7 @@ The Collapsible Field is presentational-only and only affects the Admin Panel. B To add a Collapsible Field, set the `type` to `collapsible` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyCollapsibleField: Field = { // ... @@ -47,7 +47,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Collapsible Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyCollapsibleField: Field = { // ... @@ -68,7 +68,7 @@ The Collapsible Field inherits all of the default options from the base [Field A `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/date.mdx b/docs/fields/date.mdx index abfd501953..42809b8eae 100644 --- a/docs/fields/date.mdx +++ b/docs/fields/date.mdx @@ -18,7 +18,7 @@ The Date Field saves a Date in the database and provides the [Admin Panel](../ad To add a Date Field, set the `type` to `date` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyDateField: Field = { // ... @@ -53,7 +53,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Date Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyDateField: Field = { // ... @@ -97,7 +97,7 @@ When only `pickerAppearance` is set, an equivalent format will be rendered in th `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/email.mdx b/docs/fields/email.mdx index 45547c3ebb..6f5c75a002 100644 --- a/docs/fields/email.mdx +++ b/docs/fields/email.mdx @@ -18,7 +18,7 @@ The Email Field enforces that the value provided is a valid email address. To create an Email Field, set the `type` to `email` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyEmailField: Field = { // ... @@ -54,7 +54,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Email Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyEmailField: Field = { // ... @@ -76,7 +76,7 @@ The Email Field inherits all of the default options from the base [Field Admin C `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/group.mdx b/docs/fields/group.mdx index 6a24eeccf7..c91dfe2e58 100644 --- a/docs/fields/group.mdx +++ b/docs/fields/group.mdx @@ -18,7 +18,7 @@ The Group Field allows [Fields](./overview) to be nested under a common property To add a Group Field, set the `type` to `group` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyGroupField: Field = { // ... @@ -58,7 +58,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Group Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyGroupField: Field = { // ... @@ -79,7 +79,7 @@ The Group Field inherits all of the default options from the base [Field Admin C `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/join.mdx b/docs/fields/join.mdx index 0e15477b72..8ee3eea79e 100644 --- a/docs/fields/join.mdx +++ b/docs/fields/join.mdx @@ -30,7 +30,7 @@ collection you are joining. This will reference the collection and path of the f To add a Relationship Field, set the `type` to `join` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyJoinField: Field = { // highlight-start diff --git a/docs/fields/json.mdx b/docs/fields/json.mdx index feefaaf525..dd6eec6576 100644 --- a/docs/fields/json.mdx +++ b/docs/fields/json.mdx @@ -19,7 +19,7 @@ The JSON Field saves actual JSON in the database, which differs from the Code fi To add a JSON Field, set the `type` to `json` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyJSONField: Field = { // ... @@ -56,7 +56,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the JSON Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyJSONField: Field = { // ... @@ -77,7 +77,7 @@ The JSON Field inherits all of the default options from the base [Field Admin Co `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -102,7 +102,7 @@ If you only provide a URL to a schema, Payload will fetch the desired schema if `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -135,7 +135,7 @@ export const ExampleCollection: CollectionConfig = { `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/number.mdx b/docs/fields/number.mdx index a2f7f9dd81..6a3c0bc548 100644 --- a/docs/fields/number.mdx +++ b/docs/fields/number.mdx @@ -18,7 +18,7 @@ The Number Field stores and validates numeric entry and supports additional nume To add a Number Field, set the `type` to `number` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyNumberField: Field = { // ... @@ -59,7 +59,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Number Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyNumberField: Field = { // ... @@ -82,7 +82,7 @@ The Number Field inherits all of the default options from the base [Field Admin `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/point.mdx b/docs/fields/point.mdx index fd7d1f7c39..49439b6acc 100644 --- a/docs/fields/point.mdx +++ b/docs/fields/point.mdx @@ -18,7 +18,7 @@ The Point Field saves a pair of coordinates in the database and assigns an index To add a Point Field, set the `type` to `point` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyPointField: Field = { // ... @@ -59,7 +59,7 @@ _\* An asterisk denotes that a property is required._ `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/radio.mdx b/docs/fields/radio.mdx index b524a3470d..ddfc1e90ca 100644 --- a/docs/fields/radio.mdx +++ b/docs/fields/radio.mdx @@ -18,7 +18,7 @@ The Radio Field allows for the selection of one value from a predefined set of p To add a Radio Field, set the `type` to `radio` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyRadioField: Field = { // ... @@ -69,7 +69,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Radio Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyRadioField: Field = { // ... @@ -90,7 +90,7 @@ The Radio Field inherits all of the default options from the base [Field Admin C `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/relationship.mdx b/docs/fields/relationship.mdx index 5dfbfd9a2e..c6fd2609ca 100644 --- a/docs/fields/relationship.mdx +++ b/docs/fields/relationship.mdx @@ -24,7 +24,7 @@ The Relationship field is used in a variety of ways, including: To add a Relationship Field, set the `type` to `relationship` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyRelationshipField: Field = { // ... @@ -74,7 +74,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Relationship Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyRelationshipField: Field = { // ... @@ -159,7 +159,7 @@ called with an argument object with the following properties: ## Example ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/rich-text.mdx b/docs/fields/rich-text.mdx index 5e93109a81..1c36ccadde 100644 --- a/docs/fields/rich-text.mdx +++ b/docs/fields/rich-text.mdx @@ -63,7 +63,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Rich Text Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyRichTextField: Field = { // ... diff --git a/docs/fields/row.mdx b/docs/fields/row.mdx index 125dd3ba39..ec067db8c4 100644 --- a/docs/fields/row.mdx +++ b/docs/fields/row.mdx @@ -18,7 +18,7 @@ The Row Field is presentational-only and only affects the [Admin Panel](../admin To add a Row Field, set the `type` to `row` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyRowField: Field = { // ... @@ -46,7 +46,7 @@ _\* An asterisk denotes that a property is required._ `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/select.mdx b/docs/fields/select.mdx index 5071a6f5b4..53288f96bb 100644 --- a/docs/fields/select.mdx +++ b/docs/fields/select.mdx @@ -18,7 +18,7 @@ The Select Field provides a dropdown-style interface for choosing options from a To add a Select Field, set the `type` to `select` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MySelectField: Field = { // ... @@ -71,7 +71,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Select Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MySelectField: Field = { // ... @@ -93,7 +93,7 @@ The Select Field inherits all of the default options from the base [Field Admin `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -156,8 +156,7 @@ You can import the existing Select component directly from Payload, then extend ```ts import * as React from 'react'; -import { SelectInput, useField } from 'payload/components/forms'; -import { useAuth } from 'payload/components/utilities'; +import { SelectInput, useAuth, useField } from '@payloadcms/ui'; type CustomSelectProps = { path: string; diff --git a/docs/fields/tabs.mdx b/docs/fields/tabs.mdx index 60932d80c2..58dff50d3f 100644 --- a/docs/fields/tabs.mdx +++ b/docs/fields/tabs.mdx @@ -18,7 +18,7 @@ The Tabs Field is presentational-only and only affects the [Admin Panel](../admi To add a Tabs Field, set the `type` to `tabs` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyTabsField: Field = { // ... @@ -59,7 +59,7 @@ _\* An asterisk denotes that a property is required._ `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/text.mdx b/docs/fields/text.mdx index ca0d214fee..d73e4f8a8e 100644 --- a/docs/fields/text.mdx +++ b/docs/fields/text.mdx @@ -18,7 +18,7 @@ The Text Field is one of the most commonly used fields. It saves a string to the To add a Text Field, set the `type` to `text` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyTextField: Field = { // ... @@ -59,7 +59,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Text Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyTextField: Field = { // ... @@ -82,7 +82,7 @@ The Text Field inherits all of the default options from the base [Field Admin Co `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/textarea.mdx b/docs/fields/textarea.mdx index f0af62a91b..ac6a23f19b 100644 --- a/docs/fields/textarea.mdx +++ b/docs/fields/textarea.mdx @@ -18,7 +18,7 @@ The Textarea Field is nearly identical to the [Text Field](./text) but it featur To add a Textarea Field, set the `type` to `textarea` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyTextareaField: Field = { // ... @@ -56,7 +56,7 @@ _\* An asterisk denotes that a property is required._ The customize the appearance and behavior of the Textarea Field in the [Admin Panel](../admin/overview), you can use the `admin` option: ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyTextareaField: Field = { // ... @@ -79,7 +79,7 @@ The Textarea Field inherits all of the default options from the base [Field Admi `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/ui.mdx b/docs/fields/ui.mdx index 776866297f..5f70b671d5 100644 --- a/docs/fields/ui.mdx +++ b/docs/fields/ui.mdx @@ -18,7 +18,7 @@ With the UI Field, you can: To add a UI Field, set the `type` to `ui` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyUIField: Field = { // ... @@ -44,7 +44,7 @@ _\* An asterisk denotes that a property is required._ `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/fields/upload.mdx b/docs/fields/upload.mdx index 57fa729268..d7db7ca27d 100644 --- a/docs/fields/upload.mdx +++ b/docs/fields/upload.mdx @@ -25,7 +25,7 @@ caption="Admin Panel screenshot of an Upload field" To create an Upload Field, set the `type` to `upload` in your [Field Config](./overview): ```ts -import type { Field } from 'payload/types' +import type { Field } from 'payload' export const MyUploadField: Field = { // ... @@ -73,7 +73,7 @@ _\* An asterisk denotes that a property is required._ `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', diff --git a/docs/plugins/nested-docs.mdx b/docs/plugins/nested-docs.mdx index d7deca10c7..b75375ac4a 100644 --- a/docs/plugins/nested-docs.mdx +++ b/docs/plugins/nested-docs.mdx @@ -177,7 +177,7 @@ You can also extend the built-in `parent` and `breadcrumbs` fields per collectio and `createBreadcrumbField` methods. They will merge your customizations overtop the plugin's base field configurations. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' import { createParentField } from '@payloadcms/plugin-nested-docs/fields' import { createBreadcrumbsField } from '@payloadcms/plugin-nested-docs/fields' diff --git a/docs/rest-api/overview.mdx b/docs/rest-api/overview.mdx index 916eded45e..a41f40deab 100644 --- a/docs/rest-api/overview.mdx +++ b/docs/rest-api/overview.mdx @@ -591,7 +591,7 @@ Each endpoint object needs to have: Example: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' // a collection of 'orders' with an additional route for tracking details, reachable at /api/orders/:id/tracking export const Orders: CollectionConfig = { diff --git a/docs/rich-text/slate.mdx b/docs/rich-text/slate.mdx index fb30e59bab..2d43322be0 100644 --- a/docs/rich-text/slate.mdx +++ b/docs/rich-text/slate.mdx @@ -34,7 +34,7 @@ export default buildConfig({ And here's an example for how to install the Slate editor on a field-by-field basis, while customizing its options: ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' import { slateEditor } from '@payloadcms/richtext-slate' export const Pages: CollectionConfig = { diff --git a/docs/upload/overview.mdx b/docs/upload/overview.mdx index 4ba818065b..f411026652 100644 --- a/docs/upload/overview.mdx +++ b/docs/upload/overview.mdx @@ -43,7 +43,7 @@ Every Payload Collection can opt-in to supporting Uploads by specifying the `upl ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Media: CollectionConfig = { slug: 'media', @@ -217,7 +217,7 @@ You can specify how Payload retrieves admin thumbnails for your upload-enabled C 1. `adminThumbnail` as a **string**, equal to one of your provided image size names. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Media: CollectionConfig = { slug: 'media', @@ -246,7 +246,7 @@ export const Media: CollectionConfig = { 2. `adminThumbnail` as a **function** that takes the document's data and sends back a full URL to load the thumbnail. ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Media: CollectionConfig = { slug: 'media', @@ -267,7 +267,7 @@ Some example values are: `image/*`, `audio/*`, `video/*`, `image/png`, `applicat **Example mimeTypes usage:** ```ts -import { CollectionConfig } from 'payload' +import type { CollectionConfig } from 'payload' export const Media: CollectionConfig = { slug: 'media', From ef8a5b1f3e94a4d12b96cee226ff0857cb33e887 Mon Sep 17 00:00:00 2001 From: Anders Semb Hermansen Date: Fri, 18 Oct 2024 18:04:37 +0200 Subject: [PATCH 085/110] perf: replace jsonwebtoken with jose (#8217) The jose package has 0 dependencies and is tree shakable ESM. So we get lower bundle size and get rid of 10 dependencies. --- packages/payload/package.json | 3 +- packages/payload/src/auth/jwt.ts | 21 +++++ packages/payload/src/auth/operations/login.ts | 11 +-- packages/payload/src/auth/operations/me.ts | 4 +- .../payload/src/auth/operations/refresh.ts | 10 +-- .../src/auth/operations/resetPassword.ts | 8 +- packages/payload/src/auth/strategies/jwt.ts | 6 +- pnpm-lock.yaml | 90 ++----------------- 8 files changed, 51 insertions(+), 102 deletions(-) create mode 100644 packages/payload/src/auth/jwt.ts diff --git a/packages/payload/package.json b/packages/payload/package.json index 9550566a60..b53b41448a 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -98,8 +98,8 @@ "get-tsconfig": "^4.7.2", "http-status": "1.6.2", "image-size": "^1.1.1", + "jose": "5.9.2", "json-schema-to-typescript": "15.0.1", - "jsonwebtoken": "9.0.2", "minimist": "1.2.8", "pino": "9.5.0", "pino-pretty": "11.3.0", @@ -114,7 +114,6 @@ "@hyrious/esbuild-plugin-commonjs": "^0.2.4", "@payloadcms/eslint-config": "workspace:*", "@types/json-schema": "7.0.15", - "@types/jsonwebtoken": "8.5.9", "@types/minimist": "1.2.2", "@types/nodemailer": "6.4.14", "@types/pluralize": "0.0.33", diff --git a/packages/payload/src/auth/jwt.ts b/packages/payload/src/auth/jwt.ts new file mode 100644 index 0000000000..e054849c42 --- /dev/null +++ b/packages/payload/src/auth/jwt.ts @@ -0,0 +1,21 @@ +import { SignJWT } from 'jose' + +export const jwtSign = async ({ + fieldsToSign, + secret, + tokenExpiration, +}: { + fieldsToSign: Record + secret: string + tokenExpiration: number +}) => { + const secretKey = new TextEncoder().encode(secret) + const issuedAt = Math.floor(Date.now() / 1000) + const exp = issuedAt + tokenExpiration + const token = await new SignJWT(fieldsToSign) + .setProtectedHeader({ alg: 'HS256', typ: 'JWT' }) + .setIssuedAt(issuedAt) + .setExpirationTime(exp) + .sign(secretKey) + return { exp, token } +} diff --git a/packages/payload/src/auth/operations/login.ts b/packages/payload/src/auth/operations/login.ts index cab9f68c7f..acfa78833f 100644 --- a/packages/payload/src/auth/operations/login.ts +++ b/packages/payload/src/auth/operations/login.ts @@ -1,5 +1,3 @@ -import jwt from 'jsonwebtoken' - import type { AuthOperationsFromCollectionSlug, Collection, @@ -16,6 +14,7 @@ import { killTransaction } from '../../utilities/killTransaction.js' import sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js' import { getFieldsToSign } from '../getFieldsToSign.js' import isLocked from '../isLocked.js' +import { jwtSign } from '../jwt.js' import { authenticateLocalStrategy } from '../strategies/local/authenticate.js' import { incrementLoginAttempts } from '../strategies/local/incrementLoginAttempts.js' import { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js' @@ -234,8 +233,10 @@ export const loginOperation = async ( })) || user }, Promise.resolve()) - const token = jwt.sign(fieldsToSign, secret, { - expiresIn: collectionConfig.auth.tokenExpiration, + const { exp, token } = await jwtSign({ + fieldsToSign, + secret, + tokenExpiration: collectionConfig.auth.tokenExpiration, }) req.user = user @@ -308,7 +309,7 @@ export const loginOperation = async ( }, Promise.resolve()) let result: { user: DataFromCollectionSlug } & Result = { - exp: (jwt.decode(token) as jwt.JwtPayload).exp, + exp, token, user, } diff --git a/packages/payload/src/auth/operations/me.ts b/packages/payload/src/auth/operations/me.ts index 4250066133..502e6a863f 100644 --- a/packages/payload/src/auth/operations/me.ts +++ b/packages/payload/src/auth/operations/me.ts @@ -1,4 +1,4 @@ -import jwt from 'jsonwebtoken' +import { decodeJwt } from 'jose' import type { Collection } from '../../collections/config/types.js' import type { PayloadRequest } from '../../types/index.js' @@ -70,7 +70,7 @@ export const meOperation = async (args: Arguments): Promise = result.user = user if (currentToken) { - const decoded = jwt.decode(currentToken) as jwt.JwtPayload + const decoded = decodeJwt(currentToken) if (decoded) { result.exp = decoded.exp } diff --git a/packages/payload/src/auth/operations/refresh.ts b/packages/payload/src/auth/operations/refresh.ts index 9457866457..e3796abf53 100644 --- a/packages/payload/src/auth/operations/refresh.ts +++ b/packages/payload/src/auth/operations/refresh.ts @@ -1,4 +1,3 @@ -import jwt from 'jsonwebtoken' import url from 'url' import type { BeforeOperationHook, Collection } from '../../collections/config/types.js' @@ -10,6 +9,7 @@ import { commitTransaction } from '../../utilities/commitTransaction.js' import { initTransaction } from '../../utilities/initTransaction.js' import { killTransaction } from '../../utilities/killTransaction.js' import { getFieldsToSign } from '../getFieldsToSign.js' +import { jwtSign } from '../jwt.js' export type Result = { exp: number @@ -102,12 +102,12 @@ export const refreshOperation = async (incomingArgs: Arguments): Promise user: args?.req?.user, }) - const refreshedToken = jwt.sign(fieldsToSign, secret, { - expiresIn: collectionConfig.auth.tokenExpiration, + const { exp, token: refreshedToken } = await jwtSign({ + fieldsToSign, + secret, + tokenExpiration: collectionConfig.auth.tokenExpiration, }) - const exp = (jwt.decode(refreshedToken) as Record).exp as number - result = { exp, refreshedToken, diff --git a/packages/payload/src/auth/operations/resetPassword.ts b/packages/payload/src/auth/operations/resetPassword.ts index 4fb114ebed..8bf59f829f 100644 --- a/packages/payload/src/auth/operations/resetPassword.ts +++ b/packages/payload/src/auth/operations/resetPassword.ts @@ -1,5 +1,4 @@ import httpStatus from 'http-status' -import jwt from 'jsonwebtoken' import type { Collection } from '../../collections/config/types.js' import type { PayloadRequest } from '../../types/index.js' @@ -9,6 +8,7 @@ import { commitTransaction } from '../../utilities/commitTransaction.js' import { initTransaction } from '../../utilities/initTransaction.js' import { killTransaction } from '../../utilities/killTransaction.js' import { getFieldsToSign } from '../getFieldsToSign.js' +import { jwtSign } from '../jwt.js' import { authenticateLocalStrategy } from '../strategies/local/authenticate.js' import { generatePasswordSaltHash } from '../strategies/local/generatePasswordSaltHash.js' @@ -118,8 +118,10 @@ export const resetPasswordOperation = async (args: Arguments): Promise = user, }) - const token = jwt.sign(fieldsToSign, secret, { - expiresIn: collectionConfig.auth.tokenExpiration, + const { token } = await jwtSign({ + fieldsToSign, + secret, + tokenExpiration: collectionConfig.auth.tokenExpiration, }) const fullUser = await payload.findByID({ diff --git a/packages/payload/src/auth/strategies/jwt.ts b/packages/payload/src/auth/strategies/jwt.ts index c5ce2e3ba8..00f4cbc10d 100644 --- a/packages/payload/src/auth/strategies/jwt.ts +++ b/packages/payload/src/auth/strategies/jwt.ts @@ -1,4 +1,4 @@ -import jwt from 'jsonwebtoken' +import { jwtVerify } from 'jose' import type { Payload, Where } from '../../types/index.js' import type { AuthStrategyFunction, User } from '../index.js' @@ -81,8 +81,8 @@ export const JWTAuthentication: AuthStrategyFunction = async ({ return { user: null } } - const decodedPayload = jwt.verify(token, payload.secret) as jwt.JwtPayload & JWTToken - + const secretKey = new TextEncoder().encode(payload.secret) + const { payload: decodedPayload } = await jwtVerify(token, secretKey) const collection = payload.collections[decodedPayload.collection] const user = await payload.findByID({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215e798d56..309674ec4a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -848,12 +848,12 @@ importers: image-size: specifier: ^1.1.1 version: 1.1.1 + jose: + specifier: 5.9.2 + version: 5.9.2 json-schema-to-typescript: specifier: 15.0.1 version: 15.0.1 - jsonwebtoken: - specifier: 9.0.2 - version: 9.0.2 minimist: specifier: 1.2.8 version: 1.2.8 @@ -891,9 +891,6 @@ importers: '@types/json-schema': specifier: 7.0.15 version: 7.0.15 - '@types/jsonwebtoken': - specifier: 8.5.9 - version: 8.5.9 '@types/minimist': specifier: 1.2.2 version: 1.2.2 @@ -4704,9 +4701,6 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - '@types/jsonwebtoken@8.5.9': - resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} - '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} @@ -7396,6 +7390,9 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true + jose@5.9.2: + resolution: {integrity: sha512-ILI2xx/I57b20sd7rHZvgiiQrmp2mcotwsAH+5ajbpFQbrYVQdNHYlQhoA5cFb78CgtBOxtC05TeA+mcgkuCqQ==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -7485,23 +7482,13 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} - jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} - jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - jwa@2.0.0: resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - jws@4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} @@ -7597,33 +7584,12 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - - lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - - lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - - lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -14051,10 +14017,6 @@ snapshots: dependencies: '@types/node': 22.5.4 - '@types/jsonwebtoken@8.5.9': - dependencies: - '@types/node': 22.5.4 - '@types/keyv@3.1.4': dependencies: '@types/node': 22.5.4 @@ -17411,6 +17373,8 @@ snapshots: jiti@1.21.6: {} + jose@5.9.2: {} + joycon@3.1.1: {} js-base64@3.7.7: {} @@ -17514,19 +17478,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonwebtoken@9.0.2: - dependencies: - jws: 3.2.2 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 7.6.3 - jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -17534,23 +17485,12 @@ snapshots: object.assign: 4.1.5 object.values: 1.2.0 - jwa@1.4.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - jwa@2.0.0: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.2: - dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 - jws@4.0.0: dependencies: jwa: 2.0.0 @@ -17656,24 +17596,10 @@ snapshots: lodash.get@4.4.2: {} - lodash.includes@4.3.0: {} - - lodash.isboolean@3.0.3: {} - - lodash.isinteger@4.0.4: {} - - lodash.isnumber@3.0.3: {} - - lodash.isplainobject@4.0.6: {} - - lodash.isstring@4.0.1: {} - lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} - lodash.once@4.1.1: {} - lodash@4.17.21: {} log-update@6.1.0: From fe25b54fffa523e2be0bee9789f64f59645c74e3 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Mon, 21 Oct 2024 15:51:26 +0300 Subject: [PATCH 086/110] fix(ui): unique ids for nested rows on row duplicate to prevent errors with postgres (#8790) Fixes https://github.com/payloadcms/payload/issues/8784 This works for any deep level, both arrays and blocks. --- packages/ui/src/forms/Form/fieldReducer.ts | 9 +++++++++ test/fields/collections/Blocks/e2e.spec.ts | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/packages/ui/src/forms/Form/fieldReducer.ts b/packages/ui/src/forms/Form/fieldReducer.ts index 158fa7dc08..b7164f7627 100644 --- a/packages/ui/src/forms/Form/fieldReducer.ts +++ b/packages/ui/src/forms/Form/fieldReducer.ts @@ -263,6 +263,15 @@ export function fieldReducer(state: FormState, action: FieldAction): FormState { duplicateRowState.id.initialValue = new ObjectId().toHexString() } + for (const key of Object.keys(duplicateRowState).filter((key) => key.endsWith('.id'))) { + const idState = duplicateRowState[key] + + if (idState && typeof idState.value === 'string' && ObjectId.isValid(idState.value)) { + duplicateRowState[key].value = new ObjectId().toHexString() + duplicateRowState[key].initialValue = new ObjectId().toHexString() + } + } + // If there are subfields if (Object.keys(duplicateRowState).length > 0) { // Add new object containing subfield names to unflattenedRows array diff --git a/test/fields/collections/Blocks/e2e.spec.ts b/test/fields/collections/Blocks/e2e.spec.ts index db9e356c09..afb8b9b4a9 100644 --- a/test/fields/collections/Blocks/e2e.spec.ts +++ b/test/fields/collections/Blocks/e2e.spec.ts @@ -130,6 +130,24 @@ describe('Block fields', () => { expect(await blocks.count()).toEqual(4) }) + test('should save when duplicating subblocks', async () => { + await page.goto(url.create) + const subblocksRow = page.locator('#field-blocks #blocks-row-2') + const rowActions = subblocksRow.locator('.collapsible__actions').first() + await expect(rowActions).toBeVisible() + + await rowActions.locator('.array-actions__button').click() + const duplicateButton = rowActions.locator('.array-actions__action.array-actions__duplicate') + await expect(duplicateButton).toBeVisible() + await duplicateButton.click() + + const blocks = page.locator('#field-blocks > .blocks-field__rows > div') + expect(await blocks.count()).toEqual(4) + + await page.click('#action-save') + await expect(page.locator('.payload-toast-container')).toContainText('successfully') + }) + test('should use i18n block labels', async () => { await page.goto(url.create) await expect(page.locator('#field-i18nBlocks .blocks-field__header')).toContainText('Block en') From 2908c9added26e0996cdac9f80500137c6100c52 Mon Sep 17 00:00:00 2001 From: Patrik Date: Mon, 21 Oct 2024 16:18:34 -0400 Subject: [PATCH 087/110] fix(next, ui): ensures `selectAll` in the list view ignores locked documents (#8813) Fixes #8783 --- .../src/routes/rest/collections/delete.ts | 4 +- .../src/routes/rest/collections/deleteByID.ts | 2 + .../src/routes/rest/collections/update.ts | 4 +- .../src/routes/rest/collections/updateByID.ts | 2 + .../next/src/views/Edit/Default/index.tsx | 2 +- packages/ui/src/elements/DeleteMany/index.tsx | 24 +++- .../ui/src/elements/PublishMany/index.tsx | 24 +++- .../ui/src/elements/UnpublishMany/index.tsx | 24 +++- packages/ui/src/providers/Selection/index.tsx | 6 +- test/locked-documents/e2e.spec.ts | 118 +++++++++++++++++- 10 files changed, 189 insertions(+), 21 deletions(-) diff --git a/packages/next/src/routes/rest/collections/delete.ts b/packages/next/src/routes/rest/collections/delete.ts index 2241529cee..c005019fa5 100644 --- a/packages/next/src/routes/rest/collections/delete.ts +++ b/packages/next/src/routes/rest/collections/delete.ts @@ -10,14 +10,16 @@ import type { CollectionRouteHandler } from '../types.js' import { headersWithCors } from '../../../utilities/headersWithCors.js' export const deleteDoc: CollectionRouteHandler = async ({ collection, req }) => { - const { depth, where } = req.query as { + const { depth, overrideLock, where } = req.query as { depth?: string + overrideLock?: string where?: Where } const result = await deleteOperation({ collection, depth: isNumber(depth) ? Number(depth) : undefined, + overrideLock: Boolean(overrideLock === 'true'), req, where, }) diff --git a/packages/next/src/routes/rest/collections/deleteByID.ts b/packages/next/src/routes/rest/collections/deleteByID.ts index 572bb2c42e..2aa1508934 100644 --- a/packages/next/src/routes/rest/collections/deleteByID.ts +++ b/packages/next/src/routes/rest/collections/deleteByID.ts @@ -14,6 +14,7 @@ export const deleteByID: CollectionRouteHandlerWithID = async ({ }) => { const { searchParams } = req const depth = searchParams.get('depth') + const overrideLock = searchParams.get('overrideLock') const id = sanitizeCollectionID({ id: incomingID, @@ -25,6 +26,7 @@ export const deleteByID: CollectionRouteHandlerWithID = async ({ id, collection, depth: isNumber(depth) ? depth : undefined, + overrideLock: Boolean(overrideLock === 'true'), req, }) diff --git a/packages/next/src/routes/rest/collections/update.ts b/packages/next/src/routes/rest/collections/update.ts index 3edecc1c70..1ebc070051 100644 --- a/packages/next/src/routes/rest/collections/update.ts +++ b/packages/next/src/routes/rest/collections/update.ts @@ -10,10 +10,11 @@ import type { CollectionRouteHandler } from '../types.js' import { headersWithCors } from '../../../utilities/headersWithCors.js' export const update: CollectionRouteHandler = async ({ collection, req }) => { - const { depth, draft, limit, where } = req.query as { + const { depth, draft, limit, overrideLock, where } = req.query as { depth?: string draft?: string limit?: string + overrideLock?: string where?: Where } @@ -23,6 +24,7 @@ export const update: CollectionRouteHandler = async ({ collection, req }) => { depth: isNumber(depth) ? Number(depth) : undefined, draft: draft === 'true', limit: isNumber(limit) ? Number(limit) : undefined, + overrideLock: Boolean(overrideLock === 'true'), req, where, }) diff --git a/packages/next/src/routes/rest/collections/updateByID.ts b/packages/next/src/routes/rest/collections/updateByID.ts index ca64dfb479..cf7ca62597 100644 --- a/packages/next/src/routes/rest/collections/updateByID.ts +++ b/packages/next/src/routes/rest/collections/updateByID.ts @@ -16,6 +16,7 @@ export const updateByID: CollectionRouteHandlerWithID = async ({ const depth = searchParams.get('depth') const autosave = searchParams.get('autosave') === 'true' const draft = searchParams.get('draft') === 'true' + const overrideLock = searchParams.get('overrideLock') const publishSpecificLocale = req.query.publishSpecificLocale as string | undefined const id = sanitizeCollectionID({ @@ -31,6 +32,7 @@ export const updateByID: CollectionRouteHandlerWithID = async ({ data: req.data, depth: isNumber(depth) ? Number(depth) : undefined, draft, + overrideLock: Boolean(overrideLock === 'true'), publishSpecificLocale, req, }) diff --git a/packages/next/src/views/Edit/Default/index.tsx b/packages/next/src/views/Edit/Default/index.tsx index 17830b8c6f..1d4cf22838 100644 --- a/packages/next/src/views/Edit/Default/index.tsx +++ b/packages/next/src/views/Edit/Default/index.tsx @@ -343,7 +343,7 @@ export const DefaultEditView: React.FC = () => { const shouldShowDocumentLockedModal = documentIsLocked && currentEditor && - currentEditor.id !== user.id && + currentEditor.id !== user?.id && !isReadOnlyForIncomingUser && !showTakeOverModal && !documentLockStateRef.current?.hasShownLockedModal diff --git a/packages/ui/src/elements/DeleteMany/index.tsx b/packages/ui/src/elements/DeleteMany/index.tsx index 3883674e51..188789d354 100644 --- a/packages/ui/src/elements/DeleteMany/index.tsx +++ b/packages/ui/src/elements/DeleteMany/index.tsx @@ -26,7 +26,7 @@ export type Props = { } export const DeleteMany: React.FC = (props) => { - const { collection: { slug, labels: { plural } } = {} } = props + const { collection: { slug, labels: { plural, singular } } = {} } = props const { permissions } = useAuth() const { @@ -65,8 +65,22 @@ export const DeleteMany: React.FC = (props) => { try { const json = await res.json() toggleModal(modalSlug) - if (res.status < 400) { - toast.success(json.message || t('general:deletedSuccessfully')) + + const deletedDocs = json?.docs.length || 0 + const successLabel = deletedDocs > 1 ? plural : singular + + if (res.status < 400 || deletedDocs > 0) { + toast.success( + t('general:deletedCountSuccessfully', { + count: deletedDocs, + label: getTranslation(successLabel, i18n), + }), + ) + if (json?.errors.length > 0) { + toast.error(json.message, { + description: json.errors.map((error) => error.message).join('\n'), + }) + } toggleAll() router.replace( stringifyParams({ @@ -96,11 +110,13 @@ export const DeleteMany: React.FC = (props) => { addDefaultError, api, getQueryParams, - i18n.language, + i18n, modalSlug, + plural, router, selectAll, serverURL, + singular, slug, stringifyParams, t, diff --git a/packages/ui/src/elements/PublishMany/index.tsx b/packages/ui/src/elements/PublishMany/index.tsx index e3e7daaa94..7e90e605d7 100644 --- a/packages/ui/src/elements/PublishMany/index.tsx +++ b/packages/ui/src/elements/PublishMany/index.tsx @@ -27,7 +27,7 @@ export type PublishManyProps = { export const PublishMany: React.FC = (props) => { const { clearRouteCache } = useRouteCache() - const { collection: { slug, labels: { plural }, versions } = {} } = props + const { collection: { slug, labels: { plural, singular }, versions } = {} } = props const { config: { @@ -71,8 +71,22 @@ export const PublishMany: React.FC = (props) => { try { const json = await res.json() toggleModal(modalSlug) - if (res.status < 400) { - toast.success(t('general:updatedSuccessfully')) + + const deletedDocs = json?.docs.length || 0 + const successLabel = deletedDocs > 1 ? plural : singular + + if (res.status < 400 || deletedDocs > 0) { + toast.success( + t('general:updatedCountSuccessfully', { + count: deletedDocs, + label: getTranslation(successLabel, i18n), + }), + ) + if (json?.errors.length > 0) { + toast.error(json.message, { + description: json.errors.map((error) => error.message).join('\n'), + }) + } router.replace( stringifyParams({ params: { @@ -99,10 +113,12 @@ export const PublishMany: React.FC = (props) => { addDefaultError, api, getQueryParams, - i18n.language, + i18n, modalSlug, + plural, selectAll, serverURL, + singular, slug, t, toggleModal, diff --git a/packages/ui/src/elements/UnpublishMany/index.tsx b/packages/ui/src/elements/UnpublishMany/index.tsx index 2d8fba666d..4bfc0a237b 100644 --- a/packages/ui/src/elements/UnpublishMany/index.tsx +++ b/packages/ui/src/elements/UnpublishMany/index.tsx @@ -26,7 +26,7 @@ export type UnpublishManyProps = { } export const UnpublishMany: React.FC = (props) => { - const { collection: { slug, labels: { plural }, versions } = {} } = props + const { collection: { slug, labels: { plural, singular }, versions } = {} } = props const { config: { @@ -69,8 +69,22 @@ export const UnpublishMany: React.FC = (props) => { try { const json = await res.json() toggleModal(modalSlug) - if (res.status < 400) { - toast.success(t('general:updatedSuccessfully')) + + const deletedDocs = json?.docs.length || 0 + const successLabel = deletedDocs > 1 ? plural : singular + + if (res.status < 400 || deletedDocs > 0) { + toast.success( + t('general:updatedCountSuccessfully', { + count: deletedDocs, + label: getTranslation(successLabel, i18n), + }), + ) + if (json?.errors.length > 0) { + toast.error(json.message, { + description: json.errors.map((error) => error.message).join('\n'), + }) + } router.replace( stringifyParams({ params: { @@ -96,10 +110,12 @@ export const UnpublishMany: React.FC = (props) => { addDefaultError, api, getQueryParams, - i18n.language, + i18n, modalSlug, + plural, selectAll, serverURL, + singular, slug, t, toggleModal, diff --git a/packages/ui/src/providers/Selection/index.tsx b/packages/ui/src/providers/Selection/index.tsx index c29a3d6562..4eccf3591e 100644 --- a/packages/ui/src/providers/Selection/index.tsx +++ b/packages/ui/src/providers/Selection/index.tsx @@ -104,7 +104,7 @@ export const SelectionProvider: React.FC = ({ children, docs = [], totalD ) const getQueryParams = useCallback( - (additionalParams?: Where): string => { + (additionalWhereParams?: Where): string => { let where: Where if (selectAll === SelectAllStatus.AllAvailable) { const params = searchParams?.where as Where @@ -126,9 +126,9 @@ export const SelectionProvider: React.FC = ({ children, docs = [], totalD }, } } - if (additionalParams) { + if (additionalWhereParams) { where = { - and: [{ ...additionalParams }, where], + and: [{ ...additionalWhereParams }, where], } } return qs.stringify( diff --git a/test/locked-documents/e2e.spec.ts b/test/locked-documents/e2e.spec.ts index 0ca07c04cb..52fa14b8ba 100644 --- a/test/locked-documents/e2e.spec.ts +++ b/test/locked-documents/e2e.spec.ts @@ -3,16 +3,23 @@ import type { TypeWithID } from 'payload' import { expect, test } from '@playwright/test' import * as path from 'path' +import { mapAsync } from 'payload' import { wait } from 'payload/shared' import { fileURLToPath } from 'url' import type { PayloadTestSDK } from '../helpers/sdk/index.js' import type { Config } from './payload-types.js' -import { ensureCompilationIsDone, initPageConsoleErrorCatch, saveDocAndAssert } from '../helpers.js' +import { + ensureCompilationIsDone, + exactText, + initPageConsoleErrorCatch, + saveDocAndAssert, +} from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' -import { TEST_TIMEOUT } from '../playwright.config.js' +import { POLL_TOPASS_TIMEOUT, TEST_TIMEOUT } from '../playwright.config.js' +import { postsSlug } from './collections/Posts/index.js' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) @@ -160,7 +167,7 @@ describe('locked documents', () => { await expect(page.locator('.table .row-1 .checkbox-input__input')).toBeVisible() }) - test('should only allow bulk delete on unlocked documents', async () => { + test('should only allow bulk delete on unlocked documents on current page', async () => { await page.goto(postsUrl.list) await page.locator('input#select-all').check() await page.locator('.delete-documents__toggle').click() @@ -168,6 +175,107 @@ describe('locked documents', () => { 'You are about to delete 2 Posts', ) }) + + test('should only allow bulk delete on unlocked documents on all pages', async () => { + await mapAsync([...Array(9)], async () => { + await createPostDoc({ + text: 'Ready for delete', + }) + }) + + await page.reload() + + await page.goto(postsUrl.list) + await page.waitForURL(new RegExp(postsUrl.list)) + + await page.locator('input#select-all').check() + await page.locator('.list-selection .list-selection__button').click() + await page.locator('.delete-documents__toggle').click() + await page.locator('#confirm-delete').click() + await expect(page.locator('.cell-_select')).toHaveCount(1) + }) + + test('should only allow bulk publish on unlocked documents on all pages', async () => { + await mapAsync([...Array(10)], async () => { + await createPostDoc({ + text: 'Ready for delete', + }) + }) + + await page.reload() + + await page.goto(postsUrl.list) + await page.waitForURL(new RegExp(postsUrl.list)) + + await page.locator('input#select-all').check() + await page.locator('.list-selection .list-selection__button').click() + await page.locator('.publish-many__toggle').click() + await page.locator('#confirm-publish').click() + + const paginator = page.locator('.paginator') + + await paginator.locator('button').nth(1).click() + await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).toContain('page=2') + await expect(page.locator('.row-1 .cell-_status')).toContainText('Draft') + }) + + test('should only allow bulk unpublish on unlocked documents on all pages', async () => { + await page.goto(postsUrl.list) + await page.waitForURL(new RegExp(postsUrl.list)) + + await page.locator('input#select-all').check() + await page.locator('.list-selection .list-selection__button').click() + await page.locator('.unpublish-many__toggle').click() + await page.locator('#confirm-unpublish').click() + await expect(page.locator('.payload-toast-container .toast-success')).toHaveText( + 'Updated 10 Posts successfully.', + ) + }) + + test('should only allow bulk edit on unlocked documents on all pages', async () => { + await page.goto(postsUrl.list) + await page.waitForURL(new RegExp(postsUrl.list)) + + const bulkText = 'Bulk update title' + + await page.locator('input#select-all').check() + await page.locator('.list-selection .list-selection__button').click() + await page.locator('.edit-many__toggle').click() + + await page.locator('.field-select .rs__control').click() + + const textOption = page.locator('.field-select .rs__option', { + hasText: exactText('Text'), + }) + + await expect(textOption).toBeVisible() + + await textOption.click() + + const textInput = page.locator('#field-text') + + await expect(textInput).toBeVisible() + + await textInput.fill(bulkText) + + await page.locator('.form-submit button[type="submit"].edit-many__publish').click() + await expect(page.locator('.payload-toast-container .toast-error')).toContainText( + 'Unable to update 1 out of 11 Posts.', + ) + + await page.locator('.edit-many__header__close').click() + + await page.reload() + + await expect(page.locator('.row-1 .cell-text')).toContainText(bulkText) + await expect(page.locator('.row-2 .cell-text')).toContainText(bulkText) + + const paginator = page.locator('.paginator') + + await paginator.locator('button').nth(1).click() + await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).toContain('page=2') + await expect(page.locator('.row-1 .cell-text')).toContainText('hello') + }) }) describe('document locking / unlocking - one user', () => { @@ -899,3 +1007,7 @@ async function createPageDoc(data: any): Promise & TypeW data, }) as unknown as Promise & TypeWithID> } + +async function deleteAllPosts() { + await payload.delete({ collection: postsSlug, where: { id: { exists: true } } }) +} From 9fb86655a96ec4a53cb0a0b6edcf2aef4d897bd8 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Mon, 21 Oct 2024 21:39:37 -0400 Subject: [PATCH 088/110] fix: drizzle init args (#8818) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adjust drizzle init for changes in drizzle 0.35.0 https://github.com/drizzle-team/drizzle-orm/releases/tag/0.35.0 The pool/connection should now be passed as the `client` arg when initializing drizzle. ```ts this.drizzle = drizzle({ client: this.poolOptions ? new VercelPool(this.poolOptions) : sql, logger, schema: this.schema, }) ``` This was causing an issue where running `payload migrate` on Vercel was causing drizzle to attempt to `127.0.0.1:5432` instead of the specified environment variable in the adapter 🤔 --- packages/db-postgres/src/connect.ts | 2 +- packages/db-vercel-postgres/src/connect.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/db-postgres/src/connect.ts b/packages/db-postgres/src/connect.ts index 37c077c0f3..032ba7ba91 100644 --- a/packages/db-postgres/src/connect.ts +++ b/packages/db-postgres/src/connect.ts @@ -66,7 +66,7 @@ export const connect: Connect = async function connect( } const logger = this.logger || false - this.drizzle = drizzle(this.pool, { logger, schema: this.schema }) + this.drizzle = drizzle({ client: this.pool, logger, schema: this.schema }) if (!hotReload) { if (process.env.PAYLOAD_DROP_DATABASE === 'true') { diff --git a/packages/db-vercel-postgres/src/connect.ts b/packages/db-vercel-postgres/src/connect.ts index 1da8676f9a..1039db72cf 100644 --- a/packages/db-vercel-postgres/src/connect.ts +++ b/packages/db-vercel-postgres/src/connect.ts @@ -26,7 +26,8 @@ export const connect: Connect = async function connect( const logger = this.logger || false // Passed the poolOptions if provided, // else have vercel/postgres detect the connection string from the environment - this.drizzle = drizzle(this.poolOptions ? new VercelPool(this.poolOptions) : sql, { + this.drizzle = drizzle({ + client: this.poolOptions ? new VercelPool(this.poolOptions) : sql, logger, schema: this.schema, }) From 74266bdd9a5d975fca35f81c87031bce57a44445 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Mon, 21 Oct 2024 23:12:22 -0400 Subject: [PATCH 089/110] feat!: bump next.js to 15.0.0 (#8825) Bump Next.js to 15.0.0 --- package.json | 12 +- packages/live-preview-react/package.json | 4 +- packages/next/package.json | 4 +- packages/next/src/layouts/Root/index.tsx | 6 +- packages/payload/package.json | 2 +- packages/plugin-form-builder/package.json | 4 +- packages/plugin-search/package.json | 4 +- packages/plugin-sentry/package.json | 4 +- packages/plugin-seo/package.json | 4 +- packages/richtext-lexical/package.json | 4 +- packages/richtext-slate/package.json | 2 +- packages/ui/package.json | 6 +- pnpm-lock.yaml | 767 ++++++++++---------- templates/_template/package.json | 8 +- templates/blank/package.json | 8 +- templates/vercel-postgres/package.json | 8 +- templates/website/package.json | 8 +- templates/with-payload-cloud/package.json | 8 +- templates/with-postgres/package.json | 8 +- templates/with-vercel-mongodb/package.json | 8 +- templates/with-vercel-postgres/package.json | 8 +- test/package.json | 6 +- 22 files changed, 444 insertions(+), 449 deletions(-) diff --git a/package.json b/package.json index c3cc66b937..837552f135 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "devDependencies": { "@jest/globals": "29.7.0", "@libsql/client": "0.14.0", - "@next/bundle-analyzer": "15.0.0-canary.173", + "@next/bundle-analyzer": "15.0.0", "@payloadcms/db-postgres": "workspace:*", "@payloadcms/eslint-config": "workspace:*", "@payloadcms/eslint-plugin": "workspace:*", @@ -145,15 +145,15 @@ "lint-staged": "15.2.7", "minimist": "1.2.8", "mongodb-memory-server": "^9.0", - "next": "15.0.0-canary.173", + "next": "15.0.0", "open": "^10.1.0", "p-limit": "^5.0.0", "playwright": "1.48.1", "playwright-core": "1.48.1", "prettier": "3.3.3", "prompts": "2.4.2", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "rimraf": "3.0.2", "semver": "^7.5.4", "sharp": "0.32.6", @@ -167,8 +167,8 @@ "typescript": "5.6.3" }, "peerDependencies": { - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", - "react-dom": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "packageManager": "pnpm@9.7.1", "engines": { diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index a2c43b6e14..3061def339 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -43,8 +43,8 @@ "payload": "workspace:*" }, "peerDependencies": { - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", - "react-dom": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "publishConfig": { "exports": { diff --git a/packages/next/package.json b/packages/next/package.json index ec62f761a3..bb5330234c 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -96,7 +96,7 @@ "@babel/preset-env": "^7.24.5", "@babel/preset-react": "^7.24.1", "@babel/preset-typescript": "^7.24.1", - "@next/eslint-plugin-next": "15.0.0-canary.173", + "@next/eslint-plugin-next": "15.0.0", "@payloadcms/eslint-config": "workspace:*", "@types/busboy": "1.5.4", "@types/react": "npm:types-react@19.0.0-rc.1", @@ -112,7 +112,7 @@ }, "peerDependencies": { "graphql": "^16.8.1", - "next": "^15.0.0-canary.173", + "next": "^15.0.0", "payload": "workspace:*" }, "engines": { diff --git a/packages/next/src/layouts/Root/index.tsx b/packages/next/src/layouts/Root/index.tsx index d2f48e3d1d..e9a4f45be9 100644 --- a/packages/next/src/layouts/Root/index.tsx +++ b/packages/next/src/layouts/Root/index.tsx @@ -66,17 +66,17 @@ export const RootLayout = async ({ dependencyVersions: { next: { required: false, - version: '>=15.0.0-canary.173', + version: '>=15.0.0', }, react: { customVersionParser: customReactVersionParser, required: false, - version: '>=19.0.0-rc-3edc000d-20240926', + version: '>=19.0.0-rc-65a56d0e-20241020', }, 'react-dom': { customVersionParser: customReactVersionParser, required: false, - version: '>=19.0.0-rc-3edc000d-20240926', + version: '>=19.0.0-rc-65a56d0e-20241020', }, }, }) diff --git a/packages/payload/package.json b/packages/payload/package.json index b53b41448a..6f7d2345d9 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -85,7 +85,7 @@ }, "dependencies": { "@monaco-editor/react": "4.6.0", - "@next/env": "^15.0.0-canary.173", + "@next/env": "^15.0.0", "@payloadcms/translations": "workspace:*", "@types/busboy": "1.5.4", "ajv": "8.17.1", diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index 1797b80dc5..9cb9a15e6d 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -68,8 +68,8 @@ }, "peerDependencies": { "payload": "workspace:*", - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", - "react-dom": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "publishConfig": { "exports": { diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index 6625c3cfa8..1f3737e4a9 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -61,8 +61,8 @@ }, "peerDependencies": { "payload": "workspace:*", - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", - "react-dom": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "publishConfig": { "exports": { diff --git a/packages/plugin-sentry/package.json b/packages/plugin-sentry/package.json index 9daaca7100..aae0022e31 100644 --- a/packages/plugin-sentry/package.json +++ b/packages/plugin-sentry/package.json @@ -57,8 +57,8 @@ }, "peerDependencies": { "payload": "workspace:*", - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", - "react-dom": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "publishConfig": { "exports": { diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index 43f4fa2451..2b00cc8bf9 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -69,8 +69,8 @@ }, "peerDependencies": { "payload": "workspace:*", - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", - "react-dom": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "publishConfig": { "exports": { diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index 7e5fe401c6..3b6c29c33d 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -108,8 +108,8 @@ "@payloadcms/next": "workspace:*", "lexical": "0.18.0", "payload": "workspace:*", - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", - "react-dom": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index 4452d9857b..73899d79d0 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -58,7 +58,7 @@ }, "peerDependencies": { "payload": "workspace:*", - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/packages/ui/package.json b/packages/ui/package.json index 677f784746..90cce421ec 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -116,10 +116,10 @@ "payload": "workspace:*" }, "peerDependencies": { - "next": "^15.0.0-canary.173", + "next": "^15.0.0", "payload": "workspace:*", - "react": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926", - "react-dom": "^19.0.0 || ^19.0.0-rc-3edc000d-20240926" + "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020", + "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020" }, "engines": { "node": "^18.20.2 || >=20.9.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 309674ec4a..e0977f0dd9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,8 +13,8 @@ overrides: drizzle-orm: 0.35.1 graphql: ^16.8.1 mongodb-memory-server: ^9.0 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 typescript: 5.6.3 importers: @@ -28,8 +28,8 @@ importers: specifier: 0.14.0 version: 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@next/bundle-analyzer': - specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(bufferutil@4.0.8) + specifier: 15.0.0 + version: 15.0.0(bufferutil@4.0.8) '@payloadcms/db-postgres': specifier: workspace:* version: link:packages/db-postgres @@ -47,7 +47,7 @@ importers: version: 1.48.1 '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4))(react@19.0.0-rc-65a56d0e-20241020)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/node': specifier: ^8.33.1 version: 8.33.1 @@ -113,7 +113,7 @@ importers: version: 0.26.2 drizzle-orm: specifier: 0.35.1 - version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1) escape-html: specifier: ^1.0.3 version: 1.0.3 @@ -148,8 +148,8 @@ importers: specifier: ^9.0 version: 9.4.1(@aws-sdk/credential-providers@3.630.0(@aws-sdk/client-sso-oidc@3.629.0(@aws-sdk/client-sts@3.629.0))) next: - specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + specifier: 15.0.0 + version: 15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4) open: specifier: ^10.1.0 version: 10.1.0 @@ -169,11 +169,11 @@ importers: specifier: 2.4.2 version: 2.4.2 react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) rimraf: specifier: 3.0.2 version: 3.0.2 @@ -319,7 +319,7 @@ importers: version: 0.26.2 drizzle-orm: specifier: 0.35.1 - version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1) pg: specifier: 8.11.3 version: 8.11.3 @@ -365,7 +365,7 @@ importers: version: 0.26.2 drizzle-orm: specifier: 0.35.1 - version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1) prompts: specifier: 2.4.2 version: 2.4.2 @@ -405,7 +405,7 @@ importers: version: 0.26.2 drizzle-orm: specifier: 0.35.1 - version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1) pg: specifier: 8.11.3 version: 8.11.3 @@ -445,7 +445,7 @@ importers: version: 2.11.2 drizzle-orm: specifier: 0.35.1 - version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1) prompts: specifier: 2.4.2 version: 2.4.2 @@ -654,11 +654,11 @@ importers: specifier: workspace:* version: link:../live-preview react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) devDependencies: '@payloadcms/eslint-config': specifier: workspace:* @@ -693,7 +693,7 @@ importers: dependencies: '@dnd-kit/core': specifier: 6.0.8 - version: 6.0.8(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) + version: 6.0.8(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@payloadcms/graphql': specifier: workspace:* version: link:../graphql @@ -722,8 +722,8 @@ importers: specifier: 1.6.2 version: 1.6.2 next: - specifier: ^15.0.0-canary.173 - version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4) + specifier: ^15.0.0 + version: 15.0.0(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.77.4) path-to-regexp: specifier: ^6.2.1 version: 6.2.2 @@ -732,13 +732,13 @@ importers: version: 7.0.2 react-diff-viewer-continued: specifier: 3.2.6 - version: 3.2.6(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) + version: 3.2.6(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) sass: specifier: 1.77.4 version: 1.77.4 sonner: specifier: ^1.5.0 - version: 1.5.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) + version: 1.5.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) uuid: specifier: 10.0.0 version: 10.0.0 @@ -762,8 +762,8 @@ importers: specifier: ^7.24.1 version: 7.24.7(@babel/core@7.25.2) '@next/eslint-plugin-next': - specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173 + specifier: 15.0.0 + version: 15.0.0 '@payloadcms/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -805,10 +805,10 @@ importers: dependencies: '@monaco-editor/react': specifier: 4.6.0 - version: 4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) + version: 4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@next/env': - specifier: ^15.0.0-canary.173 - version: 15.0.0-rc.0 + specifier: ^15.0.0 + version: 15.0.0 '@payloadcms/translations': specifier: workspace:* version: link:../translations @@ -902,7 +902,7 @@ importers: version: 0.0.33 '@types/react-datepicker': specifier: 6.2.0 - version: 6.2.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) + version: 6.2.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@types/uuid': specifier: 10.0.0 version: 10.0.0 @@ -1008,11 +1008,11 @@ importers: specifier: ^1.0.3 version: 1.0.3 react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) devDependencies: '@payloadcms/eslint-config': specifier: workspace:* @@ -1060,11 +1060,11 @@ importers: specifier: workspace:* version: link:../ui react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) devDependencies: '@payloadcms/eslint-config': specifier: workspace:* @@ -1083,16 +1083,16 @@ importers: dependencies: '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4))(react@19.0.0-rc-65a56d0e-20241020)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/types': specifier: ^8.33.1 version: 8.33.1 react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) devDependencies: '@payloadcms/eslint-config': specifier: workspace:* @@ -1116,11 +1116,11 @@ importers: specifier: workspace:* version: link:../ui react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) devDependencies: '@payloadcms/eslint-config': specifier: workspace:* @@ -1182,10 +1182,10 @@ importers: dependencies: '@faceless-ui/modal': specifier: 3.0.0-beta.2 - version: 3.0.0-beta.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 3.0.0-beta.2(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@faceless-ui/scroll-info': specifier: 2.0.0-beta.0 - version: 2.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 2.0.0-beta.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@lexical/headless': specifier: 0.18.0 version: 0.18.0 @@ -1203,7 +1203,7 @@ importers: version: 0.18.0 '@lexical/react': specifier: 0.18.0 - version: 0.18.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(yjs@13.6.18) + version: 0.18.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(yjs@13.6.18) '@lexical/rich-text': specifier: 0.18.0 version: 0.18.0 @@ -1241,14 +1241,14 @@ importers: specifier: 0.18.0 version: 0.18.0 react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@19.0.0-rc-3edc000d-20240926) + version: 4.0.13(react@19.0.0-rc-65a56d0e-20241020) uuid: specifier: 10.0.0 version: 10.0.0 @@ -1323,8 +1323,8 @@ importers: specifier: 0.2.0 version: 0.2.0 react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 slate: specifier: 0.91.4 version: 0.91.4 @@ -1336,7 +1336,7 @@ importers: version: 0.81.3(slate@0.91.4) slate-react: specifier: 0.92.0 - version: 0.92.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(slate@0.91.4) + version: 0.92.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(slate@0.91.4) devDependencies: '@payloadcms/eslint-config': specifier: workspace:* @@ -1415,7 +1415,7 @@ importers: version: link:../plugin-cloud-storage uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.77.4)) devDependencies: payload: specifier: workspace:* @@ -1466,22 +1466,22 @@ importers: dependencies: '@dnd-kit/core': specifier: 6.0.8 - version: 6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 6.0.8(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@dnd-kit/sortable': specifier: 7.0.2 - version: 7.0.2(@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 7.0.2(@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@faceless-ui/modal': specifier: 3.0.0-beta.2 - version: 3.0.0-beta.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 3.0.0-beta.2(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@faceless-ui/scroll-info': specifier: 2.0.0-beta.0 - version: 2.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 2.0.0-beta.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@faceless-ui/window-info': specifier: 3.0.0-beta.0 - version: 3.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 3.0.0-beta.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@monaco-editor/react': specifier: 4.6.0 - version: 4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@payloadcms/translations': specifier: workspace:* version: link:../translations @@ -1501,8 +1501,8 @@ importers: specifier: 2.3.0 version: 2.3.0 next: - specifier: ^15.0.0-canary.173 - version: 15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + specifier: ^15.0.0 + version: 15.0.0(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4) object-to-formdata: specifier: 4.5.1 version: 4.5.1 @@ -1510,35 +1510,35 @@ importers: specifier: 7.0.2 version: 7.0.2 react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-animate-height: specifier: 2.1.2 - version: 2.1.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 2.1.2(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) react-datepicker: specifier: 6.9.0 - version: 6.9.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 6.9.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) react-image-crop: specifier: 10.1.8 - version: 10.1.8(react@19.0.0-rc-3edc000d-20240926) + version: 10.1.8(react@19.0.0-rc-65a56d0e-20241020) react-select: specifier: 5.8.0 - version: 5.8.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + version: 5.8.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1) scheduler: specifier: 0.0.0-experimental-3edc000d-20240926 version: 0.0.0-experimental-3edc000d-20240926 sonner: specifier: ^1.5.0 - version: 1.5.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 1.5.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) ts-essentials: specifier: 10.0.2 version: 10.0.2(typescript@5.6.3) use-context-selector: specifier: 2.0.0 - version: 2.0.0(react@19.0.0-rc-3edc000d-20240926)(scheduler@0.0.0-experimental-3edc000d-20240926) + version: 2.0.0(react@19.0.0-rc-65a56d0e-20241020)(scheduler@0.0.0-experimental-3edc000d-20240926) uuid: specifier: 10.0.0 version: 10.0.0 @@ -1572,7 +1572,7 @@ importers: version: types-react@19.0.0-rc.1 '@types/react-datepicker': specifier: 6.2.0 - version: 6.2.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + version: 6.2.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@types/react-dom': specifier: npm:types-react-dom@19.0.0-rc.1 version: types-react-dom@19.0.0-rc.1 @@ -1701,10 +1701,10 @@ importers: version: link:../packages/ui '@sentry/nextjs': specifier: ^8.33.1 - version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) + version: 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4))(react@19.0.0-rc-65a56d0e-20241020)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) '@sentry/react': specifier: ^7.77.0 - version: 7.118.0(react@19.0.0-rc-3edc000d-20240926) + version: 7.118.0(react@19.0.0-rc-65a56d0e-20241020) '@types/react': specifier: npm:types-react@19.0.0-rc.1 version: types-react@19.0.0-rc.1 @@ -1745,8 +1745,8 @@ importers: specifier: 0.18.0 version: 0.18.0 next: - specifier: 15.0.0-canary.173 - version: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + specifier: 15.0.0 + version: 15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4) payload: specifier: workspace:* version: link:../packages/payload @@ -1754,11 +1754,11 @@ importers: specifier: 7.0.2 version: 7.0.2 react: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926 + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020 react-dom: - specifier: 19.0.0-rc-3edc000d-20240926 - version: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + specifier: 19.0.0-rc-65a56d0e-20241020 + version: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) server-only: specifier: ^0.0.1 version: 0.0.1 @@ -1776,7 +1776,7 @@ importers: version: 5.6.3 uploadthing: specifier: ^6.10.1 - version: 6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)) + version: 6.13.2(express@4.19.2)(next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4)) uuid: specifier: 10.0.0 version: 10.0.0 @@ -2702,24 +2702,24 @@ packages: '@dnd-kit/accessibility@3.1.0': resolution: {integrity: sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 '@dnd-kit/core@6.0.8': resolution: {integrity: sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@dnd-kit/sortable@7.0.2': resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==} peerDependencies: '@dnd-kit/core': ^6.0.7 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 '@dnd-kit/utilities@3.2.2': resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 '@drizzle-team/brocli@0.10.1': resolution: {integrity: sha512-AHy0vjc+n/4w/8Mif+w86qpppHuF3AyXbcWW+R/W7GNA3F5/p2nuhlkCJaTXSLZheB4l1rtHzOfr9A7NwoR/Zg==} @@ -2757,7 +2757,7 @@ packages: resolution: {integrity: sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==} peerDependencies: '@types/react': '*' - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 peerDependenciesMeta: '@types/react': optional: true @@ -2774,7 +2774,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks@1.1.0': resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 '@emotion/utils@1.4.0': resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} @@ -3264,20 +3264,20 @@ packages: '@faceless-ui/modal@3.0.0-beta.2': resolution: {integrity: sha512-UmXvz7Iw3KMO4Pm3llZczU4uc5pPQDb6rdqwoBvYDFgWvkraOAHKx0HxSZgwqQvqOhn8joEFBfFp6/Do2562ow==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@faceless-ui/scroll-info@2.0.0-beta.0': resolution: {integrity: sha512-pUBhQP8vduA7rVndNsjhaCcds1BykA/Q4iV23JWijU6ZFL/M3Fm9P3ypDS+0VVxolqemNhw8S3FXPwZGgjH4Rw==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@faceless-ui/window-info@3.0.0-beta.0': resolution: {integrity: sha512-Qs8xRA+fl4sU2aFVe9xawxfi5TVZ9VTPuhdQpx9aSv7U5a2F0AXwT61lJfnaJ9Flm8tOcxzq67p8cVZsXNCVeQ==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} @@ -3292,14 +3292,14 @@ packages: '@floating-ui/react-dom@2.1.1': resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@floating-ui/react@0.26.22': resolution: {integrity: sha512-LNv4azPt8SpT4WW7Kku5JNVjLk2GcS0bGGjFTAgqOONRFo9r/aaGHHPpdiIuQbB1t8shmWyWqTTUDmZ9fcNshg==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@floating-ui/utils@0.2.7': resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} @@ -3569,8 +3569,8 @@ packages: '@lexical/devtools-core@0.18.0': resolution: {integrity: sha512-gVgtEkLwGjz1frOmDpFJzDPFxPgAcC9n5ZaaZWHo5GLcptnQmkuLm1t+UInQWujXhFmcyJzfiqDaMJ8EIcb2Ww==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@lexical/dragon@0.18.0': resolution: {integrity: sha512-toD/y2/TgtG+eFVKXf65kDk/Mv02FwgmcGH18nyAabZnO1TLBaMYPkGFdTTZ8hVmQxqIu9nZuLWUbdIBMs8UWw==} @@ -3616,8 +3616,8 @@ packages: '@lexical/react@0.18.0': resolution: {integrity: sha512-DLvIbTsjvFIFqm+9zvAjEwuZHAbSxzZf1AGqf1lLctlL/Ran0f+8EZOv5jttELTe7xISZ2+xSXTLRfyxhNwGXQ==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@lexical/rich-text@0.18.0': resolution: {integrity: sha512-xMANCB7WueMsmWK8qxik5FZN4ApyaHWHQILS9r4FTbdv/DlNepsR7Pt8kg2317xZ56NAueQLIdyyKYXG1nBrHw==} @@ -3703,8 +3703,8 @@ packages: resolution: {integrity: sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==} peerDependencies: monaco-editor: '>= 0.25.0 < 1' - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 '@mongodb-js/saslprep@1.1.8': resolution: {integrity: sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==} @@ -3718,68 +3718,59 @@ packages: '@neondatabase/serverless@0.9.4': resolution: {integrity: sha512-D0AXgJh6xkf+XTlsO7iwE2Q1w8981E1cLCPAALMU2YKtkF/1SF6BiAzYARZFYo175ON+b1RNIy9TdSFHm5nteg==} - '@next/bundle-analyzer@15.0.0-canary.173': - resolution: {integrity: sha512-HQjr1RBygRcdVT1nlE1QkRED/dOCeXZdsDwr46Z9ko9xvFOC9+gaXs59EfgTZTLCyjqd6Qm5wttdS5GIYcMsMA==} + '@next/bundle-analyzer@15.0.0': + resolution: {integrity: sha512-FGkM4yaHe+BadSJvcI5C4hV00i7MSbrc7esqjICxN1tEttDFPzxrXHb5W0DUJGcbnEsei0psdQMvbu4Bz8wS0Q==} - '@next/env@15.0.0-canary.173': - resolution: {integrity: sha512-ly6s88DqV1BSu4dthaU9/eTjyZDUeEC7KpXwnH0u4w2hu10ickyEFv52s7MXItoiiurtUorpg8h5nlK98UNQiQ==} + '@next/env@15.0.0': + resolution: {integrity: sha512-Mcv8ZVmEgTO3bePiH/eJ7zHqQEs2gCqZ0UId2RxHmDDc7Pw6ngfSrOFlxG8XDpaex+n2G+TKPsQAf28MO+88Gw==} - '@next/env@15.0.0-rc.0': - resolution: {integrity: sha512-6W0ndQvHR9sXcqcKeR/inD2UTRCs9+VkSK3lfaGmEuZs7EjwwXMO2BPYjz9oBrtfPL3xuTjtXsHKSsalYQ5l1Q==} + '@next/eslint-plugin-next@15.0.0': + resolution: {integrity: sha512-UG/Gnsq6Sc4wRhO9qk+vc/2v4OfRXH7GEH6/TGlNF5eU/vI9PIO7q+kgd65X2DxJ+qIpHWpzWwlPLmqMi1FE9A==} - '@next/eslint-plugin-next@15.0.0-canary.173': - resolution: {integrity: sha512-4nYoVrqN1HwXH3k+r79jxRWNyqBNYioarBwyY9RkFIJkduGAP0us0y9C4DFY+3SdZql4WtyRZMgn6WfwHeE7sA==} - - '@next/swc-darwin-arm64@15.0.0-canary.173': - resolution: {integrity: sha512-peEFAtJDrSpnVL0VKqmbvBzbgxuOdwT+Y86PGMNkh6zEctodQ0Ka5YBlsu5Tjzkzkbn1xMpIpxurbqnsMwHeOQ==} + '@next/swc-darwin-arm64@15.0.0': + resolution: {integrity: sha512-Gjgs3N7cFa40a9QT9AEHnuGKq69/bvIOn0SLGDV+ordq07QOP4k1GDOVedMHEjVeqy1HBLkL8rXnNTuMZIv79A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.0.0-canary.173': - resolution: {integrity: sha512-mXrx5JDB8lSSBRrzGOVrvt3155c4B5ctn8hBuWdsHaMpnbwg6zQtSESp2z8pcMyXFAWaJqpYJ+ImH3M0VdYzyw==} + '@next/swc-darwin-x64@15.0.0': + resolution: {integrity: sha512-BUtTvY5u9s5berAuOEydAUlVMjnl6ZjXS+xVrMt317mglYZ2XXjY8YRDCaz9vYMjBNPXH8Gh75Cew5CMdVbWTw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.0.0-canary.173': - resolution: {integrity: sha512-1rUBlXBKPQYe12+bddrD5GHG0sS7KD0aKDUoLAxXJ4iCPThdhOmT8PexJDBOE6D9JL1Lp5L4G01ntbRf360Jgw==} + '@next/swc-linux-arm64-gnu@15.0.0': + resolution: {integrity: sha512-sbCoEpuWUBpYoLSgYrk0CkBv8RFv4ZlPxbwqRHr/BWDBJppTBtF53EvsntlfzQJ9fosYX12xnS6ltxYYwsMBjg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.0.0-canary.173': - resolution: {integrity: sha512-6LjAq3zrmc8Dz8sao+ZtbjdUe9dkTMpv7MazHy6lAB33+mg9SwYuyvsg/YFRKlS2NetB8Gy1Fd+85YX6wYYiSQ==} + '@next/swc-linux-arm64-musl@15.0.0': + resolution: {integrity: sha512-JAw84qfL81aQCirXKP4VkgmhiDpXJupGjt8ITUkHrOVlBd+3h5kjfPva5M0tH2F9KKSgJQHEo3F5S5tDH9h2ww==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.0.0-canary.173': - resolution: {integrity: sha512-x72YkJvmqH/1PzMyQ2VUnL/Bsbn+aDodr/KNhj42uEhhxUEXOkfJT8k8iwjbN7rhP+Oid7qWmd7w3FPkL9pOvg==} + '@next/swc-linux-x64-gnu@15.0.0': + resolution: {integrity: sha512-r5Smd03PfxrGKMewdRf2RVNA1CU5l2rRlvZLQYZSv7FUsXD5bKEcOZ/6/98aqRwL7diXOwD8TCWJk1NbhATQHg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.0.0-canary.173': - resolution: {integrity: sha512-DYOLKH97iTQRVatqJpxgCgUKdkgwtiza2mmLAC3roPSc/vPltwTvGDPtKKKiZ7Rn18VGe4GMb5j1DVUgnAzKMA==} + '@next/swc-linux-x64-musl@15.0.0': + resolution: {integrity: sha512-fM6qocafz4Xjhh79CuoQNeGPhDHGBBUbdVtgNFJOUM8Ih5ZpaDZlTvqvqsh5IoO06CGomxurEGqGz/4eR/FaMQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.0.0-canary.173': - resolution: {integrity: sha512-wpOF0WMiiGeTbTvdaS20FhjyQl2qUsawN9oUNx/SKcOtHzjt2kBZiwtZmLNSdu9lSW3LPBpRxMA4EPf9ukjAxw==} + '@next/swc-win32-arm64-msvc@15.0.0': + resolution: {integrity: sha512-ZOd7c/Lz1lv7qP/KzR513XEa7QzW5/P0AH3A5eR1+Z/KmDOvMucht0AozccPc0TqhdV1xaXmC0Fdx0hoNzk6ng==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@15.0.0-canary.173': - resolution: {integrity: sha512-VSOMf/GbBYHkuly/hSGbam5AQfkdgTPZOdcrFalHd03Q1mEL4GCJBRRqu/ejGBHTI1CNsFekEyVBJ0GpZQkFTg==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@next/swc-win32-x64-msvc@15.0.0-canary.173': - resolution: {integrity: sha512-JBwVQkiebNPVxk70TCbbxcG/JpIAnd/XKKt0LDeQf51HDdyGfu6MN3OZC3uqm2h1vb1FGDPOX1u9Klf5yek+nA==} + '@next/swc-win32-x64-msvc@15.0.0': + resolution: {integrity: sha512-2RVWcLtsqg4LtaoJ3j7RoKpnWHgcrz5XvuUGE7vBYU2i6M2XeD9Y8RlLaF770LEIScrrl8MdWsp6odtC6sZccg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -4227,13 +4218,13 @@ packages: resolution: {integrity: sha512-oEYe5TGk8S7YzPsFqDf4xDHjfzs35/QFE+dou3S2d24OYpso8Tq4C5f1VzYmnOOyy85T7JNicYLSo0n0NSJvQg==} engines: {node: '>=8'} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 '@sentry/react@8.33.1': resolution: {integrity: sha512-SsEX05xfcfOvo7/pK1UyeyTAYWH8iSIsXXlsjvnSRsbuJkjb0c+q6yiZpj3A2PRdbcx43nTVE1n0lSpgaqj2HA==} engines: {node: '>=14.18'} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 '@sentry/replay@7.118.0': resolution: {integrity: sha512-boQfCL+1L/tSZ9Huwi00+VtU+Ih1Lcg8HtxBuAsBCJR9pQgUL5jp7ECYdTeeHyCh/RJO7JqV1CEoGTgohe10mA==} @@ -5895,7 +5886,7 @@ packages: pg: '>=8' postgres: '>=3' prisma: '*' - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 sql.js: '>=1' sqlite3: '>=5' peerDependenciesMeta: @@ -7885,16 +7876,16 @@ packages: resolution: {integrity: sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==} engines: {node: '>=12.22.0'} - next@15.0.0-canary.173: - resolution: {integrity: sha512-wD6+sidDZAao/rJ4D/9agqLDTlc/DzlREAnC/+pQSgmpmL8rn41h9Empke6POBxJ4kQWm61dpNDEmz882DknOA==} + next@15.0.0: + resolution: {integrity: sha512-/ivqF6gCShXpKwY9hfrIQYh8YMge8L3W+w1oRLv/POmK4MOQnh+FscZ8a0fRFTSQWE+2z9ctNYvELD9vP2FV+A==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.41.2 babel-plugin-react-compiler: '*' - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -8486,47 +8477,47 @@ packages: resolution: {integrity: sha512-A9jfz/4CTdsIsE7WCQtO9UkOpMBcBRh8LxyHl2eoZz1ki02jpyUL5xt58gabd0CyeLQ8fRyQ+s2lyV2Ufu8Owg==} engines: {node: '>= 6.0.0'} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 react-datepicker@6.9.0: resolution: {integrity: sha512-QTxuzeem7BUfVFWv+g5WuvzT0c5BPo+XTCNbMTZKSZQLU+cMMwSUHwspaxuIcDlwNcOH0tiJ+bh1fJ2yxOGYWA==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 react-diff-viewer-continued@3.2.6: resolution: {integrity: sha512-GrzyqQnjIMoej+jMjWvtVSsQqhXgzEGqpXlJ2dAGfOk7Q26qcm8Gu6xtI430PBUyZsERe8BJSQf+7VZZo8IBNQ==} engines: {node: '>= 8'} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 - react-dom@19.0.0-rc-3edc000d-20240926: - resolution: {integrity: sha512-0nEYp9I8IF5GZQOJdKSPhkwVFgBmYFiFJOzw5xfPD1USj/Wf8Z7lpruV7WStKD4uxbtfLamDMGZTRkSby7eAwQ==} + react-dom@19.0.0-rc-65a56d0e-20241020: + resolution: {integrity: sha512-OrsgAX3LQ6JtdBJayK4nG1Hj5JebzWyhKSsrP/bmkeFxulb0nG2LaPloJ6kBkAxtgjiwRyGUciJ4+Qu64gy/KA==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 - react-dom@19.0.0-rc-5dcb0097-20240918: - resolution: {integrity: sha512-QV5mYzXL8okN43EIxsMhjOMi6AP+mkZBbs3nmMcIKp3RbflINO/lUIdHnGsSm6Pc/Mc34QXCHy8RaN1DZ5o8fw==} + react-dom@19.0.0-rc-cd22717c-20241013: + resolution: {integrity: sha512-NzjTBOXygonUxLRQuUUW5V2QLGkAcyUwJoS8+UWxs089paMvQQfoRD51w65Ovgd2OEQ8Rm3HWx+82fvXiT0czQ==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 react-error-boundary@3.1.4: resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} engines: {node: '>=10', npm: '>=6'} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 react-error-boundary@4.0.13: resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 react-image-crop@10.1.8: resolution: {integrity: sha512-4rb8XtXNx7ZaOZarKKnckgz4xLMvds/YrU6mpJfGhGAsy2Mg4mIw1x+DCCGngVGq2soTBVVOxx2s/C6mTX9+pA==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -8537,27 +8528,27 @@ packages: react-onclickoutside@6.13.1: resolution: {integrity: sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 react-select@5.8.0: resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 - react@19.0.0-rc-3edc000d-20240926: - resolution: {integrity: sha512-twH/qd0P8clqn+Z5hAxDi+3nh9pJv3zV9kzhjpbwBW/FlCimK7ypfAoElMIm5QnkhBX/YtkSj1Th49ZcRhjpGA==} + react@19.0.0-rc-65a56d0e-20241020: + resolution: {integrity: sha512-rZqpfd9PP/A97j9L1MR6fvWSMgs3khgIyLd0E+gYoCcLrxXndj+ySPRVlDPDC3+f7rm8efHNL4B6HeapqU6gzw==} engines: {node: '>=0.10.0'} - react@19.0.0-rc-5dcb0097-20240918: - resolution: {integrity: sha512-kpRDycbFGXguigJtTLzT67L6FJjWUJYLru40Yk/7GSYDPy2hAfdLVXwfjczfRrnKVyIO76EVbnlBuR+zNX0bdQ==} + react@19.0.0-rc-cd22717c-20241013: + resolution: {integrity: sha512-k28GszmyQ1tX/JmeLGZINq5KXiNy/MmN0fCAtcwF8a9INDyVYG0zATCRGJwaPB9WixmkuwPv1BfB1QBfJC7cNg==} engines: {node: '>=0.10.0'} readable-stream@1.0.34: @@ -8891,11 +8882,11 @@ packages: scheduler@0.0.0-experimental-3edc000d-20240926: resolution: {integrity: sha512-360BMNajOhMyrirau0pzWVgeakvrfjbfdqHnX2K+tSGTmn6tBN+6K5NhhaebqeXXWyCU3rl5FApjgF2GN0W5JA==} - scheduler@0.25.0-rc-3edc000d-20240926: - resolution: {integrity: sha512-qAWyPrLLFM96Py4gnrFQLhYDrHkVXGw3P/hPrR3E6b5rriPeAA1a8YZBWlqH8Eehbc9waTih/WyDSyuwkxWWMw==} + scheduler@0.25.0-rc-65a56d0e-20241020: + resolution: {integrity: sha512-HxWcXSy0sNnf+TKRkMwyVD1z19AAVQ4gUub8m7VxJUUfSu3J4lr1T+AagohKEypiW5dbQhJuCtAumPY6z9RQ1g==} - scheduler@0.25.0-rc-5dcb0097-20240918: - resolution: {integrity: sha512-Sr3CaLDHJIA1p7wzNF8EyZ/JzetrV21S0sY6byC3AhREQMoEuKol8BSmXM5gd8Aoxo92uW9WCjWL0hwdb2DtqQ==} + scheduler@0.25.0-rc-cd22717c-20241013: + resolution: {integrity: sha512-MnsFR57bKcrYslnbCUsaUG0qBuAArk92VxE0zu6A2Usz38iIuL2uZLunqKlP1W47MF33GrRGDj1sXdPbFKIZfw==} schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} @@ -9060,8 +9051,8 @@ packages: slate-react@0.92.0: resolution: {integrity: sha512-xEDKu5RKw5f0N95l1UeNQnrB0Pxh4JPjpIZR/BVsMo0ININnLAknR99gLo46bl/Ffql4mr7LeaxQRoXxbFtJOQ==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 slate: '>=0.65.3' slate@0.91.4: @@ -9089,8 +9080,8 @@ packages: sonner@1.5.0: resolution: {integrity: sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020 sort-keys-length@1.0.1: resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} @@ -9289,7 +9280,7 @@ packages: peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 peerDependenciesMeta: '@babel/core': optional: true @@ -9734,14 +9725,14 @@ packages: use-context-selector@2.0.0: resolution: {integrity: sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g==} peerDependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 scheduler: '>=0.19.0' use-isomorphic-layout-effect@1.1.2: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 peerDependenciesMeta: '@types/react': optional: true @@ -11609,47 +11600,47 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-3edc000d-20240926)': + '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 tslib: 2.6.3 - '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-5dcb0097-20240918)': + '@dnd-kit/accessibility@3.1.0(react@19.0.0-rc-cd22717c-20241013)': dependencies: - react: 19.0.0-rc-5dcb0097-20240918 + react: 19.0.0-rc-cd22717c-20241013 tslib: 2.6.3 - '@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-3edc000d-20240926) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-3edc000d-20240926) - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-65a56d0e-20241020) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-65a56d0e-20241020) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) tslib: 2.6.3 - '@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)': + '@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: - '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-5dcb0097-20240918) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-5dcb0097-20240918) - react: 19.0.0-rc-5dcb0097-20240918 - react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) + '@dnd-kit/accessibility': 3.1.0(react@19.0.0-rc-cd22717c-20241013) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-cd22717c-20241013) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) tslib: 2.6.3 - '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.0.8(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - '@dnd-kit/core': 6.0.8(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-3edc000d-20240926) - react: 19.0.0-rc-3edc000d-20240926 + '@dnd-kit/core': 6.0.8(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-rc-65a56d0e-20241020) + react: 19.0.0-rc-65a56d0e-20241020 tslib: 2.6.3 - '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-3edc000d-20240926)': + '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 tslib: 2.6.3 - '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-5dcb0097-20240918)': + '@dnd-kit/utilities@3.2.2(react@19.0.0-rc-cd22717c-20241013)': dependencies: - react: 19.0.0-rc-5dcb0097-20240918 + react: 19.0.0-rc-cd22717c-20241013 tslib: 2.6.3 '@drizzle-team/brocli@0.10.1': {} @@ -11713,17 +11704,17 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.0(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1)': + '@emotion/react@11.13.0(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1)': dependencies: '@babel/runtime': 7.25.0 '@emotion/babel-plugin': 11.12.0 '@emotion/cache': 11.13.1 '@emotion/serialize': 1.3.0 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-3edc000d-20240926) + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@19.0.0-rc-65a56d0e-20241020) '@emotion/utils': 1.4.0 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 transitivePeerDependencies: @@ -11741,9 +11732,9 @@ snapshots: '@emotion/unitless@0.9.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@19.0.0-rc-3edc000d-20240926)': + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 '@emotion/utils@1.4.0': {} @@ -12106,23 +12097,23 @@ snapshots: '@eslint/object-schema@2.1.4': {} - '@faceless-ui/modal@3.0.0-beta.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@faceless-ui/modal@3.0.0-beta.2(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: body-scroll-lock: 4.0.0-beta.0 focus-trap: 7.5.4 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) - react-transition-group: 4.4.5(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) - '@faceless-ui/scroll-info@2.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@faceless-ui/scroll-info@2.0.0-beta.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) - '@faceless-ui/window-info@3.0.0-beta.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@faceless-ui/window-info@3.0.0-beta.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) '@fastify/busboy@2.1.1': {} @@ -12135,32 +12126,32 @@ snapshots: '@floating-ui/core': 1.6.7 '@floating-ui/utils': 0.2.7 - '@floating-ui/react-dom@2.1.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@floating-ui/react-dom@2.1.1(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: '@floating-ui/dom': 1.6.10 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) - '@floating-ui/react-dom@2.1.1(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)': + '@floating-ui/react-dom@2.1.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@floating-ui/dom': 1.6.10 - react: 19.0.0-rc-5dcb0097-20240918 - react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) - '@floating-ui/react@0.26.22(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@floating-ui/react@0.26.22(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - '@floating-ui/react-dom': 2.1.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@floating-ui/react-dom': 2.1.1(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@floating-ui/utils': 0.2.7 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) tabbable: 6.2.0 - '@floating-ui/react@0.26.22(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)': + '@floating-ui/react@0.26.22(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: - '@floating-ui/react-dom': 2.1.1(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) + '@floating-ui/react-dom': 2.1.1(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@floating-ui/utils': 0.2.7 - react: 19.0.0-rc-5dcb0097-20240918 - react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) tabbable: 6.2.0 '@floating-ui/utils@0.2.7': {} @@ -12515,7 +12506,7 @@ snapshots: lexical: 0.18.0 prismjs: 1.29.0 - '@lexical/devtools-core@0.18.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@lexical/devtools-core@0.18.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: '@lexical/html': 0.18.0 '@lexical/link': 0.18.0 @@ -12523,8 +12514,8 @@ snapshots: '@lexical/table': 0.18.0 '@lexical/utils': 0.18.0 lexical: 0.18.0 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) '@lexical/dragon@0.18.0': dependencies: @@ -12594,11 +12585,11 @@ snapshots: '@lexical/utils': 0.18.0 lexical: 0.18.0 - '@lexical/react@0.18.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(yjs@13.6.18)': + '@lexical/react@0.18.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(yjs@13.6.18)': dependencies: '@lexical/clipboard': 0.18.0 '@lexical/code': 0.18.0 - '@lexical/devtools-core': 0.18.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@lexical/devtools-core': 0.18.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@lexical/dragon': 0.18.0 '@lexical/hashtag': 0.18.0 '@lexical/history': 0.18.0 @@ -12615,9 +12606,9 @@ snapshots: '@lexical/utils': 0.18.0 '@lexical/yjs': 0.18.0(yjs@13.6.18) lexical: 0.18.0 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) - react-error-boundary: 3.1.4(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) + react-error-boundary: 3.1.4(react@19.0.0-rc-65a56d0e-20241020) transitivePeerDependencies: - yjs @@ -12728,19 +12719,19 @@ snapshots: monaco-editor: 0.38.0 state-local: 1.0.7 - '@monaco-editor/react@4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@monaco-editor/react@4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: '@monaco-editor/loader': 1.4.0(monaco-editor@0.38.0) monaco-editor: 0.38.0 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) - '@monaco-editor/react@4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)': + '@monaco-editor/react@4.6.0(monaco-editor@0.38.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: '@monaco-editor/loader': 1.4.0(monaco-editor@0.38.0) monaco-editor: 0.38.0 - react: 19.0.0-rc-5dcb0097-20240918 - react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) '@mongodb-js/saslprep@1.1.8': dependencies: @@ -12760,46 +12751,41 @@ snapshots: dependencies: '@types/pg': 8.11.6 - '@next/bundle-analyzer@15.0.0-canary.173(bufferutil@4.0.8)': + '@next/bundle-analyzer@15.0.0(bufferutil@4.0.8)': dependencies: webpack-bundle-analyzer: 4.10.1(bufferutil@4.0.8) transitivePeerDependencies: - bufferutil - utf-8-validate - '@next/env@15.0.0-canary.173': {} + '@next/env@15.0.0': {} - '@next/env@15.0.0-rc.0': {} - - '@next/eslint-plugin-next@15.0.0-canary.173': + '@next/eslint-plugin-next@15.0.0': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.0.0-canary.173': + '@next/swc-darwin-arm64@15.0.0': optional: true - '@next/swc-darwin-x64@15.0.0-canary.173': + '@next/swc-darwin-x64@15.0.0': optional: true - '@next/swc-linux-arm64-gnu@15.0.0-canary.173': + '@next/swc-linux-arm64-gnu@15.0.0': optional: true - '@next/swc-linux-arm64-musl@15.0.0-canary.173': + '@next/swc-linux-arm64-musl@15.0.0': optional: true - '@next/swc-linux-x64-gnu@15.0.0-canary.173': + '@next/swc-linux-x64-gnu@15.0.0': optional: true - '@next/swc-linux-x64-musl@15.0.0-canary.173': + '@next/swc-linux-x64-musl@15.0.0': optional: true - '@next/swc-win32-arm64-msvc@15.0.0-canary.173': + '@next/swc-win32-arm64-msvc@15.0.0': optional: true - '@next/swc-win32-ia32-msvc@15.0.0-canary.173': - optional: true - - '@next/swc-win32-x64-msvc@15.0.0-canary.173': + '@next/swc-win32-x64-msvc@15.0.0': optional: true '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': @@ -13136,8 +13122,8 @@ snapshots: dependencies: html-to-text: 9.0.3 pretty: 2.0.0 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) '@rollup/plugin-commonjs@26.0.1(rollup@3.29.5)': dependencies: @@ -13302,7 +13288,7 @@ snapshots: '@sentry/utils': 7.118.0 localforage: 1.10.0 - '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4))(react@19.0.0-rc-3edc000d-20240926)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': + '@sentry/nextjs@8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4))(react@19.0.0-rc-65a56d0e-20241020)(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13)))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -13311,13 +13297,13 @@ snapshots: '@sentry/core': 8.33.1 '@sentry/node': 8.33.1 '@sentry/opentelemetry': 8.33.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0) - '@sentry/react': 8.33.1(react@19.0.0-rc-3edc000d-20240926) + '@sentry/react': 8.33.1(react@19.0.0-rc-65a56d0e-20241020) '@sentry/types': 8.33.1 '@sentry/utils': 8.33.1 '@sentry/vercel-edge': 8.33.1 '@sentry/webpack-plugin': 2.22.3(webpack@5.95.0(@swc/core@1.7.10(@swc/helpers@0.5.13))) chalk: 3.0.0 - next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4) resolve: 1.22.8 rollup: 3.29.5 stacktrace-parser: 0.1.10 @@ -13383,23 +13369,23 @@ snapshots: '@sentry/types': 8.33.1 '@sentry/utils': 8.33.1 - '@sentry/react@7.118.0(react@19.0.0-rc-3edc000d-20240926)': + '@sentry/react@7.118.0(react@19.0.0-rc-65a56d0e-20241020)': dependencies: '@sentry/browser': 7.118.0 '@sentry/core': 7.118.0 '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 hoist-non-react-statics: 3.3.2 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 - '@sentry/react@8.33.1(react@19.0.0-rc-3edc000d-20240926)': + '@sentry/react@8.33.1(react@19.0.0-rc-65a56d0e-20241020)': dependencies: '@sentry/browser': 8.33.1 '@sentry/core': 8.33.1 '@sentry/types': 8.33.1 '@sentry/utils': 8.33.1 hoist-non-react-statics: 3.3.2 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 '@sentry/replay@7.118.0': dependencies: @@ -14086,18 +14072,18 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-datepicker@6.2.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)': + '@types/react-datepicker@6.2.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)': dependencies: - '@floating-ui/react': 0.26.22(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@floating-ui/react': 0.26.22(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) '@types/react': types-react@19.0.0-rc.1 date-fns: 3.3.1 transitivePeerDependencies: - react - react-dom - '@types/react-datepicker@6.2.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)': + '@types/react-datepicker@6.2.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)': dependencies: - '@floating-ui/react': 0.26.22(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) + '@floating-ui/react': 0.26.22(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013) '@types/react': types-react@19.0.0-rc.1 date-fns: 3.3.1 transitivePeerDependencies: @@ -15407,7 +15393,7 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + drizzle-orm@0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1): optionalDependencies: '@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@neondatabase/serverless': 0.9.4 @@ -15416,9 +15402,9 @@ snapshots: '@types/react': types-react@19.0.0-rc.1 '@vercel/postgres': 0.9.0 pg: 8.11.3 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 - drizzle-orm@0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + drizzle-orm@0.35.1(@libsql/client@0.14.0(bufferutil@4.0.8))(@neondatabase/serverless@0.9.4)(@opentelemetry/api@1.9.0)(@types/pg@8.11.6)(@vercel/postgres@0.9.0)(pg@8.11.3)(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1): optionalDependencies: '@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) '@neondatabase/serverless': 0.9.4 @@ -15427,7 +15413,7 @@ snapshots: '@types/react': types-react@19.0.0-rc.1 '@vercel/postgres': 0.9.0 pg: 8.11.3 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 duplexer@0.1.2: {} @@ -17887,27 +17873,26 @@ snapshots: transitivePeerDependencies: - supports-color - next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): + next@15.0.0(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4): dependencies: - '@next/env': 15.0.0-canary.173 + '@next/env': 15.0.0 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.13 busboy: 1.6.0 caniuse-lite: 1.0.30001651 postcss: 8.4.31 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) - styled-jsx: 5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) + styled-jsx: 5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-65a56d0e-20241020) optionalDependencies: - '@next/swc-darwin-arm64': 15.0.0-canary.173 - '@next/swc-darwin-x64': 15.0.0-canary.173 - '@next/swc-linux-arm64-gnu': 15.0.0-canary.173 - '@next/swc-linux-arm64-musl': 15.0.0-canary.173 - '@next/swc-linux-x64-gnu': 15.0.0-canary.173 - '@next/swc-linux-x64-musl': 15.0.0-canary.173 - '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 - '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 - '@next/swc-win32-x64-msvc': 15.0.0-canary.173 + '@next/swc-darwin-arm64': 15.0.0 + '@next/swc-darwin-x64': 15.0.0 + '@next/swc-linux-arm64-gnu': 15.0.0 + '@next/swc-linux-arm64-musl': 15.0.0 + '@next/swc-linux-x64-gnu': 15.0.0 + '@next/swc-linux-x64-musl': 15.0.0 + '@next/swc-win32-arm64-msvc': 15.0.0 + '@next/swc-win32-x64-msvc': 15.0.0 '@opentelemetry/api': 1.9.0 '@playwright/test': 1.48.1 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 @@ -17917,27 +17902,26 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.0.0-canary.173(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4): + next@15.0.0(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.77.4): dependencies: - '@next/env': 15.0.0-canary.173 + '@next/env': 15.0.0 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.13 busboy: 1.6.0 caniuse-lite: 1.0.30001651 postcss: 8.4.31 - react: 19.0.0-rc-5dcb0097-20240918 - react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) - styled-jsx: 5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-5dcb0097-20240918) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) + styled-jsx: 5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-cd22717c-20241013) optionalDependencies: - '@next/swc-darwin-arm64': 15.0.0-canary.173 - '@next/swc-darwin-x64': 15.0.0-canary.173 - '@next/swc-linux-arm64-gnu': 15.0.0-canary.173 - '@next/swc-linux-arm64-musl': 15.0.0-canary.173 - '@next/swc-linux-x64-gnu': 15.0.0-canary.173 - '@next/swc-linux-x64-musl': 15.0.0-canary.173 - '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 - '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 - '@next/swc-win32-x64-msvc': 15.0.0-canary.173 + '@next/swc-darwin-arm64': 15.0.0 + '@next/swc-darwin-x64': 15.0.0 + '@next/swc-linux-arm64-gnu': 15.0.0 + '@next/swc-linux-arm64-musl': 15.0.0 + '@next/swc-linux-x64-gnu': 15.0.0 + '@next/swc-linux-x64-musl': 15.0.0 + '@next/swc-win32-arm64-msvc': 15.0.0 + '@next/swc-win32-x64-msvc': 15.0.0 '@opentelemetry/api': 1.9.0 '@playwright/test': 1.48.1 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 @@ -17947,27 +17931,26 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4): + next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4): dependencies: - '@next/env': 15.0.0-canary.173 + '@next/env': 15.0.0 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.13 busboy: 1.6.0 caniuse-lite: 1.0.30001651 postcss: 8.4.31 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) - styled-jsx: 5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) + styled-jsx: 5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-65a56d0e-20241020) optionalDependencies: - '@next/swc-darwin-arm64': 15.0.0-canary.173 - '@next/swc-darwin-x64': 15.0.0-canary.173 - '@next/swc-linux-arm64-gnu': 15.0.0-canary.173 - '@next/swc-linux-arm64-musl': 15.0.0-canary.173 - '@next/swc-linux-x64-gnu': 15.0.0-canary.173 - '@next/swc-linux-x64-musl': 15.0.0-canary.173 - '@next/swc-win32-arm64-msvc': 15.0.0-canary.173 - '@next/swc-win32-ia32-msvc': 15.0.0-canary.173 - '@next/swc-win32-x64-msvc': 15.0.0-canary.173 + '@next/swc-darwin-arm64': 15.0.0 + '@next/swc-darwin-x64': 15.0.0 + '@next/swc-linux-arm64-gnu': 15.0.0 + '@next/swc-linux-arm64-musl': 15.0.0 + '@next/swc-linux-x64-gnu': 15.0.0 + '@next/swc-linux-x64-musl': 15.0.0 + '@next/swc-win32-arm64-msvc': 15.0.0 + '@next/swc-win32-x64-msvc': 15.0.0 '@opentelemetry/api': 1.9.0 '@playwright/test': 1.48.1 babel-plugin-react-compiler: 0.0.0-experimental-24ec0eb-20240918 @@ -18549,102 +18532,102 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-animate-height@2.1.2(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + react-animate-height@2.1.2(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020): dependencies: classnames: 2.5.1 prop-types: 15.8.1 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) - react-datepicker@6.9.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + react-datepicker@6.9.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020): dependencies: - '@floating-ui/react': 0.26.22(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + '@floating-ui/react': 0.26.22(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) clsx: 2.1.1 date-fns: 3.3.1 prop-types: 15.8.1 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) - react-onclickoutside: 6.13.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) + react-onclickoutside: 6.13.1(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) - react-diff-viewer-continued@3.2.6(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918): + react-diff-viewer-continued@3.2.6(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: '@emotion/css': 11.13.0 classnames: 2.5.1 diff: 5.2.0 memoize-one: 6.0.0 prop-types: 15.8.1 - react: 19.0.0-rc-5dcb0097-20240918 - react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) transitivePeerDependencies: - supports-color - react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926): + react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020): dependencies: - react: 19.0.0-rc-3edc000d-20240926 - scheduler: 0.25.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 + scheduler: 0.25.0-rc-65a56d0e-20241020 - react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-3edc000d-20240926): + react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-65a56d0e-20241020): dependencies: - react: 19.0.0-rc-3edc000d-20240926 - scheduler: 0.25.0-rc-5dcb0097-20240918 + react: 19.0.0-rc-65a56d0e-20241020 + scheduler: 0.25.0-rc-cd22717c-20241013 - react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918): + react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013): dependencies: - react: 19.0.0-rc-5dcb0097-20240918 - scheduler: 0.25.0-rc-5dcb0097-20240918 + react: 19.0.0-rc-cd22717c-20241013 + scheduler: 0.25.0-rc-cd22717c-20241013 - react-error-boundary@3.1.4(react@19.0.0-rc-3edc000d-20240926): + react-error-boundary@3.1.4(react@19.0.0-rc-65a56d0e-20241020): dependencies: '@babel/runtime': 7.25.0 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 - react-error-boundary@4.0.13(react@19.0.0-rc-3edc000d-20240926): + react-error-boundary@4.0.13(react@19.0.0-rc-65a56d0e-20241020): dependencies: '@babel/runtime': 7.25.0 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 - react-image-crop@10.1.8(react@19.0.0-rc-3edc000d-20240926): + react-image-crop@10.1.8(react@19.0.0-rc-65a56d0e-20241020): dependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 react-is@16.13.1: {} react-is@18.3.1: {} - react-onclickoutside@6.13.1(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + react-onclickoutside@6.13.1(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020): dependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) - react-select@5.8.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + react-select@5.8.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1): dependencies: '@babel/runtime': 7.25.0 '@emotion/cache': 11.13.1 - '@emotion/react': 11.13.0(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + '@emotion/react': 11.13.0(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1) '@floating-ui/dom': 1.6.10 '@types/react-transition-group': 4.4.11 memoize-one: 6.0.0 prop-types: 15.8.1 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) - react-transition-group: 4.4.5(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926) - use-isomorphic-layout-effect: 1.1.2(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) + react-transition-group: 4.4.5(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020) + use-isomorphic-layout-effect: 1.1.2(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1) transitivePeerDependencies: - '@types/react' - supports-color - react-transition-group@4.4.5(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + react-transition-group@4.4.5(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020): dependencies: '@babel/runtime': 7.25.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) - react@19.0.0-rc-3edc000d-20240926: {} + react@19.0.0-rc-65a56d0e-20241020: {} - react@19.0.0-rc-5dcb0097-20240918: {} + react@19.0.0-rc-cd22717c-20241013: {} readable-stream@1.0.34: dependencies: @@ -18960,9 +18943,9 @@ snapshots: scheduler@0.0.0-experimental-3edc000d-20240926: {} - scheduler@0.25.0-rc-3edc000d-20240926: {} + scheduler@0.25.0-rc-65a56d0e-20241020: {} - scheduler@0.25.0-rc-5dcb0097-20240918: {} + scheduler@0.25.0-rc-cd22717c-20241013: {} schema-utils@3.3.0: dependencies: @@ -19167,7 +19150,7 @@ snapshots: is-plain-object: 5.0.0 slate: 0.91.4 - slate-react@0.92.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(slate@0.91.4): + slate-react@0.92.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(slate@0.91.4): dependencies: '@juggle/resize-observer': 3.4.0 '@types/is-hotkey': 0.1.10 @@ -19176,8 +19159,8 @@ snapshots: is-hotkey: 0.1.8 is-plain-object: 5.0.0 lodash: 4.17.21 - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-65a56d0e-20241020) scroll-into-view-if-needed: 2.2.31 slate: 0.91.4 tiny-invariant: 1.0.6 @@ -19209,15 +19192,15 @@ snapshots: dependencies: atomic-sleep: 1.0.0 - sonner@1.5.0(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926): + sonner@1.5.0(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020): dependencies: - react: 19.0.0-rc-3edc000d-20240926 - react-dom: 19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926) + react: 19.0.0-rc-65a56d0e-20241020 + react-dom: 19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020) - sonner@1.5.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918): + sonner@1.5.0(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013): dependencies: - react: 19.0.0-rc-5dcb0097-20240918 - react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) + react: 19.0.0-rc-cd22717c-20241013 + react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) sort-keys-length@1.0.1: dependencies: @@ -19413,18 +19396,18 @@ snapshots: stubs@3.0.0: {} - styled-jsx@5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-3edc000d-20240926): + styled-jsx@5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-65a56d0e-20241020): dependencies: client-only: 0.0.1 - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 optionalDependencies: '@babel/core': 7.25.2 babel-plugin-macros: 3.1.0 - styled-jsx@5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-5dcb0097-20240918): + styled-jsx@5.1.6(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-cd22717c-20241013): dependencies: client-only: 0.0.1 - react: 19.0.0-rc-5dcb0097-20240918 + react: 19.0.0-rc-cd22717c-20241013 optionalDependencies: '@babel/core': 7.25.2 babel-plugin-macros: 3.1.0 @@ -19839,7 +19822,7 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 - uploadthing@6.13.2(express@4.19.2)(next@15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4)): + uploadthing@6.13.2(express@4.19.2)(next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4)): dependencies: '@effect/schema': 0.68.12(effect@3.4.5) '@uploadthing/mime-types': 0.2.10 @@ -19849,7 +19832,19 @@ snapshots: std-env: 3.7.0 optionalDependencies: express: 4.19.2 - next: 15.0.0-canary.173(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-3edc000d-20240926(react@19.0.0-rc-3edc000d-20240926))(react@19.0.0-rc-3edc000d-20240926)(sass@1.77.4) + next: 15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-65a56d0e-20241020(react@19.0.0-rc-65a56d0e-20241020))(react@19.0.0-rc-65a56d0e-20241020)(sass@1.77.4) + + uploadthing@6.13.2(express@4.19.2)(next@15.0.0(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.77.4)): + dependencies: + '@effect/schema': 0.68.12(effect@3.4.5) + '@uploadthing/mime-types': 0.2.10 + '@uploadthing/shared': 6.7.8 + consola: 3.2.3 + effect: 3.4.5 + std-env: 3.7.0 + optionalDependencies: + express: 4.19.2 + next: 15.0.0(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.77.4) uri-js@4.4.1: dependencies: @@ -19860,14 +19855,14 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-context-selector@2.0.0(react@19.0.0-rc-3edc000d-20240926)(scheduler@0.0.0-experimental-3edc000d-20240926): + use-context-selector@2.0.0(react@19.0.0-rc-65a56d0e-20241020)(scheduler@0.0.0-experimental-3edc000d-20240926): dependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 scheduler: 0.0.0-experimental-3edc000d-20240926 - use-isomorphic-layout-effect@1.1.2(react@19.0.0-rc-3edc000d-20240926)(types-react@19.0.0-rc.1): + use-isomorphic-layout-effect@1.1.2(react@19.0.0-rc-65a56d0e-20241020)(types-react@19.0.0-rc.1): dependencies: - react: 19.0.0-rc-3edc000d-20240926 + react: 19.0.0-rc-65a56d0e-20241020 optionalDependencies: '@types/react': types-react@19.0.0-rc.1 diff --git a/templates/_template/package.json b/templates/_template/package.json index 074a118a0c..df51e89a6a 100644 --- a/templates/_template/package.json +++ b/templates/_template/package.json @@ -21,10 +21,10 @@ "@payloadcms/richtext-lexical": "beta", "cross-env": "^7.0.3", "graphql": "^16.8.1", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "beta", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "sharp": "0.32.6" }, "devDependencies": { @@ -32,7 +32,7 @@ "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", - "eslint-config-next": "15.0.0-canary.173", + "eslint-config-next": "15.0.0", "typescript": "5.6.3" }, "engines": { diff --git a/templates/blank/package.json b/templates/blank/package.json index 074a118a0c..df51e89a6a 100644 --- a/templates/blank/package.json +++ b/templates/blank/package.json @@ -21,10 +21,10 @@ "@payloadcms/richtext-lexical": "beta", "cross-env": "^7.0.3", "graphql": "^16.8.1", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "beta", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "sharp": "0.32.6" }, "devDependencies": { @@ -32,7 +32,7 @@ "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", - "eslint-config-next": "15.0.0-canary.173", + "eslint-config-next": "15.0.0", "typescript": "5.6.3" }, "engines": { diff --git a/templates/vercel-postgres/package.json b/templates/vercel-postgres/package.json index 3aa99115fc..0974a2eaaf 100644 --- a/templates/vercel-postgres/package.json +++ b/templates/vercel-postgres/package.json @@ -18,10 +18,10 @@ "@payloadcms/storage-vercel-blob": "beta", "@vercel/blob": "^0.22.3", "cross-env": "^7.0.3", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "beta", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "sharp": "0.32.6" }, "devDependencies": { @@ -30,7 +30,7 @@ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "autoprefixer": "^10.0.1", "eslint": "^8", - "eslint-config-next": "15.0.0-canary.173", + "eslint-config-next": "15.0.0", "postcss": "^8", "tailwindcss": "^3.3.0", "typescript": "5.6.3" diff --git a/templates/website/package.json b/templates/website/package.json index 5cb33d4a4d..9997959ae7 100644 --- a/templates/website/package.json +++ b/templates/website/package.json @@ -41,12 +41,12 @@ "jsonwebtoken": "9.0.2", "lexical": "0.18.0", "lucide-react": "^0.378.0", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "beta", "payload-admin-bar": "^1.0.6", "prism-react-renderer": "^2.3.1", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "react-hook-form": "7.45.4", "sharp": "0.32.6", "tailwind-merge": "^2.3.0", @@ -64,7 +64,7 @@ "autoprefixer": "^10.4.19", "copyfiles": "^2.4.1", "eslint": "^8", - "eslint-config-next": "15.0.0-canary.173", + "eslint-config-next": "15.0.0", "postcss": "^8.4.38", "prettier": "^3.0.3", "tailwindcss": "^3.4.3", diff --git a/templates/with-payload-cloud/package.json b/templates/with-payload-cloud/package.json index 488741323c..2389dcbfd0 100644 --- a/templates/with-payload-cloud/package.json +++ b/templates/with-payload-cloud/package.json @@ -21,10 +21,10 @@ "@payloadcms/richtext-lexical": "beta", "cross-env": "^7.0.3", "graphql": "^16.8.1", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "beta", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "sharp": "0.32.6" }, "devDependencies": { @@ -32,7 +32,7 @@ "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", - "eslint-config-next": "15.0.0-canary.173", + "eslint-config-next": "15.0.0", "typescript": "5.6.3" }, "engines": { diff --git a/templates/with-postgres/package.json b/templates/with-postgres/package.json index 4ded39823a..534baea1f6 100644 --- a/templates/with-postgres/package.json +++ b/templates/with-postgres/package.json @@ -22,10 +22,10 @@ "@payloadcms/richtext-lexical": "beta", "cross-env": "^7.0.3", "graphql": "^16.8.1", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "beta", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "sharp": "0.32.6" }, "devDependencies": { @@ -33,7 +33,7 @@ "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", - "eslint-config-next": "15.0.0-canary.173", + "eslint-config-next": "15.0.0", "typescript": "5.6.3" }, "engines": { diff --git a/templates/with-vercel-mongodb/package.json b/templates/with-vercel-mongodb/package.json index cea0e0564b..f1f2fefb51 100644 --- a/templates/with-vercel-mongodb/package.json +++ b/templates/with-vercel-mongodb/package.json @@ -22,17 +22,17 @@ "@payloadcms/storage-vercel-blob": "beta", "cross-env": "^7.0.3", "graphql": "^16.8.1", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "beta", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926" + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020" }, "devDependencies": { "@types/node": "^22.5.4", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", - "eslint-config-next": "15.0.0-canary.173", + "eslint-config-next": "15.0.0", "typescript": "5.6.3" }, "engines": { diff --git a/templates/with-vercel-postgres/package.json b/templates/with-vercel-postgres/package.json index 6ec1b0bf9f..d852ba3762 100644 --- a/templates/with-vercel-postgres/package.json +++ b/templates/with-vercel-postgres/package.json @@ -23,17 +23,17 @@ "@payloadcms/storage-vercel-blob": "beta", "cross-env": "^7.0.3", "graphql": "^16.8.1", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "beta", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926" + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020" }, "devDependencies": { "@types/node": "^22.5.4", "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "eslint": "^8", - "eslint-config-next": "15.0.0-canary.173", + "eslint-config-next": "15.0.0", "typescript": "5.6.3" }, "engines": { diff --git a/test/package.json b/test/package.json index 13fe463839..d377bcb4c8 100644 --- a/test/package.json +++ b/test/package.json @@ -71,11 +71,11 @@ "http-status": "1.6.2", "jwt-decode": "4.0.0", "lexical": "0.18.0", - "next": "15.0.0-canary.173", + "next": "15.0.0", "payload": "workspace:*", "qs-esm": "7.0.2", - "react": "19.0.0-rc-3edc000d-20240926", - "react-dom": "19.0.0-rc-3edc000d-20240926", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "server-only": "^0.0.1", "slate": "0.91.4", "tempy": "^1.0.1", From 69125504af5ef1587a42acd44650cf6efb674e3c Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Tue, 22 Oct 2024 09:33:50 -0400 Subject: [PATCH 090/110] chore(release): v3.0.0-beta.117 [skip ci] --- package.json | 2 +- packages/create-payload-app/package.json | 2 +- packages/db-mongodb/package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- packages/drizzle/package.json | 2 +- packages/email-nodemailer/package.json | 2 +- packages/email-resend/package.json | 2 +- packages/graphql/package.json | 2 +- packages/live-preview-react/package.json | 2 +- packages/live-preview-vue/package.json | 2 +- packages/live-preview/package.json | 2 +- packages/next/package.json | 2 +- packages/payload/package.json | 2 +- packages/plugin-cloud-storage/package.json | 2 +- packages/plugin-cloud/package.json | 2 +- packages/plugin-form-builder/package.json | 2 +- packages/plugin-nested-docs/package.json | 2 +- packages/plugin-redirects/package.json | 2 +- packages/plugin-search/package.json | 2 +- packages/plugin-sentry/package.json | 2 +- packages/plugin-seo/package.json | 2 +- packages/plugin-stripe/package.json | 2 +- packages/richtext-lexical/package.json | 2 +- packages/richtext-slate/package.json | 2 +- packages/storage-azure/package.json | 2 +- packages/storage-gcs/package.json | 2 +- packages/storage-s3/package.json | 2 +- packages/storage-uploadthing/package.json | 2 +- packages/storage-vercel-blob/package.json | 2 +- packages/translations/package.json | 2 +- packages/ui/package.json | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 837552f135..31adf86465 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "private": true, "type": "module", "scripts": { diff --git a/packages/create-payload-app/package.json b/packages/create-payload-app/package.json index f8ce1d2291..8b5f1a9337 100644 --- a/packages/create-payload-app/package.json +++ b/packages/create-payload-app/package.json @@ -1,6 +1,6 @@ { "name": "create-payload-app", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index a10729114e..52d9cce4bc 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The officially supported MongoDB database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index 396cb47a2e..a40600cc43 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The officially supported Postgres database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index d95106ed8e..174d948732 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-sqlite", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The officially supported SQLite database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index e780912b3d..286dcd705c 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-vercel-postgres", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Vercel Postgres adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index 1690036e25..023542f579 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/drizzle", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "A library of shared functions used by different payload database adapters", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-nodemailer/package.json b/packages/email-nodemailer/package.json index 4b09d576b5..0c6b7e3247 100644 --- a/packages/email-nodemailer/package.json +++ b/packages/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-nodemailer", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Payload Nodemailer Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-resend/package.json b/packages/email-resend/package.json index 21342aef90..7392b5754d 100644 --- a/packages/email-resend/package.json +++ b/packages/email-resend/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-resend", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Payload Resend Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/graphql/package.json b/packages/graphql/package.json index 2b36bc2d2a..8ec1953c2c 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index 3061def339..3ba9e2f1e0 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-react", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The official React SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview-vue/package.json b/packages/live-preview-vue/package.json index e5ec38ebdc..07dde61ef9 100644 --- a/packages/live-preview-vue/package.json +++ b/packages/live-preview-vue/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-vue", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The official Vue SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview/package.json b/packages/live-preview/package.json index 86b4ac7824..d310b4c373 100644 --- a/packages/live-preview/package.json +++ b/packages/live-preview/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The official live preview JavaScript SDK for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/next/package.json b/packages/next/package.json index bb5330234c..3baac0ff1e 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/payload/package.json b/packages/payload/package.json index 6f7d2345d9..0d6144fc36 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Node, React, Headless CMS and Application Framework built on Next.js", "keywords": [ "admin panel", diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index 0d2c4399dc..493f1b71bc 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud-storage", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The official cloud storage plugin for Payload CMS", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index 9421565d11..af913d75f7 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The official Payload Cloud plugin", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index 9cb9a15e6d..83ee3e3826 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-form-builder", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Form builder plugin for Payload CMS", "keywords": [ "payload", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index 770d30c17e..76404e41fc 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The official Nested Docs plugin for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index f04f71ec93..02ba28f7c1 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Redirects plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index 1f3737e4a9..eb036332be 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Search plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-sentry/package.json b/packages/plugin-sentry/package.json index aae0022e31..eee9424b43 100644 --- a/packages/plugin-sentry/package.json +++ b/packages/plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-sentry", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Sentry plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index 2b00cc8bf9..92ce2b5a80 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "SEO plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-stripe/package.json b/packages/plugin-stripe/package.json index e4aa43d524..26b984dc6d 100644 --- a/packages/plugin-stripe/package.json +++ b/packages/plugin-stripe/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-stripe", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Stripe plugin for Payload", "keywords": [ "payload", diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index 3b6c29c33d..432624342c 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The officially supported Lexical richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index 73899d79d0..e8d0b74679 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "The officially supported Slate richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-azure/package.json b/packages/storage-azure/package.json index 34a291f217..0eab508b66 100644 --- a/packages/storage-azure/package.json +++ b/packages/storage-azure/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-azure", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Payload storage adapter for Azure Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-gcs/package.json b/packages/storage-gcs/package.json index 869ee73f09..91b2f9e6c0 100644 --- a/packages/storage-gcs/package.json +++ b/packages/storage-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-gcs", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Payload storage adapter for Google Cloud Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-s3/package.json b/packages/storage-s3/package.json index fcc4f8a7c4..fcd1df9ab8 100644 --- a/packages/storage-s3/package.json +++ b/packages/storage-s3/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-s3", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Payload storage adapter for Amazon S3", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-uploadthing/package.json b/packages/storage-uploadthing/package.json index 3ba8ccb975..fd0a72d3f0 100644 --- a/packages/storage-uploadthing/package.json +++ b/packages/storage-uploadthing/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-uploadthing", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Payload storage adapter for uploadthing", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-vercel-blob/package.json b/packages/storage-vercel-blob/package.json index 8ffd86861c..698a0cc9b2 100644 --- a/packages/storage-vercel-blob/package.json +++ b/packages/storage-vercel-blob/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-vercel-blob", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "description": "Payload storage adapter for Vercel Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/translations/package.json b/packages/translations/package.json index 1ab8790fe6..c199ecab71 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/ui/package.json b/packages/ui/package.json index 90cce421ec..7e402c5e4b 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-beta.116", + "version": "3.0.0-beta.117", "homepage": "https://payloadcms.com", "repository": { "type": "git", From 4c396c720e22cbfd6303b1c2493a2fa83f512b9c Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:14:38 +0300 Subject: [PATCH 091/110] fix(db-postgres): alias already in use in this query (#8823) Fixes https://github.com/payloadcms/payload/issues/8517 Reuses existing joins instead of adding new, duplicate ones which causes: ``` Error: Alias "" is already used in this query. ``` --- packages/drizzle/src/queries/addJoinTable.ts | 25 +++++++++++ packages/drizzle/src/queries/buildOrderBy.ts | 1 - .../src/queries/getTableColumnFromPath.ts | 39 ++++++++-------- .../src/utilities/getNameFromDrizzleTable.ts | 9 ++++ test/fields/collections/Array/index.ts | 4 ++ test/fields/int.spec.ts | 44 +++++++++++++++++++ test/fields/payload-types.ts | 1 + 7 files changed, 101 insertions(+), 22 deletions(-) create mode 100644 packages/drizzle/src/queries/addJoinTable.ts create mode 100644 packages/drizzle/src/utilities/getNameFromDrizzleTable.ts diff --git a/packages/drizzle/src/queries/addJoinTable.ts b/packages/drizzle/src/queries/addJoinTable.ts new file mode 100644 index 0000000000..3d9564d4c8 --- /dev/null +++ b/packages/drizzle/src/queries/addJoinTable.ts @@ -0,0 +1,25 @@ +import type { SQL } from 'drizzle-orm' +import type { PgTableWithColumns } from 'drizzle-orm/pg-core' + +import type { GenericTable } from '../types.js' +import type { BuildQueryJoinAliases } from './buildQuery.js' + +import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js' + +export const addJoinTable = ({ + type, + condition, + joins, + table, +}: { + condition: SQL + joins: BuildQueryJoinAliases + table: GenericTable | PgTableWithColumns + type?: 'innerJoin' | 'leftJoin' | 'rightJoin' +}) => { + const name = getNameFromDrizzleTable(table) + + if (!joins.some((eachJoin) => getNameFromDrizzleTable(eachJoin.table) === name)) { + joins.push({ type, condition, table }) + } +} diff --git a/packages/drizzle/src/queries/buildOrderBy.ts b/packages/drizzle/src/queries/buildOrderBy.ts index 5228328263..e90c229a0d 100644 --- a/packages/drizzle/src/queries/buildOrderBy.ts +++ b/packages/drizzle/src/queries/buildOrderBy.ts @@ -55,7 +55,6 @@ export const buildOrderBy = ({ pathSegments: sortPath.replace(/__/g, '.').split('.'), selectFields, tableName, - useAlias: true, value: sortPath, }) orderBy.column = sortTable?.[sortTableColumnName] diff --git a/packages/drizzle/src/queries/getTableColumnFromPath.ts b/packages/drizzle/src/queries/getTableColumnFromPath.ts index 443fece0fa..c2102d9380 100644 --- a/packages/drizzle/src/queries/getTableColumnFromPath.ts +++ b/packages/drizzle/src/queries/getTableColumnFromPath.ts @@ -13,6 +13,7 @@ import type { DrizzleAdapter, GenericColumn } from '../types.js' import type { BuildQueryJoinAliases } from './buildQuery.js' import { isPolymorphicRelationship } from '../utilities/isPolymorphicRelationship.js' +import { addJoinTable } from './addJoinTable.js' import { getTableAlias } from './getTableAlias.js' type Constraint = { @@ -53,7 +54,6 @@ type Args = { * If creating a new table name for arrays and blocks, this suffix should be appended to the table name */ tableNameSuffix?: string - useAlias?: boolean /** * The raw value of the query before sanitization */ @@ -79,7 +79,6 @@ export const getTableColumnFromPath = ({ selectFields, tableName, tableNameSuffix = '', - useAlias, value, }: Args): TableColumn => { const fieldPath = incomingSegments[0] @@ -141,7 +140,6 @@ export const getTableColumnFromPath = ({ selectFields, tableName: newTableName, tableNameSuffix, - useAlias, value, }) } @@ -162,7 +160,6 @@ export const getTableColumnFromPath = ({ selectFields, tableName: newTableName, tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`, - useAlias, value, }) } @@ -181,7 +178,6 @@ export const getTableColumnFromPath = ({ selectFields, tableName: newTableName, tableNameSuffix, - useAlias, value, }) } @@ -190,8 +186,9 @@ export const getTableColumnFromPath = ({ if (locale && field.localized && adapter.payload.config.localization) { newTableName = `${tableName}${adapter.localesSuffix}` - joins.push({ + addJoinTable({ condition: eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), + joins, table: adapter.tables[newTableName], }) if (locale !== 'all') { @@ -217,7 +214,6 @@ export const getTableColumnFromPath = ({ selectFields, tableName: newTableName, tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`, - useAlias, value, }) } @@ -229,11 +225,12 @@ export const getTableColumnFromPath = ({ ) if (locale && field.localized && adapter.payload.config.localization) { - joins.push({ + addJoinTable({ condition: and( eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent), eq(adapter.tables[newTableName]._locale, locale), ), + joins, table: adapter.tables[newTableName], }) if (locale !== 'all') { @@ -244,8 +241,9 @@ export const getTableColumnFromPath = ({ }) } } else { - joins.push({ + addJoinTable({ condition: eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent), + joins, table: adapter.tables[newTableName], }) } @@ -276,8 +274,9 @@ export const getTableColumnFromPath = ({ ] if (locale && field.localized && adapter.payload.config.localization) { - joins.push({ + addJoinTable({ condition: and(...joinConstraints, eq(adapter.tables[newTableName]._locale, locale)), + joins, table: adapter.tables[newTableName], }) if (locale !== 'all') { @@ -288,8 +287,9 @@ export const getTableColumnFromPath = ({ }) } } else { - joins.push({ + addJoinTable({ condition: and(...joinConstraints), + joins, table: adapter.tables[newTableName], }) } @@ -313,11 +313,12 @@ export const getTableColumnFromPath = ({ constraintPath = `${constraintPath}${field.name}.%.` if (locale && field.localized && adapter.payload.config.localization) { - joins.push({ + addJoinTable({ condition: and( eq(arrayParentTable.id, adapter.tables[newTableName]._parentID), eq(adapter.tables[newTableName]._locale, locale), ), + joins, table: adapter.tables[newTableName], }) if (locale !== 'all') { @@ -328,8 +329,9 @@ export const getTableColumnFromPath = ({ }) } } else { - joins.push({ + addJoinTable({ condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID), + joins, table: adapter.tables[newTableName], }) } @@ -345,7 +347,6 @@ export const getTableColumnFromPath = ({ rootTableName, selectFields, tableName: newTableName, - useAlias, value, }) } @@ -404,7 +405,6 @@ export const getTableColumnFromPath = ({ rootTableName, selectFields: blockSelectFields, tableName: newTableName, - useAlias, value, }) } catch (error) { @@ -641,7 +641,6 @@ export const getTableColumnFromPath = ({ rootTableName: newTableName, selectFields, tableName: newTableName, - useAlias, value, }) } else if ( @@ -694,7 +693,6 @@ export const getTableColumnFromPath = ({ pathSegments: pathSegments.slice(1), selectFields, tableName: newTableName, - useAlias, value, }) } @@ -716,12 +714,11 @@ export const getTableColumnFromPath = ({ const parentTable = aliasTable || adapter.tables[tableName] newTableName = `${tableName}${adapter.localesSuffix}` - newTable = useAlias - ? getTableAlias({ adapter, tableName: newTableName }).newAliasTable - : adapter.tables[newTableName] + newTable = adapter.tables[newTableName] - joins.push({ + addJoinTable({ condition: eq(parentTable.id, newTable._parentID), + joins, table: newTable, }) diff --git a/packages/drizzle/src/utilities/getNameFromDrizzleTable.ts b/packages/drizzle/src/utilities/getNameFromDrizzleTable.ts new file mode 100644 index 0000000000..7395c46ab9 --- /dev/null +++ b/packages/drizzle/src/utilities/getNameFromDrizzleTable.ts @@ -0,0 +1,9 @@ +import type { Table } from 'drizzle-orm' + +export const getNameFromDrizzleTable = (table: Table): string => { + const symbol = Object.getOwnPropertySymbols(table).find((symb) => + symb.description.includes('Name'), + ) + + return table[symbol] +} diff --git a/test/fields/collections/Array/index.ts b/test/fields/collections/Array/index.ts index c36f363026..e659196e81 100644 --- a/test/fields/collections/Array/index.ts +++ b/test/fields/collections/Array/index.ts @@ -23,6 +23,10 @@ const ArrayFields: CollectionConfig = { type: 'text', required: true, }, + { + name: 'anotherText', + type: 'text', + }, { name: 'localizedText', type: 'text', diff --git a/test/fields/int.spec.ts b/test/fields/int.spec.ts index 6b0db2021d..843eb291f4 100644 --- a/test/fields/int.spec.ts +++ b/test/fields/int.spec.ts @@ -1546,6 +1546,50 @@ describe('Fields', () => { expect(allLocales.localized.en[0].text).toStrictEqual(enText) expect(allLocales.localized.es[0].text).toStrictEqual(esText) }) + + it('should query by the same array', async () => { + const doc = await payload.create({ + collection, + data: { + items: [ + { + localizedText: 'test', + text: 'required', + anotherText: 'another', + }, + ], + localized: [{ text: 'a' }], + }, + }) + + // left join collection_items + left join collection_items_locales + const { + docs: [res], + } = await payload.find({ + collection, + where: { + and: [ + { + 'items.localizedText': { + equals: 'test', + }, + }, + { + 'items.anotherText': { + equals: 'another', + }, + }, + { + 'items.text': { + equals: 'required', + }, + }, + ], + }, + }) + + expect(res.id).toBe(doc.id) + }) }) describe('group', () => { diff --git a/test/fields/payload-types.ts b/test/fields/payload-types.ts index d3daae2085..3f0c63fb10 100644 --- a/test/fields/payload-types.ts +++ b/test/fields/payload-types.ts @@ -353,6 +353,7 @@ export interface ArrayField { title?: string | null; items: { text: string; + anotherText?: string | null; localizedText?: string | null; subArray?: | { From 8af00f2debce12d5ebe911058fcc112c1142149b Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Tue, 22 Oct 2024 18:05:55 +0300 Subject: [PATCH 092/110] fix: join field works on collections with versions enabled (#8715) - Fixes errors with drizzle when building the schema https://github.com/payloadcms/payload/issues/8680 - Adds `joins` to `db.queryDrafts` to have them when doing `.find` with `draft: true` --- packages/db-mongodb/src/queryDrafts.ts | 37 ++- .../src/utilities/buildJoinAggregation.ts | 11 +- packages/db-sqlite/src/init.ts | 1 - packages/db-sqlite/src/schema/build.ts | 3 - .../db-sqlite/src/schema/traverseFields.ts | 30 --- .../drizzle/src/find/buildFindManyArgs.ts | 3 + packages/drizzle/src/find/findMany.ts | 3 + packages/drizzle/src/find/traverseFields.ts | 217 +++++++++++------- packages/drizzle/src/postgres/init.ts | 1 - packages/drizzle/src/postgres/schema/build.ts | 3 - .../src/postgres/schema/traverseFields.ts | 30 --- packages/drizzle/src/queryDrafts.ts | 16 +- .../src/collections/operations/find.ts | 1 + packages/payload/src/database/types.ts | 1 + test/joins/collections/CategoriesVersions.ts | 20 ++ test/joins/collections/Versions.ts | 22 ++ test/joins/config.ts | 4 + test/joins/int.spec.ts | 38 ++- test/joins/payload-types.ts | 100 +++++--- 19 files changed, 343 insertions(+), 198 deletions(-) create mode 100644 test/joins/collections/CategoriesVersions.ts create mode 100644 test/joins/collections/Versions.ts diff --git a/packages/db-mongodb/src/queryDrafts.ts b/packages/db-mongodb/src/queryDrafts.ts index 5754905d69..fca0ec353d 100644 --- a/packages/db-mongodb/src/queryDrafts.ts +++ b/packages/db-mongodb/src/queryDrafts.ts @@ -6,12 +6,23 @@ import { combineQueries, flattenWhereToOperators } from 'payload' import type { MongooseAdapter } from './index.js' import { buildSortParam } from './queries/buildSortParam.js' +import { buildJoinAggregation } from './utilities/buildJoinAggregation.js' import { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js' import { withSession } from './withSession.js' export const queryDrafts: QueryDrafts = async function queryDrafts( this: MongooseAdapter, - { collection, limit, locale, page, pagination, req = {} as PayloadRequest, sort: sortArg, where }, + { + collection, + joins, + limit, + locale, + page, + pagination, + req = {} as PayloadRequest, + sort: sortArg, + where, + }, ) { const VersionModel = this.versions[collection] const collectionConfig = this.payload.collections[collection].config @@ -89,7 +100,29 @@ export const queryDrafts: QueryDrafts = async function queryDrafts( paginationOptions.options.limit = limit } - const result = await VersionModel.paginate(versionQuery, paginationOptions) + let result + + const aggregate = await buildJoinAggregation({ + adapter: this, + collection, + collectionConfig, + joins, + limit, + locale, + query: versionQuery, + versions: true, + }) + + // build join aggregation + if (aggregate) { + result = await VersionModel.aggregatePaginate( + VersionModel.aggregate(aggregate), + paginationOptions, + ) + } else { + result = await VersionModel.paginate(versionQuery, paginationOptions) + } + const docs = JSON.parse(JSON.stringify(result.docs)) return { diff --git a/packages/db-mongodb/src/utilities/buildJoinAggregation.ts b/packages/db-mongodb/src/utilities/buildJoinAggregation.ts index ea11011f01..332e09d7cc 100644 --- a/packages/db-mongodb/src/utilities/buildJoinAggregation.ts +++ b/packages/db-mongodb/src/utilities/buildJoinAggregation.ts @@ -15,6 +15,8 @@ type BuildJoinAggregationArgs = { locale: string // the where clause for the top collection query?: Where + /** whether the query is from drafts */ + versions?: boolean } export const buildJoinAggregation = async ({ @@ -25,6 +27,7 @@ export const buildJoinAggregation = async ({ limit, locale, query, + versions, }: BuildJoinAggregationArgs): Promise => { if (Object.keys(collectionConfig.joins).length === 0 || joins === false) { return @@ -90,7 +93,7 @@ export const buildJoinAggregation = async ({ if (adapter.payload.config.localization && locale === 'all') { adapter.payload.config.localization.localeCodes.forEach((code) => { - const as = `${join.schemaPath}${code}` + const as = `${versions ? `version.${join.schemaPath}` : join.schemaPath}${code}` aggregate.push( { @@ -98,7 +101,7 @@ export const buildJoinAggregation = async ({ as: `${as}.docs`, foreignField: `${join.field.on}${code}`, from: slug, - localField: '_id', + localField: versions ? 'parent' : '_id', pipeline, }, }, @@ -131,7 +134,7 @@ export const buildJoinAggregation = async ({ } else { const localeSuffix = join.field.localized && adapter.payload.config.localization && locale ? `.${locale}` : '' - const as = `${join.schemaPath}${localeSuffix}` + const as = `${versions ? `version.${join.schemaPath}` : join.schemaPath}${localeSuffix}` aggregate.push( { @@ -139,7 +142,7 @@ export const buildJoinAggregation = async ({ as: `${as}.docs`, foreignField: `${join.field.on}${localeSuffix}`, from: slug, - localField: '_id', + localField: versions ? 'parent' : '_id', pipeline, }, }, diff --git a/packages/db-sqlite/src/init.ts b/packages/db-sqlite/src/init.ts index 1a3b40a994..4a2abfcb33 100644 --- a/packages/db-sqlite/src/init.ts +++ b/packages/db-sqlite/src/init.ts @@ -70,7 +70,6 @@ export const init: Init = async function init(this: SQLiteAdapter) { disableNotNull: !!collection?.versions?.drafts, disableUnique: false, fields: collection.fields, - joins: collection.joins, locales, tableName, timestamps: collection.timestamps, diff --git a/packages/db-sqlite/src/schema/build.ts b/packages/db-sqlite/src/schema/build.ts index b65df477c8..2b10c61d6d 100644 --- a/packages/db-sqlite/src/schema/build.ts +++ b/packages/db-sqlite/src/schema/build.ts @@ -61,7 +61,6 @@ type Args = { disableRelsTableUnique?: boolean disableUnique: boolean fields: Field[] - joins?: SanitizedJoins locales?: [string, ...string[]] rootRelationships?: Set rootRelationsToBuild?: RelationMap @@ -95,7 +94,6 @@ export const buildTable = ({ disableRelsTableUnique, disableUnique = false, fields, - joins, locales, rootRelationships, rootRelationsToBuild, @@ -144,7 +142,6 @@ export const buildTable = ({ disableUnique, fields, indexes, - joins, locales, localesColumns, localesIndexes, diff --git a/packages/db-sqlite/src/schema/traverseFields.ts b/packages/db-sqlite/src/schema/traverseFields.ts index d1896eed7d..d59c358e82 100644 --- a/packages/db-sqlite/src/schema/traverseFields.ts +++ b/packages/db-sqlite/src/schema/traverseFields.ts @@ -44,7 +44,6 @@ type Args = { fields: (Field | TabAsField)[] forceLocalized?: boolean indexes: Record IndexBuilder> - joins?: SanitizedJoins locales: [string, ...string[]] localesColumns: Record localesIndexes: Record IndexBuilder> @@ -84,7 +83,6 @@ export const traverseFields = ({ fields, forceLocalized, indexes, - joins, locales, localesColumns, localesIndexes, @@ -669,7 +667,6 @@ export const traverseFields = ({ fields: field.fields, forceLocalized, indexes, - joins, locales, localesColumns, localesIndexes, @@ -725,7 +722,6 @@ export const traverseFields = ({ fields: field.fields, forceLocalized: field.localized, indexes, - joins, locales, localesColumns, localesIndexes, @@ -782,7 +778,6 @@ export const traverseFields = ({ fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })), forceLocalized, indexes, - joins, locales, localesColumns, localesIndexes, @@ -839,7 +834,6 @@ export const traverseFields = ({ fields: field.fields, forceLocalized, indexes, - joins, locales, localesColumns, localesIndexes, @@ -937,30 +931,6 @@ export const traverseFields = ({ break - case 'join': { - // fieldName could be 'posts' or 'group_posts' - // using `on` as the key for the relation - const localized = adapter.payload.config.localization && field.localized - const fieldSchemaPath = `${fieldPrefix || ''}${field.name}` - let target: string - const joinConfig = joins[field.collection].find( - ({ schemaPath }) => fieldSchemaPath === schemaPath, - ) - if (joinConfig.targetField.hasMany) { - target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}` - } else { - target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}` - } - relationsToBuild.set(fieldName, { - type: 'many', - // joins are not localized on the parent table - localized: false, - relationName: field.on.replaceAll('.', '_'), - target, - }) - break - } - default: break } diff --git a/packages/drizzle/src/find/buildFindManyArgs.ts b/packages/drizzle/src/find/buildFindManyArgs.ts index 63239975ca..418a3da3ba 100644 --- a/packages/drizzle/src/find/buildFindManyArgs.ts +++ b/packages/drizzle/src/find/buildFindManyArgs.ts @@ -16,6 +16,7 @@ type BuildFindQueryArgs = { joins?: BuildQueryJoinAliases locale?: string tableName: string + versions?: boolean } export type Result = { @@ -34,6 +35,7 @@ export const buildFindManyArgs = ({ joins = [], locale, tableName, + versions, }: BuildFindQueryArgs): Record => { const result: Result = { extras: {}, @@ -97,6 +99,7 @@ export const buildFindManyArgs = ({ tablePath: '', topLevelArgs: result, topLevelTableName: tableName, + versions, }) return result diff --git a/packages/drizzle/src/find/findMany.ts b/packages/drizzle/src/find/findMany.ts index a5500642b8..a3a8a42ba7 100644 --- a/packages/drizzle/src/find/findMany.ts +++ b/packages/drizzle/src/find/findMany.ts @@ -14,6 +14,7 @@ type Args = { adapter: DrizzleAdapter fields: Field[] tableName: string + versions?: boolean } & Omit export const findMany = async function find({ @@ -28,6 +29,7 @@ export const findMany = async function find({ skip, sort, tableName, + versions, where: whereArg, }: Args) { const db = adapter.sessions[await req.transactionID]?.db || adapter.drizzle @@ -71,6 +73,7 @@ export const findMany = async function find({ joinQuery, joins, tableName, + versions, }) selectDistinctMethods.push({ args: [offset], method: 'offset' }) diff --git a/packages/drizzle/src/find/traverseFields.ts b/packages/drizzle/src/find/traverseFields.ts index 9c092a439b..35f7a78750 100644 --- a/packages/drizzle/src/find/traverseFields.ts +++ b/packages/drizzle/src/find/traverseFields.ts @@ -1,4 +1,3 @@ -import type { DBQueryConfig } from 'drizzle-orm' import type { LibSQLDatabase } from 'drizzle-orm/libsql' import type { Field, JoinQuery } from 'payload' @@ -26,6 +25,7 @@ type TraverseFieldArgs = { tablePath: string topLevelArgs: Record topLevelTableName: string + versions?: boolean } export const traverseFields = ({ @@ -42,6 +42,7 @@ export const traverseFields = ({ tablePath, topLevelArgs, topLevelTableName, + versions, }: TraverseFieldArgs) => { fields.forEach((field) => { if (fieldIsVirtual(field)) { @@ -99,6 +100,7 @@ export const traverseFields = ({ tablePath: tabTablePath, topLevelArgs, topLevelTableName, + versions, }) }) @@ -223,6 +225,7 @@ export const traverseFields = ({ tablePath: `${tablePath}${toSnakeCase(field.name)}_`, topLevelArgs, topLevelTableName, + versions, }) break @@ -233,87 +236,156 @@ export const traverseFields = ({ if (joinQuery === false) { break } + const { limit: limitArg = 10, sort, where, } = joinQuery[`${path.replaceAll('_', '.')}${field.name}`] || {} let limit = limitArg + if (limit !== 0) { // get an additional document and slice it later to determine if there is a next page limit += 1 } const fields = adapter.payload.collections[field.collection].config.fields + const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection)) - let joinTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${ - field.localized && adapter.payload.config.localization ? adapter.localesSuffix : '' - }` + const joins: BuildQueryJoinAliases = [] + + const buildQueryResult = buildQuery({ + adapter, + fields, + joins, + locale, + sort, + tableName: joinCollectionTableName, + where, + }) + + let subQueryWhere = buildQueryResult.where + const orderBy = buildQueryResult.orderBy + + let joinLocalesCollectionTableName: string | undefined + + const currentIDColumn = versions + ? adapter.tables[currentTableName].parent + : adapter.tables[currentTableName].id + + // Handle hasMany _rels table if (field.hasMany) { - const db = adapter.drizzle as LibSQLDatabase - if (field.localized) { - joinTableName = adapter.tableNameMap.get(toSnakeCase(field.collection)) - } - const joinTable = `${joinTableName}${adapter.relationshipsSuffix}` + const joinRelsCollectionTableName = `${joinCollectionTableName}${adapter.relationshipsSuffix}` - const joins: BuildQueryJoinAliases = [ - { + if (field.localized) { + joinLocalesCollectionTableName = joinRelsCollectionTableName + } + + let columnReferenceToCurrentID: string + + if (versions) { + columnReferenceToCurrentID = `${topLevelTableName.replace('_', '').replace(new RegExp(`${adapter.versionsSuffix}$`), '')}_id` + } else { + columnReferenceToCurrentID = `${topLevelTableName}_id` + } + + joins.push({ + type: 'innerJoin', + condition: and( + eq( + adapter.tables[joinRelsCollectionTableName].parent, + adapter.tables[joinCollectionTableName].id, + ), + eq( + sql.raw(`"${joinRelsCollectionTableName}"."${columnReferenceToCurrentID}"`), + currentIDColumn, + ), + eq(adapter.tables[joinRelsCollectionTableName].path, field.on), + ), + table: adapter.tables[joinRelsCollectionTableName], + }) + } else { + // Handle localized without hasMany + + const foreignColumn = field.on.replaceAll('.', '_') + + if (field.localized) { + joinLocalesCollectionTableName = `${joinCollectionTableName}${adapter.localesSuffix}` + + joins.push({ type: 'innerJoin', condition: and( - eq(adapter.tables[joinTable].parent, adapter.tables[joinTableName].id), eq( - sql.raw(`"${joinTable}"."${topLevelTableName}_id"`), - adapter.tables[currentTableName].id, + adapter.tables[joinLocalesCollectionTableName]._parentID, + adapter.tables[joinCollectionTableName].id, + ), + eq( + adapter.tables[joinLocalesCollectionTableName][foreignColumn], + currentIDColumn, ), - eq(adapter.tables[joinTable].path, field.on), ), - table: adapter.tables[joinTable], - }, - ] - - const { orderBy, where: subQueryWhere } = buildQuery({ - adapter, - fields, - joins, - locale, - sort, - tableName: joinCollectionTableName, - where: {}, - }) - - const chainedMethods: ChainedMethods = [] - - joins.forEach(({ type, condition, table }) => { - chainedMethods.push({ - args: [table, condition], - method: type ?? 'leftJoin', + table: adapter.tables[joinLocalesCollectionTableName], }) + // Handle without localized and without hasMany, just a condition append to where. With localized the inner join handles eq. + } else { + const constraint = eq( + adapter.tables[joinCollectionTableName][foreignColumn], + currentIDColumn, + ) + + if (subQueryWhere) { + subQueryWhere = and(subQueryWhere, constraint) + } else { + subQueryWhere = constraint + } + } + } + + const chainedMethods: ChainedMethods = [] + + joins.forEach(({ type, condition, table }) => { + chainedMethods.push({ + args: [table, condition], + method: type ?? 'leftJoin', }) + }) - const subQuery = chainMethods({ - methods: chainedMethods, - query: db - .select({ - id: adapter.tables[joinTableName].id, - ...(field.localized && { - locale: adapter.tables[joinTable].locale, - }), - }) - .from(adapter.tables[joinTableName]) - .where(subQueryWhere) - .orderBy(orderBy.order(orderBy.column)) - .limit(limit), + if (limit !== 0) { + chainedMethods.push({ + args: [limit], + method: 'limit', }) + } - const columnName = `${path.replaceAll('.', '_')}${field.name}` + const db = adapter.drizzle as LibSQLDatabase - const jsonObjectSelect = field.localized - ? sql.raw(`'_parentID', "id", '_locale', "locale"`) - : sql.raw(`'id', "id"`) + const subQuery = chainMethods({ + methods: chainedMethods, + query: db + .select({ + id: adapter.tables[joinCollectionTableName].id, + ...(joinLocalesCollectionTableName && { + locale: + adapter.tables[joinLocalesCollectionTableName].locale || + adapter.tables[joinLocalesCollectionTableName]._locale, + }), + }) + .from(adapter.tables[joinCollectionTableName]) + .where(subQueryWhere) + .orderBy(orderBy.order(orderBy.column)), + }) - if (adapter.name === 'sqlite') { - currentArgs.extras[columnName] = sql` + const columnName = `${path.replaceAll('.', '_')}${field.name}` + + const jsonObjectSelect = field.localized + ? sql.raw( + `'_parentID', "id", '_locale', "${adapter.tables[joinLocalesCollectionTableName].locale ? 'locale' : '_locale'}"`, + ) + : sql.raw(`'id', "id"`) + + if (adapter.name === 'sqlite') { + currentArgs.extras[columnName] = sql` COALESCE(( SELECT json_group_array(json_object(${jsonObjectSelect})) FROM ( @@ -321,8 +393,8 @@ export const traverseFields = ({ ) AS ${sql.raw(`${columnName}_sub`)} ), '[]') `.as(columnName) - } else { - currentArgs.extras[columnName] = sql` + } else { + currentArgs.extras[columnName] = sql` COALESCE(( SELECT json_agg(json_build_object(${jsonObjectSelect})) FROM ( @@ -330,41 +402,8 @@ export const traverseFields = ({ ) AS ${sql.raw(`${columnName}_sub`)} ), '[]'::json) `.as(columnName) - } - - break } - const selectFields = {} - - const withJoin: DBQueryConfig<'many', true, any, any> = { - columns: selectFields, - } - if (limit) { - withJoin.limit = limit - } - - if (field.localized) { - withJoin.columns._locale = true - withJoin.columns._parentID = true - } else { - withJoin.columns.id = true - withJoin.columns.parent = true - } - const { orderBy, where: joinWhere } = buildQuery({ - adapter, - fields, - joins, - locale, - sort, - tableName: joinTableName, - where, - }) - if (joinWhere) { - withJoin.where = () => joinWhere - } - withJoin.orderBy = orderBy.order(orderBy.column) - currentArgs.with[`${path.replaceAll('.', '_')}${field.name}`] = withJoin break } diff --git a/packages/drizzle/src/postgres/init.ts b/packages/drizzle/src/postgres/init.ts index c9ed8996d6..c76f4d9457 100644 --- a/packages/drizzle/src/postgres/init.ts +++ b/packages/drizzle/src/postgres/init.ts @@ -57,7 +57,6 @@ export const init: Init = async function init(this: BasePostgresAdapter) { disableNotNull: !!collection?.versions?.drafts, disableUnique: false, fields: collection.fields, - joins: collection.joins, tableName, timestamps: collection.timestamps, versions: false, diff --git a/packages/drizzle/src/postgres/schema/build.ts b/packages/drizzle/src/postgres/schema/build.ts index c374b329f8..e5a69ff208 100644 --- a/packages/drizzle/src/postgres/schema/build.ts +++ b/packages/drizzle/src/postgres/schema/build.ts @@ -50,7 +50,6 @@ type Args = { disableRelsTableUnique?: boolean disableUnique: boolean fields: Field[] - joins?: SanitizedJoins rootRelationships?: Set rootRelationsToBuild?: RelationMap rootTableIDColType?: string @@ -83,7 +82,6 @@ export const buildTable = ({ disableRelsTableUnique = false, disableUnique = false, fields, - joins, rootRelationships, rootRelationsToBuild, rootTableIDColType, @@ -133,7 +131,6 @@ export const buildTable = ({ disableUnique, fields, indexes, - joins, localesColumns, localesIndexes, newTableName: tableName, diff --git a/packages/drizzle/src/postgres/schema/traverseFields.ts b/packages/drizzle/src/postgres/schema/traverseFields.ts index 81f8a82378..4a53ea784c 100644 --- a/packages/drizzle/src/postgres/schema/traverseFields.ts +++ b/packages/drizzle/src/postgres/schema/traverseFields.ts @@ -50,7 +50,6 @@ type Args = { fields: (Field | TabAsField)[] forceLocalized?: boolean indexes: Record IndexBuilder> - joins?: SanitizedJoins localesColumns: Record localesIndexes: Record IndexBuilder> newTableName: string @@ -89,7 +88,6 @@ export const traverseFields = ({ fields, forceLocalized, indexes, - joins, localesColumns, localesIndexes, newTableName, @@ -672,7 +670,6 @@ export const traverseFields = ({ fields: field.fields, forceLocalized, indexes, - joins, localesColumns, localesIndexes, newTableName, @@ -727,7 +724,6 @@ export const traverseFields = ({ fields: field.fields, forceLocalized: field.localized, indexes, - joins, localesColumns, localesIndexes, newTableName: `${parentTableName}_${columnName}`, @@ -783,7 +779,6 @@ export const traverseFields = ({ fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })), forceLocalized, indexes, - joins, localesColumns, localesIndexes, newTableName, @@ -839,7 +834,6 @@ export const traverseFields = ({ fields: field.fields, forceLocalized, indexes, - joins, localesColumns, localesIndexes, newTableName, @@ -936,30 +930,6 @@ export const traverseFields = ({ break - case 'join': { - // fieldName could be 'posts' or 'group_posts' - // using `on` as the key for the relation - const localized = adapter.payload.config.localization && field.localized - const fieldSchemaPath = `${fieldPrefix || ''}${field.name}` - let target: string - const joinConfig = joins[field.collection].find( - ({ schemaPath }) => fieldSchemaPath === schemaPath, - ) - if (joinConfig.targetField.hasMany) { - target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}` - } else { - target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}` - } - relationsToBuild.set(fieldName, { - type: 'many', - // joins are not localized on the parent table - localized: false, - relationName: field.on.replaceAll('.', '_'), - target, - }) - break - } - default: break } diff --git a/packages/drizzle/src/queryDrafts.ts b/packages/drizzle/src/queryDrafts.ts index 00386a2a50..9c32f1fbd7 100644 --- a/packages/drizzle/src/queryDrafts.ts +++ b/packages/drizzle/src/queryDrafts.ts @@ -1,4 +1,4 @@ -import type { PayloadRequest, QueryDrafts, SanitizedCollectionConfig } from 'payload' +import type { JoinQuery, PayloadRequest, QueryDrafts, SanitizedCollectionConfig } from 'payload' import { buildVersionCollectionFields, combineQueries } from 'payload' import toSnakeCase from 'to-snake-case' @@ -9,7 +9,17 @@ import { findMany } from './find/findMany.js' export const queryDrafts: QueryDrafts = async function queryDrafts( this: DrizzleAdapter, - { collection, limit, locale, page = 1, pagination, req = {} as PayloadRequest, sort, where }, + { + collection, + joins, + limit, + locale, + page = 1, + pagination, + req = {} as PayloadRequest, + sort, + where, + }, ) { const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config const tableName = this.tableNameMap.get( @@ -22,6 +32,7 @@ export const queryDrafts: QueryDrafts = async function queryDrafts( const result = await findMany({ adapter: this, fields, + joins, limit, locale, page, @@ -29,6 +40,7 @@ export const queryDrafts: QueryDrafts = async function queryDrafts( req, sort, tableName, + versions: true, where: combinedWhere, }) diff --git a/packages/payload/src/collections/operations/find.ts b/packages/payload/src/collections/operations/find.ts index ccb41f8119..cb90b774e8 100644 --- a/packages/payload/src/collections/operations/find.ts +++ b/packages/payload/src/collections/operations/find.ts @@ -126,6 +126,7 @@ export const findOperation = async ( result = await payload.db.queryDrafts>({ collection: collectionConfig.slug, + joins: req.payloadAPI === 'GraphQL' ? false : joins, limit: sanitizedLimit, locale, page: sanitizedPage, diff --git a/packages/payload/src/database/types.ts b/packages/payload/src/database/types.ts index e82564d3e6..03b0967ddb 100644 --- a/packages/payload/src/database/types.ts +++ b/packages/payload/src/database/types.ts @@ -174,6 +174,7 @@ export type CommitTransaction = (id: number | Promise | string) export type QueryDraftsArgs = { collection: string + joins?: JoinQuery limit?: number locale?: string page?: number diff --git a/test/joins/collections/CategoriesVersions.ts b/test/joins/collections/CategoriesVersions.ts new file mode 100644 index 0000000000..521cd2b92b --- /dev/null +++ b/test/joins/collections/CategoriesVersions.ts @@ -0,0 +1,20 @@ +import type { CollectionConfig } from 'payload' + +import { versionsSlug } from './Versions.js' + +export const categoriesVersionsSlug = 'categories-versions' + +export const CategoriesVersions: CollectionConfig = { + slug: categoriesVersionsSlug, + fields: [ + { + name: 'relatedVersions', + type: 'join', + collection: versionsSlug, + on: 'categoryVersion', + }, + ], + versions: { + drafts: true, + }, +} diff --git a/test/joins/collections/Versions.ts b/test/joins/collections/Versions.ts new file mode 100644 index 0000000000..5c1f2d7848 --- /dev/null +++ b/test/joins/collections/Versions.ts @@ -0,0 +1,22 @@ +import type { CollectionConfig } from 'payload' + +export const versionsSlug = 'versions' + +export const Versions: CollectionConfig = { + slug: versionsSlug, + fields: [ + { + name: 'category', + relationTo: 'categories', + type: 'relationship', + }, + { + name: 'categoryVersion', + relationTo: 'categories-versions', + type: 'relationship', + }, + ], + versions: { + drafts: true, + }, +} diff --git a/test/joins/config.ts b/test/joins/config.ts index 4a083adda3..8d56b04e5f 100644 --- a/test/joins/config.ts +++ b/test/joins/config.ts @@ -3,8 +3,10 @@ import path from 'path' import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js' import { Categories } from './collections/Categories.js' +import { CategoriesVersions } from './collections/CategoriesVersions.js' import { Posts } from './collections/Posts.js' import { Uploads } from './collections/Uploads.js' +import { Versions } from './collections/Versions.js' import { seed } from './seed.js' import { localizedCategoriesSlug, localizedPostsSlug } from './shared.js' @@ -16,6 +18,8 @@ export default buildConfigWithDefaults({ Posts, Categories, Uploads, + Versions, + CategoriesVersions, { slug: localizedPostsSlug, admin: { diff --git a/test/joins/int.spec.ts b/test/joins/int.spec.ts index e5b0857f72..d700379dda 100644 --- a/test/joins/int.spec.ts +++ b/test/joins/int.spec.ts @@ -1,4 +1,4 @@ -import type { Payload } from 'payload' +import type { Payload, TypeWithID } from 'payload' import path from 'path' import { getFileByPath } from 'payload' @@ -373,6 +373,42 @@ describe('Joins Field', () => { }) }) + describe('Joins with versions', () => { + afterEach(async () => { + await payload.delete({ collection: 'versions', where: {} }) + await payload.delete({ collection: 'categories-versions', where: {} }) + }) + + it('should populate joins when versions on both sides draft false', async () => { + const category = await payload.create({ collection: 'categories-versions', data: {} }) + + const version = await payload.create({ + collection: 'versions', + data: { categoryVersion: category.id }, + }) + + const res = await payload.find({ collection: 'categories-versions', draft: false }) + + expect(res.docs[0].relatedVersions.docs[0].id).toBe(version.id) + }) + + it('should populate joins when versions on both sides draft true payload.db.queryDrafts', async () => { + const category = await payload.create({ collection: 'categories-versions', data: {} }) + + const version = await payload.create({ + collection: 'versions', + data: { categoryVersion: category.id }, + }) + + const res = await payload.find({ + collection: 'categories-versions', + draft: true, + }) + + expect(res.docs[0].relatedVersions.docs[0].id).toBe(version.id) + }) + }) + describe('REST', () => { it('should have simple paginate for joins', async () => { const query = { diff --git a/test/joins/payload-types.ts b/test/joins/payload-types.ts index b792dfa96d..075594ca7d 100644 --- a/test/joins/payload-types.ts +++ b/test/joins/payload-types.ts @@ -14,6 +14,8 @@ export interface Config { posts: Post; categories: Category; uploads: Upload; + versions: Version; + 'categories-versions': CategoriesVersion; 'localized-posts': LocalizedPost; 'localized-categories': LocalizedCategory; users: User; @@ -22,7 +24,7 @@ export interface Config { 'payload-migrations': PayloadMigration; }; db: { - defaultIDType: number; + defaultIDType: string; }; globals: {}; locale: 'en' | 'es'; @@ -53,15 +55,15 @@ export interface UserAuthOperations { * via the `definition` "posts". */ export interface Post { - id: number; + id: string; title?: string | null; - upload?: (number | null) | Upload; - category?: (number | null) | Category; - categories?: (number | Category)[] | null; - categoriesLocalized?: (number | Category)[] | null; + upload?: (string | null) | Upload; + category?: (string | null) | Category; + categories?: (string | Category)[] | null; + categoriesLocalized?: (string | Category)[] | null; group?: { - category?: (number | null) | Category; - camelCaseCategory?: (number | null) | Category; + category?: (string | null) | Category; + camelCaseCategory?: (string | null) | Category; }; updatedAt: string; createdAt: string; @@ -71,9 +73,9 @@ export interface Post { * via the `definition` "uploads". */ export interface Upload { - id: number; + id: string; relatedPosts?: { - docs?: (number | Post)[] | null; + docs?: (string | Post)[] | null; hasNextPage?: boolean | null; } | null; updatedAt: string; @@ -93,41 +95,67 @@ export interface Upload { * via the `definition` "categories". */ export interface Category { - id: number; + id: string; name?: string | null; relatedPosts?: { - docs?: (number | Post)[] | null; + docs?: (string | Post)[] | null; hasNextPage?: boolean | null; } | null; hasManyPosts?: { - docs?: (number | Post)[] | null; + docs?: (string | Post)[] | null; hasNextPage?: boolean | null; } | null; hasManyPostsLocalized?: { - docs?: (number | Post)[] | null; + docs?: (string | Post)[] | null; hasNextPage?: boolean | null; } | null; group?: { relatedPosts?: { - docs?: (number | Post)[] | null; + docs?: (string | Post)[] | null; hasNextPage?: boolean | null; } | null; camelCasePosts?: { - docs?: (number | Post)[] | null; + docs?: (string | Post)[] | null; hasNextPage?: boolean | null; } | null; }; updatedAt: string; createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "versions". + */ +export interface Version { + id: string; + category?: (string | null) | Category; + categoryVersion?: (string | null) | CategoriesVersion; + updatedAt: string; + createdAt: string; + _status?: ('draft' | 'published') | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "categories-versions". + */ +export interface CategoriesVersion { + id: string; + relatedVersions?: { + docs?: (string | Version)[] | null; + hasNextPage?: boolean | null; + } | null; + updatedAt: string; + createdAt: string; + _status?: ('draft' | 'published') | null; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "localized-posts". */ export interface LocalizedPost { - id: number; + id: string; title?: string | null; - category?: (number | null) | LocalizedCategory; + category?: (string | null) | LocalizedCategory; updatedAt: string; createdAt: string; } @@ -136,10 +164,10 @@ export interface LocalizedPost { * via the `definition` "localized-categories". */ export interface LocalizedCategory { - id: number; + id: string; name?: string | null; relatedPosts?: { - docs?: (number | LocalizedPost)[] | null; + docs?: (string | LocalizedPost)[] | null; hasNextPage?: boolean | null; } | null; updatedAt: string; @@ -150,7 +178,7 @@ export interface LocalizedCategory { * via the `definition` "users". */ export interface User { - id: number; + id: string; updatedAt: string; createdAt: string; email: string; @@ -167,36 +195,44 @@ export interface User { * via the `definition` "payload-locked-documents". */ export interface PayloadLockedDocument { - id: number; + id: string; document?: | ({ relationTo: 'posts'; - value: number | Post; + value: string | Post; } | null) | ({ relationTo: 'categories'; - value: number | Category; + value: string | Category; } | null) | ({ relationTo: 'uploads'; - value: number | Upload; + value: string | Upload; + } | null) + | ({ + relationTo: 'versions'; + value: string | Version; + } | null) + | ({ + relationTo: 'categories-versions'; + value: string | CategoriesVersion; } | null) | ({ relationTo: 'localized-posts'; - value: number | LocalizedPost; + value: string | LocalizedPost; } | null) | ({ relationTo: 'localized-categories'; - value: number | LocalizedCategory; + value: string | LocalizedCategory; } | null) | ({ relationTo: 'users'; - value: number | User; + value: string | User; } | null); globalSlug?: string | null; user: { relationTo: 'users'; - value: number | User; + value: string | User; }; updatedAt: string; createdAt: string; @@ -206,10 +242,10 @@ export interface PayloadLockedDocument { * via the `definition` "payload-preferences". */ export interface PayloadPreference { - id: number; + id: string; user: { relationTo: 'users'; - value: number | User; + value: string | User; }; key?: string | null; value?: @@ -229,7 +265,7 @@ export interface PayloadPreference { * via the `definition` "payload-migrations". */ export interface PayloadMigration { - id: number; + id: string; name?: string | null; batch?: number | null; updatedAt: string; From 5ea8d2c196d8489e55000a977697a758cceef1d9 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:50:48 +0300 Subject: [PATCH 093/110] docs: append the beta tag to plugins installation commands (#8831) Example: ```sh pnpm add @payloadcms/plugin-sentry ``` to: ```sh pnpm add @payloadcms/plugin-sentry@beta ``` Because of this, people can be confused with the wrong installed version. We'll change it back on stable --- docs/graphql/graphql-schema.mdx | 2 +- docs/plugins/form-builder.mdx | 2 +- docs/plugins/nested-docs.mdx | 2 +- docs/plugins/redirects.mdx | 2 +- docs/plugins/search.mdx | 2 +- docs/plugins/sentry.mdx | 2 +- docs/plugins/seo.mdx | 2 +- docs/plugins/stripe.mdx | 2 +- docs/upload/storage-adapters.mdx | 12 ++++++------ 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/graphql/graphql-schema.mdx b/docs/graphql/graphql-schema.mdx index 7f34fb5565..24600fc152 100644 --- a/docs/graphql/graphql-schema.mdx +++ b/docs/graphql/graphql-schema.mdx @@ -13,7 +13,7 @@ In Payload the schema is controlled by your collections and globals. All you nee Install `@payloadcms/graphql` as a dev dependency: ```bash -pnpm add @payloadcms/graphql --save-dev +pnpm add @payloadcms/graphql@beta -D ``` Run the following command to generate the schema: diff --git a/docs/plugins/form-builder.mdx b/docs/plugins/form-builder.mdx index a0b8849ac5..5510b0c61d 100644 --- a/docs/plugins/form-builder.mdx +++ b/docs/plugins/form-builder.mdx @@ -36,7 +36,7 @@ Forms can be as simple or complex as you need, from a basic contact form, to a m Install the plugin using any JavaScript package manager like [Yarn](https://yarnpkg.com), [NPM](https://npmjs.com), or [PNPM](https://pnpm.io): ```bash -pnpm add @payloadcms/plugin-form-builder +pnpm add @payloadcms/plugin-form-builder@beta ``` ## Basic Usage diff --git a/docs/plugins/nested-docs.mdx b/docs/plugins/nested-docs.mdx index b75375ac4a..ea5c892b0f 100644 --- a/docs/plugins/nested-docs.mdx +++ b/docs/plugins/nested-docs.mdx @@ -48,7 +48,7 @@ Install the plugin using any JavaScript package manager like [Yarn](https://yarn or [PNPM](https://pnpm.io): ```bash - pnpm add @payloadcms/plugin-nested-docs + pnpm add @payloadcms/plugin-nested-docs@beta ``` ## Basic Usage diff --git a/docs/plugins/redirects.mdx b/docs/plugins/redirects.mdx index 1cf4c63634..e1deea0179 100644 --- a/docs/plugins/redirects.mdx +++ b/docs/plugins/redirects.mdx @@ -32,7 +32,7 @@ For example, if you have a page at `/about` and you want to change it to `/about Install the plugin using any JavaScript package manager like [Yarn](https://yarnpkg.com), [NPM](https://npmjs.com), or [PNPM](https://pnpm.io): ```bash - pnpm add @payloadcms/plugin-redirects + pnpm add @payloadcms/plugin-redirects@beta ``` ## Basic Usage diff --git a/docs/plugins/search.mdx b/docs/plugins/search.mdx index 2e92308e8b..47ee484e2d 100644 --- a/docs/plugins/search.mdx +++ b/docs/plugins/search.mdx @@ -39,7 +39,7 @@ This plugin is a great way to implement a fast, immersive search experience such Install the plugin using any JavaScript package manager like [Yarn](https://yarnpkg.com), [NPM](https://npmjs.com), or [PNPM](https://pnpm.io): ```bash - pnpm add @payloadcms/plugin-search + pnpm add @payloadcms/plugin-search@beta ``` ## Basic Usage diff --git a/docs/plugins/sentry.mdx b/docs/plugins/sentry.mdx index 0ac5263564..0f653cf75e 100644 --- a/docs/plugins/sentry.mdx +++ b/docs/plugins/sentry.mdx @@ -39,7 +39,7 @@ This multi-faceted software offers a range of features that will help you manage Install the plugin using any JavaScript package manager like [Yarn](https://yarnpkg.com), [NPM](https://npmjs.com), or [PNPM](https://pnpm.io): ```bash - pnpm add @payloadcms/plugin-sentry + pnpm add @payloadcms/plugin-sentry@beta ``` ## Sentry for Next.js setup diff --git a/docs/plugins/seo.mdx b/docs/plugins/seo.mdx index 8e892db353..29bc06c9c0 100644 --- a/docs/plugins/seo.mdx +++ b/docs/plugins/seo.mdx @@ -37,7 +37,7 @@ To help you visualize what your page might look like in a search engine, a previ Install the plugin using any JavaScript package manager like [Yarn](https://yarnpkg.com), [NPM](https://npmjs.com), or [PNPM](https://pnpm.io): ```bash - pnpm add @payloadcms/plugin-seo + pnpm add @payloadcms/plugin-seo@beta ``` ## Basic Usage diff --git a/docs/plugins/stripe.mdx b/docs/plugins/stripe.mdx index 3108f92e14..406faed4eb 100644 --- a/docs/plugins/stripe.mdx +++ b/docs/plugins/stripe.mdx @@ -39,7 +39,7 @@ The beauty of this plugin is the entirety of your application's content and busi Install the plugin using any JavaScript package manager like [Yarn](https://yarnpkg.com), [NPM](https://npmjs.com), or [PNPM](https://pnpm.io): ```bash - pnpm add @payloadcms/plugin-stripe + pnpm add @payloadcms/plugin-stripe@beta ``` ## Basic Usage diff --git a/docs/upload/storage-adapters.mdx b/docs/upload/storage-adapters.mdx index 4b4ac09c2e..d02dfdd5b7 100644 --- a/docs/upload/storage-adapters.mdx +++ b/docs/upload/storage-adapters.mdx @@ -22,7 +22,7 @@ Payload offers additional storage adapters to handle file uploads. These adapter ### Installation ```sh -pnpm add @payloadcms/storage-vercel-blob +pnpm add @payloadcms/storage-vercel-blob@beta ``` ### Usage @@ -71,7 +71,7 @@ export default buildConfig({ ### Installation ```sh -pnpm add @payloadcms/storage-s3 +pnpm add @payloadcms/storage-s3@beta ``` ### Usage @@ -119,7 +119,7 @@ See the the [AWS SDK Package](https://github.com/aws/aws-sdk-js-v3) and [`S3Clie ### Installation ```sh -pnpm add @payloadcms/storage-azure +pnpm add @payloadcms/storage-azure@beta ``` ### Usage @@ -168,7 +168,7 @@ export default buildConfig({ ### Installation ```sh -pnpm add @payloadcms/storage-gcs +pnpm add @payloadcms/storage-gcs@beta ``` ### Usage @@ -218,7 +218,7 @@ export default buildConfig({ ### Installation ```sh -pnpm add @payloadcms/storage-uploadthing +pnpm add @payloadcms/storage-uploadthing@beta ``` ### Usage @@ -261,7 +261,7 @@ If you need to create a custom storage adapter, you can use the [`@payloadcms/pl ### Installation -`pnpm add @payloadcms/plugin-cloud-storage` +`pnpm add @payloadcms/plugin-cloud-storage@beta` ### Usage From 52b1d332dbc699536180cfbe205d5055787d4fe6 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Tue, 22 Oct 2024 23:19:48 +0300 Subject: [PATCH 094/110] chore: fixes dev server doesn't drop the database (#8834) Apparently, `nextDev` seems to run in a different process and has its own env variables, we can run the dev server the same way we run it for E2Es instead via `createServer`. --- test/dev.ts | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/test/dev.ts b/test/dev.ts index 583ab613a9..b84f5b3209 100644 --- a/test/dev.ts +++ b/test/dev.ts @@ -1,11 +1,13 @@ import chalk from 'chalk' +import { createServer } from 'http' import minimist from 'minimist' -import { nextDev } from 'next/dist/cli/next-dev.js' +import nextImport from 'next' import fs from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' import open from 'open' import { loadEnv } from 'payload/node' +import { parse } from 'url' import { getNextRootDir } from './helpers/getNextRootDir.js' import { runInit } from './runInit.js' @@ -23,8 +25,6 @@ loadEnv() const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) -process.env.PAYLOAD_DROP_DATABASE = process.env.PAYLOAD_DROP_DATABASE === 'false' ? 'false' : 'true' - const { _: [testSuiteArg], ...args @@ -53,7 +53,30 @@ if (args.o) { const port = process.env.PORT ? Number(process.env.PORT) : 3000 -await nextDev({ port }, 'default', rootDir) +const app = nextImport({ + dev: true, + hostname: 'localhost', + port, + dir: rootDir, +}) + +const handle = app.getRequestHandler() + +let resolveServer + +const serverPromise = new Promise((res) => (resolveServer = res)) + +void app.prepare().then(() => { + createServer(async (req, res) => { + const parsedUrl = parse(req.url, true) + await handle(req, res, parsedUrl) + }).listen(port, () => { + resolveServer() + }) +}) + +await serverPromise +process.env.PAYLOAD_DROP_DATABASE = process.env.PAYLOAD_DROP_DATABASE === 'false' ? 'false' : 'true' // fetch the admin url to force a render void fetch(`http://localhost:${port}${adminRoute}`) From 9f661145773d540445a6f2d43fbf021ca0d10c3a Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Tue, 22 Oct 2024 23:22:20 +0300 Subject: [PATCH 095/110] chore: jest reporter log failed tests count (#8810) for example 3 tests passed but 1 failed, shows: > 1 FAILED instead of > 4 FAILED example of the previous behaviour ![image](https://github.com/user-attachments/assets/78c4bc76-caa4-4bf8-943f-2b6b690ce763) ![image](https://github.com/user-attachments/assets/7f261ac3-17dd-474d-87a3-47ad6cbacd68) --- test/jest-spec-reporter.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jest-spec-reporter.cjs b/test/jest-spec-reporter.cjs index 1af65b4d31..9880e75d1b 100644 --- a/test/jest-spec-reporter.cjs +++ b/test/jest-spec-reporter.cjs @@ -51,7 +51,7 @@ class JestCiSpecReporter { console.log( `Executed ${numNotSkippedTests} of ${numTotalTests} (skipped ${numPendingTests}) ${testResultText} (${runDuration})`, ) - console.log(`TOTAL: ${numNotSkippedTests} ${testResultText}`) + console.log(`TOTAL: ${numFailedTests || numNotSkippedTests} ${testResultText}`) } onTestResult(test, { testResults }) { testResults.forEach((result) => { From 03c07026c5a5174eb2b1e6f1d60e3499e5e89e2e Mon Sep 17 00:00:00 2001 From: Jessica Chowdhury <67977755+JessChowdhury@users.noreply.github.com> Date: Wed, 23 Oct 2024 15:06:30 -0400 Subject: [PATCH 096/110] feat: add localized indicator to field label (#8602) On any localized field, appends `locale` on the end of the label. --- packages/payload/src/admin/forms/Label.ts | 2 ++ .../payload/src/fields/config/sanitize.ts | 1 - .../TableColumns/buildColumnState.tsx | 2 +- packages/ui/src/fields/Checkbox/index.tsx | 1 + packages/ui/src/fields/FieldLabel/index.scss | 26 +++++++++++++++++-- packages/ui/src/fields/FieldLabel/index.tsx | 17 ++++++++++-- 6 files changed, 43 insertions(+), 6 deletions(-) diff --git a/packages/payload/src/admin/forms/Label.ts b/packages/payload/src/admin/forms/Label.ts index bb99575cb4..99e422c163 100644 --- a/packages/payload/src/admin/forms/Label.ts +++ b/packages/payload/src/admin/forms/Label.ts @@ -5,9 +5,11 @@ import type { ClientFieldWithOptionalType } from './Field.js' export type GenericLabelProps = { readonly as?: 'label' | 'span' + readonly hideLocale?: boolean readonly htmlFor?: string readonly Label?: MappedComponent readonly label?: StaticLabel + readonly localized?: boolean readonly required?: boolean readonly unstyled?: boolean } diff --git a/packages/payload/src/fields/config/sanitize.ts b/packages/payload/src/fields/config/sanitize.ts index d3dc65eac9..a720125446 100644 --- a/packages/payload/src/fields/config/sanitize.ts +++ b/packages/payload/src/fields/config/sanitize.ts @@ -239,7 +239,6 @@ export const sanitizeFields = async ({ block._sanitized = true block.fields = block.fields.concat(baseBlockFields) block.labels = !block.labels ? formatLabels(block.slug) : block.labels - block.fields = await sanitizeFields({ config, existingFieldNames: new Set(), diff --git a/packages/ui/src/elements/TableColumns/buildColumnState.tsx b/packages/ui/src/elements/TableColumns/buildColumnState.tsx index cdbad6194a..c5e44ebe7a 100644 --- a/packages/ui/src/elements/TableColumns/buildColumnState.tsx +++ b/packages/ui/src/elements/TableColumns/buildColumnState.tsx @@ -107,7 +107,7 @@ export const buildColumnState = (args: Args): Column[] => { ? field.admin.components.Label : undefined - const Label = + const Label = const fieldAffectsDataSubFields = field && diff --git a/packages/ui/src/fields/Checkbox/index.tsx b/packages/ui/src/fields/Checkbox/index.tsx index e7790ab15c..916ed3039c 100644 --- a/packages/ui/src/fields/Checkbox/index.tsx +++ b/packages/ui/src/fields/Checkbox/index.tsx @@ -118,6 +118,7 @@ const CheckboxFieldComponent: CheckboxFieldClientComponent = (props) => { afterInput={field?.admin?.components?.afterInput} beforeInput={field?.admin?.components?.beforeInput} checked={checked} + field={field} id={fieldID} inputRef={null} Label={field?.admin?.components?.Label} diff --git a/packages/ui/src/fields/FieldLabel/index.scss b/packages/ui/src/fields/FieldLabel/index.scss index 778acb9acf..eb2fe46d47 100644 --- a/packages/ui/src/fields/FieldLabel/index.scss +++ b/packages/ui/src/fields/FieldLabel/index.scss @@ -1,23 +1,45 @@ @import '../../scss/styles.scss'; @layer payload-default { + label.field-label { + display: flex; + align-items: center; + } + label.field-label:not(.unstyled) { @extend %body; display: flex; padding-bottom: base(0.25); color: var(--theme-elevation-800); font-family: var(--font-body); + [dir='ltr'] & { + margin-right: auto; + } + [dir='rtl'] & { + margin-left: auto; + } .required { color: var(--theme-error-500); + } + + .required { [dir='ltr'] & { margin-left: base(0.25); - margin-right: auto; } [dir='rtl'] & { margin-right: base(0.25); - margin-left: auto; } } } + + .localized { + @extend %body; + [dir='ltr'] & { + margin-left: base(0.25); + } + [dir='rtl'] & { + margin-right: base(0.25); + } + } } diff --git a/packages/ui/src/fields/FieldLabel/index.tsx b/packages/ui/src/fields/FieldLabel/index.tsx index 528cc0def3..e1a71fd2b3 100644 --- a/packages/ui/src/fields/FieldLabel/index.tsx +++ b/packages/ui/src/fields/FieldLabel/index.tsx @@ -9,6 +9,7 @@ import { useFieldProps } from '../../forms/FieldPropsProvider/index.js' import { useForm } from '../../forms/Form/context.js' import { RenderComponent } from '../../providers/Config/RenderComponent.js' import { useEditDepth } from '../../providers/EditDepth/index.js' +import { useLocale } from '../../providers/Locale/index.js' import { useTranslation } from '../../providers/Translation/index.js' import { generateFieldID } from '../../utilities/generateFieldID.js' import './index.scss' @@ -16,8 +17,10 @@ import './index.scss' const DefaultFieldLabel: React.FC = (props) => { const { as: Element = 'label', + hideLocale = false, htmlFor: htmlForFromProps, label: labelFromProps, + localized = false, required = false, unstyled = false, } = props @@ -26,14 +29,19 @@ const DefaultFieldLabel: React.FC = (props) => { const { path } = useFieldProps() const editDepth = useEditDepth() const htmlFor = htmlForFromProps || generateFieldID(path, editDepth, uuid) - const { i18n } = useTranslation() + const { code, label: localLabel } = useLocale() if (labelFromProps) { return ( {getTranslation(labelFromProps, i18n)} {required && !unstyled && *} + {localized && !hideLocale && ( + + — {typeof localLabel === 'string' ? localLabel : code} + + )} ) } @@ -58,10 +66,15 @@ export const FieldLabel: FieldLabelClientComponent = (props) => { ? props.label : props?.field && 'label' in props.field && (props.field.label as StaticLabel) // type assertion needed for `row` fields } + localized={ + typeof props.localized !== 'undefined' + ? props.localized + : props?.field && 'localized' in props.field && props.field.localized + } required={ typeof props.required !== 'undefined' ? props.required - : props?.field && 'required' in props.field && (props.field?.required as boolean) // type assertion needed for `group` fields + : props?.field && 'required' in props.field && props.field?.required } /> ) From 1caa383608f11290774ac59db453d8ec3612e696 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Wed, 23 Oct 2024 23:33:53 +0300 Subject: [PATCH 097/110] fix: reduce import map diff when config changes (#8846) ### What? Reduces difference in the `importMap.js` file when config changes. ### How? Instead of appending the length, appends the hash of the path. #### Before: Example of the diff when 1 component gets removed image output: ```ts import { TestComponent as TestComponent_84 } from 'test/admin/components/TestComponent.js' ``` #### After: Targets only necessary for this component lines: image Output: ```ts import { TestComponent as TestComponent_d010fadde249c7cd3feed0eef58fe83c } from 'test/admin/components/TestComponent.js' ``` Fixes https://github.com/payloadcms/payload/issues/8841 --- packages/payload/src/bin/generateImportMap/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/payload/src/bin/generateImportMap/index.ts b/packages/payload/src/bin/generateImportMap/index.ts index 8bde204855..05d451f1da 100644 --- a/packages/payload/src/bin/generateImportMap/index.ts +++ b/packages/payload/src/bin/generateImportMap/index.ts @@ -1,3 +1,4 @@ +import crypto from 'crypto' import fs from 'fs' import process from 'node:process' import path from 'path' @@ -56,7 +57,8 @@ export function addPayloadComponentToImportMap({ return } - const importIdentifier = exportName + '_' + Object.keys(imports).length + const importIdentifier = + exportName + '_' + crypto.createHash('md5').update(componentPath).digest('hex') // e.g. if baseDir is /test/fields and componentPath is /components/Field.tsx // then path needs to be /test/fields/components/Field.tsx NOT /users/username/project/test/fields/components/Field.tsx From 0fcbce3a01e1fa07190bb152a13ae3e5d783a070 Mon Sep 17 00:00:00 2001 From: MotorcycleEnjoyer <116019878+MotorcycleEnjoyer@users.noreply.github.com> Date: Wed, 23 Oct 2024 16:47:15 -0400 Subject: [PATCH 098/110] feat(templates): add a copy button to website template code blocks (#8794) ## WHAT - Adds a copy code button to the Code Blocks in V3 Beta Website Template. - Uses the existing button from `@/components/ui/button` - SVG from this website: https://uxwing.com/copy-icon/ https://github.com/user-attachments/assets/2f6e720a-de37-40b5-a3bf-c748a69502b5 ## WHY - Copy-Code button is convenient for users looking at code blocks in tutorials/documentation/etc ## ISSUES - Button color invert isn't immediate on refresh in darkmode https://github.com/user-attachments/assets/f1093a27-73dd-47cb-8fc9-2f4bc301b80c --- .../src/blocks/Code/Component.client.tsx | 2 ++ .../website/src/blocks/Code/CopyButton.tsx | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 templates/website/src/blocks/Code/CopyButton.tsx diff --git a/templates/website/src/blocks/Code/Component.client.tsx b/templates/website/src/blocks/Code/Component.client.tsx index 4e9854fb11..fc8fb62545 100644 --- a/templates/website/src/blocks/Code/Component.client.tsx +++ b/templates/website/src/blocks/Code/Component.client.tsx @@ -1,6 +1,7 @@ 'use client' import { Highlight, themes } from 'prism-react-renderer' import React from 'react' +import { CopyButton } from './CopyButton' type Props = { code: string @@ -24,6 +25,7 @@ export const Code: React.FC = ({ code, language = '' }) => {
))} + )} diff --git a/templates/website/src/blocks/Code/CopyButton.tsx b/templates/website/src/blocks/Code/CopyButton.tsx new file mode 100644 index 0000000000..040a702972 --- /dev/null +++ b/templates/website/src/blocks/Code/CopyButton.tsx @@ -0,0 +1,36 @@ +'use client' +import { Button } from '@/components/ui/button' +import { CopyIcon } from '@payloadcms/ui' +import { useState } from 'react' + +export function CopyButton({ code }: { code: string }) { + const [text, setText] = useState('Copy') + + function updateCopyStatus() { + if (text === 'Copy') { + setText(() => 'Copied!') + setTimeout(() => { + setText(() => 'Copy') + }, 1000) + } + } + + return ( +
+ +
+ ) +} From b482da63c61d85d45e027757a4450311903242a4 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Wed, 23 Oct 2024 22:07:05 -0400 Subject: [PATCH 099/110] chore(release): v3.0.0-beta.118 [skip ci] --- package.json | 2 +- packages/create-payload-app/package.json | 2 +- packages/db-mongodb/package.json | 2 +- packages/db-postgres/package.json | 2 +- packages/db-sqlite/package.json | 2 +- packages/db-vercel-postgres/package.json | 2 +- packages/drizzle/package.json | 2 +- packages/email-nodemailer/package.json | 2 +- packages/email-resend/package.json | 2 +- packages/graphql/package.json | 2 +- packages/live-preview-react/package.json | 2 +- packages/live-preview-vue/package.json | 2 +- packages/live-preview/package.json | 2 +- packages/next/package.json | 2 +- packages/payload/package.json | 2 +- packages/plugin-cloud-storage/package.json | 2 +- packages/plugin-cloud/package.json | 2 +- packages/plugin-form-builder/package.json | 2 +- packages/plugin-nested-docs/package.json | 2 +- packages/plugin-redirects/package.json | 2 +- packages/plugin-search/package.json | 2 +- packages/plugin-sentry/package.json | 2 +- packages/plugin-seo/package.json | 2 +- packages/plugin-stripe/package.json | 2 +- packages/richtext-lexical/package.json | 2 +- packages/richtext-slate/package.json | 2 +- packages/storage-azure/package.json | 2 +- packages/storage-gcs/package.json | 2 +- packages/storage-s3/package.json | 2 +- packages/storage-uploadthing/package.json | 2 +- packages/storage-vercel-blob/package.json | 2 +- packages/translations/package.json | 2 +- packages/ui/package.json | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 31adf86465..76d7b21e0f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "private": true, "type": "module", "scripts": { diff --git a/packages/create-payload-app/package.json b/packages/create-payload-app/package.json index 8b5f1a9337..826b10716a 100644 --- a/packages/create-payload-app/package.json +++ b/packages/create-payload-app/package.json @@ -1,6 +1,6 @@ { "name": "create-payload-app", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index 52d9cce4bc..9ad00b0dbf 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The officially supported MongoDB database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index a40600cc43..ba516280b7 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The officially supported Postgres database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-sqlite/package.json b/packages/db-sqlite/package.json index 174d948732..cd7099a8d6 100644 --- a/packages/db-sqlite/package.json +++ b/packages/db-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-sqlite", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The officially supported SQLite database adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/db-vercel-postgres/package.json b/packages/db-vercel-postgres/package.json index 286dcd705c..003861a36e 100644 --- a/packages/db-vercel-postgres/package.json +++ b/packages/db-vercel-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-vercel-postgres", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Vercel Postgres adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/drizzle/package.json b/packages/drizzle/package.json index 023542f579..d40a16c90d 100644 --- a/packages/drizzle/package.json +++ b/packages/drizzle/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/drizzle", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "A library of shared functions used by different payload database adapters", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-nodemailer/package.json b/packages/email-nodemailer/package.json index 0c6b7e3247..a9d6fb3f21 100644 --- a/packages/email-nodemailer/package.json +++ b/packages/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-nodemailer", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Payload Nodemailer Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/email-resend/package.json b/packages/email-resend/package.json index 7392b5754d..ea07cd06ef 100644 --- a/packages/email-resend/package.json +++ b/packages/email-resend/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/email-resend", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Payload Resend Email Adapter", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/graphql/package.json b/packages/graphql/package.json index 8ec1953c2c..efa5b8992e 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index 3ba9e2f1e0..d1027822e3 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-react", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The official React SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview-vue/package.json b/packages/live-preview-vue/package.json index 07dde61ef9..bec89e5cf1 100644 --- a/packages/live-preview-vue/package.json +++ b/packages/live-preview-vue/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview-vue", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The official Vue SDK for Payload Live Preview", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/live-preview/package.json b/packages/live-preview/package.json index d310b4c373..c2b4ded2b1 100644 --- a/packages/live-preview/package.json +++ b/packages/live-preview/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/live-preview", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The official live preview JavaScript SDK for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/next/package.json b/packages/next/package.json index 3baac0ff1e..754a0e96b1 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/payload/package.json b/packages/payload/package.json index 0d6144fc36..ca768dcee2 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Node, React, Headless CMS and Application Framework built on Next.js", "keywords": [ "admin panel", diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index 493f1b71bc..4191ff4494 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud-storage", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The official cloud storage plugin for Payload CMS", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index af913d75f7..0be2ac9583 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-cloud", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The official Payload Cloud plugin", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index 83ee3e3826..f6de0eb2be 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-form-builder", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Form builder plugin for Payload CMS", "keywords": [ "payload", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index 76404e41fc..e9ac70ea31 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The official Nested Docs plugin for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index 02ba28f7c1..4b852565d6 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Redirects plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index eb036332be..f01878eb90 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Search plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-sentry/package.json b/packages/plugin-sentry/package.json index eee9424b43..c1e30cd754 100644 --- a/packages/plugin-sentry/package.json +++ b/packages/plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-sentry", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Sentry plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index 92ce2b5a80..6c2d6c3db5 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "SEO plugin for Payload", "keywords": [ "payload", diff --git a/packages/plugin-stripe/package.json b/packages/plugin-stripe/package.json index 26b984dc6d..eb75cf5a53 100644 --- a/packages/plugin-stripe/package.json +++ b/packages/plugin-stripe/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-stripe", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Stripe plugin for Payload", "keywords": [ "payload", diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index 432624342c..49efafa8eb 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The officially supported Lexical richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index e8d0b74679..e7a79edd5b 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "The officially supported Slate richtext adapter for Payload", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-azure/package.json b/packages/storage-azure/package.json index 0eab508b66..f37968b3a2 100644 --- a/packages/storage-azure/package.json +++ b/packages/storage-azure/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-azure", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Payload storage adapter for Azure Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-gcs/package.json b/packages/storage-gcs/package.json index 91b2f9e6c0..95ecd9d009 100644 --- a/packages/storage-gcs/package.json +++ b/packages/storage-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-gcs", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Payload storage adapter for Google Cloud Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-s3/package.json b/packages/storage-s3/package.json index fcd1df9ab8..70e53563b1 100644 --- a/packages/storage-s3/package.json +++ b/packages/storage-s3/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-s3", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Payload storage adapter for Amazon S3", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-uploadthing/package.json b/packages/storage-uploadthing/package.json index fd0a72d3f0..24ab762b82 100644 --- a/packages/storage-uploadthing/package.json +++ b/packages/storage-uploadthing/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-uploadthing", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Payload storage adapter for uploadthing", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/storage-vercel-blob/package.json b/packages/storage-vercel-blob/package.json index 698a0cc9b2..1e9e7f1eed 100644 --- a/packages/storage-vercel-blob/package.json +++ b/packages/storage-vercel-blob/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/storage-vercel-blob", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "description": "Payload storage adapter for Vercel Blob Storage", "homepage": "https://payloadcms.com", "repository": { diff --git a/packages/translations/package.json b/packages/translations/package.json index c199ecab71..7cfe6e6ab7 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "homepage": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/ui/package.json b/packages/ui/package.json index 7e402c5e4b..0fad83a41f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-beta.117", + "version": "3.0.0-beta.118", "homepage": "https://payloadcms.com", "repository": { "type": "git", From 749a7d913128ae594cf1aa684d94147ff0e28483 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Thu, 24 Oct 2024 13:07:38 -0400 Subject: [PATCH 100/110] chore(cpa): remove beta from postgres selection --- packages/create-payload-app/src/lib/select-db.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-payload-app/src/lib/select-db.ts b/packages/create-payload-app/src/lib/select-db.ts index 03bea505c8..7d198c9deb 100644 --- a/packages/create-payload-app/src/lib/select-db.ts +++ b/packages/create-payload-app/src/lib/select-db.ts @@ -18,7 +18,7 @@ const dbChoiceRecord: Record = { }, postgres: { dbConnectionPrefix: 'postgres://postgres:@127.0.0.1:5432/', - title: 'PostgreSQL (beta)', + title: 'PostgreSQL', value: 'postgres', }, sqlite: { From 2e11068f49cfaf5688118d5563a1337f4da28210 Mon Sep 17 00:00:00 2001 From: Hristiyan Dodov Date: Thu, 24 Oct 2024 20:50:09 +0300 Subject: [PATCH 101/110] feat(richtext-slate): add useElement hook to richtext-slate client exports (#8856) I'm extending the Slate editor with a custom component and everything works great, except I have to import `useElement()` like this: ```tsx import { useElement } from 'node_modules/.pnpm/@payloadcms+richtext-slate@3.0.0-beta.113_monaco-editor@0.51.0_next@15.0.0-canary.191_@babel+_qmdxs6s5hpzjhuopohgawpvl6i/node_modules/@payloadcms/richtext-slate/dist/field/providers/ElementProvider.js' export function Element() { const { attributes, children } = useElement() return (

{children}

) } ``` That's because it's not in the `@payloadcms/richtext-slate/client` module. This PR fixes this and would allow me to do: ```tsx import { useElement } from '@payloadcms/richtext-slate/client' ``` --- packages/richtext-slate/src/exports/client/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/richtext-slate/src/exports/client/index.ts b/packages/richtext-slate/src/exports/client/index.ts index be2cf6d2ff..279854a9e4 100644 --- a/packages/richtext-slate/src/exports/client/index.ts +++ b/packages/richtext-slate/src/exports/client/index.ts @@ -62,5 +62,6 @@ export { UnderlineLeafButton } from '../../field/leaves/underline/LeafButton.js' export { UnderlineLeaf } from '../../field/leaves/underline/Underline/index.js' +export { useElement } from '../../field/providers/ElementProvider.js' export { useLeaf } from '../../field/providers/LeafProvider.js' export { useSlatePlugin } from '../../utilities/useSlatePlugin.js' From 9069bd3fac150f5fcb45b719caa70247da72ff78 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 24 Oct 2024 21:47:58 +0300 Subject: [PATCH 102/110] fix(db-postgres): sort by localized fields (#8839) ### What? Fixes https://github.com/payloadcms/payload/issues/5152 issue related to sorting by a localized field with SQLite / Postgres database adapters. ### Why? It was an incorrect behaviour. ### How? Modifies the `getTableColumnFromPath` file to have correct join conditions. Previously if you had this structure in the _locales table _locale title parent en A 1 es B 1 we sorted by everything that's here, but we need to sort only by the passed locale. Additionally fixes a typescript error in `dev.ts` that I added here https://github.com/payloadcms/payload/pull/8834 Also, removes the condition with `joins.length` in `countDistinct`. It was there as for this issue https://github.com/payloadcms/payload/issues/4889 because sorting by a localized property caused duplication. This can simnifically improve performance for `.find` with nested querying/sorting on large data sets, because `count(*)` is faster than `count(DISTINCT id)` --- packages/db-sqlite/src/countDistinct.ts | 8 +- .../drizzle/src/postgres/countDistinct.ts | 8 +- .../src/queries/getTableColumnFromPath.ts | 151 ++++++++---------- test/dev.ts | 1 + test/localization/int.spec.ts | 117 +++++++++++++- 5 files changed, 192 insertions(+), 93 deletions(-) diff --git a/packages/db-sqlite/src/countDistinct.ts b/packages/db-sqlite/src/countDistinct.ts index 84a08b7795..14b26d9acc 100644 --- a/packages/db-sqlite/src/countDistinct.ts +++ b/packages/db-sqlite/src/countDistinct.ts @@ -1,7 +1,7 @@ import type { ChainedMethods } from '@payloadcms/drizzle/types' import { chainMethods } from '@payloadcms/drizzle' -import { count, sql } from 'drizzle-orm' +import { count } from 'drizzle-orm' import type { CountDistinct, SQLiteAdapter } from './types.js' @@ -22,11 +22,7 @@ export const countDistinct: CountDistinct = async function countDistinct( methods: chainedMethods, query: db .select({ - count: - joins.length > 0 - ? sql`count - (DISTINCT ${this.tables[tableName].id})`.mapWith(Number) - : count(), + count: count(), }) .from(this.tables[tableName]) .where(where), diff --git a/packages/drizzle/src/postgres/countDistinct.ts b/packages/drizzle/src/postgres/countDistinct.ts index 302820ee3a..bea19daaf4 100644 --- a/packages/drizzle/src/postgres/countDistinct.ts +++ b/packages/drizzle/src/postgres/countDistinct.ts @@ -1,4 +1,4 @@ -import { count, sql } from 'drizzle-orm' +import { count } from 'drizzle-orm' import type { ChainedMethods, TransactionPg } from '../types.js' import type { BasePostgresAdapter, CountDistinct } from './types.js' @@ -22,11 +22,7 @@ export const countDistinct: CountDistinct = async function countDistinct( methods: chainedMethods, query: (db as TransactionPg) .select({ - count: - joins.length > 0 - ? sql`count - (DISTINCT ${this.tables[tableName].id})`.mapWith(Number) - : count(), + count: count(), }) .from(this.tables[tableName]) .where(where), diff --git a/packages/drizzle/src/queries/getTableColumnFromPath.ts b/packages/drizzle/src/queries/getTableColumnFromPath.ts index c2102d9380..6ec9103d35 100644 --- a/packages/drizzle/src/queries/getTableColumnFromPath.ts +++ b/packages/drizzle/src/queries/getTableColumnFromPath.ts @@ -186,18 +186,17 @@ export const getTableColumnFromPath = ({ if (locale && field.localized && adapter.payload.config.localization) { newTableName = `${tableName}${adapter.localesSuffix}` + let condition = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID) + + if (locale !== 'all') { + condition = and(condition, eq(adapter.tables[newTableName]._locale, locale)) + } + addJoinTable({ - condition: eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), + condition, joins, table: adapter.tables[newTableName], }) - if (locale !== 'all') { - constraints.push({ - columnName: '_locale', - table: adapter.tables[newTableName], - value: locale, - }) - } } return getTableColumnFromPath({ adapter, @@ -225,21 +224,20 @@ export const getTableColumnFromPath = ({ ) if (locale && field.localized && adapter.payload.config.localization) { + const conditions = [ + eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent), + eq(adapter.tables[newTableName]._locale, locale), + ] + + if (locale !== 'all') { + conditions.push(eq(adapter.tables[newTableName]._locale, locale)) + } + addJoinTable({ - condition: and( - eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent), - eq(adapter.tables[newTableName]._locale, locale), - ), + condition: and(...conditions), joins, table: adapter.tables[newTableName], }) - if (locale !== 'all') { - constraints.push({ - columnName: '_locale', - table: adapter.tables[newTableName], - value: locale, - }) - } } else { addJoinTable({ condition: eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent), @@ -274,18 +272,16 @@ export const getTableColumnFromPath = ({ ] if (locale && field.localized && adapter.payload.config.localization) { + const conditions = [...joinConstraints] + + if (locale !== 'all') { + conditions.push(eq(adapter.tables[newTableName]._locale, locale)) + } addJoinTable({ - condition: and(...joinConstraints, eq(adapter.tables[newTableName]._locale, locale)), + condition: and(...conditions), joins, table: adapter.tables[newTableName], }) - if (locale !== 'all') { - constraints.push({ - columnName: 'locale', - table: adapter.tables[newTableName], - value: locale, - }) - } } else { addJoinTable({ condition: and(...joinConstraints), @@ -313,21 +309,16 @@ export const getTableColumnFromPath = ({ constraintPath = `${constraintPath}${field.name}.%.` if (locale && field.localized && adapter.payload.config.localization) { + const conditions = [eq(arrayParentTable.id, adapter.tables[newTableName]._parentID)] + + if (locale !== 'all') { + conditions.push(eq(adapter.tables[newTableName]._locale, locale)) + } addJoinTable({ - condition: and( - eq(arrayParentTable.id, adapter.tables[newTableName]._parentID), - eq(adapter.tables[newTableName]._locale, locale), - ), + condition: and(...conditions), joins, table: adapter.tables[newTableName], }) - if (locale !== 'all') { - constraints.push({ - columnName: '_locale', - table: adapter.tables[newTableName], - value: locale, - }) - } } else { addJoinTable({ condition: eq(arrayParentTable.id, adapter.tables[newTableName]._parentID), @@ -417,23 +408,21 @@ export const getTableColumnFromPath = ({ constraints = constraints.concat(blockConstraints) selectFields = { ...selectFields, ...blockSelectFields } if (field.localized && adapter.payload.config.localization) { - joins.push({ - condition: and( - eq( - (aliasTable || adapter.tables[tableName]).id, - adapter.tables[newTableName]._parentID, - ), - eq(adapter.tables[newTableName]._locale, locale), + const conditions = [ + eq( + (aliasTable || adapter.tables[tableName]).id, + adapter.tables[newTableName]._parentID, ), + ] + + if (locale !== 'all') { + conditions.push(eq(adapter.tables[newTableName]._locale, locale)) + } + + joins.push({ + condition: and(...conditions), table: adapter.tables[newTableName], }) - if (locale) { - constraints.push({ - columnName: '_locale', - table: adapter.tables[newTableName], - value: locale, - }) - } } else { joins.push({ condition: eq( @@ -471,21 +460,18 @@ export const getTableColumnFromPath = ({ // Join in the relationships table if (locale && field.localized && adapter.payload.config.localization) { + const conditions = [ + eq((aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), + like(aliasRelationshipTable.path, `${constraintPath}${field.name}`), + ] + + if (locale !== 'all') { + conditions.push(eq(aliasRelationshipTable.locale, locale)) + } joins.push({ - condition: and( - eq((aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), - eq(aliasRelationshipTable.locale, locale), - like(aliasRelationshipTable.path, `${constraintPath}${field.name}`), - ), + condition: and(...conditions), table: aliasRelationshipTable, }) - if (locale !== 'all') { - constraints.push({ - columnName: 'locale', - table: aliasRelationshipTable, - value: locale, - }) - } } else { // Join in the relationships table joins.push({ @@ -660,15 +646,22 @@ export const getTableColumnFromPath = ({ tableName: `${rootTableName}${adapter.localesSuffix}`, }) - joins.push({ - condition: and( - eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id), - eq(aliasLocaleTable._locale, locale), - ), - table: aliasLocaleTable, + const condtions = [eq(aliasLocaleTable._parentID, adapter.tables[rootTableName].id)] + + if (locale !== 'all') { + condtions.push(eq(aliasLocaleTable._locale, locale)) + } + + const localesTable = adapter.tables[`${rootTableName}${adapter.localesSuffix}`] + + addJoinTable({ + condition: and(...condtions), + joins, + table: localesTable, }) + joins.push({ - condition: eq(aliasLocaleTable[columnName], newAliasTable.id), + condition: eq(localesTable[columnName], newAliasTable.id), table: newAliasTable, }) } else { @@ -716,21 +709,19 @@ export const getTableColumnFromPath = ({ newTable = adapter.tables[newTableName] + let condition = eq(parentTable.id, newTable._parentID) + + if (locale !== 'all') { + condition = and(condition, eq(newTable._locale, locale)) + } + addJoinTable({ - condition: eq(parentTable.id, newTable._parentID), + condition, joins, table: newTable, }) aliasTable = undefined - - if (locale !== 'all') { - constraints.push({ - columnName: '_locale', - table: newTable, - value: locale, - }) - } } const targetTable = aliasTable || newTable diff --git a/test/dev.ts b/test/dev.ts index b84f5b3209..e221b212f9 100644 --- a/test/dev.ts +++ b/test/dev.ts @@ -53,6 +53,7 @@ if (args.o) { const port = process.env.PORT ? Number(process.env.PORT) : 3000 +// @ts-expect-error the same as in test/helpers/initPayloadE2E.ts const app = nextImport({ dev: true, hostname: 'localhost', diff --git a/test/localization/int.spec.ts b/test/localization/int.spec.ts index 4598952664..3fa5437de3 100644 --- a/test/localization/int.spec.ts +++ b/test/localization/int.spec.ts @@ -3,7 +3,7 @@ import { type Payload, type Where } from 'payload' import { fileURLToPath } from 'url' import type { NextRESTClient } from '../helpers/NextRESTClient.js' -import type { LocalizedPost, WithLocalizedRelationship } from './payload-types.js' +import type { LocalizedPost, LocalizedSort, WithLocalizedRelationship } from './payload-types.js' import { idToString } from '../helpers/idToString.js' import { initPayloadInt } from '../helpers/initPayloadInt.js' @@ -369,6 +369,7 @@ describe('Localization', () => { describe('Localized Sort Count', () => { const expectedTotalDocs = 5 + const posts: LocalizedSort[] = [] beforeAll(async () => { for (let i = 1; i <= expectedTotalDocs; i++) { const post = await payload.create({ @@ -380,6 +381,8 @@ describe('Localization', () => { locale: englishLocale, }) + posts.push(post) + await payload.update({ id: post.id, collection: localizedSortSlug, @@ -419,6 +422,118 @@ describe('Localization', () => { expect(sortByTitleQuery.totalDocs).toEqual(expectedTotalDocs) expect(sortByDateQuery.totalDocs).toEqual(expectedTotalDocs) }) + + it('should return correct order when sorted by localized fields', async () => { + const { docs: docsAsc } = await payload.find({ collection: localizedSortSlug, sort: 'title' }) + docsAsc.forEach((doc, i) => { + expect(posts[i].id).toBe(doc.id) + }) + + const { docs: docsDesc } = await payload.find({ + collection: localizedSortSlug, + sort: '-title', + }) + docsDesc.forEach((doc, i) => { + expect(posts.at(posts.length - i - 1).id).toBe(doc.id) + }) + + // Test with words + const randomWords = [ + 'sunset', + 'whisper', + 'lighthouse', + 'harmony', + 'crystal', + 'thunder', + 'meadow', + 'voyage', + 'echo', + 'quicksand', + ] + + const randomWordsSpanish = [ + 'atardecer', + 'susurro', + 'faro', + 'armonía', + 'cristal', + 'trueno', + 'pradera', + 'viaje', + 'eco', + 'arenas movedizas', + ] + + expect(randomWords).toHaveLength(randomWordsSpanish.length) + + const randomWordsPosts: (number | string)[] = [] + + for (let i = 0; i < randomWords.length; i++) { + const en = randomWords[i] + const post = await payload.create({ collection: 'localized-sort', data: { title: en } }) + const es = randomWordsSpanish[i] + await payload.update({ + collection: 'localized-sort', + data: { title: es }, + id: post.id, + locale: 'es', + }) + + randomWordsPosts.push(post.id) + } + + const ascSortedWordsEn = randomWords.toSorted((a, b) => a.localeCompare(b)) + const descSortedWordsEn = randomWords.toSorted((a, b) => b.localeCompare(a)) + + const q = { id: { in: randomWordsPosts } } + + const { docs: randomWordsEnAsc } = await payload.find({ + collection: localizedSortSlug, + sort: 'title', + where: q, + }) + randomWordsEnAsc.forEach((doc, i) => { + expect(ascSortedWordsEn[i]).toBe(doc.title) + }) + + const { docs: randomWordsEnDesc } = await payload.find({ + collection: localizedSortSlug, + sort: '-title', + where: q, + }) + + randomWordsEnDesc.forEach((doc, i) => { + expect(descSortedWordsEn[i]).toBe(doc.title) + }) + + // Test sorting for Spanish locale + const ascSortedWordsEs = randomWordsSpanish.toSorted((a, b) => a.localeCompare(b)) + const descSortedWordsEs = randomWordsSpanish.toSorted((a, b) => b.localeCompare(a)) + + // Fetch sorted words in Spanish (ascending) + const { docs: randomWordsEsAsc } = await payload.find({ + collection: localizedSortSlug, + sort: 'title', + where: q, + locale: 'es', + }) + + randomWordsEsAsc.forEach((doc, i) => { + expect(ascSortedWordsEs[i]).toBe(doc.title) + }) + + // Fetch sorted words in Spanish (descending) + const { docs: randomWordsEsDesc } = await payload.find({ + collection: localizedSortSlug, + sort: '-title', + where: q, + locale: 'es', + }) + + randomWordsEsDesc.forEach((doc, i) => { + expect(descSortedWordsEs[i]).toBe(doc.title) + }) + }) }) describe('Localized Relationship', () => { From 1a15425b599037d9a93c83d66a1c5b5116e95ebe Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Thu, 24 Oct 2024 14:53:11 -0400 Subject: [PATCH 103/110] fix(cpa): properly detect if pnpm exists on windows (#8855) Use `where ` if using windows when detecting package manager --- packages/create-payload-app/src/lib/get-package-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-payload-app/src/lib/get-package-manager.ts b/packages/create-payload-app/src/lib/get-package-manager.ts index 9651537eb4..107e135c17 100644 --- a/packages/create-payload-app/src/lib/get-package-manager.ts +++ b/packages/create-payload-app/src/lib/get-package-manager.ts @@ -54,7 +54,7 @@ function getEnvironmentPackageManager(): PackageManager { async function commandExists(command: string): Promise { try { - await execa.command(`command -v ${command}`) + await execa.command(process.platform === 'win32' ? `where ${command}` : `command -v ${command}`) return true } catch { return false From 6e919cc83aa371afbf0b3cb3f6dcfb6b4b683933 Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Thu, 24 Oct 2024 21:58:59 +0300 Subject: [PATCH 104/110] perf: index globals versions timestamps by default (#8821) --- packages/payload/src/collections/config/sanitize.ts | 1 + packages/payload/src/versions/buildGlobalFields.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/payload/src/collections/config/sanitize.ts b/packages/payload/src/collections/config/sanitize.ts index 2ca62c29de..66f0cc24c5 100644 --- a/packages/payload/src/collections/config/sanitize.ts +++ b/packages/payload/src/collections/config/sanitize.ts @@ -71,6 +71,7 @@ export const sanitizeCollection = async ( disableBulkEdit: true, hidden: true, }, + index: true, label: ({ t }) => t('general:updatedAt'), }) } diff --git a/packages/payload/src/versions/buildGlobalFields.ts b/packages/payload/src/versions/buildGlobalFields.ts index 5954967edd..ed21c3d40a 100644 --- a/packages/payload/src/versions/buildGlobalFields.ts +++ b/packages/payload/src/versions/buildGlobalFields.ts @@ -20,6 +20,7 @@ export const buildVersionGlobalFields = ( admin: { disabled: true, }, + index: true, }, { name: 'updatedAt', @@ -27,6 +28,7 @@ export const buildVersionGlobalFields = ( admin: { disabled: true, }, + index: true, }, ] From 4d44c378ed61e552d5c2773e060b80cdab6f2c53 Mon Sep 17 00:00:00 2001 From: Anders Semb Hermansen Date: Thu, 24 Oct 2024 21:46:30 +0200 Subject: [PATCH 105/110] feat: sort by multiple fields (#8799) This change adds support for sort with multiple fields in local API and REST API. Related discussion #2089 Co-authored-by: Dan Ribbens --- docs/configuration/collections.mdx | 40 +- docs/queries/sort.mdx | 23 +- .../db-mongodb/src/queries/buildSortParam.ts | 45 +- packages/drizzle/src/find.ts | 2 +- packages/drizzle/src/find/findMany.ts | 6 +- packages/drizzle/src/find/traverseFields.ts | 2 +- packages/drizzle/src/findGlobalVersions.ts | 2 +- packages/drizzle/src/findVersions.ts | 2 +- packages/drizzle/src/queries/buildOrderBy.ts | 65 +-- packages/drizzle/src/queries/buildQuery.ts | 6 +- .../next/src/routes/rest/collections/find.ts | 2 +- .../routes/rest/collections/findVersions.ts | 2 +- .../src/routes/rest/globals/findVersions.ts | 2 +- packages/next/src/views/List/index.tsx | 5 +- .../payload/src/collections/config/types.ts | 4 +- .../src/collections/operations/find.ts | 4 +- .../collections/operations/findVersions.ts | 4 +- .../src/collections/operations/local/find.ts | 4 +- .../operations/local/findVersions.ts | 4 +- packages/payload/src/database/types.ts | 8 +- .../src/globals/operations/findVersions.ts | 4 +- .../globals/operations/local/findVersions.ts | 4 +- packages/payload/src/types/index.ts | 2 + .../src/versions/drafts/getQueryDraftsSort.ts | 32 +- test/sort/collections/DefaultSort/index.ts | 21 + test/sort/collections/Drafts/index.ts | 27 + test/sort/collections/Localized/index.ts | 41 ++ test/sort/collections/Posts/index.ts | 38 ++ test/sort/config.ts | 37 ++ test/sort/eslint.config.js | 19 + test/sort/int.spec.ts | 471 ++++++++++++++++++ test/sort/payload-types.ts | 204 ++++++++ test/sort/tsconfig.eslint.json | 13 + test/sort/tsconfig.json | 3 + 34 files changed, 1033 insertions(+), 115 deletions(-) create mode 100644 test/sort/collections/DefaultSort/index.ts create mode 100644 test/sort/collections/Drafts/index.ts create mode 100644 test/sort/collections/Localized/index.ts create mode 100644 test/sort/collections/Posts/index.ts create mode 100644 test/sort/config.ts create mode 100644 test/sort/eslint.config.js create mode 100644 test/sort/int.spec.ts create mode 100644 test/sort/payload-types.ts create mode 100644 test/sort/tsconfig.eslint.json create mode 100644 test/sort/tsconfig.json diff --git a/docs/configuration/collections.mdx b/docs/configuration/collections.mdx index 9c96785b3f..f20ea6df8d 100644 --- a/docs/configuration/collections.mdx +++ b/docs/configuration/collections.mdx @@ -57,26 +57,26 @@ export const Posts: CollectionConfig = { The following options are available: -| Option | Description | -|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`admin`** | The configuration options for the Admin Panel. [More details](../admin/collections). | -| **`access`** | Provide Access Control functions to define exactly who should be able to do what with Documents in this Collection. [More details](../access-control/collections). | -| **`auth`** | Specify options if you would like this Collection to feature authentication. [More details](../authentication/overview). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -| **`disableDuplicate`** | When true, do not show the "Duplicate" button while editing documents within this Collection and prevent `duplicate` from all APIs. | -| **`defaultSort`** | Pass a top-level field to sort by default in the Collection List View. Prefix the name of the field with a minus symbol ("-") to sort in descending order. | -| **`dbName`** | Custom table or Collection name depending on the Database Adapter. Auto-generated from slug if not defined. | -| **`endpoints`** | Add custom routes to the REST API. Set to `false` to disable routes. [More details](../rest-api/overview#custom-endpoints). | -| **`fields`** \* | Array of field types that will determine the structure and functionality of the data stored within this Collection. [More details](../fields/overview). | -| **`graphQL`** | An object with `singularName` and `pluralName` strings used in schema generation. Auto-generated from slug if not defined. Set to `false` to disable GraphQL. | -| **`hooks`** | Entry point for Hooks. [More details](../hooks/overview#collection-hooks). | -| **`labels`** | Singular and plural labels for use in identifying this Collection throughout Payload. Auto-generated from slug if not defined. | -| **`lockDocuments`** | Enables or disables document locking. By default, document locking is enabled. Set to an object to configure, or set to `false` to disable locking. [More details](../admin/locked-documents). | -| **`slug`** \* | Unique, URL-friendly string that will act as an identifier for this Collection. | -| **`timestamps`** | Set to false to disable documents' automatically generated `createdAt` and `updatedAt` timestamps. | -| **`typescript`** | An object with property `interface` as the text used in schema generation. Auto-generated from slug if not defined. | -| **`upload`** | Specify options if you would like this Collection to support file uploads. For more, consult the [Uploads](../upload/overview) documentation. | -| **`versions`** | Set to true to enable default options, or configure with object properties. [More details](../versions/overview#collection-config). | +| Option | Description | +|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`admin`** | The configuration options for the Admin Panel. [More details](../admin/collections). | +| **`access`** | Provide Access Control functions to define exactly who should be able to do what with Documents in this Collection. [More details](../access-control/collections). | +| **`auth`** | Specify options if you would like this Collection to feature authentication. [More details](../authentication/overview). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| **`disableDuplicate`** | When true, do not show the "Duplicate" button while editing documents within this Collection and prevent `duplicate` from all APIs. | +| **`defaultSort`** | Pass a top-level field to sort by default in the Collection List View. Prefix the name of the field with a minus symbol ("-") to sort in descending order. Multiple fields can be specified by using a string array. | +| **`dbName`** | Custom table or Collection name depending on the Database Adapter. Auto-generated from slug if not defined. | +| **`endpoints`** | Add custom routes to the REST API. Set to `false` to disable routes. [More details](../rest-api/overview#custom-endpoints). | +| **`fields`** \* | Array of field types that will determine the structure and functionality of the data stored within this Collection. [More details](../fields/overview). | +| **`graphQL`** | An object with `singularName` and `pluralName` strings used in schema generation. Auto-generated from slug if not defined. Set to `false` to disable GraphQL. | +| **`hooks`** | Entry point for Hooks. [More details](../hooks/overview#collection-hooks). | +| **`labels`** | Singular and plural labels for use in identifying this Collection throughout Payload. Auto-generated from slug if not defined. | +| **`lockDocuments`** | Enables or disables document locking. By default, document locking is enabled. Set to an object to configure, or set to `false` to disable locking. [More details](../admin/locked-documents). | +| **`slug`** \* | Unique, URL-friendly string that will act as an identifier for this Collection. | +| **`timestamps`** | Set to false to disable documents' automatically generated `createdAt` and `updatedAt` timestamps. | +| **`typescript`** | An object with property `interface` as the text used in schema generation. Auto-generated from slug if not defined. | +| **`upload`** | Specify options if you would like this Collection to support file uploads. For more, consult the [Uploads](../upload/overview) documentation. | +| **`versions`** | Set to true to enable default options, or configure with object properties. [More details](../versions/overview#collection-config). | _\* An asterisk denotes that a property is required._ diff --git a/docs/queries/sort.mdx b/docs/queries/sort.mdx index 3340d21f98..60b46c3cd2 100644 --- a/docs/queries/sort.mdx +++ b/docs/queries/sort.mdx @@ -6,7 +6,7 @@ desc: Payload sort allows you to order your documents by a field in ascending or keywords: query, documents, pagination, documentation, Content Management System, cms, headless, javascript, node, react, nextjs --- -Documents in Payload can be easily sorted by a specific [Field](../fields/overview). When querying Documents, you can pass the name of any top-level field, and the response will sort the Documents by that field in _ascending_ order. If prefixed with a minus symbol ("-"), they will be sorted in _descending_ order. +Documents in Payload can be easily sorted by a specific [Field](../fields/overview). When querying Documents, you can pass the name of any top-level field, and the response will sort the Documents by that field in _ascending_ order. If prefixed with a minus symbol ("-"), they will be sorted in _descending_ order. In Local API multiple fields can be specificed by using an array of strings. In REST API multiple fields can be specified by separating fields with comma. The minus symbol can be in front of individual fields. Because sorting is handled by the database, the field cannot be a [Virtual Field](https://payloadcms.com/blog/learn-how-virtual-fields-can-help-solve-common-cms-challenges). It must be stored in the database to be searchable. @@ -30,6 +30,19 @@ const getPosts = async () => { } ``` +To sort by multiple fields, you can use the `sort` option with fields in an array: + +```ts +const getPosts = async () => { + const posts = await payload.find({ + collection: 'posts', + sort: ['priority', '-createdAt'], // highlight-line + }) + + return posts +} +``` + ## REST API To sort in the [REST API](../rest-api/overview), you can use the `sort` parameter in your query: @@ -40,6 +53,14 @@ fetch('https://localhost:3000/api/posts?sort=-createdAt') // highlight-line .then((data) => console.log(data)) ``` +To sort by multiple fields, you can use the `sort` parameter with fields separated by comma: + +```ts +fetch('https://localhost:3000/api/posts?sort=priority,-createdAt') // highlight-line + .then((response) => response.json()) + .then((data) => console.log(data)) +``` + ## GraphQL API To sort in the [GraphQL API](../graphql/overview), you can use the `sort` parameter in your query: diff --git a/packages/db-mongodb/src/queries/buildSortParam.ts b/packages/db-mongodb/src/queries/buildSortParam.ts index b539fe4812..de4d4860fe 100644 --- a/packages/db-mongodb/src/queries/buildSortParam.ts +++ b/packages/db-mongodb/src/queries/buildSortParam.ts @@ -1,5 +1,5 @@ import type { PaginateOptions } from 'mongoose' -import type { Field, SanitizedConfig } from 'payload' +import type { Field, SanitizedConfig, Sort } from 'payload' import { getLocalizedSortProperty } from './getLocalizedSortProperty.js' @@ -7,7 +7,7 @@ type Args = { config: SanitizedConfig fields: Field[] locale: string - sort: string + sort: Sort timestamps: boolean } @@ -25,32 +25,41 @@ export const buildSortParam = ({ sort, timestamps, }: Args): PaginateOptions['sort'] => { - let sortProperty: string - let sortDirection: SortDirection = 'desc' - if (!sort) { if (timestamps) { - sortProperty = 'createdAt' + sort = '-createdAt' } else { - sortProperty = '_id' + sort = '-id' } - } else if (sort.indexOf('-') === 0) { - sortProperty = sort.substring(1) - } else { - sortProperty = sort - sortDirection = 'asc' } - if (sortProperty === 'id') { - sortProperty = '_id' - } else { - sortProperty = getLocalizedSortProperty({ + if (typeof sort === 'string') { + sort = [sort] + } + + const sorting = sort.reduce((acc, item) => { + let sortProperty: string + let sortDirection: SortDirection + if (item.indexOf('-') === 0) { + sortProperty = item.substring(1) + sortDirection = 'desc' + } else { + sortProperty = item + sortDirection = 'asc' + } + if (sortProperty === 'id') { + acc['_id'] = sortDirection + return acc + } + const localizedProperty = getLocalizedSortProperty({ config, fields, locale, segments: sortProperty.split('.'), }) - } + acc[localizedProperty] = sortDirection + return acc + }, {}) - return { [sortProperty]: sortDirection } + return sorting } diff --git a/packages/drizzle/src/find.ts b/packages/drizzle/src/find.ts index 549ed6e13c..9ec5bcf692 100644 --- a/packages/drizzle/src/find.ts +++ b/packages/drizzle/src/find.ts @@ -21,7 +21,7 @@ export const find: Find = async function find( }, ) { const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config - const sort = typeof sortArg === 'string' ? sortArg : collectionConfig.defaultSort + const sort = sortArg !== undefined && sortArg !== null ? sortArg : collectionConfig.defaultSort const tableName = this.tableNameMap.get(toSnakeCase(collectionConfig.slug)) diff --git a/packages/drizzle/src/find/findMany.ts b/packages/drizzle/src/find/findMany.ts index a3a8a42ba7..442af7fd77 100644 --- a/packages/drizzle/src/find/findMany.ts +++ b/packages/drizzle/src/find/findMany.ts @@ -59,9 +59,9 @@ export const findMany = async function find({ const selectDistinctMethods: ChainedMethods = [] - if (orderBy?.order && orderBy?.column) { + if (orderBy) { selectDistinctMethods.push({ - args: [orderBy.order(orderBy.column)], + args: [() => orderBy.map(({ column, order }) => order(column))], method: 'orderBy', }) } @@ -114,7 +114,7 @@ export const findMany = async function find({ } else { findManyArgs.limit = limit findManyArgs.offset = offset - findManyArgs.orderBy = orderBy.order(orderBy.column) + findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column)) if (where) { findManyArgs.where = where diff --git a/packages/drizzle/src/find/traverseFields.ts b/packages/drizzle/src/find/traverseFields.ts index 35f7a78750..8f64409577 100644 --- a/packages/drizzle/src/find/traverseFields.ts +++ b/packages/drizzle/src/find/traverseFields.ts @@ -373,7 +373,7 @@ export const traverseFields = ({ }) .from(adapter.tables[joinCollectionTableName]) .where(subQueryWhere) - .orderBy(orderBy.order(orderBy.column)), + .orderBy(() => orderBy.map(({ column, order }) => order(column))), }) const columnName = `${path.replaceAll('.', '_')}${field.name}` diff --git a/packages/drizzle/src/findGlobalVersions.ts b/packages/drizzle/src/findGlobalVersions.ts index f94095c40b..bb55ae3604 100644 --- a/packages/drizzle/src/findGlobalVersions.ts +++ b/packages/drizzle/src/findGlobalVersions.ts @@ -24,7 +24,7 @@ export const findGlobalVersions: FindGlobalVersions = async function findGlobalV const globalConfig: SanitizedGlobalConfig = this.payload.globals.config.find( ({ slug }) => slug === global, ) - const sort = typeof sortArg === 'string' ? sortArg : '-createdAt' + const sort = sortArg !== undefined && sortArg !== null ? sortArg : '-createdAt' const tableName = this.tableNameMap.get( `_${toSnakeCase(globalConfig.slug)}${this.versionsSuffix}`, diff --git a/packages/drizzle/src/findVersions.ts b/packages/drizzle/src/findVersions.ts index eac2df63b7..ae0e280370 100644 --- a/packages/drizzle/src/findVersions.ts +++ b/packages/drizzle/src/findVersions.ts @@ -22,7 +22,7 @@ export const findVersions: FindVersions = async function findVersions( }, ) { const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config - const sort = typeof sortArg === 'string' ? sortArg : collectionConfig.defaultSort + const sort = sortArg !== undefined && sortArg !== null ? sortArg : collectionConfig.defaultSort const tableName = this.tableNameMap.get( `_${toSnakeCase(collectionConfig.slug)}${this.versionsSuffix}`, diff --git a/packages/drizzle/src/queries/buildOrderBy.ts b/packages/drizzle/src/queries/buildOrderBy.ts index e90c229a0d..30466735bf 100644 --- a/packages/drizzle/src/queries/buildOrderBy.ts +++ b/packages/drizzle/src/queries/buildOrderBy.ts @@ -1,4 +1,4 @@ -import type { Field } from 'payload' +import type { Field, Sort } from 'payload' import { asc, desc } from 'drizzle-orm' @@ -13,7 +13,7 @@ type Args = { joins: BuildQueryJoinAliases locale?: string selectFields: Record - sort?: string + sort?: Sort tableName: string } @@ -29,54 +29,55 @@ export const buildOrderBy = ({ sort, tableName, }: Args): BuildQueryResult['orderBy'] => { - const orderBy: BuildQueryResult['orderBy'] = { - column: null, - order: null, + const orderBy: BuildQueryResult['orderBy'] = [] + + if (!sort) { + const createdAt = adapter.tables[tableName]?.createdAt + if (createdAt) { + sort = '-createdAt' + } else { + sort = '-id' + } } - if (sort) { - let sortPath + if (typeof sort === 'string') { + sort = [sort] + } - if (sort[0] === '-') { - sortPath = sort.substring(1) - orderBy.order = desc + for (const sortItem of sort) { + let sortProperty: string + let sortDirection: 'asc' | 'desc' + if (sortItem[0] === '-') { + sortProperty = sortItem.substring(1) + sortDirection = 'desc' } else { - sortPath = sort - orderBy.order = asc + sortProperty = sortItem + sortDirection = 'asc' } - try { const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({ adapter, - collectionPath: sortPath, + collectionPath: sortProperty, fields, joins, locale, - pathSegments: sortPath.replace(/__/g, '.').split('.'), + pathSegments: sortProperty.replace(/__/g, '.').split('.'), selectFields, tableName, - value: sortPath, + value: sortProperty, }) - orderBy.column = sortTable?.[sortTableColumnName] + if (sortTable?.[sortTableColumnName]) { + orderBy.push({ + column: sortTable[sortTableColumnName], + order: sortDirection === 'asc' ? asc : desc, + }) + + selectFields[sortTableColumnName] = sortTable[sortTableColumnName] + } } catch (err) { // continue } } - if (!orderBy?.column) { - orderBy.order = desc - const createdAt = adapter.tables[tableName]?.createdAt - - if (createdAt) { - orderBy.column = createdAt - } else { - orderBy.column = adapter.tables[tableName].id - } - } - - if (orderBy.column) { - selectFields.sort = orderBy.column - } - return orderBy } diff --git a/packages/drizzle/src/queries/buildQuery.ts b/packages/drizzle/src/queries/buildQuery.ts index 9873b399a3..554142796b 100644 --- a/packages/drizzle/src/queries/buildQuery.ts +++ b/packages/drizzle/src/queries/buildQuery.ts @@ -1,6 +1,6 @@ import type { asc, desc, SQL } from 'drizzle-orm' import type { PgTableWithColumns } from 'drizzle-orm/pg-core' -import type { Field, Where } from 'payload' +import type { Field, Sort, Where } from 'payload' import type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js' @@ -18,7 +18,7 @@ type BuildQueryArgs = { fields: Field[] joins?: BuildQueryJoinAliases locale?: string - sort?: string + sort?: Sort tableName: string where: Where } @@ -28,7 +28,7 @@ export type BuildQueryResult = { orderBy: { column: GenericColumn order: typeof asc | typeof desc - } + }[] selectFields: Record where: SQL } diff --git a/packages/next/src/routes/rest/collections/find.ts b/packages/next/src/routes/rest/collections/find.ts index 4634629bff..ffa3eb19d9 100644 --- a/packages/next/src/routes/rest/collections/find.ts +++ b/packages/next/src/routes/rest/collections/find.ts @@ -28,7 +28,7 @@ export const find: CollectionRouteHandler = async ({ collection, req }) => { limit: isNumber(limit) ? Number(limit) : undefined, page: isNumber(page) ? Number(page) : undefined, req, - sort, + sort: typeof sort === 'string' ? sort.split(',') : undefined, where, }) diff --git a/packages/next/src/routes/rest/collections/findVersions.ts b/packages/next/src/routes/rest/collections/findVersions.ts index b58a380455..25cf18d241 100644 --- a/packages/next/src/routes/rest/collections/findVersions.ts +++ b/packages/next/src/routes/rest/collections/findVersions.ts @@ -23,7 +23,7 @@ export const findVersions: CollectionRouteHandler = async ({ collection, req }) limit: isNumber(limit) ? Number(limit) : undefined, page: isNumber(page) ? Number(page) : undefined, req, - sort, + sort: typeof sort === 'string' ? sort.split(',') : undefined, where, }) diff --git a/packages/next/src/routes/rest/globals/findVersions.ts b/packages/next/src/routes/rest/globals/findVersions.ts index aa5260c3bd..d868cd44f3 100644 --- a/packages/next/src/routes/rest/globals/findVersions.ts +++ b/packages/next/src/routes/rest/globals/findVersions.ts @@ -23,7 +23,7 @@ export const findVersions: GlobalRouteHandler = async ({ globalConfig, req }) => limit: isNumber(limit) ? Number(limit) : undefined, page: isNumber(page) ? Number(page) : undefined, req, - sort, + sort: typeof sort === 'string' ? sort.split(',') : undefined, where, }) diff --git a/packages/next/src/views/List/index.tsx b/packages/next/src/views/List/index.tsx index 7ff1bbbefb..940a6278f3 100644 --- a/packages/next/src/views/List/index.tsx +++ b/packages/next/src/views/List/index.tsx @@ -104,7 +104,10 @@ export const ListView: React.FC = async ({ const sort = query?.sort && typeof query.sort === 'string' ? query.sort - : listPreferences?.sort || collectionConfig.defaultSort || undefined + : listPreferences?.sort || + (typeof collectionConfig.defaultSort === 'string' + ? collectionConfig.defaultSort + : undefined) const data = await payload.find({ collection: collectionSlug, diff --git a/packages/payload/src/collections/config/types.ts b/packages/payload/src/collections/config/types.ts index 5fe12a4f32..b0e1723d5b 100644 --- a/packages/payload/src/collections/config/types.ts +++ b/packages/payload/src/collections/config/types.ts @@ -38,7 +38,7 @@ import type { TypedAuthOperations, TypedCollection, } from '../../index.js' -import type { PayloadRequest, RequestContext } from '../../types/index.js' +import type { PayloadRequest, RequestContext, Sort } from '../../types/index.js' import type { SanitizedUploadConfig, UploadConfig } from '../../uploads/types.js' import type { IncomingCollectionVersions, @@ -375,7 +375,7 @@ export type CollectionConfig = { /** * Default field to sort by in collection list view */ - defaultSort?: string + defaultSort?: Sort /** * When true, do not show the "Duplicate" button while editing documents within this collection and prevent `duplicate` from all APIs */ diff --git a/packages/payload/src/collections/operations/find.ts b/packages/payload/src/collections/operations/find.ts index cb90b774e8..89ca48035a 100644 --- a/packages/payload/src/collections/operations/find.ts +++ b/packages/payload/src/collections/operations/find.ts @@ -1,7 +1,7 @@ import type { AccessResult } from '../../config/types.js' import type { PaginatedDocs } from '../../database/types.js' import type { CollectionSlug, JoinQuery } from '../../index.js' -import type { PayloadRequest, Where } from '../../types/index.js' +import type { PayloadRequest, Sort, Where } from '../../types/index.js' import type { Collection, DataFromCollectionSlug } from '../config/types.js' import executeAccess from '../../auth/executeAccess.js' @@ -28,7 +28,7 @@ export type Arguments = { pagination?: boolean req?: PayloadRequest showHiddenFields?: boolean - sort?: string + sort?: Sort where?: Where } diff --git a/packages/payload/src/collections/operations/findVersions.ts b/packages/payload/src/collections/operations/findVersions.ts index 3426a32f1f..e0ee8d0b56 100644 --- a/packages/payload/src/collections/operations/findVersions.ts +++ b/packages/payload/src/collections/operations/findVersions.ts @@ -1,5 +1,5 @@ import type { PaginatedDocs } from '../../database/types.js' -import type { PayloadRequest, Where } from '../../types/index.js' +import type { PayloadRequest, Sort, Where } from '../../types/index.js' import type { TypeWithVersion } from '../../versions/types.js' import type { Collection } from '../config/types.js' @@ -20,7 +20,7 @@ export type Arguments = { pagination?: boolean req?: PayloadRequest showHiddenFields?: boolean - sort?: string + sort?: Sort where?: Where } diff --git a/packages/payload/src/collections/operations/local/find.ts b/packages/payload/src/collections/operations/local/find.ts index 09051ca6dc..8f5d545f8e 100644 --- a/packages/payload/src/collections/operations/local/find.ts +++ b/packages/payload/src/collections/operations/local/find.ts @@ -1,6 +1,6 @@ import type { PaginatedDocs } from '../../../database/types.js' import type { CollectionSlug, JoinQuery, Payload, TypedLocale } from '../../../index.js' -import type { Document, PayloadRequest, RequestContext, Where } from '../../../types/index.js' +import type { Document, PayloadRequest, RequestContext, Sort, Where } from '../../../types/index.js' import type { DataFromCollectionSlug } from '../../config/types.js' import { APIError } from '../../../errors/index.js' @@ -27,7 +27,7 @@ export type Options = { pagination?: boolean req?: PayloadRequest showHiddenFields?: boolean - sort?: string + sort?: Sort user?: Document where?: Where } diff --git a/packages/payload/src/collections/operations/local/findVersions.ts b/packages/payload/src/collections/operations/local/findVersions.ts index 9cb1caa86d..f5cbbe5a96 100644 --- a/packages/payload/src/collections/operations/local/findVersions.ts +++ b/packages/payload/src/collections/operations/local/findVersions.ts @@ -1,6 +1,6 @@ import type { PaginatedDocs } from '../../../database/types.js' import type { CollectionSlug, Payload, TypedLocale } from '../../../index.js' -import type { Document, PayloadRequest, RequestContext, Where } from '../../../types/index.js' +import type { Document, PayloadRequest, RequestContext, Sort, Where } from '../../../types/index.js' import type { TypeWithVersion } from '../../../versions/types.js' import type { DataFromCollectionSlug } from '../../config/types.js' @@ -23,7 +23,7 @@ export type Options = { page?: number req?: PayloadRequest showHiddenFields?: boolean - sort?: string + sort?: Sort user?: Document where?: Where } diff --git a/packages/payload/src/database/types.ts b/packages/payload/src/database/types.ts index 03b0967ddb..d56c3dfd66 100644 --- a/packages/payload/src/database/types.ts +++ b/packages/payload/src/database/types.ts @@ -1,5 +1,5 @@ import type { TypeWithID } from '../collections/config/types.js' -import type { Document, JoinQuery, Payload, PayloadRequest, Where } from '../types/index.js' +import type { Document, JoinQuery, Payload, PayloadRequest, Sort, Where } from '../types/index.js' import type { TypeWithVersion } from '../versions/types.js' export type { TypeWithVersion } @@ -180,7 +180,7 @@ export type QueryDraftsArgs = { page?: number pagination?: boolean req: PayloadRequest - sort?: string + sort?: Sort where?: Where } @@ -207,7 +207,7 @@ export type FindArgs = { projection?: Record req: PayloadRequest skip?: number - sort?: string + sort?: Sort versions?: boolean where?: Where } @@ -230,7 +230,7 @@ type BaseVersionArgs = { pagination?: boolean req: PayloadRequest skip?: number - sort?: string + sort?: Sort versions?: boolean where?: Where } diff --git a/packages/payload/src/globals/operations/findVersions.ts b/packages/payload/src/globals/operations/findVersions.ts index 19d5bd6f46..33383901a9 100644 --- a/packages/payload/src/globals/operations/findVersions.ts +++ b/packages/payload/src/globals/operations/findVersions.ts @@ -1,5 +1,5 @@ import type { PaginatedDocs } from '../../database/types.js' -import type { PayloadRequest, Where } from '../../types/index.js' +import type { PayloadRequest, Sort, Where } from '../../types/index.js' import type { TypeWithVersion } from '../../versions/types.js' import type { SanitizedGlobalConfig } from '../config/types.js' @@ -20,7 +20,7 @@ export type Arguments = { pagination?: boolean req?: PayloadRequest showHiddenFields?: boolean - sort?: string + sort?: Sort where?: Where } diff --git a/packages/payload/src/globals/operations/local/findVersions.ts b/packages/payload/src/globals/operations/local/findVersions.ts index 80ab12dc4d..67a4e1a1e4 100644 --- a/packages/payload/src/globals/operations/local/findVersions.ts +++ b/packages/payload/src/globals/operations/local/findVersions.ts @@ -1,6 +1,6 @@ import type { PaginatedDocs } from '../../../database/types.js' import type { GlobalSlug, Payload, RequestContext, TypedLocale } from '../../../index.js' -import type { Document, PayloadRequest, Where } from '../../../types/index.js' +import type { Document, PayloadRequest, Sort, Where } from '../../../types/index.js' import type { TypeWithVersion } from '../../../versions/types.js' import type { DataFromGlobalSlug } from '../../config/types.js' @@ -19,7 +19,7 @@ export type Options = { req?: PayloadRequest showHiddenFields?: boolean slug: TSlug - sort?: string + sort?: Sort user?: Document where?: Where } diff --git a/packages/payload/src/types/index.ts b/packages/payload/src/types/index.ts index 9c673be6a4..7890e9e944 100644 --- a/packages/payload/src/types/index.ts +++ b/packages/payload/src/types/index.ts @@ -110,6 +110,8 @@ export type Where = { or?: Where[] } +export type Sort = Array | string + /** * Applies pagination for join fields for including collection relationships */ diff --git a/packages/payload/src/versions/drafts/getQueryDraftsSort.ts b/packages/payload/src/versions/drafts/getQueryDraftsSort.ts index e4ccd3b6f4..8ef9d09e22 100644 --- a/packages/payload/src/versions/drafts/getQueryDraftsSort.ts +++ b/packages/payload/src/versions/drafts/getQueryDraftsSort.ts @@ -1,4 +1,5 @@ import type { SanitizedCollectionConfig } from '../../collections/config/types.js' +import type { Sort } from '../../types/index.js' /** * Takes the incoming sort argument and prefixes it with `versions.` and preserves any `-` prefixes for descending order @@ -9,8 +10,8 @@ export const getQueryDraftsSort = ({ sort, }: { collectionConfig: SanitizedCollectionConfig - sort: string -}): string => { + sort?: Sort +}): Sort => { if (!sort) { if (collectionConfig.defaultSort) { sort = collectionConfig.defaultSort @@ -19,17 +20,24 @@ export const getQueryDraftsSort = ({ } } - let direction = '' - let orderBy = sort - - if (sort[0] === '-') { - direction = '-' - orderBy = sort.substring(1) + if (typeof sort === 'string') { + sort = [sort] } - if (orderBy === 'id') { - return `${direction}parent` - } + return sort.map((field: string) => { + let orderBy: string + let direction = '' + if (field[0] === '-') { + orderBy = field.substring(1) + direction = '-' + } else { + orderBy = field + } - return `${direction}version.${orderBy}` + if (orderBy === 'id') { + return `${direction}parent` + } + + return `${direction}version.${orderBy}` + }) } diff --git a/test/sort/collections/DefaultSort/index.ts b/test/sort/collections/DefaultSort/index.ts new file mode 100644 index 0000000000..5254f4b8b6 --- /dev/null +++ b/test/sort/collections/DefaultSort/index.ts @@ -0,0 +1,21 @@ +import type { CollectionConfig } from 'payload' + +export const defaultSortSlug = 'default-sort' + +export const DefaultSortCollection: CollectionConfig = { + slug: defaultSortSlug, + admin: { + useAsTitle: 'text', + }, + defaultSort: ['number', '-text'], + fields: [ + { + name: 'text', + type: 'text', + }, + { + name: 'number', + type: 'number', + }, + ], +} diff --git a/test/sort/collections/Drafts/index.ts b/test/sort/collections/Drafts/index.ts new file mode 100644 index 0000000000..a6d73ae2d9 --- /dev/null +++ b/test/sort/collections/Drafts/index.ts @@ -0,0 +1,27 @@ +import type { CollectionConfig } from 'payload' + +export const draftsSlug = 'drafts' + +export const DraftsCollection: CollectionConfig = { + slug: draftsSlug, + admin: { + useAsTitle: 'text', + }, + versions: { + drafts: true, + }, + fields: [ + { + name: 'text', + type: 'text', + }, + { + name: 'number', + type: 'number', + }, + { + name: 'number2', + type: 'number', + }, + ], +} diff --git a/test/sort/collections/Localized/index.ts b/test/sort/collections/Localized/index.ts new file mode 100644 index 0000000000..0f87a5653b --- /dev/null +++ b/test/sort/collections/Localized/index.ts @@ -0,0 +1,41 @@ +import type { CollectionConfig } from 'payload' + +export const localiedSlug = 'localized' + +export const LocalizedCollection: CollectionConfig = { + slug: localiedSlug, + admin: { + useAsTitle: 'text', + }, + fields: [ + { + name: 'text', + type: 'text', + localized: true, + }, + { + name: 'number', + type: 'number', + localized: true, + }, + { + name: 'number2', + type: 'number', + }, + { + name: 'group', + type: 'group', + fields: [ + { + name: 'text', + type: 'text', + }, + { + name: 'number', + type: 'number', + localized: true, + }, + ], + }, + ], +} diff --git a/test/sort/collections/Posts/index.ts b/test/sort/collections/Posts/index.ts new file mode 100644 index 0000000000..b37832f757 --- /dev/null +++ b/test/sort/collections/Posts/index.ts @@ -0,0 +1,38 @@ +import type { CollectionConfig } from 'payload' + +export const postsSlug = 'posts' + +export const PostsCollection: CollectionConfig = { + slug: postsSlug, + admin: { + useAsTitle: 'text', + }, + fields: [ + { + name: 'text', + type: 'text', + }, + { + name: 'number', + type: 'number', + }, + { + name: 'number2', + type: 'number', + }, + { + name: 'group', + type: 'group', + fields: [ + { + name: 'text', + type: 'text', + }, + { + name: 'number', + type: 'number', + }, + ], + }, + ], +} diff --git a/test/sort/config.ts b/test/sort/config.ts new file mode 100644 index 0000000000..78868504bc --- /dev/null +++ b/test/sort/config.ts @@ -0,0 +1,37 @@ +import { fileURLToPath } from 'node:url' +import path from 'path' + +import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js' +import { devUser } from '../credentials.js' +import { DefaultSortCollection } from './collections/DefaultSort/index.js' +import { DraftsCollection } from './collections/Drafts/index.js' +import { LocalizedCollection } from './collections/Localized/index.js' +import { PostsCollection } from './collections/Posts/index.js' +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) + +export default buildConfigWithDefaults({ + collections: [PostsCollection, DraftsCollection, DefaultSortCollection, LocalizedCollection], + admin: { + importMap: { + baseDir: path.resolve(dirname), + }, + }, + cors: ['http://localhost:3000', 'http://localhost:3001'], + localization: { + locales: ['en', 'nb'], + defaultLocale: 'en', + }, + onInit: async (payload) => { + await payload.create({ + collection: 'users', + data: { + email: devUser.email, + password: devUser.password, + }, + }) + }, + typescript: { + outputFile: path.resolve(dirname, 'payload-types.ts'), + }, +}) diff --git a/test/sort/eslint.config.js b/test/sort/eslint.config.js new file mode 100644 index 0000000000..f295df083f --- /dev/null +++ b/test/sort/eslint.config.js @@ -0,0 +1,19 @@ +import { rootParserOptions } from '../../eslint.config.js' +import { testEslintConfig } from '../eslint.config.js' + +/** @typedef {import('eslint').Linter.Config} Config */ + +/** @type {Config[]} */ +export const index = [ + ...testEslintConfig, + { + languageOptions: { + parserOptions: { + ...rootParserOptions, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +] + +export default index diff --git a/test/sort/int.spec.ts b/test/sort/int.spec.ts new file mode 100644 index 0000000000..730f7b4895 --- /dev/null +++ b/test/sort/int.spec.ts @@ -0,0 +1,471 @@ +import type { CollectionSlug, Payload } from 'payload' + +import path from 'path' +import { fileURLToPath } from 'url' + +import type { NextRESTClient } from '../helpers/NextRESTClient.js' + +import { initPayloadInt } from '../helpers/initPayloadInt.js' + +let payload: Payload +let restClient: NextRESTClient + +const filename = fileURLToPath(import.meta.url) +const dirname = path.dirname(filename) + +describe('Sort', () => { + beforeAll(async () => { + const initialized = await initPayloadInt(dirname) + ;({ payload, restClient } = initialized) + }) + + afterAll(async () => { + if (typeof payload.db.destroy === 'function') { + await payload.db.destroy() + } + }) + + describe('Local API', () => { + beforeAll(async () => { + await createData('posts', [ + { text: 'Post 1', number: 1, number2: 10, group: { number: 100 } }, + { text: 'Post 2', number: 2, number2: 10, group: { number: 200 } }, + { text: 'Post 3', number: 3, number2: 5, group: { number: 150 } }, + { text: 'Post 10', number: 10, number2: 5, group: { number: 200 } }, + { text: 'Post 11', number: 11, number2: 20, group: { number: 150 } }, + { text: 'Post 12', number: 12, number2: 20, group: { number: 100 } }, + ]) + await createData('default-sort', [ + { text: 'Post default-5 b', number: 5 }, + { text: 'Post default-10', number: 10 }, + { text: 'Post default-5 a', number: 5 }, + { text: 'Post default-1', number: 1 }, + ]) + }) + + afterAll(async () => { + await payload.delete({ collection: 'posts', where: {} }) + await payload.delete({ collection: 'default-sort', where: {} }) + }) + + describe('Default sort', () => { + it('should sort posts by default definition in collection', async () => { + const posts = await payload.find({ + collection: 'default-sort', // 'number,-text' + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post default-1', + 'Post default-5 b', + 'Post default-5 a', + 'Post default-10', + ]) + }) + }) + + describe('Sinlge sort field', () => { + it('should sort posts by text field', async () => { + const posts = await payload.find({ + collection: 'posts', + sort: 'text', + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 1', + 'Post 10', + 'Post 11', + 'Post 12', + 'Post 2', + 'Post 3', + ]) + }) + + it('should sort posts by text field desc', async () => { + const posts = await payload.find({ + collection: 'posts', + sort: '-text', + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 3', + 'Post 2', + 'Post 12', + 'Post 11', + 'Post 10', + 'Post 1', + ]) + }) + + it('should sort posts by number field', async () => { + const posts = await payload.find({ + collection: 'posts', + sort: 'number', + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 1', + 'Post 2', + 'Post 3', + 'Post 10', + 'Post 11', + 'Post 12', + ]) + }) + + it('should sort posts by number field desc', async () => { + const posts = await payload.find({ + collection: 'posts', + sort: '-number', + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 12', + 'Post 11', + 'Post 10', + 'Post 3', + 'Post 2', + 'Post 1', + ]) + }) + }) + + describe('Sort by multiple fields', () => { + it('should sort posts by multiple fields', async () => { + const posts = await payload.find({ + collection: 'posts', + sort: ['number2', 'number'], + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 3', // 5, 3 + 'Post 10', // 5, 10 + 'Post 1', // 10, 1 + 'Post 2', // 10, 2 + 'Post 11', // 20, 11 + 'Post 12', // 20, 12 + ]) + }) + + it('should sort posts by multiple fields asc and desc', async () => { + const posts = await payload.find({ + collection: 'posts', + sort: ['number2', '-number'], + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 10', // 5, 10 + 'Post 3', // 5, 3 + 'Post 2', // 10, 2 + 'Post 1', // 10, 1 + 'Post 12', // 20, 12 + 'Post 11', // 20, 11 + ]) + }) + + it('should sort posts by multiple fields with group', async () => { + const posts = await payload.find({ + collection: 'posts', + sort: ['-group.number', '-number'], + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 10', // 200, 10 + 'Post 2', // 200, 2 + 'Post 11', // 150, 11 + 'Post 3', // 150, 3 + 'Post 12', // 100, 12 + 'Post 1', // 100, 1 + ]) + }) + }) + + describe('Sort with drafts', () => { + beforeAll(async () => { + const testData1 = await payload.create({ + collection: 'drafts', + data: { text: 'Post 1 draft', number: 10 }, + draft: true, + }) + await payload.update({ + collection: 'drafts', + id: testData1.id, + data: { text: 'Post 1 draft updated', number: 20 }, + draft: true, + }) + await payload.update({ + collection: 'drafts', + id: testData1.id, + data: { text: 'Post 1 draft updated', number: 30 }, + draft: true, + }) + await payload.update({ + collection: 'drafts', + id: testData1.id, + data: { text: 'Post 1 published', number: 15 }, + draft: false, + }) + const testData2 = await payload.create({ + collection: 'drafts', + data: { text: 'Post 2 draft', number: 1 }, + draft: true, + }) + await payload.update({ + collection: 'drafts', + id: testData2.id, + data: { text: 'Post 2 published', number: 2 }, + draft: false, + }) + await payload.update({ + collection: 'drafts', + id: testData2.id, + data: { text: 'Post 2 newdraft', number: 100 }, + draft: true, + }) + await payload.create({ + collection: 'drafts', + data: { text: 'Post 3 draft', number: 3 }, + draft: true, + }) + }) + + it('should sort latest without draft', async () => { + const posts = await payload.find({ + collection: 'drafts', + sort: 'number', + draft: false, + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 2 published', // 2 + 'Post 3 draft', // 3 + 'Post 1 published', // 15 + ]) + }) + + it('should sort latest with draft', async () => { + const posts = await payload.find({ + collection: 'drafts', + sort: 'number', + draft: true, + }) + + expect(posts.docs.map((post) => post.text)).toEqual([ + 'Post 3 draft', // 3 + 'Post 1 published', // 15 + 'Post 2 newdraft', // 100 + ]) + }) + + it('should sort versions', async () => { + const posts = await payload.findVersions({ + collection: 'drafts', + sort: 'version.number', + draft: false, + }) + + expect(posts.docs.map((post) => post.version.text)).toEqual([ + 'Post 2 draft', // 1 + 'Post 2 published', // 2 + 'Post 3 draft', // 3 + 'Post 1 draft', // 10 + 'Post 1 published', // 15 + 'Post 1 draft updated', // 20 + 'Post 1 draft updated', // 30 + 'Post 2 newdraft', // 100 + ]) + }) + }) + + describe('Localized sort', () => { + beforeAll(async () => { + const testData1 = await payload.create({ + collection: 'localized', + data: { text: 'Post 1 english', number: 10 }, + locale: 'en', + }) + await payload.update({ + collection: 'localized', + id: testData1.id, + data: { text: 'Post 1 norsk', number: 20 }, + locale: 'nb', + }) + const testData2 = await payload.create({ + collection: 'localized', + data: { text: 'Post 2 english', number: 25 }, + locale: 'en', + }) + await payload.update({ + collection: 'localized', + id: testData2.id, + data: { text: 'Post 2 norsk', number: 5 }, + locale: 'nb', + }) + }) + + it('should sort localized field', async () => { + const englishPosts = await payload.find({ + collection: 'localized', + sort: 'number', + locale: 'en', + }) + + expect(englishPosts.docs.map((post) => post.text)).toEqual([ + 'Post 1 english', // 10 + 'Post 2 english', // 20 + ]) + + const norwegianPosts = await payload.find({ + collection: 'localized', + sort: 'number', + locale: 'nb', + }) + + expect(norwegianPosts.docs.map((post) => post.text)).toEqual([ + 'Post 2 norsk', // 5 + 'Post 1 norsk', // 25 + ]) + }) + }) + }) + + describe('REST API', () => { + beforeAll(async () => { + await createData('posts', [ + { text: 'Post 1', number: 1, number2: 10 }, + { text: 'Post 2', number: 2, number2: 10 }, + { text: 'Post 3', number: 3, number2: 5 }, + { text: 'Post 10', number: 10, number2: 5 }, + { text: 'Post 11', number: 11, number2: 20 }, + { text: 'Post 12', number: 12, number2: 20 }, + ]) + }) + + afterAll(async () => { + await payload.delete({ collection: 'posts', where: {} }) + }) + + describe('Sinlge sort field', () => { + it('should sort posts by text field', async () => { + const res = await restClient + .GET(`/posts`, { + query: { + sort: 'text', + }, + }) + .then((res) => res.json()) + + expect(res.docs.map((post) => post.text)).toEqual([ + 'Post 1', + 'Post 10', + 'Post 11', + 'Post 12', + 'Post 2', + 'Post 3', + ]) + }) + + it('should sort posts by text field desc', async () => { + const res = await restClient + .GET(`/posts`, { + query: { + sort: '-text', + }, + }) + .then((res) => res.json()) + + expect(res.docs.map((post) => post.text)).toEqual([ + 'Post 3', + 'Post 2', + 'Post 12', + 'Post 11', + 'Post 10', + 'Post 1', + ]) + }) + + it('should sort posts by number field', async () => { + const res = await restClient + .GET(`/posts`, { + query: { + sort: 'number', + }, + }) + .then((res) => res.json()) + + expect(res.docs.map((post) => post.text)).toEqual([ + 'Post 1', + 'Post 2', + 'Post 3', + 'Post 10', + 'Post 11', + 'Post 12', + ]) + }) + + it('should sort posts by number field desc', async () => { + const res = await restClient + .GET(`/posts`, { + query: { + sort: '-number', + }, + }) + .then((res) => res.json()) + + expect(res.docs.map((post) => post.text)).toEqual([ + 'Post 12', + 'Post 11', + 'Post 10', + 'Post 3', + 'Post 2', + 'Post 1', + ]) + }) + }) + + describe('Sort by multiple fields', () => { + it('should sort posts by multiple fields', async () => { + const res = await restClient + .GET(`/posts`, { + query: { + sort: 'number2,number', + }, + }) + .then((res) => res.json()) + + expect(res.docs.map((post) => post.text)).toEqual([ + 'Post 3', // 5, 3 + 'Post 10', // 5, 10 + 'Post 1', // 10, 1 + 'Post 2', // 10, 2 + 'Post 11', // 20, 11 + 'Post 12', // 20, 12 + ]) + }) + + it('should sort posts by multiple fields asc and desc', async () => { + const res = await restClient + .GET(`/posts`, { + query: { + sort: 'number2,-number', + }, + }) + .then((res) => res.json()) + + expect(res.docs.map((post) => post.text)).toEqual([ + 'Post 10', // 5, 10 + 'Post 3', // 5, 3 + 'Post 2', // 10, 2 + 'Post 1', // 10, 1 + 'Post 12', // 20, 12 + 'Post 11', // 20, 11 + ]) + }) + }) + }) +}) + +async function createData(collection: CollectionSlug, data: Record[]) { + for (const item of data) { + await payload.create({ collection, data: item }) + } +} diff --git a/test/sort/payload-types.ts b/test/sort/payload-types.ts new file mode 100644 index 0000000000..715c5e6c72 --- /dev/null +++ b/test/sort/payload-types.ts @@ -0,0 +1,204 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * This file was automatically generated by Payload. + * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, + * and re-run `payload generate:types` to regenerate this file. + */ + +export interface Config { + auth: { + users: UserAuthOperations; + }; + collections: { + posts: Post; + drafts: Draft; + 'default-sort': DefaultSort; + localized: Localized; + users: User; + 'payload-locked-documents': PayloadLockedDocument; + 'payload-preferences': PayloadPreference; + 'payload-migrations': PayloadMigration; + }; + db: { + defaultIDType: string; + }; + globals: {}; + locale: 'en' | 'nb'; + user: User & { + collection: 'users'; + }; +} +export interface UserAuthOperations { + forgotPassword: { + email: string; + password: string; + }; + login: { + email: string; + password: string; + }; + registerFirstUser: { + email: string; + password: string; + }; + unlock: { + email: string; + password: string; + }; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "posts". + */ +export interface Post { + id: string; + text?: string | null; + number?: number | null; + number2?: number | null; + group?: { + text?: string | null; + number?: number | null; + }; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "drafts". + */ +export interface Draft { + id: string; + text?: string | null; + number?: number | null; + number2?: number | null; + updatedAt: string; + createdAt: string; + _status?: ('draft' | 'published') | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "default-sort". + */ +export interface DefaultSort { + id: string; + text?: string | null; + number?: number | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "localized". + */ +export interface Localized { + id: string; + text?: string | null; + number?: number | null; + number2?: number | null; + group?: { + text?: string | null; + number?: number | null; + }; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: string; + updatedAt: string; + createdAt: string; + email: string; + resetPasswordToken?: string | null; + resetPasswordExpiration?: string | null; + salt?: string | null; + hash?: string | null; + loginAttempts?: number | null; + lockUntil?: string | null; + password?: string | null; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents". + */ +export interface PayloadLockedDocument { + id: string; + document?: + | ({ + relationTo: 'posts'; + value: string | Post; + } | null) + | ({ + relationTo: 'drafts'; + value: string | Draft; + } | null) + | ({ + relationTo: 'default-sort'; + value: string | DefaultSort; + } | null) + | ({ + relationTo: 'localized'; + value: string | Localized; + } | null) + | ({ + relationTo: 'users'; + value: string | User; + } | null); + globalSlug?: string | null; + user: { + relationTo: 'users'; + value: string | User; + }; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences". + */ +export interface PayloadPreference { + id: string; + user: { + relationTo: 'users'; + value: string | User; + }; + key?: string | null; + value?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations". + */ +export interface PayloadMigration { + id: string; + name?: string | null; + batch?: number | null; + updatedAt: string; + createdAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "auth". + */ +export interface Auth { + [k: string]: unknown; +} + + +declare module 'payload' { + // @ts-ignore + export interface GeneratedTypes extends Config {} +} \ No newline at end of file diff --git a/test/sort/tsconfig.eslint.json b/test/sort/tsconfig.eslint.json new file mode 100644 index 0000000000..b34cc7afbb --- /dev/null +++ b/test/sort/tsconfig.eslint.json @@ -0,0 +1,13 @@ +{ + // extend your base config to share compilerOptions, etc + //"extends": "./tsconfig.json", + "compilerOptions": { + // ensure that nobody can accidentally use this config for a build + "noEmit": true + }, + "include": [ + // whatever paths you intend to lint + "./**/*.ts", + "./**/*.tsx" + ] +} diff --git a/test/sort/tsconfig.json b/test/sort/tsconfig.json new file mode 100644 index 0000000000..3c43903cfd --- /dev/null +++ b/test/sort/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../tsconfig.json" +} From 085e127217b8f5efd6d12bbb063a9d93bcc1d17b Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 24 Oct 2024 14:46:19 -0600 Subject: [PATCH 106/110] fix(ui): leave without saving when changing /account theme (#8724) Fixes an annoying instance where on the /account page if you change your theme then navigate away the Leaving without save popup is triggered even though you don't need to submit a form or trigger a save in order to change your admin theme. --- packages/next/src/views/Account/ToggleTheme/index.tsx | 1 + packages/payload/src/admin/fields/Radio.ts | 4 ++++ packages/ui/src/fields/RadioGroup/index.tsx | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/next/src/views/Account/ToggleTheme/index.tsx b/packages/next/src/views/Account/ToggleTheme/index.tsx index 31331bb0f9..cdadbdd0da 100644 --- a/packages/next/src/views/Account/ToggleTheme/index.tsx +++ b/packages/next/src/views/Account/ToggleTheme/index.tsx @@ -16,6 +16,7 @@ export const ToggleTheme: React.FC = () => { return ( type RadioFieldBaseClientProps = { + /** + * Threaded through to the setValue function from the form context when the value changes + */ + readonly disableModifyingForm?: boolean readonly onChange?: OnChange readonly validate?: RadioFieldValidation readonly value?: string diff --git a/packages/ui/src/fields/RadioGroup/index.tsx b/packages/ui/src/fields/RadioGroup/index.tsx index ac7278052c..0b00d3f835 100644 --- a/packages/ui/src/fields/RadioGroup/index.tsx +++ b/packages/ui/src/fields/RadioGroup/index.tsx @@ -21,6 +21,7 @@ import { FieldError } from '../FieldError/index.js' const RadioGroupFieldComponent: RadioFieldClientComponent = (props) => { const { descriptionProps, + disableModifyingForm: disableModifyingFormFromProps, errorProps, field, field: { @@ -126,7 +127,7 @@ const RadioGroupFieldComponent: RadioFieldClientComponent = (props) => { } if (!disabled) { - setValue(optionValue) + setValue(optionValue, !!disableModifyingFormFromProps) } }} option={optionIsObject(option) ? option : { label: option, value: option }} From b1b571d53ea7119047cdcb083ab1d93cddfab7b6 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Thu, 24 Oct 2024 16:48:05 -0400 Subject: [PATCH 107/110] ci: do not run pr-title on synchronize event --- .github/workflows/pr-title.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr-title.yml b/.github/workflows/pr-title.yml index 991881ce2f..584ea8011f 100644 --- a/.github/workflows/pr-title.yml +++ b/.github/workflows/pr-title.yml @@ -5,7 +5,6 @@ on: types: - opened - edited - - synchronize permissions: pull-requests: write From e72e81c3dae42ef9bf7187ad7a839db2b1f26fef Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 24 Oct 2024 16:29:29 -0600 Subject: [PATCH 108/110] fix(ui): upload buttons being hidden at mobile screen widths (#8860) --- packages/ui/src/elements/Upload/index.scss | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/ui/src/elements/Upload/index.scss b/packages/ui/src/elements/Upload/index.scss index bff486ac3b..2717f5e7c8 100644 --- a/packages/ui/src/elements/Upload/index.scss +++ b/packages/ui/src/elements/Upload/index.scss @@ -147,11 +147,5 @@ display: none; } } - - @include small-break { - &__dropzoneContent { - display: none; - } - } } } From 2df8f94a752bd0c11584b4372fa2772c2caeec0a Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 24 Oct 2024 18:29:39 -0600 Subject: [PATCH 109/110] fix(plugin-search): issues with overriding the search collection slug consistently across hooks (#8847) Fixes https://github.com/payloadcms/payload/issues/8842 --- .../src/Search/hooks/deleteFromSearch.ts | 12 ++++---- .../src/Search/hooks/syncWithSearch.ts | 30 ++++++++++--------- packages/plugin-search/src/Search/index.ts | 4 ++- .../src/Search/ui/index.client.tsx | 16 +++++++--- .../plugin-search/src/Search/ui/index.tsx | 6 +--- packages/plugin-search/src/index.ts | 17 +++++++++-- packages/plugin-search/src/types.ts | 7 +++++ 7 files changed, 60 insertions(+), 32 deletions(-) diff --git a/packages/plugin-search/src/Search/hooks/deleteFromSearch.ts b/packages/plugin-search/src/Search/hooks/deleteFromSearch.ts index 94af7dacee..6ef74ea39c 100644 --- a/packages/plugin-search/src/Search/hooks/deleteFromSearch.ts +++ b/packages/plugin-search/src/Search/hooks/deleteFromSearch.ts @@ -1,13 +1,15 @@ -import type { CollectionAfterDeleteHook } from 'payload' +import type { DeleteFromSearch } from '../../types.js' -export const deleteFromSearch: CollectionAfterDeleteHook = async ({ +export const deleteFromSearch: DeleteFromSearch = async ({ doc, + pluginConfig, req: { payload }, req, }) => { + const searchSlug = pluginConfig?.searchOverrides?.slug || 'search' try { const searchDocQuery = await payload.find({ - collection: 'search', + collection: searchSlug, depth: 0, req, where: { @@ -20,14 +22,14 @@ export const deleteFromSearch: CollectionAfterDeleteHook = async ({ if (searchDocQuery?.docs?.[0]) { await payload.delete({ id: searchDocQuery?.docs?.[0]?.id, - collection: 'search', + collection: searchSlug, req, }) } } catch (err: unknown) { payload.logger.error({ err, - msg: `Error deleting search doc.`, + msg: `Error deleting ${searchSlug} doc.`, }) } diff --git a/packages/plugin-search/src/Search/hooks/syncWithSearch.ts b/packages/plugin-search/src/Search/hooks/syncWithSearch.ts index f900c794b7..1afb8e90ca 100644 --- a/packages/plugin-search/src/Search/hooks/syncWithSearch.ts +++ b/packages/plugin-search/src/Search/hooks/syncWithSearch.ts @@ -12,7 +12,9 @@ export const syncWithSearch: SyncWithSearch = async (args) => { const { id, _status: status, title } = doc || {} - const { beforeSync, defaultPriorities, deleteDrafts, syncDrafts } = pluginConfig + const { beforeSync, defaultPriorities, deleteDrafts, searchOverrides, syncDrafts } = pluginConfig + + const searchSlug = searchOverrides?.slug || 'search' let dataToSave: DocToSync = { doc: { @@ -50,7 +52,7 @@ export const syncWithSearch: SyncWithSearch = async (args) => { } catch (err: unknown) { payload.logger.error(err) payload.logger.error( - `Error gathering default priority for search documents related to ${collection}`, + `Error gathering default priority for ${searchSlug} documents related to ${collection}`, ) } } else { @@ -64,7 +66,7 @@ export const syncWithSearch: SyncWithSearch = async (args) => { if (operation === 'create') { if (doSync) { await payload.create({ - collection: 'search', + collection: searchSlug, data: { ...dataToSave, priority: defaultPriority, @@ -78,7 +80,7 @@ export const syncWithSearch: SyncWithSearch = async (args) => { try { // find the correct doc to sync with const searchDocQuery = await payload.find({ - collection: 'search', + collection: searchSlug, depth: 0, req, where: { @@ -104,12 +106,12 @@ export const syncWithSearch: SyncWithSearch = async (args) => { try { const duplicativeDocIDs = duplicativeDocs.map(({ id }) => id) await payload.delete({ - collection: 'search', + collection: searchSlug, req, where: { id: { in: duplicativeDocIDs } }, }) } catch (err: unknown) { - payload.logger.error(`Error deleting duplicative search documents.`) + payload.logger.error(`Error deleting duplicative ${searchSlug} documents.`) } } @@ -121,7 +123,7 @@ export const syncWithSearch: SyncWithSearch = async (args) => { try { await payload.update({ id: searchDocID, - collection: 'search', + collection: searchSlug, data: { ...dataToSave, priority: foundDoc.priority || defaultPriority, @@ -129,7 +131,7 @@ export const syncWithSearch: SyncWithSearch = async (args) => { req, }) } catch (err: unknown) { - payload.logger.error(`Error updating search document.`) + payload.logger.error(`Error updating ${searchSlug} document.`) } } if (deleteDrafts && status === 'draft') { @@ -137,17 +139,17 @@ export const syncWithSearch: SyncWithSearch = async (args) => { try { await payload.delete({ id: searchDocID, - collection: 'search', + collection: searchSlug, req, }) } catch (err: unknown) { - payload.logger.error({ err, msg: `Error deleting search document.` }) + payload.logger.error({ err, msg: `Error deleting ${searchSlug} document.` }) } } } else if (doSync) { try { await payload.create({ - collection: 'search', + collection: searchSlug, data: { ...dataToSave, priority: defaultPriority, @@ -155,17 +157,17 @@ export const syncWithSearch: SyncWithSearch = async (args) => { req, }) } catch (err: unknown) { - payload.logger.error({ err, msg: `Error creating search document.` }) + payload.logger.error({ err, msg: `Error creating ${searchSlug} document.` }) } } } catch (err: unknown) { - payload.logger.error({ err, msg: `Error finding search document.` }) + payload.logger.error({ err, msg: `Error finding ${searchSlug} document.` }) } } } catch (err: unknown) { payload.logger.error({ err, - msg: `Error syncing search document related to ${collection} with id: '${id}'.`, + msg: `Error syncing ${searchSlug} document related to ${collection} with id: '${id}'.`, }) } diff --git a/packages/plugin-search/src/Search/index.ts b/packages/plugin-search/src/Search/index.ts index 9a3ff86066..37dcffdd06 100644 --- a/packages/plugin-search/src/Search/index.ts +++ b/packages/plugin-search/src/Search/index.ts @@ -36,7 +36,9 @@ export const generateSearchCollection = (pluginConfig: SearchPluginConfig): Coll type: 'ui', admin: { components: { - Field: '@payloadcms/plugin-search/client#LinkToDoc', + Field: { + path: '@payloadcms/plugin-search/client#LinkToDoc', + }, }, position: 'sidebar', }, diff --git a/packages/plugin-search/src/Search/ui/index.client.tsx b/packages/plugin-search/src/Search/ui/index.client.tsx index a10c4b6009..98f625542e 100644 --- a/packages/plugin-search/src/Search/ui/index.client.tsx +++ b/packages/plugin-search/src/Search/ui/index.client.tsx @@ -1,6 +1,6 @@ 'use client' -import { useConfig } from '@payloadcms/ui' +import { useConfig, useField } from '@payloadcms/ui' import { formatAdminURL } from '@payloadcms/ui/shared' import React from 'react' // TODO: fix this import to work in dev mode within the monorepo in a way that is backwards compatible with 1.x @@ -16,13 +16,19 @@ export const LinkToDocClient: React.FC = () => { serverURL, } = config + const { value } = useField<{ relationTo?: string; value?: string }>({ path: 'doc' }) + const href = `${serverURL}${formatAdminURL({ adminRoute, - path: '/collections/${relationTo}/${docId}', + path: `/collections/${value.relationTo || ''}/${value.value || ''}`, })}` + if (!value.relationTo || !value.value) { + return null + } + return ( -
+
{ textOverflow: 'ellipsis', }} > - {href} + + {href} +
) diff --git a/packages/plugin-search/src/Search/ui/index.tsx b/packages/plugin-search/src/Search/ui/index.tsx index 65d12217de..3b3a8185a5 100644 --- a/packages/plugin-search/src/Search/ui/index.tsx +++ b/packages/plugin-search/src/Search/ui/index.tsx @@ -5,9 +5,5 @@ import React from 'react' import { LinkToDocClient } from './index.client.js' export const LinkToDoc: React.FC = () => { - return ( -
- -
- ) + return } diff --git a/packages/plugin-search/src/index.ts b/packages/plugin-search/src/index.ts index 3ab321902f..5a56b06934 100644 --- a/packages/plugin-search/src/index.ts +++ b/packages/plugin-search/src/index.ts @@ -1,4 +1,4 @@ -import type { Config } from 'payload' +import type { CollectionAfterChangeHook, CollectionAfterDeleteHook, Config } from 'payload' import type { SearchPluginConfig } from './types.js' @@ -6,6 +6,9 @@ import { deleteFromSearch } from './Search/hooks/deleteFromSearch.js' import { syncWithSearch } from './Search/hooks/syncWithSearch.js' import { generateSearchCollection } from './Search/index.js' +type CollectionAfterChangeHookArgs = Parameters[0] +type CollectionAfterDeleteHookArgs = Parameters[0] + export const searchPlugin = (incomingPluginConfig: SearchPluginConfig) => (config: Config): Config => { @@ -33,7 +36,7 @@ export const searchPlugin = ...collection.hooks, afterChange: [ ...(existingHooks?.afterChange || []), - async (args: any) => { + async (args: CollectionAfterChangeHookArgs) => { await syncWithSearch({ ...args, collection: collection.slug, @@ -41,7 +44,15 @@ export const searchPlugin = }) }, ], - afterDelete: [...(existingHooks?.afterDelete || []), deleteFromSearch], + afterDelete: [ + ...(existingHooks?.afterDelete || []), + async (args: CollectionAfterDeleteHookArgs) => { + await deleteFromSearch({ + ...args, + pluginConfig, + }) + }, + ], }, } } diff --git a/packages/plugin-search/src/types.ts b/packages/plugin-search/src/types.ts index 46e58b6a1c..7ec164647f 100644 --- a/packages/plugin-search/src/types.ts +++ b/packages/plugin-search/src/types.ts @@ -1,5 +1,6 @@ import type { CollectionAfterChangeHook, + CollectionAfterDeleteHook, CollectionConfig, Field, Payload, @@ -45,3 +46,9 @@ export type SyncWithSearch = ( pluginConfig: SearchPluginConfig } & Omit[0], 'collection'>, ) => ReturnType + +export type DeleteFromSearch = ( + Args: { + pluginConfig: SearchPluginConfig + } & Omit[0], 'collection'>, +) => ReturnType From 1b1dc82cfb5bed5353c8f32a7bebb377780cc6f8 Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Thu, 24 Oct 2024 21:19:15 -0400 Subject: [PATCH 110/110] feat!: rename @payloadcms/plugin-cloud (#8828) BREAKING CHANGE: Rename `@payloadcms/plugin-cloud` to `@payloadcms/payload-cloud`. Anyone using the existing plugin will need to switch to using the new package. ## Why? Since v3 will be using _fixed versioning_, all versions of `^3` must be available. Unfortunately, the `@payloadcms/plugin-cloud` version has already breached that version number. Renaming will allow it to be on the same version as other monorepo packages. Additionally, the name `plugin-cloud` is quite ambiguous and sometimes is confused with `plugin-cloud-storage`, so using `payload-cloud` feels like a good move to make this more evident. --- docs/cloud/projects.mdx | 4 ++-- package.json | 2 +- packages/create-payload-app/src/lib/init-next.ts | 2 +- packages/create-payload-app/src/lib/replacements.ts | 4 ++-- packages/db-postgres/package.json | 2 +- packages/{plugin-cloud => payload-cloud}/.gitignore | 0 packages/{plugin-cloud => payload-cloud}/.prettierignore | 0 packages/{plugin-cloud => payload-cloud}/.swcrc-build | 0 packages/{plugin-cloud => payload-cloud}/LICENSE.md | 0 packages/{plugin-cloud => payload-cloud}/README.md | 4 ++-- packages/{plugin-cloud => payload-cloud}/eslint.config.js | 0 packages/{plugin-cloud => payload-cloud}/jest.config.js | 0 packages/{plugin-cloud => payload-cloud}/package.json | 4 ++-- packages/{plugin-cloud => payload-cloud}/src/email.spec.ts | 0 packages/{plugin-cloud => payload-cloud}/src/email.ts | 2 ++ .../src/hooks/afterDelete.ts | 0 .../src/hooks/beforeChange.ts | 0 .../src/hooks/uploadCache.ts | 0 packages/{plugin-cloud => payload-cloud}/src/index.ts | 0 packages/{plugin-cloud => payload-cloud}/src/plugin.spec.ts | 0 packages/{plugin-cloud => payload-cloud}/src/plugin.ts | 0 .../{plugin-cloud => payload-cloud}/src/staticHandler.ts | 0 packages/{plugin-cloud => payload-cloud}/src/types.ts | 0 .../src/utilities/authAsCognitoUser.ts | 2 +- .../src/utilities/createKey.ts | 0 .../src/utilities/getIncomingFiles.ts | 0 .../src/utilities/getStorageClient.ts | 2 +- packages/{plugin-cloud => payload-cloud}/tsconfig.json | 0 packages/payload/src/versions/payloadPackageList.ts | 2 +- packages/plugin-cloud/src/admin.js | 1 - pnpm-lock.yaml | 6 +++--- scripts/lib/publishList.ts | 1 + test/import-test/import-all-2-exports.ts | 2 +- test/package.json | 2 +- test/{plugin-cloud => payload-cloud}/collections/Media.ts | 0 test/{plugin-cloud => payload-cloud}/collections/Users.ts | 0 test/{plugin-cloud => payload-cloud}/config.ts | 2 +- test/{plugin-cloud => payload-cloud}/eslint.config.js | 0 test/{plugin-cloud => payload-cloud}/int.spec.ts | 0 test/{plugin-cloud => payload-cloud}/payload-types.ts | 0 test/{plugin-cloud => payload-cloud}/tsconfig.eslint.json | 0 test/{plugin-cloud => payload-cloud}/tsconfig.json | 0 test/setupProd.ts | 2 +- test/tsconfig.typecheck.json | 2 +- tsconfig.json | 2 +- 45 files changed, 26 insertions(+), 24 deletions(-) rename packages/{plugin-cloud => payload-cloud}/.gitignore (100%) rename packages/{plugin-cloud => payload-cloud}/.prettierignore (100%) rename packages/{plugin-cloud => payload-cloud}/.swcrc-build (100%) rename packages/{plugin-cloud => payload-cloud}/LICENSE.md (100%) rename packages/{plugin-cloud => payload-cloud}/README.md (97%) rename packages/{plugin-cloud => payload-cloud}/eslint.config.js (100%) rename packages/{plugin-cloud => payload-cloud}/jest.config.js (100%) rename packages/{plugin-cloud => payload-cloud}/package.json (95%) rename packages/{plugin-cloud => payload-cloud}/src/email.spec.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/email.ts (95%) rename packages/{plugin-cloud => payload-cloud}/src/hooks/afterDelete.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/hooks/beforeChange.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/hooks/uploadCache.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/index.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/plugin.spec.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/plugin.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/staticHandler.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/types.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/utilities/authAsCognitoUser.ts (97%) rename packages/{plugin-cloud => payload-cloud}/src/utilities/createKey.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/utilities/getIncomingFiles.ts (100%) rename packages/{plugin-cloud => payload-cloud}/src/utilities/getStorageClient.ts (97%) rename packages/{plugin-cloud => payload-cloud}/tsconfig.json (100%) delete mode 100644 packages/plugin-cloud/src/admin.js rename test/{plugin-cloud => payload-cloud}/collections/Media.ts (100%) rename test/{plugin-cloud => payload-cloud}/collections/Users.ts (100%) rename test/{plugin-cloud => payload-cloud}/config.ts (94%) rename test/{plugin-cloud => payload-cloud}/eslint.config.js (100%) rename test/{plugin-cloud => payload-cloud}/int.spec.ts (100%) rename test/{plugin-cloud => payload-cloud}/payload-types.ts (100%) rename test/{plugin-cloud => payload-cloud}/tsconfig.eslint.json (100%) rename test/{plugin-cloud => payload-cloud}/tsconfig.json (100%) diff --git a/docs/cloud/projects.mdx b/docs/cloud/projects.mdx index abf5c0ca59..491c762272 100644 --- a/docs/cloud/projects.mdx +++ b/docs/cloud/projects.mdx @@ -101,11 +101,11 @@ Projects generated from a template will come pre-configured with the official Cl `yarn add @payloadcms/plugin-cloud` ```js -import { payloadCloud } from '@payloadcms/plugin-cloud' +import { payloadCloudPlugin } from '@payloadcms/payload-cloud' import { buildConfig } from 'payload' export default buildConfig({ - plugins: [payloadCloud()], + plugins: [payloadCloudPlugin()], // rest of config }) ``` diff --git a/package.json b/package.json index 76d7b21e0f..dfe608f1fb 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "build:live-preview-vue": "turbo build --filter \"@payloadcms/live-preview-vue\"", "build:next": "turbo build --filter \"@payloadcms/next\"", "build:payload": "turbo build --filter payload", - "build:plugin-cloud": "turbo build --filter \"@payloadcms/plugin-cloud\"", + "build:payload-cloud": "turbo build --filter \"@payloadcms/payload-cloud\"", "build:plugin-cloud-storage": "turbo build --filter \"@payloadcms/plugin-cloud-storage\"", "build:plugin-form-builder": "turbo build --filter \"@payloadcms/plugin-form-builder\"", "build:plugin-nested-docs": "turbo build --filter \"@payloadcms/plugin-nested-docs\"", diff --git a/packages/create-payload-app/src/lib/init-next.ts b/packages/create-payload-app/src/lib/init-next.ts index 58e12d3c97..ea5859fe6f 100644 --- a/packages/create-payload-app/src/lib/init-next.ts +++ b/packages/create-payload-app/src/lib/init-next.ts @@ -226,7 +226,7 @@ async function installDeps(projectDir: string, packageManager: PackageManager, d 'payload', '@payloadcms/next', '@payloadcms/richtext-lexical', - '@payloadcms/plugin-cloud', + '@payloadcms/payload-cloud', ].map((pkg) => `${pkg}@beta`) packagesToInstall.push(`@payloadcms/db-${dbType}@beta`) diff --git a/packages/create-payload-app/src/lib/replacements.ts b/packages/create-payload-app/src/lib/replacements.ts index 731c640179..cc109e63ce 100644 --- a/packages/create-payload-app/src/lib/replacements.ts +++ b/packages/create-payload-app/src/lib/replacements.ts @@ -82,8 +82,8 @@ const vercelBlobStorageReplacement: StorageAdapterReplacement = { const payloadCloudReplacement: StorageAdapterReplacement = { configReplacement: [' payloadCloudPlugin(),'], - importReplacement: "import { payloadCloudPlugin } from '@payloadcms/plugin-cloud'", - packageName: '@payloadcms/plugin-cloud', + importReplacement: "import { payloadCloudPlugin } from '@payloadcms/payload-cloud'", + packageName: '@payloadcms/payload-cloud', } // Removes placeholders diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index ba516280b7..6169108525 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -43,7 +43,7 @@ "lint": "eslint .", "lint:fix": "eslint . --fix", "prepack": "pnpm clean && pnpm turbo build", - "prepublishOnly": "pnpm clean && pnpm turbo build", + "prepublishOnly": "pnpm clean && pnpm turbo build --filter=./", "renamePredefinedMigrations": "node --no-deprecation --import @swc-node/register/esm-register ./scripts/renamePredefinedMigrations.ts" }, "dependencies": { diff --git a/packages/plugin-cloud/.gitignore b/packages/payload-cloud/.gitignore similarity index 100% rename from packages/plugin-cloud/.gitignore rename to packages/payload-cloud/.gitignore diff --git a/packages/plugin-cloud/.prettierignore b/packages/payload-cloud/.prettierignore similarity index 100% rename from packages/plugin-cloud/.prettierignore rename to packages/payload-cloud/.prettierignore diff --git a/packages/plugin-cloud/.swcrc-build b/packages/payload-cloud/.swcrc-build similarity index 100% rename from packages/plugin-cloud/.swcrc-build rename to packages/payload-cloud/.swcrc-build diff --git a/packages/plugin-cloud/LICENSE.md b/packages/payload-cloud/LICENSE.md similarity index 100% rename from packages/plugin-cloud/LICENSE.md rename to packages/payload-cloud/LICENSE.md diff --git a/packages/plugin-cloud/README.md b/packages/payload-cloud/README.md similarity index 97% rename from packages/plugin-cloud/README.md rename to packages/payload-cloud/README.md index 2d7ddc3f78..5b79f278bf 100644 --- a/packages/plugin-cloud/README.md +++ b/packages/payload-cloud/README.md @@ -18,10 +18,10 @@ Payload Cloud provides a caching for all upload collections by default through C Add the plugin to your Payload config -`yarn add @payloadcms/plugin-cloud` +`yarn add @payloadcms/payload-cloud` ```ts -import { payloadCloud } from '@payloadcms/plugin-cloud' +import { payloadCloud } from '@payloadcms/payload-cloud' import { buildConfig } from 'payload' export default buildConfig({ diff --git a/packages/plugin-cloud/eslint.config.js b/packages/payload-cloud/eslint.config.js similarity index 100% rename from packages/plugin-cloud/eslint.config.js rename to packages/payload-cloud/eslint.config.js diff --git a/packages/plugin-cloud/jest.config.js b/packages/payload-cloud/jest.config.js similarity index 100% rename from packages/plugin-cloud/jest.config.js rename to packages/payload-cloud/jest.config.js diff --git a/packages/plugin-cloud/package.json b/packages/payload-cloud/package.json similarity index 95% rename from packages/plugin-cloud/package.json rename to packages/payload-cloud/package.json index 0be2ac9583..d0804cabef 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/payload-cloud/package.json @@ -1,12 +1,12 @@ { - "name": "@payloadcms/plugin-cloud", + "name": "@payloadcms/payload-cloud", "version": "3.0.0-beta.118", "description": "The official Payload Cloud plugin", "homepage": "https://payloadcms.com", "repository": { "type": "git", "url": "https://github.com/payloadcms/payload.git", - "directory": "packages/plugin-cloud" + "directory": "packages/payload-cloud" }, "license": "MIT", "type": "module", diff --git a/packages/plugin-cloud/src/email.spec.ts b/packages/payload-cloud/src/email.spec.ts similarity index 100% rename from packages/plugin-cloud/src/email.spec.ts rename to packages/payload-cloud/src/email.spec.ts diff --git a/packages/plugin-cloud/src/email.ts b/packages/payload-cloud/src/email.ts similarity index 95% rename from packages/plugin-cloud/src/email.ts rename to packages/payload-cloud/src/email.ts index d4e1f2ae60..68d1a78383 100644 --- a/packages/plugin-cloud/src/email.ts +++ b/packages/payload-cloud/src/email.ts @@ -22,6 +22,7 @@ export const payloadCloudEmail = async ( // Check if already has email configuration if (args.config.email) { + // eslint-disable-next-line no-console console.log( 'Payload Cloud Email is enabled but email configuration is already provided in Payload config. If this is intentional, set `email: false` in the Payload Cloud plugin options.', ) @@ -37,6 +38,7 @@ export const payloadCloudEmail = async ( const customDomains = customDomainEnvs.map((e) => process.env[e]).filter(Boolean) if (customDomains.length) { + // eslint-disable-next-line no-console console.log( `Configuring Payload Cloud Email for ${[defaultDomain, ...(customDomains || [])].join(', ')}`, ) diff --git a/packages/plugin-cloud/src/hooks/afterDelete.ts b/packages/payload-cloud/src/hooks/afterDelete.ts similarity index 100% rename from packages/plugin-cloud/src/hooks/afterDelete.ts rename to packages/payload-cloud/src/hooks/afterDelete.ts diff --git a/packages/plugin-cloud/src/hooks/beforeChange.ts b/packages/payload-cloud/src/hooks/beforeChange.ts similarity index 100% rename from packages/plugin-cloud/src/hooks/beforeChange.ts rename to packages/payload-cloud/src/hooks/beforeChange.ts diff --git a/packages/plugin-cloud/src/hooks/uploadCache.ts b/packages/payload-cloud/src/hooks/uploadCache.ts similarity index 100% rename from packages/plugin-cloud/src/hooks/uploadCache.ts rename to packages/payload-cloud/src/hooks/uploadCache.ts diff --git a/packages/plugin-cloud/src/index.ts b/packages/payload-cloud/src/index.ts similarity index 100% rename from packages/plugin-cloud/src/index.ts rename to packages/payload-cloud/src/index.ts diff --git a/packages/plugin-cloud/src/plugin.spec.ts b/packages/payload-cloud/src/plugin.spec.ts similarity index 100% rename from packages/plugin-cloud/src/plugin.spec.ts rename to packages/payload-cloud/src/plugin.spec.ts diff --git a/packages/plugin-cloud/src/plugin.ts b/packages/payload-cloud/src/plugin.ts similarity index 100% rename from packages/plugin-cloud/src/plugin.ts rename to packages/payload-cloud/src/plugin.ts diff --git a/packages/plugin-cloud/src/staticHandler.ts b/packages/payload-cloud/src/staticHandler.ts similarity index 100% rename from packages/plugin-cloud/src/staticHandler.ts rename to packages/payload-cloud/src/staticHandler.ts diff --git a/packages/plugin-cloud/src/types.ts b/packages/payload-cloud/src/types.ts similarity index 100% rename from packages/plugin-cloud/src/types.ts rename to packages/payload-cloud/src/types.ts diff --git a/packages/plugin-cloud/src/utilities/authAsCognitoUser.ts b/packages/payload-cloud/src/utilities/authAsCognitoUser.ts similarity index 97% rename from packages/plugin-cloud/src/utilities/authAsCognitoUser.ts rename to packages/payload-cloud/src/utilities/authAsCognitoUser.ts index f236161b61..3c2e6b8428 100644 --- a/packages/plugin-cloud/src/utilities/authAsCognitoUser.ts +++ b/packages/payload-cloud/src/utilities/authAsCognitoUser.ts @@ -30,7 +30,7 @@ export const authAsCognitoUser = async ( const result: CognitoUserSession = await new Promise((resolve, reject) => { cognitoUser.authenticateUser(authenticationDetails, { - onFailure: (err) => { + onFailure: (err: Error) => { reject(err) }, onSuccess: (res) => { diff --git a/packages/plugin-cloud/src/utilities/createKey.ts b/packages/payload-cloud/src/utilities/createKey.ts similarity index 100% rename from packages/plugin-cloud/src/utilities/createKey.ts rename to packages/payload-cloud/src/utilities/createKey.ts diff --git a/packages/plugin-cloud/src/utilities/getIncomingFiles.ts b/packages/payload-cloud/src/utilities/getIncomingFiles.ts similarity index 100% rename from packages/plugin-cloud/src/utilities/getIncomingFiles.ts rename to packages/payload-cloud/src/utilities/getIncomingFiles.ts diff --git a/packages/plugin-cloud/src/utilities/getStorageClient.ts b/packages/payload-cloud/src/utilities/getStorageClient.ts similarity index 97% rename from packages/plugin-cloud/src/utilities/getStorageClient.ts rename to packages/payload-cloud/src/utilities/getStorageClient.ts index bd431f5323..4867e0c68b 100644 --- a/packages/plugin-cloud/src/utilities/getStorageClient.ts +++ b/packages/payload-cloud/src/utilities/getStorageClient.ts @@ -43,7 +43,7 @@ export const getStorageClient: GetStorageClient = async () => { const credentials = await cognitoIdentity.config.credentials() - // @ts-expect-error + // @ts-expect-error - Incorrect AWS types identityID = credentials.identityId storageClient = new AWS.S3({ diff --git a/packages/plugin-cloud/tsconfig.json b/packages/payload-cloud/tsconfig.json similarity index 100% rename from packages/plugin-cloud/tsconfig.json rename to packages/payload-cloud/tsconfig.json diff --git a/packages/payload/src/versions/payloadPackageList.ts b/packages/payload/src/versions/payloadPackageList.ts index 076e586e91..cd45da1e0e 100644 --- a/packages/payload/src/versions/payloadPackageList.ts +++ b/packages/payload/src/versions/payloadPackageList.ts @@ -11,7 +11,7 @@ export const PAYLOAD_PACKAGE_LIST = [ '@payloadcms/live-preview', '@payloadcms/next/utilities', '@payloadcms/plugin-cloud-storage', - '@payloadcms/plugin-cloud', + '@payloadcms/payload-cloud', '@payloadcms/plugin-form-builder', '@payloadcms/plugin-nested-docs', '@payloadcms/plugin-redirects', diff --git a/packages/plugin-cloud/src/admin.js b/packages/plugin-cloud/src/admin.js deleted file mode 100644 index 8af775a671..0000000000 --- a/packages/plugin-cloud/src/admin.js +++ /dev/null @@ -1 +0,0 @@ -export const payloadCloud = () => (config) => config diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0977f0dd9..2fd93d7bb8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -925,7 +925,7 @@ importers: specifier: 0.32.6 version: 0.32.6 - packages/plugin-cloud: + packages/payload-cloud: dependencies: '@aws-sdk/client-cognito-identity': specifier: ^3.614.0 @@ -1645,9 +1645,9 @@ importers: '@payloadcms/next': specifier: workspace:* version: link:../packages/next - '@payloadcms/plugin-cloud': + '@payloadcms/payload-cloud': specifier: workspace:* - version: link:../packages/plugin-cloud + version: link:../packages/payload-cloud '@payloadcms/plugin-cloud-storage': specifier: workspace:* version: link:../packages/plugin-cloud-storage diff --git a/scripts/lib/publishList.ts b/scripts/lib/publishList.ts index a81c5c210f..9487615e0d 100644 --- a/scripts/lib/publishList.ts +++ b/scripts/lib/publishList.ts @@ -36,6 +36,7 @@ export const packagePublishList = [ 'storage-uploadthing', // Plugins + 'payload-cloud', 'plugin-cloud', 'plugin-cloud-storage', 'plugin-form-builder', diff --git a/test/import-test/import-all-2-exports.ts b/test/import-test/import-all-2-exports.ts index 9409fd61a9..580da50fcf 100644 --- a/test/import-test/import-all-2-exports.ts +++ b/test/import-test/import-all-2-exports.ts @@ -342,7 +342,7 @@ import { } from '@payloadcms/db-postgres' import { handleMessage, mergeData, ready, subscribe, unsubscribe } from '@payloadcms/live-preview' import { useLivePreview } from '@payloadcms/live-preview-react' -import { createKey, getStorageClient, payloadCloud } from '@payloadcms/plugin-cloud' +import { createKey, getStorageClient, payloadCloud } from '@payloadcms/payload-cloud' import { cloudStorage } from '@payloadcms/plugin-cloud-storage' import { fields, getPaymentTotal } from '@payloadcms/plugin-form-builder' import { diff --git a/test/package.json b/test/package.json index d377bcb4c8..12101ffceb 100644 --- a/test/package.json +++ b/test/package.json @@ -38,7 +38,7 @@ "@payloadcms/live-preview": "workspace:*", "@payloadcms/live-preview-react": "workspace:*", "@payloadcms/next": "workspace:*", - "@payloadcms/plugin-cloud": "workspace:*", + "@payloadcms/payload-cloud": "workspace:*", "@payloadcms/plugin-cloud-storage": "workspace:*", "@payloadcms/plugin-form-builder": "workspace:*", "@payloadcms/plugin-nested-docs": "workspace:*", diff --git a/test/plugin-cloud/collections/Media.ts b/test/payload-cloud/collections/Media.ts similarity index 100% rename from test/plugin-cloud/collections/Media.ts rename to test/payload-cloud/collections/Media.ts diff --git a/test/plugin-cloud/collections/Users.ts b/test/payload-cloud/collections/Users.ts similarity index 100% rename from test/plugin-cloud/collections/Users.ts rename to test/payload-cloud/collections/Users.ts diff --git a/test/plugin-cloud/config.ts b/test/payload-cloud/config.ts similarity index 94% rename from test/plugin-cloud/config.ts rename to test/payload-cloud/config.ts index f7b99f7332..7e11881103 100644 --- a/test/plugin-cloud/config.ts +++ b/test/payload-cloud/config.ts @@ -1,7 +1,7 @@ import { fileURLToPath } from 'node:url' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) -import { payloadCloudPlugin } from '@payloadcms/plugin-cloud' +import { payloadCloudPlugin } from '@payloadcms/payload-cloud' import dotenv from 'dotenv' import path from 'path' diff --git a/test/plugin-cloud/eslint.config.js b/test/payload-cloud/eslint.config.js similarity index 100% rename from test/plugin-cloud/eslint.config.js rename to test/payload-cloud/eslint.config.js diff --git a/test/plugin-cloud/int.spec.ts b/test/payload-cloud/int.spec.ts similarity index 100% rename from test/plugin-cloud/int.spec.ts rename to test/payload-cloud/int.spec.ts diff --git a/test/plugin-cloud/payload-types.ts b/test/payload-cloud/payload-types.ts similarity index 100% rename from test/plugin-cloud/payload-types.ts rename to test/payload-cloud/payload-types.ts diff --git a/test/plugin-cloud/tsconfig.eslint.json b/test/payload-cloud/tsconfig.eslint.json similarity index 100% rename from test/plugin-cloud/tsconfig.eslint.json rename to test/payload-cloud/tsconfig.eslint.json diff --git a/test/plugin-cloud/tsconfig.json b/test/payload-cloud/tsconfig.json similarity index 100% rename from test/plugin-cloud/tsconfig.json rename to test/payload-cloud/tsconfig.json diff --git a/test/setupProd.ts b/test/setupProd.ts index e9cc523a12..8dfb48a8d6 100644 --- a/test/setupProd.ts +++ b/test/setupProd.ts @@ -20,7 +20,7 @@ export const tgzToPkgNameMap = { '@payloadcms/live-preview': 'payloadcms-live-preview-*', '@payloadcms/live-preview-react': 'payloadcms-live-preview-react-*', '@payloadcms/next': 'payloadcms-next-*', - '@payloadcms/plugin-cloud': 'payloadcms-plugin-cloud-*', + '@payloadcms/payload-cloud': 'payloadcms-payload-cloud-*', '@payloadcms/plugin-cloud-storage': 'payloadcms-plugin-cloud-storage-*', '@payloadcms/plugin-form-builder': 'payloadcms-plugin-form-builder-*', '@payloadcms/plugin-nested-docs': 'payloadcms-plugin-nested-docs-*', diff --git a/test/tsconfig.typecheck.json b/test/tsconfig.typecheck.json index b5d2267a37..b8b427da75 100644 --- a/test/tsconfig.typecheck.json +++ b/test/tsconfig.typecheck.json @@ -63,7 +63,7 @@ "path": "../packages/plugin-cloud-storage" }, { - "path": "../packages/plugin-cloud" + "path": "../packages/payload-cloud" }, { "path": "../packages/plugin-form-builder" diff --git a/tsconfig.json b/tsconfig.json index d28ddbca63..6795fac0ab 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -137,7 +137,7 @@ "path": "./packages/plugin-cloud-storage" }, { - "path": "./packages/plugin-cloud" + "path": "./packages/payload-cloud" }, { "path": "./packages/plugin-form-builder"