/**
* @file plugins/script/script.js
* @copyright @spmhome @_2025
* @author Scott Meesseman @spmeesseman
*//** */
const WpwTaskPlugin = require("../basetask");
const { apply } = require("@spmhome/type-utils");
const { getScriptBuildDependencies, getScriptBuildAssets } = require("../../utils/utils");
/**
* @augments WpwTaskPlugin
*/
class WpwScriptPlugin extends WpwTaskPlugin
{
/**
* @param {WpwPluginOptions} options
*/
constructor(options)
{
super("script", apply({ taskHandler: "executeScriptsBuild" }, options));
this.buildOptions = /** @type {WpwBuildOptionsPluginConfig<"script">} */(this.buildOptions);
}
/**
* @override
*/
static create = WpwScriptPlugin.wrap.bind(this);
/**
* @param {WebpackCompilationAssets} _assets
* @returns {Promise<WpwPluginTaskResult | void | SpmhError>}
*/
async executeScriptsBuild(_assets)
{
try
{ const bo = this.buildOptions,
assets = bo.assets || { immutable: false, tag: this.optionsKey };
await this.execScriptsAsync(bo, "");
return {
tag: assets.tag,
immutable: !!assets.immutable,
glob: assets.glob || "*.json",
paths: getScriptBuildAssets(this.buildOptions),
srcpaths: getScriptBuildDependencies(this.build, this.buildOptions)
};
}
catch (e)
{ return this.addMessage({
exception: e,
code: this.MsgCode.ERROR_SCRIPT_FAILED,
message: "faied to execute 'scripts' type build"
}, true);
}
}
}
module.exports = WpwScriptPlugin.create;