294 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			294 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { AsyncSeriesWaterfallHook } from "tapable";
 | 
						|
import { Compiler, Compilation } from "webpack";
 | 
						|
import { Options as HtmlMinifierOptions } from "html-minifier-terser";
 | 
						|
 | 
						|
export = HtmlWebpackPlugin;
 | 
						|
 | 
						|
declare class HtmlWebpackPlugin {
 | 
						|
  constructor(options?: HtmlWebpackPlugin.Options);
 | 
						|
 | 
						|
  userOptions: HtmlWebpackPlugin.Options;
 | 
						|
 | 
						|
  /** Current HtmlWebpackPlugin Major */
 | 
						|
  version: number;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Options after html-webpack-plugin has been initialized with defaults
 | 
						|
   */
 | 
						|
  options?: HtmlWebpackPlugin.ProcessedOptions;
 | 
						|
 | 
						|
  apply(compiler: Compiler): void;
 | 
						|
 | 
						|
  static getHooks(compilation: Compilation): HtmlWebpackPlugin.Hooks;
 | 
						|
  static getCompilationHooks(compilation: Compilation): HtmlWebpackPlugin.Hooks;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Static helper to create a tag object to be get injected into the dom
 | 
						|
   */
 | 
						|
  static createHtmlTagObject(
 | 
						|
    tagName: string,
 | 
						|
    attributes?: { [attributeName: string]: string | boolean },
 | 
						|
    innerHTML?: string,
 | 
						|
  ): HtmlWebpackPlugin.HtmlTagObject;
 | 
						|
 | 
						|
  static readonly version: number;
 | 
						|
}
 | 
						|
 | 
						|
