exports_devtool.js

// @ts-check

/**
 * @file exports/devtool.js
 * @copyright @spmhome @_2025
 * @author Scott Meesseman @spmeesseman
 *
 * @see {@link [webpack.js.org/experiments](https://webpack.js.org/configuration/devtool)}
 *
 * Adds library mode webpack config `output` object.
 *
 * Possible devTool values:
 *
 *     none:                        : Recommended for prod builds w/ max performance
 *     inline-source-map:           : Possible when publishing a single file
 *     cheap-source-map
 *     cheap-module-source-map
 *     eval:                        : Recommended for dev builds w/ max performance
 *     eval-source-map:             : Recommended for dev builds w/ high quality SourceMaps
 *     eval-cheap-module-source-map : Tradeoff for dev builds
 *     eval-cheap-source-map:       : Tradeoff for dev builds
 *     inline-cheap-source-map
 *     inline-cheap-module-source-map
 *     source-map:                  : Recommended for prod builds w/ high quality SourceMaps
 *//** */

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


/**
 * @augments WpwWebpackExport
 */
class WpwDevtoolExport extends WpwWebpackExport
{
    /**
     * @param {WpwExportOptions} options Plugin options
     */
    constructor(options) { super(options); }

    /**
     * @override
     */
    static create = WpwDevtoolExport.wrap.bind(this);

    /**
     * @override
     * @param {WpwBuild} build The current build's rc wrapper @see {@link WpwBuild}
     */
    create(build)
    {
		if (build.mode !== "production" || build.debug)
		{
			const l = build.logger,
				o = build.options.devtool;
			l.values([
				[ "mode", o.mode ], [ "sourcemap type", o.type ], [ "sync hash", !!o.syncHash ]
			], 1);
			if (build.options.devtool.mode === "plugin")
			{
				build.wpc.devtool = false;
				build.logger.write("webpack.devtool disabled [sourcemaps plugin active]", 1);
			}
			else
			{
				if (build.mode === "production") {
					build.wpc.devtool = build.options.devtool.type || "source-map";
				}
				else if (build.mode === "development") {
					build.wpc.devtool = build.options.devtool.type || "source-map";
				}
				else {
					build.wpc.devtool = build.options.devtool.type || "inline-source-map";
				}
				build.logger.value("set sourcemap type", build.wpc.devtool, 1);
			}
		}
		else {
			build.wpc.devtool = false;
			build.logger.write("sourcemap generation disabled for 'non-debug' production build", 1);
		}
	}
}


module.exports = WpwDevtoolExport.create;