exports_experiments.js

/**
 * @file exports/experiments.js
 * @copyright @spmhome @_2025
 * @author Scott Meesseman @spmeesseman
 *
 * @see {@link [webpack.js.org/experiments](https://webpack.js.org/configuration/experiments)}
 *
 *//** */

const WpwWebpackExport = require("./base");


/**
 * @augments WpwWebpackExport
 */
class WpwExperimentsExport extends WpwWebpackExport
{
    /**
     * @param {WpwExportOptions} options Plugin options to be applied
     */
    constructor(options)
    {
        super(options);
        this.buildOptions = /** @type {WpwBuildOptionsExportConfig<"experiments">} */(this.buildOptions);
    }

    /**
     * @override
     * @param {WpwBuild} b
     */
	static create = (b) => WpwExperimentsExport.wrap.call(this, b, b.isAnyAppOrLib);


    /**
     * @override
     * @param {WpwBuild} build The current build's rc wrapper @see {@link WpwBuild}
     */
    create(build)
    {   // TODO - use built-in css support, rmv rules[minicssextractplugin/css-loader]
        const topLevelAwait = !build.isWebApp || !!this.buildOptions.topLevelAwait,
              layers = !!((build.isAppOrLib && build.debug)  || this.buildOptions.layers),
              css = !!((build.isWebApp && build.options.web?.css) || this.buildOptions.css);

        build.logger.values([
            [ "output module", build.isModule ], [ "support layers", layers ], [ "top-level await", topLevelAwait ],
            [ "parse cascading stylesheets", css ]
        ], 1);

        this._obj_.apply(build.wpc.experiments,
        {   css,
            layers,
            topLevelAwait,
            outputModule: build.isModule
        });
    }
}


module.exports = WpwExperimentsExport.create;