declare namespace HtmlWebpackPlugin {
 | 
						|
  type MinifyOptions = HtmlMinifierOptions;
 | 
						|
 | 
						|
  interface Options {
 | 
						|
    /**
 | 
						|
     * Emit the file only if it was changed.
 | 
						|
     * @default true
 | 
						|
     */
 | 
						|
    cache?: boolean;
 | 
						|
    /**
 | 
						|
     * List all entries which should be injected
 | 
						|
     */
 | 
						|
    chunks?: "all" | string[];
 | 
						|
    /**
 | 
						|
     * Allows to control how chunks should be sorted before they are included to the html.
 | 
						|
     * @default 'auto'
 | 
						|
     */
 | 
						|
    chunksSortMode?:
 | 
						|
      | "auto"
 | 
						|
      // `none` is deprecated and an alias for `auto` now.
 | 
						|
      | "none"
 | 
						|
      | "manual"
 | 
						|
      | ((entryNameA: string, entryNameB: string) => number);
 | 
						|
    /**
 | 
						|
     * List all entries which should not be injected
 | 
						|
     */
 | 
						|
    excludeChunks?: string[];
 | 
						|
    /**
 | 
						|
     * Path to the favicon icon
 | 
						|
     */
 | 
						|
    favicon?: false | string;
 | 
						|
    /**
 | 
						|
     * The file to write the HTML to.
 | 
						|
     * Supports subdirectories eg: `assets/admin.html`
 | 
						|
     * [name] will be replaced by the entry name
 | 
						|
     * Supports a function to generate the name
 | 
						|
     *
 | 
						|
     * @default 'index.html'
 | 
						|
     */
 | 
						|
    filename?: string | ((entryName: string) => string);
 | 
						|
    /**
 | 
						|
     * By default the public path is set to `auto` - that way the html-webpack-plugin will try
 | 
						|
     * to set the publicPath according to the current filename and the webpack publicPath setting
 | 
						|
     */
 | 
						|
    publicPath?: string | "auto";
 | 
						|
    /**
 | 
						|
     * If `true` then append a unique `webpack` compilation hash to all included scripts and CSS files.
 | 
						|
     * This is useful for cache busting
 | 
						|
     */
 | 
						|
    hash?: boolean;
 | 
						|
    /**
 | 
						|
     * Inject all assets into the given `template` or `templateContent`.
 | 
						|
     */
 | 
						|
    inject?:
 | 
						|
      | false // Don't inject scripts
 | 
						|
      | true // Inject scripts into body
 | 
						|
      | "body" // Inject scripts into body
 | 
						|
      | "head"; // Inject scripts into head
 | 
						|
    /**
 | 
						|
     * Set up script loading
 | 
						|
     * blocking will result in <script src="..."></script>
 | 
						|
     * defer will result in <script defer src="..."></script>
 | 
						|
     *
 | 
						|
     * @default 'defer'
 | 
						|
     */
 | 
						|
    scriptLoading?: "blocking" | "defer" | "module" | "systemjs-module";
 | 
						|
    /**
 | 
						|
     * Inject meta tags
 | 
						|
     */
 | 
						|
    meta?:
 | 
						|
      | false // Disable injection
 | 
						|
      | {
 | 
						|
          [name: string]:
 | 
						|
            | string
 | 
						|
            | false // name content pair e.g. {viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}`
 | 
						|
            | { [attributeName: string]: string | boolean }; // custom properties e.g. { name:"viewport" content:"width=500, initial-scale=1" }
 | 
						|
        };
 | 
						|
    /**
 | 
						|
     * HTML Minification options accepts the following values:
 | 
						|
     * - Set to `false` to disable minification
 | 
						|
     * - Set to `'auto'` to enable minification only for production mode
 | 
						|
     * - Set to custom minification according to
 | 
						|
     * {@link https://github.com/kangax/html-minifier#options-quick-reference}
 | 
						|
     */
 | 
						|
    minify?: "auto" | boolean | MinifyOptions;
 | 
						|
    /**
 | 
						|
     * Render errors into the HTML page
 | 
						|
     */
 | 
						|
    showErrors?: boolean;
 | 
						|
    /**
 | 
						|
     * The `webpack` require path to the template.
 | 
						|
     * @see https://github.com/jantimon/html-webpack-plugin/blob/master/docs/template-option.md
 | 
						|
     */
 | 
						|
    template?: string;
 | 
						|
    /**
 | 
						|
     * Allow to use a html string instead of reading from a file
 | 
						|
     */
 | 
						|
    templateContent?:
 | 
						|
      | false // Use the template option instead to load a file
 | 
						|
      | string
 | 
						|
      | ((templateParameters: {
 | 
						|
          [option: string]: any;
 | 
						|
        }) => string | Promise<string>)
 | 
						|
      | Promise<string>;
 | 
						|
    /**
 | 
						|
     * Allows to overwrite the parameters used in the template
 | 
						|
     */
 | 
						|
    templateParameters?:
 | 
						|
      | false // Pass an empty object to the template function
 | 
						|
      | ((
 | 
						|
          compilation: Compilation,
 | 
						|
          assets: {
 | 
						|
            publicPath: string;
 | 
						|
            js: Array<string>;
 | 
						|
            css: Array<string>;
 | 
						|
            manifest?: string;
 | 
						|
            favicon?: string;
 | 
						|
          },
 | 
						|
          assetTags: {
 | 
						|
            headTags: HtmlTagObject[];
 | 
						|
            bodyTags: HtmlTagObject[];
 | 
						|
          },
 | 
						|
          options: ProcessedOptions,
 | 
						|
        ) => { [option: string]: any } | Promise<{ [option: string]: any }>)
 | 
						|
      | { [option: string]: any };
 | 
						|
    /**
 | 
						|
     * The title to use for the generated HTML document
 | 
						|
     */
 | 
						|
    title?: string;
 | 
						|
    /**
 | 
						|
     * Enforce self closing tags e.g. <link />
 | 
						|
     */
 | 
						|
    xhtml?: boolean;
 | 
						|
    /**
 | 
						|
     * In addition to the options actually used by this plugin, you can use this hash to pass arbitrary data through
 | 
						|
     * to your template.
 | 
						|
     */
 | 
						|
    [option: string]: any;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * The plugin options after adding default values
 | 
						|
   */
 | 
						|
  interface ProcessedOptions extends Required<Options> {
 | 
						|
    filename: string;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * The values which are available during template execution
 | 
						|
   *
 | 
						|
   * Please keep in mind that the `templateParameter` options allows to change them
 | 
						|
   */
 | 
						|
  interface TemplateParameter {
 | 
						|
    compilation: Compilation;
 | 
						|
    htmlWebpackPlugin: {
 | 
						|
      tags: {
 | 
						|
        headTags: HtmlTagObject[];
 | 
						|
        bodyTags: HtmlTagObject[];
 | 
						|
      };
 | 
						|
      files: {
 | 
						|
        publicPath: string;
 | 
						|
        js: Array<string>;
 | 
						|
        css: Array<string>;
 | 
						|
        manifest?: string;
 | 
						|
        favicon?: string;
 | 
						|
      };
 | 
						|
      options: Options;
 | 
						|
    };
 | 
						|
    webpackConfig: any;
 | 
						|
  }
 | 
						|
 | 
						|
  interface Hooks {
 | 
						|
    alterAssetTags: AsyncSeriesWaterfallHook<{
 | 
						|
      assetTags: {
 | 
						|
        scripts: HtmlTagObject[];
 | 
						|
        styles: HtmlTagObject[];
 | 
						|
        meta: HtmlTagObject[];
 | 
						|
      };
 | 
						|
      publicPath: string;
 | 
						|
      outputName: string;
 | 
						|
      plugin: HtmlWebpackPlugin;
 | 
						|
    }>;
 | 
						|
 | 
						|
    alterAssetTagGroups: AsyncSeriesWaterfallHook<{
 | 
						|
      headTags: HtmlTagObject[];
 | 
						|
      bodyTags: HtmlTagObject[];
 | 
						|
      outputName: string;
 | 
						|
      publicPath: string;
 | 
						|
      plugin: HtmlWebpackPlugin;
 | 
						|
    }>;
 | 
						|
 | 
						|
    afterTemplateExecution: AsyncSeriesWaterfallHook<{
 | 
						|
      html: string;
 | 
						|
      headTags: HtmlTagObject[];
 | 
						|
      bodyTags: HtmlTagObject[];
 | 
						|
      outputName: string;
 | 
						|
      plugin: HtmlWebpackPlugin;
 | 
						|
    }>;
 | 
						|
 | 
						|
    beforeAssetTagGeneration: AsyncSeriesWaterfallHook<{
 | 
						|
      assets: {
 | 
						|
        publicPath: string;
 | 
						|
        js: Array<string>;
 | 
						|
        css: Array<string>;
 | 
						|
        favicon?: string;
 | 
						|
        manifest?: string;
 | 
						|
      };
 | 
						|
      outputName: string;
 | 
						|
      plugin: HtmlWebpackPlugin;
 | 
						|
    }>;
 | 
						|
 | 
						|
    beforeEmit: AsyncSeriesWaterfallHook<{
 | 
						|
      html: string;
 | 
						|
      outputName: string;
 | 
						|
      plugin: HtmlWebpackPlugin;
 | 
						|
    }>;
 | 
						|
 | 
						|
    afterEmit: AsyncSeriesWaterfallHook<{
 | 
						|
      outputName: string;
 | 
						|
      plugin: HtmlWebpackPlugin;
 | 
						|
    }>;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * A tag element according to the htmlWebpackPlugin object notation
 | 
						|
   */
 | 
						|
  interface HtmlTagObject {
 | 
						|
    /**
 | 
						|
     * Attributes of the html tag
 | 
						|
     * E.g. `{'disabled': true, 'value': 'demo'}`
 | 
						|
     */
 | 
						|
    attributes: {
 | 
						|
      [attributeName: string]: string | boolean | null | undefined;
 | 
						|
    };
 | 
						|
    /**
 | 
						|
     * The tag name e.g. `'div'`
 | 
						|
     */
 | 
						|
    tagName: string;
 | 
						|
    /**
 | 
						|
     * The inner HTML
 | 
						|
     */
 | 
						|
    innerHTML?: string;
 | 
						|
    /**
 | 
						|
     * Whether this html must not contain innerHTML
 | 
						|
     * @see https://www.w3.org/TR/html5/syntax.html#void-elements
 | 
						|
     */
 | 
						|
    voidTag: boolean;
 | 
						|
    /**
 | 
						|
     * Meta information about the tag
 | 
						|
     * E.g. `{'plugin': 'html-webpack-plugin'}`
 | 
						|
     */
 | 
						|
    meta: {
 | 
						|
      plugin?: string;
 | 
						|
      [metaAttributeName: string]: any;
 | 
						|
    };
 | 
						|
  }
 | 
						|
}
 |