1 |
- {"ast":null,"code":"/**\n * Class used to evaluate queries containing `and` and `or` operators\n */\nexport class AndOrNotEvaluator {\n /**\n * Evaluate a query\n * @param query defines the query to evaluate\n * @param evaluateCallback defines the callback used to filter result\n * @returns true if the query matches\n */\n static Eval(query, evaluateCallback) {\n if (!query.match(/\\([^()]*\\)/g)) {\n query = AndOrNotEvaluator._HandleParenthesisContent(query, evaluateCallback);\n } else {\n query = query.replace(/\\([^()]*\\)/g, r => {\n // remove parenthesis\n r = r.slice(1, r.length - 1);\n return AndOrNotEvaluator._HandleParenthesisContent(r, evaluateCallback);\n });\n }\n if (query === \"true\") {\n return true;\n }\n if (query === \"false\") {\n return false;\n }\n return AndOrNotEvaluator.Eval(query, evaluateCallback);\n }\n static _HandleParenthesisContent(parenthesisContent, evaluateCallback) {\n evaluateCallback = evaluateCallback || (r => {\n return r === \"true\" ? true : false;\n });\n let result;\n const or = parenthesisContent.split(\"||\");\n for (const i in or) {\n if (Object.prototype.hasOwnProperty.call(or, i)) {\n let ori = AndOrNotEvaluator._SimplifyNegation(or[i].trim());\n const and = ori.split(\"&&\");\n if (and.length > 1) {\n for (let j = 0; j < and.length; ++j) {\n const andj = AndOrNotEvaluator._SimplifyNegation(and[j].trim());\n if (andj !== \"true\" && andj !== \"false\") {\n if (andj[0] === \"!\") {\n result = !evaluateCallback(andj.substring(1));\n } else {\n result = evaluateCallback(andj);\n }\n } else {\n result = andj === \"true\" ? true : false;\n }\n if (!result) {\n // no need to continue since 'false && ... && ...' will always return false\n ori = \"false\";\n break;\n }\n }\n }\n if (result || ori === \"true\") {\n // no need to continue since 'true || ... || ...' will always return true\n result = true;\n break;\n }\n // result equals false (or undefined)\n if (ori !== \"true\" && ori !== \"false\") {\n if (ori[0] === \"!\") {\n result = !evaluateCallback(ori.substring(1));\n } else {\n result = evaluateCallback(ori);\n }\n } else {\n result = ori === \"true\" ? true : false;\n }\n }\n }\n // the whole parenthesis scope is replaced by 'true' or 'false'\n return result ? \"true\" : \"false\";\n }\n static _SimplifyNegation(booleanString) {\n booleanString = booleanString.replace(/^[\\s!]+/, r => {\n // remove whitespaces\n r = r.replace(/[\\s]/g, () => \"\");\n return r.length % 2 ? \"!\" : \"\";\n });\n booleanString = booleanString.trim();\n if (booleanString === \"!true\") {\n booleanString = \"false\";\n } else if (booleanString === \"!false\") {\n booleanString = \"true\";\n }\n return booleanString;\n }\n}","map":{"version":3,"names":["AndOrNotEvaluator","Eval","query","evaluateCallback","match","_HandleParenthesisContent","replace","r","slice","length","parenthesisContent","result","or","split","i","Object","prototype","hasOwnProperty","call","ori","_SimplifyNegation","trim","and","j","andj","substring","booleanString"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/andOrNotEvaluator.js"],"sourcesContent":["/**\n * Class used to evaluate queries containing `and` and `or` operators\n */\nexport class AndOrNotEvaluator {\n /**\n * Evaluate a query\n * @param query defines the query to evaluate\n * @param evaluateCallback defines the callback used to filter result\n * @returns true if the query matches\n */\n static Eval(query, evaluateCallback) {\n if (!query.match(/\\([^()]*\\)/g)) {\n query = AndOrNotEvaluator._HandleParenthesisContent(query, evaluateCallback);\n }\n else {\n query = query.replace(/\\([^()]*\\)/g, (r) => {\n // remove parenthesis\n r = r.slice(1, r.length - 1);\n return AndOrNotEvaluator._HandleParenthesisContent(r, evaluateCallback);\n });\n }\n if (query === \"true\") {\n return true;\n }\n if (query === \"false\") {\n return false;\n }\n return AndOrNotEvaluator.Eval(query, evaluateCallback);\n }\n static _HandleParenthesisContent(parenthesisContent, evaluateCallback) {\n evaluateCallback =\n evaluateCallback ||\n ((r) => {\n return r === \"true\" ? true : false;\n });\n let result;\n const or = parenthesisContent.split(\"||\");\n for (const i in or) {\n if (Object.prototype.hasOwnProperty.call(or, i)) {\n let ori = AndOrNotEvaluator._SimplifyNegation(or[i].trim());\n const and = ori.split(\"&&\");\n if (and.length > 1) {\n for (let j = 0; j < and.length; ++j) {\n const andj = AndOrNotEvaluator._SimplifyNegation(and[j].trim());\n if (andj !== \"true\" && andj !== \"false\") {\n if (andj[0] === \"!\") {\n result = !evaluateCallback(andj.substring(1));\n }\n else {\n result = evaluateCallback(andj);\n }\n }\n else {\n result = andj === \"true\" ? true : false;\n }\n if (!result) {\n // no need to continue since 'false && ... && ...' will always return false\n ori = \"false\";\n break;\n }\n }\n }\n if (result || ori === \"true\") {\n // no need to continue since 'true || ... || ...' will always return true\n result = true;\n break;\n }\n // result equals false (or undefined)\n if (ori !== \"true\" && ori !== \"false\") {\n if (ori[0] === \"!\") {\n result = !evaluateCallback(ori.substring(1));\n }\n else {\n result = evaluateCallback(ori);\n }\n }\n else {\n result = ori === \"true\" ? true : false;\n }\n }\n }\n // the whole parenthesis scope is replaced by 'true' or 'false'\n return result ? \"true\" : \"false\";\n }\n static _SimplifyNegation(booleanString) {\n booleanString = booleanString.replace(/^[\\s!]+/, (r) => {\n // remove whitespaces\n r = r.replace(/[\\s]/g, () => \"\");\n return r.length % 2 ? \"!\" : \"\";\n });\n booleanString = booleanString.trim();\n if (booleanString === \"!true\") {\n booleanString = \"false\";\n }\n else if (booleanString === \"!false\") {\n booleanString = \"true\";\n }\n return booleanString;\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|