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