From 528770a9b940d66b5d2c2efedcd820b1d0ac9c1b Mon Sep 17 00:00:00 2001
From: Christian Knecht <christian.knecht@iao.fraunhofer.de>
Date: Thu, 29 Jul 2021 16:30:39 +0200
Subject: [PATCH] refactor: fix issue with optional chaining, update dist

---
 dist/utilities/filter.js               | 217 +++++++++++--------------
 dist/utilities/filter.js.map           |   2 +-
 dist/validators/arrayValidators.js     |  24 ++-
 dist/validators/arrayValidators.js.map |   2 +-
 package-lock.json                      |   4 +-
 package.json                           |   2 +-
 src/utilities/filter.ts                |   5 +-
 7 files changed, 127 insertions(+), 129 deletions(-)

diff --git a/dist/utilities/filter.js b/dist/utilities/filter.js
index f81c95d..87d28d6 100644
--- a/dist/utilities/filter.js
+++ b/dist/utilities/filter.js
@@ -86,171 +86,152 @@ function filter(array, predicate, options) {
 exports.filter = filter;
 function filterFunction(value, predicate, options) {
     let filter = false;
-    let negation;
-    if (!options) {
+    let negation = false;
+    let usedPredicate = predicate;
+    if (!options)
         options = {};
-    }
-    if (typeof predicate === 'string' && predicate.indexOf('$exists') > 0) {
-        negation = predicate.indexOf('!') === 0;
-        filter = !_.isNil(value);
-    }
-    else if (!_.isNil(value) && !_.isNil(predicate)) {
-        let comparator = options.comparator ? options.comparator : 'strict';
-        if (Array.isArray(value)) {
-            for (const subValue of value) {
-                if (filterFunction(subValue, predicate, options)) {
-                    filter = true;
-                    break;
+    let comparator = options.comparator ? options.comparator : 'strict';
+    let operator = options.operator ? options.operator : 'and';
+    try {
+        if (typeof usedPredicate === 'object' && !Array.isArray(usedPredicate)) {
+            const key = Object.keys(usedPredicate).length === 1 ? Object.keys(usedPredicate)[0] : '';
+            if (key === '$' || key.startsWith('$')) {
+                usedPredicate = usedPredicate[key];
+                if (key === '$or' || key === '$and') {
+                    operator = key.substring(1);
                 }
-            }
-        }
-        else if (typeof value === 'object') {
-            let wildcardPredicate;
-            let keys;
-            let operator = options.operator ? options.operator : 'and';
-            if (typeof predicate === 'string' || typeof predicate['$'] === 'string') { //wildcard, terms can match any property of value
-                keys = Object.keys(value);
-                wildcardPredicate = typeof predicate['$'] === 'string' ? predicate['$'] : predicate;
-                if (wildcardPredicate.indexOf('!') === 0) {
+                else if (key === '$strict' || key === '$caseSensitive' || key === '$caseInsensitive' ||
+                    key === '$gt' || key === '$gte' || key === '$lt' || key === '$lte' ||
+                    key === '$regex' || key === '$size') {
+                    comparator = key.substring(1);
+                }
+                else if (key === '$not' || key === '$ne' || key === '$nin') {
                     negation = true;
-                    wildcardPredicate = wildcardPredicate.substring(1);
                 }
-                operator = 'or';
+                else {
+                    //"$", "$eq", "$in", "$all"
+                }
             }
-            else {
-                keys = Object.keys(predicate);
+        }
+        if (typeof usedPredicate === 'string' && usedPredicate.indexOf('!') === 0) {
+            negation = true;
+            usedPredicate = usedPredicate.substring(1);
+        }
+        if (usedPredicate === '$exists') {
+            filter = !_.isNil(value);
+        }
+        else if (!_.isNil(value) && !_.isNil(usedPredicate)) {
+            if (Array.isArray(value) && comparator !== 'size') {
+                //value array of strings, usedPredicate array of strings
+                if (Array.isArray(value) && arrayValidators_1.arrayElementTypeValidator(value, 'string') &&
+                    Array.isArray(usedPredicate) && arrayValidators_1.arrayElementTypeValidator(usedPredicate, 'string')) {
+                    if (comparator === 'caseSensitive') {
+                        filter = arrayValidators_1.arrayIncludesCaseSensitiveValidator(value, usedPredicate, options.allOf);
+                    }
+                    else if (comparator === 'caseInsensitive') {
+                        filter = arrayValidators_1.arrayIncludesCaseInsensitiveValidator(value, usedPredicate, options.allOf);
+                    }
+                    else if (comparator === 'strict') {
+                        filter = arrayValidators_1.arrayStrictValidator(value, usedPredicate);
+                    }
+                }
+                else {
+                    for (const subValue of value) {
+                        if (filterFunction(subValue, usedPredicate, options)) {
+                            filter = true;
+                            break;
+                        }
+                    }
+                }
             }
-            for (const key of keys) {
-                let tmpFilter = false;
-                if (key === '$or' || key === '$and') {
-                    tmpFilter = filterFunction(value, predicate[key], {
-                        operator: key.substring(1),
-                        comparator: options.comparator
-                    });
+            else if (typeof value === 'object') {
+                let keys;
+                if (typeof usedPredicate === 'string') { //wildcard, terms can match any property of value
+                    keys = Object.keys(value);
+                    operator = 'or';
                 }
                 else {
-                    const usedPredicate = wildcardPredicate ? wildcardPredicate : predicate[key];
-                    if (!_.isNil(usedPredicate)) {
+                    keys = Object.keys(usedPredicate);
+                }
+                for (const key of keys) {
+                    let tmpFilter = false;
+                    let tmpUsedPredicate;
+                    if (key === '$or' || key === '$and') {
+                        tmpFilter = filterFunction(value, usedPredicate[key], {
+                            operator: key.substring(1),
+                            comparator: comparator
+                        });
+                    }
+                    else {
+                        tmpUsedPredicate = typeof usedPredicate === 'string' ? usedPredicate : usedPredicate[key];
                         if (key.indexOf('.') > -1) {
                             const element = value[key.split('.')[0]];
                             if (element) {
-                                tmpFilter = filterFunction(element, { [key.split('.')[1]]: usedPredicate }, { comparator: options.comparator });
+                                tmpFilter = filterFunction(element, { [key.split('.')[1]]: tmpUsedPredicate }, { comparator: comparator });
                             }
                         }
                         else {
-                            tmpFilter = filterFunction(value[key], usedPredicate, { comparator: options.comparator });
+                            tmpFilter = filterFunction(value[key], tmpUsedPredicate, { comparator: comparator });
                         }
                     }
-                }
-                if (tmpFilter && operator === 'or') {
-                    filter = true;
-                    break; // since condition already matches one expression
-                }
-                else if (!tmpFilter && operator === 'and') {
-                    filter = false;
-                    break; // since condition already does not matches one expression
-                }
-                filter = tmpFilter;
-            }
-        }
-        else {
-            let tmpFilter = false;
-            try {
-                let usedPredicate = predicate;
-                if (typeof usedPredicate === 'object') {
-                    const subKey = predicate ? Object.keys(predicate)[0] : '';
-                    if (subKey.startsWith('$')) {
-                        usedPredicate = predicate[subKey];
-                        if (subKey === '$strict' ||
-                            subKey === '$caseSensitive' ||
-                            subKey === '$caseInsensitive' ||
-                            subKey === '$gt' ||
-                            subKey === '$gte' ||
-                            subKey === '$lt' ||
-                            subKey === '$lte' ||
-                            subKey === '$regex' ||
-                            subKey === '$size') {
-                            comparator = subKey.substring(1);
-                        }
-                        else if (subKey === '$ne' || subKey === '$nin') {
-                            negation = true;
-                        }
-                        else {
-                            //(subKey === "$eq")
-                            //(subKey === "$in")
-                            //(subKey === "$all")
-                            //comparator = "strict"
-                        }
+                    if (tmpFilter && operator === 'or') {
+                        filter = true;
+                        break; // since condition already matches one expression
                     }
-                }
-                if ((comparator === 'caseInsensitive' || comparator === 'caseSensitive' || comparator === 'strict') &&
-                    (value && (typeof value === 'string' || arrayValidators_1.arrayElementTypeValidator(value, 'string'))) &&
-                    (usedPredicate && (typeof usedPredicate === 'string' || arrayValidators_1.arrayElementTypeValidator(usedPredicate, 'string')))) {
-                    if (usedPredicate.indexOf('!') === 0) {
-                        negation = true;
-                        usedPredicate = usedPredicate.substring(1);
+                    else if (!tmpFilter && operator === 'and') {
+                        filter = false;
+                        break; // since condition already does not matches one expression
                     }
+                    filter = tmpFilter;
+                }
+            }
+            else {
+                if ((comparator === 'caseInsensitive' || comparator === 'caseSensitive' || comparator === 'strict')) {
                     //value string, usedPredicate array
                     if (typeof value === 'string' && (Array.isArray(usedPredicate) || usedPredicate.indexOf('||') > -1)) {
                         const predicates = (typeof usedPredicate === 'string') ? split(usedPredicate, '||') : usedPredicate;
                         for (const p of predicates) {
                             if (filterStringPredicate(value, p, comparator)) {
-                                tmpFilter = true;
+                                filter = true;
                             }
                         }
                     }
-                    //value array, usedPredicate array
-                    else if (Array.isArray(value) && Array.isArray(usedPredicate)) {
-                        if (comparator === 'caseSensitive') {
-                            tmpFilter = arrayValidators_1.arrayIncludesCaseSensitiveValidator(value, usedPredicate);
-                        }
-                        else if (comparator === 'caseInsensitive') {
-                            tmpFilter = arrayValidators_1.arrayIncludesCaseInsensitiveValidator(value, usedPredicate);
-                        }
-                        else if (comparator === 'strict') {
-                            tmpFilter = arrayValidators_1.arrayStrictValidator(value, usedPredicate);
-                        }
-                    }
                     //value string, usedPredicate string
-                    else {
-                        tmpFilter = filterStringPredicate(value, usedPredicate, comparator);
+                    else if (typeof value === 'string' && typeof usedPredicate === 'string') {
+                        filter = filterStringPredicate(value, usedPredicate, comparator);
                     }
-                }
-                else if (comparator === 'strict') {
-                    if (Array.isArray(value) && Array.isArray(usedPredicate)) {
-                        tmpFilter = arrayValidators_1.arrayStrictValidator(value, usedPredicate);
-                    }
-                    else {
-                        tmpFilter = value === usedPredicate;
+                    //value other, usedPredicate other
+                    else if (typeof value === typeof usedPredicate) {
+                        filter = value === usedPredicate;
                     }
                 }
                 else if (comparator === 'gt' || comparator === 'gte' || comparator === 'lt' || comparator === 'lte') {
                     if (comparator === 'gt') {
-                        tmpFilter = numberValidators_1.exclusiveMinimumValidator(value, usedPredicate);
+                        filter = numberValidators_1.exclusiveMinimumValidator(value, usedPredicate);
                     }
                     if (comparator === 'gte') {
-                        tmpFilter = numberValidators_1.minimumValidator(value, usedPredicate);
+                        filter = numberValidators_1.minimumValidator(value, usedPredicate);
                     }
                     if (comparator === 'lt') {
-                        tmpFilter = numberValidators_1.exclusiveMaximumValidator(value, usedPredicate);
+                        filter = numberValidators_1.exclusiveMaximumValidator(value, usedPredicate);
                     }
                     if (comparator === 'lte') {
-                        tmpFilter = numberValidators_1.maximumValidator(value, usedPredicate);
+                        filter = numberValidators_1.maximumValidator(value, usedPredicate);
                     }
                 }
                 else if (comparator === 'regExp') {
-                    tmpFilter = regExpValidators_1.regExpValidator(value, usedPredicate);
+                    filter = regExpValidators_1.regExpValidator(value, usedPredicate);
                 }
                 else if (comparator === 'size') {
-                    tmpFilter = arrayValidators_1.arraySizeValidator(value, usedPredicate);
+                    filter = arrayValidators_1.arraySizeValidator(value, usedPredicate);
                 }
             }
-            catch (error) {
-                // silently handle error
-            }
-            filter = tmpFilter;
         }
     }
+    catch (error) {
+        // silently handle error
+        filter = false;
+    }
     return (negation) ? !filter : filter;
 }
 function filterStringPredicate(value, p, comparator) {
diff --git a/dist/utilities/filter.js.map b/dist/utilities/filter.js.map
index 93ccf2f..686fbff 100644
--- a/dist/utilities/filter.js.map
+++ b/dist/utilities/filter.js.map
@@ -1 +1 @@
-{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/utilities/filter.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/utilities/filter.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/validators/arrayValidators.js b/dist/validators/arrayValidators.js
index bbd6b2d..c80c7d4 100644
--- a/dist/validators/arrayValidators.js
+++ b/dist/validators/arrayValidators.js
@@ -52,24 +52,40 @@ function arrayElementTypeValidator(array, type) {
     return isElementType;
 }
 exports.arrayElementTypeValidator = arrayElementTypeValidator;
-function arrayIncludesCaseSensitiveValidator(array1, array2) {
+function arrayIncludesCaseSensitiveValidator(array1, array2, allOf = false) {
     if (!arrayElementTypeValidator(array1, 'string')) {
         throw new Error('array1 is not of type array of string');
     }
     if (!arrayElementTypeValidator(array2, 'string')) {
         throw new Error('array2 is not of type array of string');
     }
-    return _.difference(array1, array1.filter((a) => array2.some((b) => a.includes(b)))).length === 0;
+    let filteredArray = array1.filter((a) => array2.some((b) => a.includes(b)));
+    let result;
+    if (allOf) {
+        result = _.difference(array1, filteredArray).length === 0;
+    }
+    else {
+        result = filteredArray.length > 0;
+    }
+    return result;
 }
 exports.arrayIncludesCaseSensitiveValidator = arrayIncludesCaseSensitiveValidator;
-function arrayIncludesCaseInsensitiveValidator(array1, array2) {
+function arrayIncludesCaseInsensitiveValidator(array1, array2, allOf = false) {
     if (!arrayElementTypeValidator(array1, 'string')) {
         throw new Error('array1 is not of type array of string');
     }
     if (!arrayElementTypeValidator(array2, 'string')) {
         throw new Error('array2 is not of type array of string');
     }
-    return _.difference(array1, array1.filter((a) => array2.some((b) => a.toLowerCase().includes(b.toLowerCase())))).length === 0;
+    let filteredArray = array1.filter((a) => array2.some((b) => a.toLowerCase().includes(b.toLowerCase())));
+    let result;
+    if (allOf) {
+        result = _.difference(array1, filteredArray).length === 0;
+    }
+    else {
+        result = filteredArray.length > 0;
+    }
+    return result;
 }
 exports.arrayIncludesCaseInsensitiveValidator = arrayIncludesCaseInsensitiveValidator;
 //# sourceMappingURL=arrayValidators.js.map
\ No newline at end of file
diff --git a/dist/validators/arrayValidators.js.map b/dist/validators/arrayValidators.js.map
index 0842b05..f808572 100644
--- a/dist/validators/arrayValidators.js.map
+++ b/dist/validators/arrayValidators.js.map
@@ -1 +1 @@
-{"version":3,"file":"arrayValidators.js","sourceRoot":"","sources":["../../src/validators/arrayValidators.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;AAEb;;;GAGG;AACH,0CAA4B;AAE5B,SAAgB,oBAAoB,CAAC,KAAY,EAAE,aAAoB;IACnE,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3D,CAAC;AAFD,oDAEC;AAED,SAAgB,kBAAkB,CAAC,KAAY,EAAE,IAAY;IACzD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;AACzD,CAAC;AAFD,gDAEC;AAED,SAAgB,yBAAyB,CAAC,KAAY,EAAE,IAAgD;IACpG,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACtB,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC5B,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;SAC9C;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC1B,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;SAC9C;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC1B,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;SAC9C;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE;YAC3B,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;SAC/C;KACJ;IACD,OAAO,aAAa,CAAC;AACzB,CAAC;AAdD,8DAcC;AAED,SAAgB,mCAAmC,CAAC,MAAa,EAAE,MAAa;IAC5E,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QAC9C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC5D;IACD,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QAC9C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC5D;IACD,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACtG,CAAC;AARD,kFAQC;AAED,SAAgB,qCAAqC,CAAC,MAAa,EAAE,MAAa;IAC9E,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QAC9C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC5D;IACD,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QAC9C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC5D;IACD,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAClI,CAAC;AARD,sFAQC"}
\ No newline at end of file
+{"version":3,"file":"arrayValidators.js","sourceRoot":"","sources":["../../src/validators/arrayValidators.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index f0fef1c..0b5180a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,11 +1,11 @@
 {
     "name": "value-converters",
-    "version": "1.2.0",
+    "version": "1.2.1",
     "lockfileVersion": 2,
     "requires": true,
     "packages": {
         "": {
-            "version": "1.2.0",
+            "version": "1.2.1",
             "license": "BSD-3-Clause-Clear",
             "dependencies": {
                 "lodash": "^4.17.21",
diff --git a/package.json b/package.json
index e3ceab6..bdb5041 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "value-converters",
-    "version": "1.2.0",
+    "version": "1.2.1",
     "description": "extended filtering function, sorting, localization, dissolving urls and reusable validators",
     "main": "dist/index.js",
     "scripts": {
diff --git a/src/utilities/filter.ts b/src/utilities/filter.ts
index 39b44a0..a9ea9d6 100644
--- a/src/utilities/filter.ts
+++ b/src/utilities/filter.ts
@@ -80,8 +80,9 @@ function filterFunction(value: any, predicate: any, options: any): boolean {
     let filter = false;
     let negation = false;
     let usedPredicate = predicate;
-    let comparator = options?.comparator ? options.comparator : 'strict';
-    let operator = options?.operator ? options.operator : 'and';
+    if (!options) options = {};
+    let comparator = options.comparator ? options.comparator : 'strict';
+    let operator = options.operator ? options.operator : 'and';
     try {
         if (typeof usedPredicate === 'object' && !Array.isArray(usedPredicate)) {
             const key = Object.keys(usedPredicate).length === 1 ? Object.keys(usedPredicate)[0] : '';
-- 
GitLab