Compare commits

...

13 Commits

Author SHA1 Message Date
Alessio Gravili
36940b2f2d Revert "chore(deps): bumps @monaco-editor/react to v4.7.0 to suppress react 19 warnings (#11161)"
This reverts commit f4639c418f.
2025-02-22 19:00:01 -07:00
Alessio Gravili
6d6bbd2276 Merge remote-tracking branch 'origin/main' into perf/initreq 2025-02-22 18:43:34 -07:00
Alessio Gravili
8833ed15ac Merge remote-tracking branch 'origin/main' into perf/initreq 2025-02-21 13:36:38 -07:00
Alessio Gravili
95986b2380 add jsdocs 2025-02-21 13:12:41 -07:00
Alessio Gravili
10dd85481a improve jsdocs 2025-02-21 13:09:06 -07:00
Alessio Gravili
9d66c7efe3 fix: NotFound page competing with main Page initReq cache, resulting in Page req having /not-found as req.query and req.url 2025-02-21 13:06:40 -07:00
Alessio Gravili
9447119672 Merge remote-tracking branch 'origin/main' into perf/initreq 2025-02-20 22:33:11 -07:00
Alessio Gravili
8c4bef37e7 fix build 2025-02-20 21:44:09 -07:00
Alessio Gravili
b3bd6c4b4f add jsdocs 2025-02-20 21:31:46 -07:00
Alessio Gravili
96a4fb75b3 Merge remote-tracking branch 'origin/main' into perf/initreq 2025-02-20 21:27:29 -07:00
Alessio Gravili
5b40897305 perf: remove more duplicative code 2025-02-20 21:27:12 -07:00
Alessio Gravili
996fe9df49 do not export getInitReqContainer 2025-02-20 17:20:46 -07:00
Alessio Gravili
1b626b510b perf(next): ensure initReq is called 3x less 2025-02-20 17:05:21 -07:00
9 changed files with 285 additions and 130 deletions

View File

