diff --git a/package.json b/package.json index 34cfdc72def..88790fbce4c 100644 --- a/package.json +++ b/package.json @@ -117,6 +117,10 @@ "templates/**/pnpm-lock.yaml": "pnpm runts scripts/remove-template-lock-files.ts", "tsconfig.json": "node scripts/reset-tsconfig.js" }, + "dependencies": { + "json5": "2.2.3", + "yaml": "2.8.0" + }, "devDependencies": { "@jest/globals": "29.7.0", "@libsql/client": "0.14.0", diff --git a/packages/payload/src/fields/config/types.ts b/packages/payload/src/fields/config/types.ts index 55642663fc3..0410f21ce05 100644 --- a/packages/payload/src/fields/config/types.ts +++ b/packages/payload/src/fields/config/types.ts @@ -1066,6 +1066,7 @@ export type JSONField = { Label?: CustomComponent } & Admin['components'] editorOptions?: EditorProps['options'] + format?: 'json' | 'json5' | 'yaml' // Add format option with three choices maxHeight?: number } & Admin @@ -1079,7 +1080,7 @@ export type JSONField = { } & Omit export type JSONFieldClient = { - admin?: AdminClient & Pick + admin?: AdminClient & Pick } & Omit & Pick diff --git a/packages/ui/package.json b/packages/ui/package.json index 958662ca054..7576bb7b7ea 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -127,6 +127,7 @@ "bson-objectid": "2.0.4", "date-fns": "4.1.0", "dequal": "2.0.3", + "json5": "^2.2.3", "md5": "2.3.0", "object-to-formdata": "4.5.1", "qs-esm": "7.0.2", @@ -137,7 +138,8 @@ "sonner": "^1.7.2", "ts-essentials": "10.0.3", "use-context-selector": "2.0.0", - "uuid": "10.0.0" + "uuid": "10.0.0", + "yaml": "^2.3.1" }, "devDependencies": { "@babel/cli": "7.26.4", diff --git a/packages/ui/src/exports/rsc/index.ts b/packages/ui/src/exports/rsc/index.ts index 3e73c50cdd9..a77b72e5e16 100644 --- a/packages/ui/src/exports/rsc/index.ts +++ b/packages/ui/src/exports/rsc/index.ts @@ -1,4 +1,5 @@ export { FieldDiffLabel } from '../../elements/FieldDiffLabel/index.js' +export { parseData, stringifyData } from '../../fields/JSON/server.js' export { File } from '../../graphics/File/index.js' export { CheckIcon } from '../../icons/Check/index.js' export { copyDataFromLocaleHandler } from '../../utilities/copyDataFromLocale.js' diff --git a/packages/ui/src/fields/JSON/client.ts b/packages/ui/src/fields/JSON/client.ts new file mode 100644 index 00000000000..13173d1fd22 --- /dev/null +++ b/packages/ui/src/fields/JSON/client.ts @@ -0,0 +1,5 @@ +'use client' + +import { parseData, stringifyData } from './server.js' + +export { parseData, stringifyData } diff --git a/packages/ui/src/fields/JSON/index.tsx b/packages/ui/src/fields/JSON/index.tsx index c0b80a670a6..74591e0e35f 100644 --- a/packages/ui/src/fields/JSON/index.tsx +++ b/packages/ui/src/fields/JSON/index.tsx @@ -14,6 +14,7 @@ import { FieldError } from '../FieldError/index.js' import { FieldLabel } from '../FieldLabel/index.js' import { mergeFieldStyles } from '../mergeFieldStyles.js' import { fieldBaseClass } from '../shared/index.js' +import { parseData, stringifyData } from './client.js' import './index.scss' const baseClass = 'json-field' @@ -22,7 +23,7 @@ const JSONFieldComponent: JSONFieldClientComponent = (props) => { const { field, field: { - admin: { className, description, editorOptions, maxHeight } = {}, + admin: { className, description, editorOptions, format = 'json', maxHeight } = {}, jsonSchema, label, localized, @@ -59,69 +60,76 @@ const JSONFieldComponent: JSONFieldClientComponent = (props) => { validate: memoizedValidate, }) - const [initialStringValue, setInitialStringValue] = useState(() => - (value || initialValue) !== undefined - ? JSON.stringify(value ?? initialValue, null, 2) - : undefined, - ) + const [initialStringValue, setInitialStringValue] = useState() const handleMount = useCallback( (editor, monaco) => { - if (!jsonSchema) { - return + if (jsonSchema && format === 'json') { + monaco.languages.json.jsonDefaults.setDiagnosticsOptions({ + enableSchemaRequest: true, + schemas: [ + ...(monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas || []), + jsonSchema, + ], + validate: true, + }) + + const uri = jsonSchema.uri + const newUri = uri.includes('?') + ? `${uri}&${crypto.randomUUID ? crypto.randomUUID() : uuidv4()}` + : `${uri}?${crypto.randomUUID ? crypto.randomUUID() : uuidv4()}` + + editor.setModel( + monaco.editor.createModel( + JSON.stringify(value, null, 2), + 'json', + monaco.Uri.parse(newUri), + ), + ) + } else { + const language = format === 'yaml' ? 'yaml' : 'json' + editor.setModel(monaco.editor.createModel(initialStringValue || '', language)) } - - monaco.languages.json.jsonDefaults.setDiagnosticsOptions({ - enableSchemaRequest: true, - schemas: [ - ...(monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas || []), - jsonSchema, - ], - validate: true, - }) - - const uri = jsonSchema.uri - const newUri = uri.includes('?') - ? `${uri}&${crypto.randomUUID ? crypto.randomUUID() : uuidv4()}` - : `${uri}?${crypto.randomUUID ? crypto.randomUUID() : uuidv4()}` - - editor.setModel( - monaco.editor.createModel(JSON.stringify(value, null, 2), 'json', monaco.Uri.parse(newUri)), - ) }, - [jsonSchema, value], + [jsonSchema, value, format, initialStringValue], ) const handleChange = useCallback( - (val) => { + async (val) => { if (readOnly || disabled) { return } inputChangeFromRef.current = 'user' try { - setValue(val ? JSON.parse(val) : null) + const parsedValue = val ? await parseData(val, format) : null + setValue(parsedValue) setJsonError(undefined) } catch (e) { setValue(val ? val : null) setJsonError(e) } }, - [readOnly, disabled, setValue], + [readOnly, disabled, setValue, format], ) useEffect(() => { - if (inputChangeFromRef.current === 'system') { - setInitialStringValue( - (value || initialValue) !== undefined - ? JSON.stringify(value ?? initialValue, null, 2) - : undefined, - ) - setEditorKey(new Date().toString()) + const updateStringValue = async () => { + if (inputChangeFromRef.current === 'system') { + if ((value || initialValue) !== undefined) { + const data = value ?? initialValue + const stringified = await stringifyData(data, format) + setInitialStringValue(stringified) + } else { + setInitialStringValue(undefined) + } + setEditorKey(new Date().toString()) + } } + void updateStringValue() inputChangeFromRef.current = 'system' - }, [initialValue, value]) + }, [initialValue, value, format]) const styles = useMemo(() => mergeFieldStyles(field), [field]) @@ -151,7 +159,7 @@ const JSONFieldComponent: JSONFieldClientComponent = (props) => { /> {BeforeInput} { + try { + if (format === 'yaml') { + return Promise.resolve(yaml.stringify(data)) + } else if (format === 'json5') { + return Promise.resolve(JSON5.stringify(data, null, 2)) + } + return Promise.resolve(JSON.stringify(data, null, 2)) + } catch (error) { + return Promise.resolve(JSON.stringify(data, null, 2)) + } +} + +export function parseData( + text: string, + format: 'json' | 'json5' | 'yaml' = 'json', +): Promise { + try { + if (format === 'yaml') { + return Promise.resolve(yaml.parse(text)) + } else if (format === 'json5') { + return Promise.resolve(JSON5.parse(text)) + } + return Promise.resolve(JSON.parse(text)) + } catch (error) { + throw new Error(`Error parsing ${format}: ${error.message}`) + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c111b1db6c..fd8895cce1c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,6 +18,13 @@ overrides: importers: .: + dependencies: + json5: + specifier: 2.2.3 + version: 2.2.3 + yaml: + specifier: 2.8.0 + version: 2.8.0 devDependencies: '@jest/globals': specifier: 29.7.0 @@ -45,7 +52,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.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react@19.1.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)) + 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.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react@19.1.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))) '@sentry/node': specifier: ^8.33.1 version: 8.37.1 @@ -135,7 +142,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.3.0 - version: 15.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) + version: 15.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) open: specifier: ^10.1.0 version: 10.1.0 @@ -1144,7 +1151,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.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react@19.1.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)) + 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.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react@19.1.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))) '@sentry/types': specifier: ^8.33.1 version: 8.37.1 @@ -1503,7 +1510,7 @@ importers: version: link:../plugin-cloud-storage uploadthing: specifier: 7.3.0 - version: 7.3.0(next@15.3.0(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4)) + version: 7.3.0(next@15.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4)) devDependencies: payload: specifier: workspace:* @@ -1585,6 +1592,9 @@ importers: dequal: specifier: 2.0.3 version: 2.0.3 + json5: + specifier: ^2.2.3 + version: 2.2.3 md5: specifier: 2.3.0 version: 2.3.0 @@ -1627,6 +1637,9 @@ importers: uuid: specifier: 10.0.0 version: 10.0.0 + yaml: + specifier: ^2.3.1 + version: 2.8.0 devDependencies: '@babel/cli': specifier: 7.26.4 @@ -1789,7 +1802,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.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react@19.1.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)) + 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.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react@19.1.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))) '@sentry/react': specifier: ^7.77.0 version: 7.119.2(react@19.1.0) @@ -1846,7 +1859,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.3.0 - version: 15.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) + version: 15.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) nodemailer: specifier: 6.9.16 version: 6.9.16 @@ -8130,7 +8143,6 @@ packages: libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} - cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] license-checker@25.0.1: @@ -8594,6 +8606,7 @@ packages: node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead node-fetch-native@1.6.4: resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} @@ -10492,9 +10505,9 @@ packages: engines: {node: '>= 14'} hasBin: true - yaml@2.6.0: - resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} - engines: {node: '>= 14'} + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@20.2.9: @@ -14039,7 +14052,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.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react@19.1.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12))': + '@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.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react@19.1.0)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) @@ -14053,9 +14066,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))(esbuild@0.19.12)) + '@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))) chalk: 3.0.0 - next: 15.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) + next: 15.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) resolve: 1.22.8 rollup: 3.29.5 stacktrace-parser: 0.1.10 @@ -14163,12 +14176,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))(esbuild@0.19.12))': + '@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)))': 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))(esbuild@0.19.12) + webpack: 5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)) transitivePeerDependencies: - encoding - supports-color @@ -15870,7 +15883,7 @@ snapshots: scule: 1.3.0 semver: 7.6.3 std-env: 3.7.0 - yaml: 2.6.0 + yaml: 2.8.0 transitivePeerDependencies: - magicast @@ -18750,7 +18763,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4): + next@15.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4): dependencies: '@next/env': 15.3.0 '@swc/counter': 0.1.3 @@ -20262,17 +20275,16 @@ 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))(esbuild@0.19.12)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)): + 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))): 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))(esbuild@0.19.12) + webpack: 5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15)) optionalDependencies: '@swc/core': 1.10.12(@swc/helpers@0.5.15) - esbuild: 0.19.12 terser@5.36.0: dependencies: @@ -20551,14 +20563,14 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - uploadthing@7.3.0(next@15.3.0(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4)): + uploadthing@7.3.0(next@15.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.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.3.0(@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-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) + next: 15.3.0(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@19.0.0-beta-e993439-20250405)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) uri-js@4.4.1: dependencies: @@ -20663,7 +20675,7 @@ snapshots: webpack-virtual-modules@0.5.0: {} - webpack@5.96.1(@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)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -20685,7 +20697,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))(esbuild@0.19.12)(webpack@5.96.1(@swc/core@1.10.12(@swc/helpers@0.5.15))(esbuild@0.19.12)) + 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))) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -20782,7 +20794,7 @@ snapshots: yaml@2.4.5: {} - yaml@2.6.0: {} + yaml@2.8.0: {} yargs-parser@20.2.9: {}