lib/querymw.js (52 lines of code) (raw):

var querymen = require('querymen'); function phraseSplit(searchString) { var s1 = searchString.match(/\\?.|^$/g).reduce((p, c) => { if(c === '"'){ p.quote ^= 1; }else if(!p.quote && c === ' '){ p.a.push(''); }else{ p.a[p.a.length-1] += c.replace(/\\(.)/,"$1"); } return p; }, {a: ['']}).a; return(s1); } /*qSchema.formatter('escape', function (escape, value, param) { var r = []; if (escape) { if(typeof value == 'string') { r = phraseSplit(value); } else if (Array.isArray(value)) { for(v in value) { r.push(v.phraseSplit(value)); } } } var terms = ""; for(var term of r) { terms = terms + ' "' + term + '" '; } return terms; });*/ /* qSchema.formatter('nullify', function(escape, value, param){ console.log("NULLIFY CALLED!"); if (value === "null") { return {$exists:false}; } }); if(opts.facet.severity) { qSchema.param('severity').option('nullify', true); }*/ module.exports = function(facet) { var queryDef = { q: { normalize: false, type: String, default: null, //escape: true, paths: ["$text"], operator: "$search", /*formatter: function (txt, v, p) { return v.replace(/([A-Z]+-[0-9A-Za-z-]+)/g, "\"$1\""); }*/ }, sort: { default: 'ID' }, limit: { // ASF default: 2000, // END ASF max: 22000 } }; for (key in facet) { var options = facet[key]; queryDef[key] = { type: [String], paths: [options.path] } if (options.type) { queryDef[key].type = options.type; } if (options.hasOwnProperty('default')) { queryDef[key].default = options.default; } if (options.queryOperator) { queryDef[key].operator = options.queryOperator; } if(options.sortDefault) { queryDef.sort.default = options.sortDefault; } } return querymen.middleware(new querymen.Schema(queryDef)); }