1
0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-11-13 03:35:52 +01:00
verdaccio/lib/search.js

84 lines
1.6 KiB
JavaScript
Raw Normal View History

2017-04-27 05:52:46 +02:00
/* eslint no-invalid-this: "off" */
'use strict';
const lunr = require('lunr');
2017-04-26 23:48:55 +02:00
/**
* Handle the search Indexer.
*/
2017-04-17 15:52:36 +02:00
class Search {
2017-04-26 23:48:55 +02:00
/**
* Constructor.
*/
2017-04-17 15:52:36 +02:00
constructor() {
this.index = lunr(function() {
this.field('name', {boost: 10});
this.field('description', {boost: 4});
this.field('author', {boost: 6});
this.field('readme');
});
2017-04-17 15:52:36 +02:00
}
2017-04-26 23:48:55 +02:00
/**
* Performs a query to the indexer.
* If the keyword is a * it returns all local elements
* otherwise performs a search
* @param {*} q the keyword
2017-04-27 03:59:11 +02:00
* @return {Array} list of results.
2017-04-26 23:48:55 +02:00
*/
2017-04-17 15:52:36 +02:00
query(q) {
return q === '*'
? this.storage.config.localList.get().map( function( pkg ) {
return {ref: pkg, score: 1};
2017-04-17 15:52:36 +02:00
}) : this.index.search(q);
}
2017-04-26 23:48:55 +02:00
/**
* Add a new element to index
* @param {*} pkg the package
*/
2017-04-17 15:52:36 +02:00
add(pkg) {
this.index.add({
id: pkg.name,
name: pkg.name,
description: pkg.description,
author: pkg._npmUser ? pkg._npmUser.name : '???',
});
2017-04-17 15:52:36 +02:00
}
2017-04-26 23:48:55 +02:00
/**
* Remove an element from the index.
* @param {*} name the id element
*/
2017-04-17 15:52:36 +02:00
remove(name) {
this.index.remove({id: name});
2017-04-17 15:52:36 +02:00
}
2017-04-26 23:48:55 +02:00
/**
* Force a reindex.
*/
2017-04-17 15:52:36 +02:00
reindex() {
let self = this;
2017-04-17 15:52:36 +02:00
this.storage.get_local(function(err, packages) {
if (err) throw err; // that function shouldn't produce any
let i = packages.length;
2017-04-17 15:52:36 +02:00
while (i--) {
self.add(packages[i]);
2017-04-17 15:52:36 +02:00
}
});
2017-04-17 15:52:36 +02:00
}
2017-04-26 23:48:55 +02:00
/**
* Set up the {Storage}
* @param {*} storage An storage reference.
*/
2017-04-17 15:52:36 +02:00
configureStorage(storage) {
this.storage = storage;
this.reindex();
2017-04-17 15:52:36 +02:00
}
}
2017-04-17 15:52:36 +02:00
module.exports = new Search();