UNPKG

1.48 kBJavaScriptView Raw
1var async = require('async');
2
3var collections = {};
4
5exports.search = function (query, callback) {
6 'use strict';
7
8 var requestedCollections;
9 if (! query.collections || ! query.collections instanceof Array) {
10 requestedCollections = Object.keys(collections);
11 } else {
12 requestedCollections = query.collections;
13 }
14
15 var maxResults = query.maxResults;
16
17 var pluginCallback = query.pluginCallback;
18
19 var results = [];
20
21 var iterator = function (collection, done) {
22 if (collection in collections) {
23 collections[collection].search(query, function (err, value) {
24 if (maxResults && value && value.data instanceof Array) {
25 value.data = value.data.slice(0, maxResults);
26 }
27
28 if (value) {
29 value.name = collection;
30 results.push(value);
31 }
32
33 if (pluginCallback) {
34 if (err) {
35 pluginCallback(err);
36 } else {
37 pluginCallback(null, value);
38 }
39 }
40
41 done(err);
42 });
43 } else {
44 done(new Error('Collection "' + collection + '" does not exist'));
45 }
46 };
47
48 if (typeof callback !== 'function') {
49 callback = function () {};
50 }
51
52 var wrappedCallback = function (err) {
53 if (err) {
54 callback(err);
55 } else {
56 callback(null, results);
57 }
58 };
59
60 async.each(requestedCollections, iterator, wrappedCallback);
61};
62
63exports.add = function (name, plugin) {
64 'use strict';
65
66 collections[name] = plugin;
67};
\No newline at end of file