|
|
// @ts-check
/** @typedef {import("../typings").Hooks} HtmlWebpackPluginHooks */ 'use strict'; /** * This file provides access to all public htmlWebpackPlugin hooks */
/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */ /** @typedef {import("../index.js")} HtmlWebpackPlugin */
const AsyncSeriesWaterfallHook = require('tapable').AsyncSeriesWaterfallHook;
// The following is the API definition for all available hooks
// For the TypeScript definition, see the Hooks type in typings.d.ts
/** beforeAssetTagGeneration: AsyncSeriesWaterfallHook<{ assets: { publicPath: string, js: Array<string>, css: Array<string>, favicon?: string | undefined, manifest?: string | undefined }, outputName: string, plugin: HtmlWebpackPlugin }>, alterAssetTags: AsyncSeriesWaterfallHook<{ assetTags: { scripts: Array<HtmlTagObject>, styles: Array<HtmlTagObject>, meta: Array<HtmlTagObject>, }, outputName: string, plugin: HtmlWebpackPlugin }>, alterAssetTagGroups: AsyncSeriesWaterfallHook<{ headTags: Array<HtmlTagObject | HtmlTagObject>, bodyTags: Array<HtmlTagObject | HtmlTagObject>, outputName: string, plugin: HtmlWebpackPlugin }>, afterTemplateExecution: AsyncSeriesWaterfallHook<{ html: string, headTags: Array<HtmlTagObject | HtmlTagObject>, bodyTags: Array<HtmlTagObject | HtmlTagObject>, outputName: string, plugin: HtmlWebpackPlugin, }>, beforeEmit: AsyncSeriesWaterfallHook<{ html: string, outputName: string, plugin: HtmlWebpackPlugin, }>, afterEmit: AsyncSeriesWaterfallHook<{ outputName: string, plugin: HtmlWebpackPlugin }> */
/** * @type {WeakMap<WebpackCompilation, HtmlWebpackPluginHooks>}} */ const htmlWebpackPluginHooksMap = new WeakMap();
/** * Returns all public hooks of the html webpack plugin for the given compilation * * @param {WebpackCompilation} compilation * @returns {HtmlWebpackPluginHooks} */ function getHtmlWebpackPluginHooks (compilation) { let hooks = htmlWebpackPluginHooksMap.get(compilation); // Setup the hooks only once
if (hooks === undefined) { hooks = createHtmlWebpackPluginHooks(); htmlWebpackPluginHooksMap.set(compilation, hooks); } return hooks; }
/** * Add hooks to the webpack compilation object to allow foreign plugins to * extend the HtmlWebpackPlugin * * @returns {HtmlWebpackPluginHooks} */ function createHtmlWebpackPluginHooks () { return { beforeAssetTagGeneration: new AsyncSeriesWaterfallHook(['pluginArgs']), alterAssetTags: new AsyncSeriesWaterfallHook(['pluginArgs']), alterAssetTagGroups: new AsyncSeriesWaterfallHook(['pluginArgs']), afterTemplateExecution: new AsyncSeriesWaterfallHook(['pluginArgs']), beforeEmit: new AsyncSeriesWaterfallHook(['pluginArgs']), afterEmit: new AsyncSeriesWaterfallHook(['pluginArgs']) }; }
module.exports = { getHtmlWebpackPluginHooks };
|