1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- var ms = require('mississippi')
- var allPackageMetadata = require('./all-package-metadata')
- var packageFilter = require('./package-filter.js')
- module.exports = allPackageSearch
- function allPackageSearch (opts) {
- var searchSection = (opts.unicode ? '🤔 ' : '') + 'search'
- // Get a stream with *all* the packages. This takes care of dealing
- // with the local cache as well, but that's an internal detail.
- var allEntriesStream = allPackageMetadata(opts)
- // Grab a stream that filters those packages according to given params.
- var filterStream = streamFilter(function (pkg) {
- opts.log.gauge.pulse('search')
- opts.log.gauge.show({section: searchSection, logline: 'scanning ' + pkg.name})
- // Simply 'true' if the package matches search parameters.
- var match = packageFilter(pkg, opts.include, opts.exclude, {
- description: opts.description
- })
- return match
- })
- return ms.pipeline.obj(allEntriesStream, filterStream)
- }
- function streamFilter (filter) {
- return ms.through.obj(function (data, enc, cb) {
- if (filter(data)) {
- this.push(standardizePkg(data))
- }
- cb()
- })
- }
- function standardizePkg (data) {
- return {
- name: data.name,
- description: data.description,
- maintainers: (data.maintainers || []).map(function (m) {
- return { username: m.name, email: m.email }
- }),
- keywords: data.keywords || [],
- version: Object.keys(data.versions || {})[0] || [],
- date: (
- data.time &&
- data.time.modified &&
- new Date(data.time.modified)
- ) || null
- }
- }
|