107 lines
3.0 KiB
JavaScript
107 lines
3.0 KiB
JavaScript
// @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
|
|
};
|