function(pkgs, fn){ var res = {} Object.keys(pkgs.trackeds).forEach(function(uid){ res[uid] = pkgs.trackeds[uid] }) Object.keys(res).forEach(function(uid){ pk = res[uid] // hasn't metadata if (pk.meta === undefined) { // set metadata on demand pk.meta = function() { return self.file.getSync("data-folder", uid, {json: true}) } } }) if (ops.filter !== undefined){ try{ var query = eql.parse(ops.filter) if (query !== undefined){ var uf = Object.keys(res).filter(function(uid){ return self.engine.isMatch(res[uid].meta, query) }); var filtered = {} uf.forEach(function(uid){ filtered[uid] = res[uid] }); return cb && cb(null, filtered) } } catch(e){} } return cb && cb(null, res) }
function __exec(ops, data, fn) { var matches = [] var query = eql.parse(ops.query) Object.keys(data).forEach(function(uid){ var p = data[uid] p.uid = uid if (epm.engine.isMatch(p.meta, query)) { matches.push(uid) } }) matches.forEach(function(m){ console.log(" * " + epm.engine.cutUid(m)) }) fn && fn(null, matches) }
EpmPackages.prototype.execQuery = function(query, cb) { var self = this; var q = "all"; try { if (query !== "" && query !== "all"){ q = eql.parse(query); if (q.where === undefined){ throw new Error('Query error'); } if (q.where.predicate === undefined){ throw new Error('Predicate error'); } } } catch(err){ cb && cb(err); return self; } var res = []; var engines = {}; var trackeds = self.fs.getSync('packages-file'); var pkgs = trackeds.packages; //var engine = self.plugins.resolveEngine(filename); var tasks = Object.keys(pkgs).map(function(uid){ return function(fn){ var p = pkgs[uid]; var ext = path.extname(p.filename); var engine = self.plugins.resolveEngine(p.filename); if (engines[ext] === undefined){ engines[ext] = new (engine.require())(); } var eng = engines[ext]; _getMeta(uid, p, eng, function(err, meta){ var im = (q === "all" || eng.isMatch(meta, q)); fn && fn(null, { uid: uid, match: im, content: meta.content } ) }); } }); async.series( tasks , function(err, results){ var matches = results.filter(function(obj){ return obj.match; }); var maps = matches.map(function(obj){ return { uid: obj.uid, content: obj.content }; }); cb && cb(null, maps); }); return self; function _getMeta(uid, p, eng, mcb){ var fmeta = self.fs.resolve('cache-folder', 'data/' + uid); if ( !fs.existsSync(fmeta) ) { eng.readMetadata(self.repo.resolve(p.filename), function(err, meta){ if (err || meta === undefined) { mcb && mcb(new Error(p.filename + " is corrupted")) } meta = JSON.parse(meta); mcb && mcb(null, meta); }); } else { var meta = self.fs.getSync('cache-folder', 'data/' + uid, { json: true }); mcb && mcb(null, meta); } } };