UNPKG

1.55 kBJavaScriptView Raw
1var ms = require('mississippi')
2var allPackageMetadata = require('./all-package-metadata')
3var packageFilter = require('./package-filter.js')
4
5module.exports = allPackageSearch
6function allPackageSearch (opts) {
7 var searchSection = (opts.unicode ? '🤔 ' : '') + 'search'
8
9 // Get a stream with *all* the packages. This takes care of dealing
10 // with the local cache as well, but that's an internal detail.
11 var allEntriesStream = allPackageMetadata(opts)
12
13 // Grab a stream that filters those packages according to given params.
14 var filterStream = streamFilter(function (pkg) {
15 opts.log.gauge.pulse('search')
16 opts.log.gauge.show({section: searchSection, logline: 'scanning ' + pkg.name})
17 // Simply 'true' if the package matches search parameters.
18 var match = packageFilter(pkg, opts.include, opts.exclude, {
19 description: opts.description
20 })
21 return match
22 })
23 return ms.pipeline.obj(allEntriesStream, filterStream)
24}
25
26function streamFilter (filter) {
27 return ms.through.obj(function (data, enc, cb) {
28 if (filter(data)) {
29 this.push(standardizePkg(data))
30 }
31 cb()
32 })
33}
34
35function standardizePkg (data) {
36 return {
37 name: data.name,
38 description: data.description,
39 maintainers: (data.maintainers || []).map(function (m) {
40 return { username: m.name, email: m.email }
41 }),
42 keywords: data.keywords || [],
43 version: Object.keys(data.versions || {})[0] || [],
44 date: (
45 data.time &&
46 data.time.modified &&
47 new Date(data.time.modified)
48 ) || null
49 }
50}