// @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;