{"version":3,"sources":["jsdelivr-header.js","/npm/hyperyun-mongomatcher@0.0.0/mongoMatcher.js"],"names":[],"mappings":"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","file":"/npm/hyperyun-mongomatcher@0.0.0/mongoMatcher.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/hyperyun-mongomatcher@0.0.0/mongoMatcher.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var _ = require('lodash');\n\n\nvar MongoMatcher = function(selector){\n\tvar self = this;\n\tthis.seed = selector;\n\tthis.mongoOps = [\n\t\t\"$exists\",\"$type\",\t//element NO/OK\n\t\t\"$mod\", \"$regex\",\"$where\",\"$text\",\t//evaluation NO/OK\n\t\t\"$and\",\"$or\",\"$nor\",\"$not\", //logical OK\n\t\t\"$geoIntersects\",\"$geoWithin\",\"$nearSphere\",\"$near\", //geospatial NO\n\t\t\"$all\", \"$size\",\t//array OK\n\t\t\"$\",\"$elemMatch\",\"$meta\",\"$slice\",\t //projection NO\n\t\t\"$gt\",\"$gte\",\"$lt\",\"$lte\",\"$ne\",\"$in\",\"$nin\",\t//comparison OK\n\t]\n\tthis.supportedOps = _.without(this.mongoOps,\n\t\t\t\"$type\",\t//TODO: unsupported element ops\n\t\t\t\"$regex\",\"$where\",\"$text\",\t//TODO: unsupported evaluation ops\n\t\t\t\"$geoIntersects\",\"$geoWithin\",\"$nearSphere\",\"$near\",\t//TODO: unsupported geoJSON ops\n\t\t\t\"$\",\"$elemMatch\",\"$meta\",\"$slice\"\t//TODO: unsupported array & projection ops\n\t\t);\n\tif(_.isEqual(selector,{}))\n\t\tthis.evaluator = function(doc){return true}\n\telse\n\t\tthis.evaluator = this.growCriterion(selector);\n}\n\n//Transforms a selector into a function that can determine if a document is matched by the selector\nMongoMatcher.prototype.growCriterion = function(obj, parentKey, noop){\n\tvar self = this;\n\tif(_.isPlainObject(obj)){\n\t\tvar criteria = _.map(obj,function(v,k){\n\t\t\tif(self.isOperator(k)){\n\t\t\t\t//This is a $operator associated with parentKey\n\t\t\t\treturn self.condenseToEvaluator(k,parentKey,v)\n\t\t\t}\n\t\t\telse if(_.isString(k) && !noop){//this is a \"{foo:{...}}\" scenario: see what's inside/recurse\n\t\t\t\treturn self.growCriterion(v,parentKey + parentKey?\".\":\"\" + k,true)\n\t\t\t}\n\t\t\telse if(_.isString(k)){//this is a \"{foo:{bar:{wham:1}}}\" situation where foo has to have the object as its value\n\t\t\t\treturn function(doc){return _.isEqual(self.find(doc,parentKey), obj)}\n\t\t\t}\n\t\t})\n\t\treturn function(doc){return _.reduce(criteria,function(memo,val){return memo && _.isFunction(val) && val(doc)},true)}\n\t}\n\telse if(_.isArray(obj) \n\t\t || _.isPlainObject(obj)\n\t\t || _.isNumber(obj) \n\t\t || _.isString(obj) \n\t\t || _.isBoolean(obj) \n\t\t || _.isNull(obj) \n\t\t || _.isRegExp(obj)){//Supported non-recursing cases\n\t\treturn function(doc){console.log(parentKey);return _.isEqual(self.find(doc,parentKey), obj)}\n\t}\n\n}\nMongoMatcher.prototype.condenseToEvaluator = function(operator,key,value){\n\tvar self = this\n\tswitch(operator){\n\t\tcase \"$gt\":\n\t\t\treturn function(doc){return self.find(doc,key) > value}\n\t\tcase \"$gte\":\n\t\t\treturn function(doc){return self.find(doc,key) >= value}\n\t\tcase \"$lt\":\n\t\t\treturn function(doc){return self.find(doc,key) < value}\n\t\tcase \"$lte\":\n\t\t\treturn function(doc){return self.find(doc,key) <= value}\n\t\tcase \"$ne\":\n\t\t\treturn function(doc){return self.find(doc,key) != value}\n\t\tcase \"$exists\":\n\t\t\treturn function(doc){return value>0?self.find(doc,key)!=undefined:self.find(doc,key)==undefined}\n\t\tcase \"$in\":\n\t\t\treturn function(doc){return _.contains(value, self.find(doc,key))}\n\t\tcase \"$nin\":\n\t\t\treturn function(doc){return !_.contains(value, self.find(doc,key))}\n\t\tcase \"$mod\":\n\t\t\treturn function(doc){return self.find(doc,key)%value[0] == value[1]}\n\t\tcase \"$and\":\n\t\t\treturn function(doc){return _.every(value,function(val){return self.growCriterion(val,undefined)(doc)})}\n\t\tcase \"$or\":\n\t\t\treturn function(doc){return _.some(value,function(val){return self.growCriterion(val,undefined)(doc)})}\n\t\tcase \"$nor\":\n\t\t\treturn function(doc){return !_.some(value,function(val){return self.growCriterion(val,undefined)(doc)})}\n\t\tcase \"$not\":\n\t\t\treturn function(doc){return !self.growCriterion(value,key)(doc)}\n\t\tcase \"$all\":\n\t\t\treturn function(doc){var tgt = self.find(doc,key); return _.size(_.union(value, tgt)) == _.size(tgt)}\n\t\tcase \"$size\":\n\t\t\treturn function(doc){return _.size(self.find(doc,key)) == value}\n\t\tdefault :\n\t\t\treturn function(doc){return true};//TODO: Assumes doc matches if we aren't sure how to handle this operator\n\t}\n}\nMongoMatcher.prototype.isOperator = function(key){\n\treturn _.contains(this.mongoOps, key);\n}\nMongoMatcher.prototype.find = function(obj,key){\n\tif(!obj) return undefined;\n\t\tvar idx = key.indexOf(\".\");\n\t  if (idx === -1) {\n\t      return obj[key];\n\t  }\n\t  var thisKey = key.substring(0,idx);\n\t  var keys = key.substring(idx+1);\n\t  if(_.has(obj,thisKey))\n\t    return this.find(obj[thisKey],keys)\n\t  else\n\t    return undefined\n}\nMongoMatcher.prototype.discern = function(doc){\n\tvar self = this;\n\tvar i = 0;\n\ttry\n\t{\n\t\tvar evaluation = self.evaluator(doc);\n\t\twhile(_.isFunction(evaluation))\n\t\t{\n\t\t\tevaluation = evaluation(doc)\n\t\t}\n\t\treturn evaluation;\n\t}catch(e){\n\t\treturn \"Selector (\"+JSON.stringify(self.seed)+\") Invalid for discernment on \"+JSON.stringify(doc)+\".\";\n\t}\n}\n\nmodule.exports = MongoMatcher;"]}