diff --git a/.eslintrc.js b/.eslintrc.js index 53e8cf888a18e..18763807cb36b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -110,6 +110,7 @@ const restrictedImports = [ 'maxBy', 'memoize', 'merge', + 'mergeWith', 'negate', 'noop', 'nth', diff --git a/package-lock.json b/package-lock.json index dba43ade0dc9b..8a1b97e65c5de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17859,8 +17859,10 @@ "@wordpress/wordcount": "file:packages/wordcount", "classnames": "^2.3.1", "colord": "^2.9.2", + "deepmerge": "^4.3.0", "downloadjs": "^1.4.7", "fast-deep-equal": "^3.1.3", + "is-plain-object": "^5.0.0", "lodash": "^4.17.21", "memize": "^2.1.0", "react-autosize-textarea": "^7.1.0", @@ -17871,6 +17873,11 @@ "version": "2.9.2", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" } } }, diff --git a/packages/edit-site/package.json b/packages/edit-site/package.json index 9108d71f83970..381f29a82e95f 100644 --- a/packages/edit-site/package.json +++ b/packages/edit-site/package.json @@ -66,8 +66,10 @@ "@wordpress/wordcount": "file:../wordcount", "classnames": "^2.3.1", "colord": "^2.9.2", + "deepmerge": "^4.3.0", "downloadjs": "^1.4.7", "fast-deep-equal": "^3.1.3", + "is-plain-object": "^5.0.0", "lodash": "^4.17.21", "memize": "^2.1.0", "react-autosize-textarea": "^7.1.0", diff --git a/packages/edit-site/src/components/global-styles/global-styles-provider.js b/packages/edit-site/src/components/global-styles/global-styles-provider.js index 829563342e847..f666e48c6febe 100644 --- a/packages/edit-site/src/components/global-styles/global-styles-provider.js +++ b/packages/edit-site/src/components/global-styles/global-styles-provider.js @@ -1,7 +1,8 @@ /** * External dependencies */ -import { mergeWith } from 'lodash'; +import deepmerge from 'deepmerge'; +import { isPlainObject } from 'is-plain-object'; /** * WordPress dependencies @@ -21,17 +22,13 @@ const { GlobalStylesContext, cleanEmptyObject } = unlock( blockEditorPrivateApis ); -function mergeTreesCustomizer( _, srcValue ) { - // We only pass as arrays the presets, - // in which case we want the new array of values - // to override the old array (no merging). - if ( Array.isArray( srcValue ) ) { - return srcValue; - } -} - export function mergeBaseAndUserConfigs( base, user ) { - return mergeWith( {}, base, user, mergeTreesCustomizer ); + return deepmerge( base, user, { + // We only pass as arrays the presets, + // in which case we want the new array of values + // to override the old array (no merging). + isMergeableObject: isPlainObject, + } ); } function useGlobalStylesUserConfig() {