diff --git a/bench/compatible.json b/bench/compatible.json index a8b595a..926b6bc 100644 --- a/bench/compatible.json +++ b/bench/compatible.json @@ -375,6 +375,15 @@ {}, false ], + [ + { + "!": [ + false + ] + }, + {}, + true + ], [ { "!": false @@ -1455,6 +1464,24 @@ null, "apple" ], + [ + { + "!": [ + 0 + ] + }, + {}, + true + ], + [ + { + "!!": [ + 0 + ] + }, + {}, + false + ], [ { "and": [ @@ -1475,6 +1502,24 @@ {}, true ], + [ + { + "!": [ + "" + ] + }, + {}, + true + ], + [ + { + "!!": [ + "" + ] + }, + {}, + false + ], [ { "and": [ @@ -3503,5 +3548,21 @@ "items": [] }, false + ], + [ + { + "!": [ + false + ] + }, + {}, + true + ], + [ + { + "!!": false + }, + {}, + false ] ] \ No newline at end of file diff --git a/bench/incompatible.json b/bench/incompatible.json index 89d81b1..5ea9dd6 100644 --- a/bench/incompatible.json +++ b/bench/incompatible.json @@ -1,13 +1,4 @@ [ - [ - { - "!": [ - false - ] - }, - {}, - true - ], [ { "if": [] @@ -91,42 +82,6 @@ {}, true ], - [ - { - "!": [ - 0 - ] - }, - {}, - true - ], - [ - { - "!!": [ - 0 - ] - }, - {}, - false - ], - [ - { - "!": [ - "" - ] - }, - {}, - true - ], - [ - { - "!!": [ - "" - ] - }, - {}, - false - ], [ { "if": [ diff --git a/bench/tests.json b/bench/tests.json index 03cf144..29424fe 100644 --- a/bench/tests.json +++ b/bench/tests.json @@ -4033,5 +4033,15 @@ }, false ], + [ + { "!": [false] }, + {}, + true + ], + [ + { "!!": false }, + {}, + false + ], "EOF" ] \ No newline at end of file diff --git a/defaultMethods.js b/defaultMethods.js index cf24216..6ee86dc 100644 --- a/defaultMethods.js +++ b/defaultMethods.js @@ -365,9 +365,9 @@ const defaultMethods = { }, traverse: false }, - not: (value) => !value, - '!': (value) => !value, - '!!': (value) => Boolean(value), + not: (value) => Array.isArray(value) ? !value[0] : !value, + '!': (value) => Array.isArray(value) ? !value[0] : !value, + '!!': (value) => Boolean(Array.isArray(value) ? value[0] : value), cat: (arr) => (typeof arr === 'string' ? arr : arr.join('')), keys: (obj) => Object.keys(obj), eachKey: { @@ -793,10 +793,12 @@ defaultMethods.not.compile = defaultMethods['!'].compile = function ( data, buildState ) { + if (Array.isArray(data)) return `(!(${buildString(data[0], buildState)}))` return `(!(${buildString(data, buildState)}))` } // @ts-ignore Allow custom attribute defaultMethods['!!'].compile = function (data, buildState) { + if (Array.isArray(data)) return `(!!(${buildString(data[0], buildState)}))` return `(!!(${buildString(data, buildState)}))` } defaultMethods.none.deterministic = defaultMethods.some.deterministic diff --git a/package.json b/package.json index d3ccb2b..1e2130c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "json-logic-engine", - "version": "1.3.2", + "version": "1.3.3", "description": "Construct complex rules with JSON & process them.", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js",