From c8dc7bcb3a65eb0a9183cf303828344abc9321e7 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Sun, 13 Mar 2022 16:02:10 +0100 Subject: [PATCH] Improve validation --- src/config/normalize/lib/wild_wild_path/remove.js | 3 ++- src/config/normalize/lib/wild_wild_path/set.js | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/config/normalize/lib/wild_wild_path/remove.js b/src/config/normalize/lib/wild_wild_path/remove.js index 9363ce717..bd7c4528a 100644 --- a/src/config/normalize/lib/wild_wild_path/remove.js +++ b/src/config/normalize/lib/wild_wild_path/remove.js @@ -1,5 +1,5 @@ import { handleMissingValue } from './iterate/expand.js' -import { reduceParents, setValue } from './set.js' +import { validateClasses, reduceParents, setValue } from './set.js' // Same as `set()` but removing a value export const remove = function ( @@ -7,6 +7,7 @@ export const remove = function ( query, { classes = false, mutate = false } = {}, ) { + validateClasses(classes, mutate) const setFunc = removeAnyEntry.bind(undefined, { classes, mutate }) return reduceParents({ target, query, setFunc, classes }) } diff --git a/src/config/normalize/lib/wild_wild_path/set.js b/src/config/normalize/lib/wild_wild_path/set.js index 7b228fa64..f48bcb98c 100644 --- a/src/config/normalize/lib/wild_wild_path/set.js +++ b/src/config/normalize/lib/wild_wild_path/set.js @@ -13,10 +13,20 @@ export const set = function ( value, { classes = false, mutate = false } = {}, ) { + validateClasses(classes, mutate) const setFunc = setEntry.bind(undefined, { value, classes, mutate }) return reduceParents({ target, query, setFunc, classes }) } +// Class instances are not clonable. Therefore, they require `mutate`. +export const validateClasses = function (classes, mutate) { + if (classes && !mutate) { + throw new Error( + 'The "mutate" option must be true when the "classes" option is true.', + ) + } +} + // Modify a target object multiple times for each matched property. export const reduceParents = function ({ target, query, setFunc, classes }) { const entries = list(target, query, {