pouchdb-find
Version:
Easy-to-use query language for PouchDB
53 lines (45 loc) • 1.36 kB
JavaScript
;
var utils = require('../../../utils');
var localUtils = require('../utils');
var massageIndexDef = localUtils.massageIndexDef;
function getIndexes(db) {
// just search through all the design docs and filter in-memory.
// hopefully there aren't that many ddocs.
return db.allDocs({
startkey: '_design/',
endkey: '_design/\uffff',
include_docs: true
}).then(function (allDocsRes) {
var res = {
indexes: [{
ddoc: null,
name: '_all_docs',
type: 'special',
def: {
fields: [{_id: 'asc'}]
}
}]
};
res.indexes = utils.flatten(res.indexes, allDocsRes.rows.filter(function (row) {
return row.doc.language === 'query';
}).map(function (row) {
var viewNames = row.doc.views !== undefined ? Object.keys(row.doc.views) : [];
return viewNames.map(function (viewName) {
var view = row.doc.views[viewName];
return {
ddoc: row.id,
name: viewName,
type: 'json',
def: massageIndexDef(view.options.def)
};
});
}));
// these are sorted by view name for some reason
res.indexes.sort(function (left, right) {
return utils.compare(left.name, right.name);
});
res.total_rows = res.indexes.length;
return res;
});
}
module.exports = getIndexes;