@@ -4,8 +4,7 @@ import type { ImportMap, LanguageOptions, SanitizedConfig, ServerFunctionClient
import { rtlLanguages } from '@payloadcms/translations'
import { ProgressBar, RootProvider } from '@payloadcms/ui'
import { getClientConfig } from '@payloadcms/ui/utilities/getClientConfig'
import { headers as getHeaders, cookies as nextCookies } from 'next/headers.js'
import { getPayload, getRequestLanguage, parseCookies } from 'payload'
import { cookies as nextCookies } from 'next/headers.js'
import React from 'react'
import { getNavPrefs } from '../../elements/Nav/getNavPrefs.js'
@@ -34,16 +33,16 @@ export const RootLayout = async ({
}) => {
checkDependencies()
const config = await configPromise
const headers = await getHeaders()
const cookies = parseCookies(headers)
const languageCode = getRequestLanguage({
config,
const {
cookies,
headers,
})
languageCode,
permissions,
req,
req: {
payload: { config },
},
} = await initReq({ configPromise, importMap, key: 'RootLayout' })
const theme = getRequestTheme({
config,
@@ -51,10 +50,6 @@ export const RootLayout = async ({
headers,
})
const payload = await getPayload({ config, importMap })
const { permissions, req } = await initReq(config)
const dir = (rtlLanguages as unknown as AcceptedLanguages[]).includes(languageCode)
? 'RTL'
: 'LTR'
@@ -134,11 +129,11 @@ export const RootLayout = async ({
{Array.isArray(config.admin?.components?.providers) &&
config.admin?.components?.providers.length > 0 ? (
<NestProviders
importMap={payload.importMap}
importMap={req.payload.importMap}
providers={config.admin?.components?.providers}
serverProps={{
i18n: req.i18n,
payload,
payload: req.payload,
permissions,
user: req.user,
}}

View File

@@ -13,7 +13,11 @@ import { initReq } from './initReq.js'
export const handleServerFunctions: ServerFunctionHandler = async (args) => {
const { name: fnKey, args: fnArgs, config: configPromise, importMap } = args
const { req } = await initReq(configPromise)
const { req } = await initReq({
configPromise,
importMap,
key: 'RootLayout',
})
const augmentedArgs: Parameters<ServerFunction>[0] = {
...fnArgs,

View File

@@ -18,31 +18,38 @@ export const initPage = async ({
importMap,
route,
searchParams,
useLayoutReq,
}: Args): Promise<InitPageResult> => {
const headers = await getHeaders()
const payload = await getPayload({ config: configPromise, importMap })
const queryString = `${qs.stringify(searchParams ?? {}, { addQueryPrefix: true })}`
const {
cookies,
locale,
permissions,
req,
req: { payload },
} = await initReq({
configPromise,
importMap,
key: useLayoutReq ? 'RootLayout' : 'initPage',
overrides: {
fallbackLocale: false,
req: {
query: qs.parse(queryString, {
depth: 10,
ignoreQueryPrefix: true,
}),
},
},
urlSuffix: `${route}${searchParams ? queryString : ''}`,
})
const {
collections,
globals,
routes: { admin: adminRoute },
} = payload.config
const cookies = parseCookies(headers)
const { locale, permissions, req } = await initReq(payload.config, {
fallbackLocale: false,
req: {
headers,
query: qs.parse(queryString, {
depth: 10,
ignoreQueryPrefix: true,
}),
url: `${payload.config.serverURL}${route}${searchParams ? queryString : ''}`,
},
})
const languageOptions = Object.entries(payload.config.i18n.supportedLanguages || {}).reduce(
(acc, [language, languageConfig]) => {
if (Object.keys(payload.config.i18n.supportedLanguages).includes(language)) {

View File

@@ -20,4 +20,15 @@ export type Args = {
* The search parameters of the current route provided to all pages in Next.js.
*/
searchParams: { [key: string]: string | string[] | undefined }
/**
* If `useLayoutReq` is `true`, this page will use the cached `req` created by the root layout
* instead of creating a new one.
*
* This is improves performance for pages that are able to share the same `req` as the root layout,
* as permissions do not need to be re-calculated.
*
* If the page has unique query and url params that need to be part of the `req` object, or if you
* need permissions calculation to respect those you should not use this property.
*/
useLayoutReq?: boolean
}

View File

@@ -1,5 +1,13 @@
import type { I18n, I18nClient } from '@payloadcms/translations'
import type { Locale, PayloadRequest, SanitizedConfig, SanitizedPermissions } from 'payload'
import type { AcceptedLanguages, I18n, I18nClient } from '@payloadcms/translations'
import type {
ImportMap,
Locale,
Payload,
PayloadRequest,
SanitizedConfig,
SanitizedPermissions,
User,
} from 'payload'
import { initI18n } from '@payloadcms/translations'
import { headers as getHeaders } from 'next/headers.js'
@@ -16,73 +24,197 @@ import { cache } from 'react'
import { getRequestLocale } from './getRequestLocale.js'
type Result = {
cookies: Map<string, string>
headers: Awaited<ReturnType<typeof getHeaders>>
languageCode: AcceptedLanguages
locale?: Locale
permissions: SanitizedPermissions
req: PayloadRequest
}
export const initReq = cache(async function (
configPromise: Promise<SanitizedConfig> | SanitizedConfig,
overrides?: Parameters<typeof createLocalReq>[0],
): Promise<Result> {
const config = await configPromise
const payload = await getPayload({ config })
const headers = await getHeaders()
const cookies = parseCookies(headers)
const languageCode = getRequestLanguage({
config,
cookies,
headers,
})
const i18n: I18nClient = await initI18n({
config: config.i18n,
context: 'client',
language: languageCode,
})
/**
* Cannot simply call `payload.auth` here, as we need the user to get the locale, and we need the locale to get the access results
* I.e. the `payload.auth` function would call `getAccessResults` without a fully-formed `req` object
*/
const { responseHeaders, user } = await executeAuthStrategies({
headers,
payload,
})
const { req: reqOverrides, ...optionsOverrides } = overrides || {}
const req = await createLocalReq(
{
req: {
headers,
host: headers.get('host'),
i18n: i18n as I18n,
responseHeaders,
url: `${payload.config.serverURL}`,
user,
...(reqOverrides || {}),
},
...(optionsOverrides || {}),
},
payload,
)
const locale = await getRequestLocale({
req,
})
req.locale = locale?.code
const permissions = await getAccessResults({
req,
})
type PartialResult = {
cookies: Map<string, string>
headers: Awaited<ReturnType<typeof getHeaders>>
i18n: I18nClient
languageCode: AcceptedLanguages
payload: Payload
responseHeaders: Headers
user: null | User
}
/**
* Stable object to cache the partial request object across all pages
*/
const getPartialInitReqContainer = cache(function (): {
reqResult: false | PartialResult | Promise<PartialResult>
} {
return {
locale,
permissions,
req,
reqResult: false,
}
})
/**
* Stable object to cache the request object across all pages with the same key
*/
const getInitReqContainer = cache(function (
/**
* The key is solely used to control caching behavior
*/
key: string,
): {
reqResult: false | Promise<Result> | Result
} {
return {
reqResult: false,
}
})
/**
* Initializes a partial request object. This does not construct the `req` object and does
* not run access control.
*
* The output of this function can be cached across all pages, which is why it is
* separated from `initReq`.
*/
const initPartialReq = async function ({
configPromise,
importMap,
}: {
configPromise: Promise<SanitizedConfig> | SanitizedConfig
importMap: ImportMap
}): Promise<PartialResult> {
const partialReqContainer = getPartialInitReqContainer()
if (
partialReqContainer?.reqResult &&
'then' in partialReqContainer.reqResult &&
typeof partialReqContainer?.reqResult?.then === 'function'
) {
return await partialReqContainer.reqResult
}
partialReqContainer.reqResult = (async () => {
const config = await configPromise
const payload = await getPayload({ config, importMap })
const headers = await getHeaders()
const cookies = parseCookies(headers)
const languageCode = getRequestLanguage({
config,
cookies,
headers,
})
const i18n: I18nClient = await initI18n({
config: config.i18n,
context: 'client',
language: languageCode,
})
/**
* Cannot simply call `payload.auth` here, as we need the user to get the locale, and we need the locale to get the access results
* I.e. the `payload.auth` function would call `getAccessResults` without a fully-formed `req` object
*/
const { responseHeaders, user } = await executeAuthStrategies({
headers,
payload,
})
const result: PartialResult = {
cookies,
headers,
i18n,
languageCode,
payload,
responseHeaders,
user,
}
return result
})()
partialReqContainer.reqResult = await partialReqContainer.reqResult
return partialReqContainer.reqResult
}
/**
* Initializes a full request object, including the `req` object and access control.
* As access control and getting the request locale is dependent on the current URL and
* query parameters, this function cannot be cached as often as the partial request object.
*/
export const initReq = async function ({
configPromise,
importMap,
key,
overrides,
urlSuffix,
}: {
configPromise: Promise<SanitizedConfig> | SanitizedConfig
importMap: ImportMap
key: string
overrides?: Parameters<typeof createLocalReq>[0]
urlSuffix?: string
}): Promise<Result> {
const { cookies, headers, i18n, languageCode, payload, responseHeaders, user } =
await initPartialReq({
configPromise,
importMap,
})
const reqContainer = getInitReqContainer(key)
if (
reqContainer?.reqResult &&
'then' in reqContainer.reqResult &&
typeof reqContainer?.reqResult?.then === 'function'
) {
return await reqContainer.reqResult
}
reqContainer.reqResult = (async () => {
const { req: reqOverrides, ...optionsOverrides } = overrides || {}
const req = await createLocalReq(
{
req: {
headers,
host: headers.get('host'),
i18n: i18n as I18n,
responseHeaders,
url: `${payload.config.serverURL}${urlSuffix || ''}`,
user,
...(reqOverrides || {}),
},
...(optionsOverrides || {}),
},
payload,
)
const locale = await getRequestLocale({
req,
})
req.locale = locale?.code
const permissions = await getAccessResults({
req,
})
const result: Result = {
cookies,
headers,
languageCode,
locale,
permissions,
req,
}
return result
})()
reqContainer.reqResult = await reqContainer.reqResult
return reqContainer.reqResult
}

View File

@@ -58,6 +58,7 @@ export const NotFoundPage = async ({
redirectUnauthenticatedUser: true,
route: formatAdminURL({ adminRoute, path: '/not-found' }),
searchParams,
useLayoutReq: true,
})
const params = await paramsPromise

View File

@@ -84,6 +84,7 @@
"pretest": "pnpm build"
},
"dependencies": {
"@monaco-editor/react": "4.6.0",
"@next/env": "^15.1.5",
"@payloadcms/translations": "workspace:*",
"@types/busboy": "1.5.4",
@@ -116,7 +117,6 @@
},
"devDependencies": {
"@hyrious/esbuild-plugin-commonjs": "^0.2.4",
"@monaco-editor/react": "4.7.0",
"@payloadcms/eslint-config": "workspace:*",
"@types/json-schema": "7.0.15",
"@types/minimist": "1.2.2",

View File

@@ -122,7 +122,7 @@
"@faceless-ui/modal": "3.0.0-beta.2",
"@faceless-ui/scroll-info": "2.0.0",
"@faceless-ui/window-info": "3.0.1",
"@monaco-editor/react": "4.7.0",
"@monaco-editor/react": "4.6.0",
"@payloadcms/translations": "workspace:*",
"bson-objectid": "2.0.4",
"date-fns": "4.1.0",

69
pnpm-lock.yaml generated
View File

@@ -45,7 +45,7 @@ importers:
version: 1.50.0
'@sentry/nextjs':
specifier: ^8.33.1
version: 8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))(react@19.0.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))
version: 8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))(react@19.0.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12))
'@sentry/node':
specifier: ^8.33.1
version: 8.37.1
@@ -135,7 +135,7 @@ importers:
version: 10.1.3(@aws-sdk/credential-providers@3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0)))(socks@2.8.3)
next:
specifier: 15.1.5
version: 15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
version: 15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
open:
specifier: ^10.1.0
version: 10.1.0
@@ -774,6 +774,9 @@ importers:
packages/payload:
dependencies:
'@monaco-editor/react':
specifier: 4.6.0
version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@next/env':
specifier: ^15.1.5
version: 15.1.5
@@ -868,9 +871,6 @@ importers:
'@hyrious/esbuild-plugin-commonjs':
specifier: ^0.2.4
version: 0.2.4(cjs-module-lexer@1.4.1)(esbuild@0.24.2)
'@monaco-editor/react':
specifier: 4.7.0
version: 4.7.0(monaco-editor@0.52.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@payloadcms/eslint-config':
specifier: workspace:*
version: link:../eslint-config
@@ -1011,7 +1011,7 @@ importers:
dependencies:
next:
specifier: ^15.0.3
version: 15.1.3(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
version: 15.1.3(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
devDependencies:
'@payloadcms/eslint-config':
specifier: workspace:*
@@ -1073,7 +1073,7 @@ importers:
dependencies:
'@sentry/nextjs':
specifier: ^8.33.1
version: 8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))(react@19.0.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))
version: 8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))(react@19.0.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12))
'@sentry/types':
specifier: ^8.33.1
version: 8.37.1
@@ -1423,7 +1423,7 @@ importers:
version: link:../plugin-cloud-storage
uploadthing:
specifier: 7.3.0
version: 7.3.0(next@15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))
version: 7.3.0(next@15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))
devDependencies:
payload:
specifier: workspace:*
@@ -1491,8 +1491,8 @@ importers:
specifier: 3.0.1
version: 3.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@monaco-editor/react':
specifier: 4.7.0
version: 4.7.0(monaco-editor@0.52.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
specifier: 4.6.0
version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@payloadcms/translations':
specifier: workspace:*
version: link:../translations
@@ -1703,7 +1703,7 @@ importers:
version: link:../packages/ui
'@sentry/nextjs':
specifier: ^8.33.1
version: 8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))(react@19.0.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))
version: 8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))(react@19.0.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12))
'@sentry/react':
specifier: ^7.77.0
version: 7.119.2(react@19.0.0)
@@ -1757,7 +1757,7 @@ importers:
version: 8.9.5(@aws-sdk/credential-providers@3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0)))(socks@2.8.3)
next:
specifier: 15.1.5
version: 15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
version: 15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
nodemailer:
specifier: 6.9.16
version: 6.9.16
@@ -3989,11 +3989,13 @@ packages:
cpu: [x64]
os: [win32]
'@monaco-editor/loader@1.5.0':
resolution: {integrity: sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==}
'@monaco-editor/loader@1.4.0':
resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==}
peerDependencies:
monaco-editor: '>= 0.21.0 < 1'
'@monaco-editor/react@4.7.0':
resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==}
'@monaco-editor/react@4.6.0':
resolution: {integrity: sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==}
peerDependencies:
monaco-editor: '>= 0.25.0 < 1'
react: 19.0.0
@@ -7877,6 +7879,7 @@ packages:
libsql@0.4.7:
resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==}
cpu: [x64, arm64, wasm32]
os: [darwin, linux, win32]
lie@3.1.1:
@@ -13025,13 +13028,14 @@ snapshots:
'@libsql/win32-x64-msvc@0.4.7':
optional: true
'@monaco-editor/loader@1.5.0':
'@monaco-editor/loader@1.4.0(monaco-editor@0.52.0)':
dependencies:
monaco-editor: 0.52.0
state-local: 1.0.7
'@monaco-editor/react@4.7.0(monaco-editor@0.52.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
'@monaco-editor/react@4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@monaco-editor/loader': 1.5.0
'@monaco-editor/loader': 1.4.0(monaco-editor@0.52.0)
monaco-editor: 0.52.0
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
@@ -13710,7 +13714,7 @@ snapshots:
'@sentry/utils': 7.119.2
localforage: 1.10.0
'@sentry/nextjs@8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))(react@19.0.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))':
'@sentry/nextjs@8.37.1(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4))(react@19.0.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12))':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0)
@@ -13724,9 +13728,9 @@ snapshots:
'@sentry/types': 8.37.1
'@sentry/utils': 8.37.1
'@sentry/vercel-edge': 8.37.1
'@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))
'@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12))
chalk: 3.0.0
next: 15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
next: 15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
resolve: 1.22.8
rollup: 3.29.5
stacktrace-parser: 0.1.10
@@ -13834,12 +13838,12 @@ snapshots:
'@sentry/types': 8.37.1
'@sentry/utils': 8.37.1
'@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))':
'@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12))':
dependencies:
'@sentry/bundler-plugin-core': 2.22.6
unplugin: 1.0.1
uuid: 9.0.0
webpack: 5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))
webpack: 5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)
transitivePeerDependencies:
- encoding
- supports-color
@@ -18218,7 +18222,7 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
next@15.1.3(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4):
next@15.1.3(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4):
dependencies:
'@next/env': 15.1.3
'@swc/counter': 0.1.3
@@ -18246,7 +18250,7 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
next@15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4):
next@15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4):
dependencies:
'@next/env': 15.1.5
'@swc/counter': 0.1.3
@@ -19647,16 +19651,17 @@ snapshots:
ansi-escapes: 4.3.2
supports-hyperlinks: 2.3.0
terser-webpack-plugin@5.3.10(@swc/core@1.10.12(@swc/helpers@0.5.15))(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))):
terser-webpack-plugin@5.3.10(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(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.36.0
webpack: 5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))
webpack: 5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)
optionalDependencies:
'@swc/core': 1.10.12(@swc/helpers@0.5.15)
esbuild: 0.19.12
terser@5.36.0:
dependencies:
@@ -19937,14 +19942,14 @@ snapshots:
escalade: 3.2.0
picocolors: 1.1.1
uploadthing@7.3.0(next@15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)):
uploadthing@7.3.0(next@15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)):
dependencies:
'@effect/platform': 0.69.8(effect@3.10.3)
'@uploadthing/mime-types': 0.3.2
'@uploadthing/shared': 7.1.1
effect: 3.10.3
optionalDependencies:
next: 15.1.5(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
next: 15.1.5(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-714736e-20250131)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.4)
uri-js@4.4.1:
dependencies:
@@ -20042,7 +20047,7 @@ snapshots:
webpack-virtual-modules@0.5.0: {}
webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)):
webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.6
@@ -20064,7 +20069,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.10.12(@swc/helpers@0.5.15))(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))
terser-webpack-plugin: 5.3.10(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12))
watchpack: 2.4.2
webpack-sources: 3.2.3
transitivePeerDependencies: