/**
 * @abstract
 * @internal (for now)
 **/
class Component {
    /** Whether or not to automatically register this component */
    passive = false;

    /** Whether or not this component requires dependency reloading */
    requiresReload = false;

    /**
     * The name used to call this component.
     *
     * @deprecated
     **/
    caller = '';

    /**
     *
     * @param {import("../Mix")} mix
     */
    constructor(mix) {
        this.context = mix;
    }

    /**
     * Specifiy one or more dependencies that must
     * be installed for this component to work
     *
     * @returns {import("../PackageDependency").Dependency[]}
     **/
    dependencies() {
        return [];
    }

    /**
     * Add rules to the webpack config
     *
     * @returns {import('webpack').RuleSetRule[]}
     **/
    webpackRules() {
        return [];
    }

    /**
     * Add plugins to the webpack config
     *
     * @returns {import('webpack').WebpackPluginInstance[]}
     **/
    webpackPlugins() {
        return [];
    }

    /**
     * Update the webpack config
     *
     * @param {import('webpack').Configuration} config
     * @returns {import('webpack').Configuration}
     **/
    webpackConfig(config) {
        return config;
    }
}

module.exports.Component = Component;
