import utils from '@serverlessinc/sf-core/src/utils.js' import cliCommandsSchema from '../../cli/commands-schema.js' import pluginUtils from './lib/utils.js' const { log } = utils class PluginSearch { constructor(serverless, options) { this.serverless = serverless this.options = options Object.assign(this, pluginUtils) this.commands = { plugin: { commands: { search: { ...cliCommandsSchema.get('plugin search'), }, }, }, } this.hooks = { 'plugin:search:search': async () => this.search(), } } async search() { const plugins = await this.getPlugins() // filter out plugins which match the query const regex = new RegExp(this.options.query) const filteredPlugins = plugins.filter( (plugin) => plugin.name.match(regex) || plugin.description.match(regex), ) // print a message with the search result const pluginCount = filteredPlugins.length const query = this.options.query log.notice(`${pluginCount} plugin(s) found matching "${query}":`) log.notice() await this.display(filteredPlugins) } } export default PluginSearch