diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c2bdd10a32..e5ea4ba01e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -153,7 +153,7 @@ jobs: matrix: database: - mongodb - # - postgres + - postgres # - postgres-custom-schema # - postgres-uuid # - supabase diff --git a/.vscode/launch.json b/.vscode/launch.json index 69cd64fd2d..2420515fba 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -41,11 +41,14 @@ "type": "node-terminal" }, { - "command": "pnpm run dev:postgres versions", + "command": "node --no-deprecation test/dev.js versions", "cwd": "${workspaceFolder}", "name": "Run Dev Postgres", "request": "launch", - "type": "node-terminal" + "type": "node-terminal", + "env": { + "PAYLOAD_DATABASE": "postgres" + } }, { "command": "pnpm run dev versions", diff --git a/package.json b/package.json index 817c2d0190..6f4831ad2d 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "test:e2e": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 tsx ./test/runE2E.ts", "test:e2e:debug": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 PWDEBUG=1 DISABLE_LOGGING=true playwright test", "test:e2e:headed": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 DISABLE_LOGGING=true playwright test --headed", - "test:int:postgres": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 PAYLOAD_DATABASE=postgres DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=jest.config.js", - "test:int": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=test/jest.config.js", - "test:unit": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=jest.config.js", + "test:int:postgres": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 PAYLOAD_DATABASE=postgres DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=test/jest.config.js --runInBand", + "test:int": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=test/jest.config.js --runInBand", + "test:unit": "cross-env NODE_OPTIONS=--no-deprecation NODE_NO_WARNINGS=1 DISABLE_LOGGING=true jest --forceExit --detectOpenHandles --config=jest.config.js --runInBand", "translateNewKeys": "pnpm --filter payload run translateNewKeys" }, "devDependencies": { diff --git a/packages/payload/src/fields/baseFields/baseIDField.ts b/packages/payload/src/fields/baseFields/baseIDField.ts index eadb170a8e..3d12fe5b2a 100644 --- a/packages/payload/src/fields/baseFields/baseIDField.ts +++ b/packages/payload/src/fields/baseFields/baseIDField.ts @@ -1,19 +1,30 @@ import ObjectIdImport from 'bson-objectid' -import type { Field, FieldHook } from '../config/types.js' +import type { Field } from '../config/types.js' const ObjectId = (ObjectIdImport.default || ObjectIdImport) as unknown as typeof ObjectIdImport.default -const generateID: FieldHook = ({ operation, value }) => - (operation !== 'create' ? value : false) || new ObjectId().toHexString() - export const baseIDField: Field = { name: 'id', type: 'text', admin: { hidden: true, }, - defaultValue: generateID, + defaultValue: () => new ObjectId().toHexString(), + hooks: { + beforeChange: [ + ({ operation, value }) => { + // If creating new doc, need to disregard any + // ids that have been passed in because they will cause + // primary key unique conflicts in relational DBs + if (!value || (operation === 'create' && value)) { + return new ObjectId().toHexString() + } + + return value + }, + ], + }, label: 'ID', } diff --git a/packages/payload/src/fields/getDefaultValue.ts b/packages/payload/src/fields/getDefaultValue.ts index da0ab5ca59..db255d707c 100644 --- a/packages/payload/src/fields/getDefaultValue.ts +++ b/packages/payload/src/fields/getDefaultValue.ts @@ -1,5 +1,7 @@ import type { User } from '../auth/index.js' +import { deepCopyObject } from '../utilities/deepCopyObject.js' + type Args = { defaultValue: unknown locale: string | undefined @@ -7,12 +9,7 @@ type Args = { value?: unknown } -const getValueWithDefault = async ({ - defaultValue, - locale, - user, - value, -}: Args): Promise => { +const getValueWithDefault = ({ defaultValue, locale, user, value }: Args): unknown => { if (typeof value !== 'undefined') { return value } @@ -21,7 +18,12 @@ const getValueWithDefault = async ({ return defaultValue({ locale, user }) } + if (typeof defaultValue === 'object') { + return deepCopyObject(defaultValue) + } + return defaultValue } +// eslint-disable-next-line no-restricted-exports export default getValueWithDefault diff --git a/test/fields/collections/Blocks/index.ts b/test/fields/collections/Blocks/index.ts index 9e7f16f5ee..eef70eab12 100644 --- a/test/fields/collections/Blocks/index.ts +++ b/test/fields/collections/Blocks/index.ts @@ -1,7 +1,7 @@ import type { CollectionConfig } from 'payload/types' import type { BlockField } from 'payload/types' -import { lexicalEditor } from '@payloadcms/richtext-lexical' +import { slateEditor } from '@payloadcms/richtext-slate' import { blockFieldsSlug, textFieldsSlug } from '../../slugs.js' import { AddCustomBlocks } from './components/AddCustomBlocks/index.js' @@ -22,7 +22,7 @@ export const getBlocksField = (prefix?: string): BlockField => ({ { name: 'richText', type: 'richText', - editor: lexicalEditor({}), + editor: slateEditor({}), }, ], }, diff --git a/test/fields/collections/Blocks/shared.ts b/test/fields/collections/Blocks/shared.ts index 6d524f6185..fb23682412 100644 --- a/test/fields/collections/Blocks/shared.ts +++ b/test/fields/collections/Blocks/shared.ts @@ -5,36 +5,11 @@ export const getBlocksFieldSeedData = (prefix?: string): any => [ blockName: 'First block', blockType: prefix ? `${prefix}Content` : 'content', text: 'first block', - richText: { - root: { - type: 'root', - format: '', - indent: 0, - version: 1, - - children: [ - { - children: [ - { - detail: 0, - format: 0, - mode: 'normal', - style: '', - text: '', - type: 'text', - version: 1, - }, - ], - direction: 'ltr', - format: '', - indent: 0, - type: 'paragraph', - version: 1, - }, - ], - direction: 'ltr', + richText: [ + { + children: [{ text: '' }], }, - }, + ], }, { blockName: 'Second block', diff --git a/test/localization/collections/NestedToArrayAndBlock/index.ts b/test/localization/collections/NestedToArrayAndBlock/index.ts index 1184b1e851..bb637f9367 100644 --- a/test/localization/collections/NestedToArrayAndBlock/index.ts +++ b/test/localization/collections/NestedToArrayAndBlock/index.ts @@ -1,6 +1,6 @@ import type { CollectionConfig } from 'payload/types' -export const nestedToArrayAndBlockCollectionSlug = 'nested-to-array-and-block' +export const nestedToArrayAndBlockCollectionSlug = 'nested' export const NestedToArrayAndBlock: CollectionConfig = { slug: nestedToArrayAndBlockCollectionSlug,