plugins/plugin.js

const EventEmitter = require('events');

/**
 * PluginDefinition contains information about what capabilities a plugin
 * provides.
 * @typedef {Object} PluginDefinition
 * @property {string} id - A UUID in string format that uniquely identifies
 *            this plugin.
 * @property {string} name - The name of this plugin.
 * @property {string} description - A human-readable description of this plugin.
 * @property {string} version - The version number of this plugin. E.g. 1.44
 * @property {Array<string>} readsFormats - The file extensions of the types
 *           of files this plugin can read. This applies only to plugins of
 *           type FormatReader. For example, a tar reader plugin may be able
 *           to read types ['.tar', '.tar.gz', '.tgz']. If your plugin is not
 *           a FormatReader, this property should be an empty array. Use all
 *           lowercase letters.
 * @property {Array<string>} writesFormats - The file extensions of the types
 *           of files this plugin can write. This applies only to plugins of
 *           type FormatWriter. For example, a tar writer plugin may be able
 *           to read types ['.tar', '.tar.gz', '.tgz']. If your plugin is not
 *           a FormatWriter, this property should be an empty array. Use all
 *           lowercase letters.
 * @property {Array<string>} implementsProtocols - The network protocols that
 *           this plugin implements. For example, an FTP plugin may implement
 *           ['ftp', 'sftp', 'ftps']. This applies only to plugins of type
 *           NetworkClient. If your plugin is not a NetworkClient, this should
 *           be an empty list. Use all lowercase letters.
 * @property {Array<string>} talksToRepository - This describes what type of
 *           repository your plugin talks to. For example, 'fedora', 'aptrust',
 *           etc. This applies only to plugins of type Repository. If your plugin
 *           is not a Repository plugin, this should be empty. Use all lowercase
 *           letters.
 *
 */


/**
 * Plugin is the base class for all plugins.
 */
class Plugin extends EventEmitter {
    constructor() {
        super();
    }

    /**
     * The description method returns a description of the plugin and its
     * capabilities.
     *
     * @returns {PluginDefinition}
     */
    static description() {
        return {
            id: '',
            name: '',
            description: '',
            version: '',
            readsFormats: [],
            writesFormats: [],
            implementsProtocols: [],
            talksToRepository: []
        }
    }
}

module.exports.Plugin = Plugin;