{"version":3,"file":"ui/thirdparty/npm.json-logic-js.c8af099ed51b5d24948b.js","mappings":"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","sources":["webpack://apps/./node_modules/json-logic-js/logic.js"],"sourcesContent":["/* globals define,module */\n/*\nUsing a Universal Module Loader that should be browser, require, and AMD friendly\nhttp://ricostacruz.com/cheatsheets/umdjs.html\n*/\n;(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n root.jsonLogic = factory();\n }\n}(this, function() {\n \"use strict\";\n /* globals console:false */\n\n if ( ! Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === \"[object Array]\";\n };\n }\n\n /**\n * Return an array that contains no duplicates (original not modified)\n * @param {array} array Original reference array\n * @return {array} New array with no duplicates\n */\n function arrayUnique(array) {\n var a = [];\n for (var i=0, l=array.length; i\": function(a, b) {\n return a > b;\n },\n \">=\": function(a, b) {\n return a >= b;\n },\n \"<\": function(a, b, c) {\n return (c === undefined) ? a < b : (a < b) && (b < c);\n },\n \"<=\": function(a, b, c) {\n return (c === undefined) ? a <= b : (a <= b) && (b <= c);\n },\n \"!!\": function(a) {\n return jsonLogic.truthy(a);\n },\n \"!\": function(a) {\n return !jsonLogic.truthy(a);\n },\n \"%\": function(a, b) {\n return a % b;\n },\n \"log\": function(a) {\n console.log(a); return a;\n },\n \"in\": function(a, b) {\n if (!b || typeof b.indexOf === \"undefined\") return false;\n return (b.indexOf(a) !== -1);\n },\n \"cat\": function() {\n return Array.prototype.join.call(arguments, \"\");\n },\n \"substr\": function(source, start, end) {\n if (end < 0) {\n // JavaScript doesn't support negative end, this emulates PHP behavior\n var temp = String(source).substr(start);\n return temp.substr(0, temp.length + end);\n }\n return String(source).substr(start, end);\n },\n \"+\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) + parseFloat(b, 10);\n }, 0);\n },\n \"*\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) * parseFloat(b, 10);\n });\n },\n \"-\": function(a, b) {\n if (b === undefined) {\n return -a;\n } else {\n return a - b;\n }\n },\n \"/\": function(a, b) {\n return a / b;\n },\n \"min\": function() {\n return Math.min.apply(this, arguments);\n },\n \"max\": function() {\n return Math.max.apply(this, arguments);\n },\n \"merge\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return a.concat(b);\n }, []);\n },\n \"var\": function(a, b) {\n var not_found = (b === undefined) ? null : b;\n var data = this;\n if (typeof a === \"undefined\" || a===\"\" || a===null) {\n return data;\n }\n var sub_props = String(a).split(\".\");\n for (var i = 0; i < sub_props.length; i++) {\n if (data === null || data === undefined) {\n return not_found;\n }\n // Descending into data\n data = data[sub_props[i]];\n if (data === undefined) {\n return not_found;\n }\n }\n return data;\n },\n \"missing\": function() {\n /*\n Missing can receive many keys as many arguments, like {\"missing:[1,2]}\n Missing can also receive *one* argument that is an array of keys,\n which typically happens if it's actually acting on the output of another command\n (like 'if' or 'merge')\n */\n\n var missing = [];\n var keys = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = jsonLogic.apply({\"var\": key}, this);\n if (value === null || value === \"\") {\n missing.push(key);\n }\n }\n\n return missing;\n },\n \"missing_some\": function(need_count, options) {\n // missing_some takes two arguments, how many (minimum) items must be present, and an array of keys (just like 'missing') to check for presence.\n var are_missing = jsonLogic.apply({\"missing\": options}, this);\n\n if (options.length - are_missing.length >= need_count) {\n return [];\n } else {\n return are_missing;\n }\n },\n };\n\n jsonLogic.is_logic = function(logic) {\n return (\n typeof logic === \"object\" && // An object\n logic !== null && // but not null\n ! Array.isArray(logic) && // and not an array\n Object.keys(logic).length === 1 // with exactly one key\n );\n };\n\n /*\n This helper will defer to the JsonLogic spec as a tie-breaker when different language interpreters define different behavior for the truthiness of primitives. E.g., PHP considers empty arrays to be falsy, but Javascript considers them to be truthy. JsonLogic, as an ecosystem, needs one consistent answer.\n\n Spec and rationale here: http://jsonlogic.com/truthy\n */\n jsonLogic.truthy = function(value) {\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n return !! value;\n };\n\n\n jsonLogic.get_operator = function(logic) {\n return Object.keys(logic)[0];\n };\n\n jsonLogic.get_values = function(logic) {\n return logic[jsonLogic.get_operator(logic)];\n };\n\n jsonLogic.apply = function(logic, data) {\n // Does this array contain logic? Only one way to find out.\n if (Array.isArray(logic)) {\n return logic.map(function(l) {\n return jsonLogic.apply(l, data);\n });\n }\n // You've recursed to a primitive, stop!\n if ( ! jsonLogic.is_logic(logic) ) {\n return logic;\n }\n\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n var i;\n var current;\n var scopedLogic;\n var scopedData;\n var initial;\n\n // easy syntax for unary operators, like {\"var\" : \"x\"} instead of strict {\"var\" : [\"x\"]}\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n // 'if', 'and', and 'or' violate the normal rule of depth-first calculating consequents, let each manage recursion as needed.\n if (op === \"if\" || op == \"?:\") {\n /* 'if' should be called with a odd number of parameters, 3 or greater\n This works on the pattern:\n if( 0 ){ 1 }else{ 2 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else{ 4 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else if( 4 ){ 5 }else{ 6 };\n\n The implementation is:\n For pairs of values (0,1 then 2,3 then 4,5 etc)\n If the first evaluates truthy, evaluate and return the second\n If the first evaluates falsy, jump to the next pair (e.g, 0,1 to 2,3)\n given one parameter, evaluate and return it. (it's an Else and all the If/ElseIf were false)\n given 0 parameters, return NULL (not great practice, but there was no Else)\n */\n for (i = 0; i < values.length - 1; i += 2) {\n if ( jsonLogic.truthy( jsonLogic.apply(values[i], data) ) ) {\n return jsonLogic.apply(values[i+1], data);\n }\n }\n if (values.length === i+1) {\n return jsonLogic.apply(values[i], data);\n }\n return null;\n } else if (op === \"and\") { // Return first falsy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( ! jsonLogic.truthy(current)) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"or\") {// Return first truthy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( jsonLogic.truthy(current) ) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"filter\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n // Return only the elements from the array in the first argument,\n // that return truthy when passed to the logic in the second argument.\n // For parity with JavaScript, reindex the returned array\n return scopedData.filter(function(datum) {\n return jsonLogic.truthy( jsonLogic.apply(scopedLogic, datum));\n });\n } else if (op === \"map\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n\n return scopedData.map(function(datum) {\n return jsonLogic.apply(scopedLogic, datum);\n });\n } else if (op === \"reduce\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n initial = typeof values[2] !== \"undefined\" ? values[2] : null;\n\n if ( ! Array.isArray(scopedData)) {\n return initial;\n }\n\n return scopedData.reduce(\n function(accumulator, current) {\n return jsonLogic.apply(\n scopedLogic,\n {current: current, accumulator: accumulator}\n );\n },\n initial\n );\n } else if (op === \"all\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n // All of an empty set is false. Note, some and none have correct fallback after the for loop\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( ! jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First falsy, short circuit\n }\n }\n return true; // All were truthy\n } else if (op === \"none\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return true;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First truthy, short circuit\n }\n }\n return true; // None were truthy\n } else if (op === \"some\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return true; // First truthy, short circuit\n }\n }\n return false; // None were truthy\n }\n\n // Everyone else gets immediate depth-first recursion\n values = values.map(function(val) {\n return jsonLogic.apply(val, data);\n });\n\n\n // The operation is called with \"data\" bound to its \"this\" and \"values\" passed as arguments.\n // Structured commands like % or > can name formal arguments while flexible commands (like missing or merge) can operate on the pseudo-array arguments\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n if (operations.hasOwnProperty(op) && typeof operations[op] === \"function\") {\n return operations[op].apply(data, values);\n } else if (op.indexOf(\".\") > 0) { // Contains a dot, and not in the 0th position\n var sub_ops = String(op).split(\".\");\n var operation = operations;\n for (i = 0; i < sub_ops.length; i++) {\n if (!operation.hasOwnProperty(sub_ops[i])) {\n throw new Error(\"Unrecognized operation \" + op +\n \" (failed at \" + sub_ops.slice(0, i+1).join(\".\") + \")\");\n }\n // Descending into operations\n operation = operation[sub_ops[i]];\n }\n\n return operation.apply(data, values);\n }\n\n throw new Error(\"Unrecognized operation \" + op );\n };\n\n jsonLogic.uses_data = function(logic) {\n var collection = [];\n\n if (jsonLogic.is_logic(logic)) {\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n if (op === \"var\") {\n // This doesn't cover the case where the arg to var is itself a rule.\n collection.push(values[0]);\n } else {\n // Recursion!\n values.forEach(function(val) {\n collection.push.apply(collection, jsonLogic.uses_data(val) );\n });\n }\n }\n\n return arrayUnique(collection);\n };\n\n jsonLogic.add_operation = function(name, code) {\n operations[name] = code;\n };\n\n jsonLogic.rm_operation = function(name) {\n delete operations[name];\n };\n\n jsonLogic.rule_like = function(rule, pattern) {\n // console.log(\"Is \". JSON.stringify(rule) . \" like \" . JSON.stringify(pattern) . \"?\");\n if (pattern === rule) {\n return true;\n } // TODO : Deep object equivalency?\n if (pattern === \"@\") {\n return true;\n } // Wildcard!\n if (pattern === \"number\") {\n return (typeof rule === \"number\");\n }\n if (pattern === \"string\") {\n return (typeof rule === \"string\");\n }\n if (pattern === \"array\") {\n // !logic test might be superfluous in JavaScript\n return Array.isArray(rule) && ! jsonLogic.is_logic(rule);\n }\n\n if (jsonLogic.is_logic(pattern)) {\n if (jsonLogic.is_logic(rule)) {\n var pattern_op = jsonLogic.get_operator(pattern);\n var rule_op = jsonLogic.get_operator(rule);\n\n if (pattern_op === \"@\" || pattern_op === rule_op) {\n // echo \"\\nOperators match, go deeper\\n\";\n return jsonLogic.rule_like(\n jsonLogic.get_values(rule, false),\n jsonLogic.get_values(pattern, false)\n );\n }\n }\n return false; // pattern is logic, rule isn't, can't be eq\n }\n\n if (Array.isArray(pattern)) {\n if (Array.isArray(rule)) {\n if (pattern.length !== rule.length) {\n return false;\n }\n /*\n Note, array order MATTERS, because we're using this array test logic to consider arguments, where order can matter. (e.g., + is commutative, but '-' or 'if' or 'var' are NOT)\n */\n for (var i = 0; i < pattern.length; i += 1) {\n // If any fail, we fail\n if ( ! jsonLogic.rule_like(rule[i], pattern[i])) {\n return false;\n }\n }\n return true; // If they *all* passed, we pass\n } else {\n return false; // Pattern is array, rule isn't\n }\n }\n\n // Not logic, not array, not a === match for rule.\n return false;\n };\n\n return jsonLogic;\n}));\n"],"names":["arrayUnique","array","a","i","l","length","indexOf","push","Array","isArray","arg","Object","prototype","toString","call","jsonLogic","operations","b","c","undefined","truthy","console","log","join","arguments","source","start","end","temp","String","substr","reduce","parseFloat","Math","min","apply","this","max","concat","not_found","data","sub_props","split","missing","keys","key","value","need_count","options","are_missing","is_logic","logic","get_operator","get_values","map","current","scopedLogic","scopedData","initial","op","values","filter","datum","accumulator","val","hasOwnProperty","sub_ops","operation","Error","slice","uses_data","collection","forEach","add_operation","name","code","rm_operation","rule_like","rule","pattern","pattern_op","rule_op"],"sourceRoot":""}