plugins_script_script.js

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