chore: safely uses deepMerge

This commit is contained in:
James
2024-03-07 11:33:46 -05:00
parent 5431a84f37
commit c6c5b2e682
6 changed files with 46 additions and 3 deletions

View File

@@ -52,7 +52,6 @@
"find-up": "4.1.0",
"get-tsconfig": "^4.7.2",
"http-status": "1.6.2",
"is-plain-object": "5.0.0",
"joi": "^17.12.1",
"json-schema-to-typescript": "11.0.3",
"jsonwebtoken": "9.0.1",

View File

@@ -1,5 +1,4 @@
import merge from 'deepmerge'
import { isPlainObject } from 'is-plain-object'
import type { Config } from '../../config/types.d.ts'
import type { CollectionConfig, SanitizedCollectionConfig } from './types.d.ts'
@@ -15,6 +14,7 @@ import mergeBaseFields from '../../fields/mergeBaseFields.js'
import { extractTranslations } from '../../translations/extractTranslations.js'
import getBaseUploadFields from '../../uploads/getBaseFields.js'
import { formatLabels } from '../../utilities/formatLabels.js'
import { isPlainObject } from '../../utilities/isPlainObject.js'
import baseVersionFields from '../../versions/baseFields.js'
import { authDefaults, defaults } from './defaults.js'

View File

@@ -1,6 +1,5 @@
import { translations } from '@payloadcms/translations/api'
import merge from 'deepmerge'
import { isPlainObject } from 'is-plain-object'
import type {
Config,
@@ -16,6 +15,7 @@ import { InvalidConfiguration } from '../errors/index.js'
import sanitizeGlobals from '../globals/config/sanitize.js'
import getPreferencesCollection from '../preferences/preferencesCollection.js'
import checkDuplicateCollections from '../utilities/checkDuplicateCollections.js'
import { isPlainObject } from '../utilities/isPlainObject.js'
import { defaults } from './defaults.js'
const sanitizeAdminConfig = (configToSanitize: Config): Partial<SanitizedConfig> => {

View File

@@ -0,0 +1,29 @@
function isObject(o: unknown): boolean {
return Object.prototype.toString.call(o) === '[object Object]'
}
export function isPlainObject(o: unknown): boolean {
// Is this a React component?
if (typeof o === 'object' && '$$typeof' in o && typeof o.$$typeof === 'symbol') {
return false
}
if (isObject(o) === false) return false
// If has modified constructor
const ctor = o.constructor
if (ctor === undefined) return true
// If has modified prototype
const prot = ctor.prototype
if (isObject(prot) === false) return false
// If constructor does not have an Object-specific method
// eslint-disable-next-line no-prototype-builtins
if (prot.hasOwnProperty('isPrototypeOf') === false) {
return false
}
// Most likely a plain Object
return true
}

7
test/CustomDashboard.tsx Normal file
View File

@@ -0,0 +1,7 @@
'use client'
import React from 'react'
export const CustomDashboard: React.FC = () => {
return <h1>hello</h1>
}

View File

@@ -30,6 +30,7 @@ import { buildConfig as buildPayloadConfig } from '../packages/payload/src/confi
// lexicalEditor,
// } from '../packages/richtext-lexical/src'
import { slateEditor } from '../packages/richtext-slate/src/index.js'
import { CustomDashboard } from './CustomDashboard.js'
// process.env.PAYLOAD_DATABASE = 'postgres'
@@ -66,6 +67,13 @@ export function buildConfigWithDefaults(testConfig?: Partial<Config>): Promise<S
const config: Config = {
db: databaseAdapters[process.env.PAYLOAD_DATABASE || 'mongoose'],
secret: 'TEST_SECRET',
admin: {
components: {
views: {
Dashboard: CustomDashboard,
},
},
},
editor: slateEditor({
admin: {
upload: {