node/deps/npm/node_modules/libnpmsearch/index.js
Kat Marchán 43dd49c978
deps: upgrade npm to 6.7.0
PR-URL: https://github.com/nodejs/node/pull/25804
Reviewed-By: Myles Borins <myles.borins@gmail.com>
2019-02-12 00:06:29 -08:00

80 lines
1.7 KiB
JavaScript

'use strict'
const figgyPudding = require('figgy-pudding')
const getStream = require('get-stream')
const npmFetch = require('npm-registry-fetch')
const SearchOpts = figgyPudding({
detailed: {default: false},
limit: {default: 20},
from: {default: 0},
quality: {default: 0.65},
popularity: {default: 0.98},
maintenance: {default: 0.5},
sortBy: {}
})
module.exports = search
function search (query, opts) {
return getStream.array(search.stream(query, opts))
}
search.stream = searchStream
function searchStream (query, opts) {
opts = SearchOpts(opts)
switch (opts.sortBy) {
case 'optimal': {
opts = opts.concat({
quality: 0.65,
popularity: 0.98,
maintenance: 0.5
})
break
}
case 'quality': {
opts = opts.concat({
quality: 1,
popularity: 0,
maintenance: 0
})
break
}
case 'popularity': {
opts = opts.concat({
quality: 0,
popularity: 1,
maintenance: 0
})
break
}
case 'maintenance': {
opts = opts.concat({
quality: 0,
popularity: 0,
maintenance: 1
})
break
}
}
return npmFetch.json.stream('/-/v1/search', 'objects.*',
opts.concat({
query: {
text: Array.isArray(query) ? query.join(' ') : query,
size: opts.limit,
quality: opts.quality,
popularity: opts.popularity,
maintenance: opts.maintenance
},
mapJson (obj) {
if (obj.package.date) {
obj.package.date = new Date(obj.package.date)
}
if (opts.detailed) {
return obj
} else {
return obj.package
}
}
})
)
}