import { AsyncSeriesWaterfallHook } from '@rspack/lite-tapable'; import { Compiler, Compilation } from '@rspack/core'; declare class HtmlRspackPlugin { constructor(options?: HtmlRspackPlugin.Options); /** Current HtmlRspackPlugin Major */ version: number; /** * Options after html-webpack-plugin has been initialized with defaults */ options?: HtmlRspackPlugin.ProcessedOptions; apply(compiler: Compiler): void; /** * @deprecated use `getCompilationHooks` instead */ static getHooks(compilation: Compilation): HtmlRspackPlugin.Hooks; static getCompilationHooks(compilation: Compilation): HtmlRspackPlugin.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, ): HtmlRspackPlugin.HtmlTagObject; static readonly version: number; } declare namespace HtmlRspackPlugin { 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 * defer will result in * * @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" } }; /** * A function to minify the HTML */ minify?: (html: string) => string | Promise; /** * 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) | Promise; /** * 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; css: Array; 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. */ 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 {} /** * 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; css: Array; favicon?: string; }; options: Options; }; webpackConfig: any; } interface AlterAssetTagsData { assetTags: { scripts: HtmlTagObject[]; styles: HtmlTagObject[]; meta: HtmlTagObject[]; }; publicPath: string; outputName: string; plugin: HtmlRspackPlugin; } interface AlterAssetTagGroupsData { headTags: HtmlTagObject[]; bodyTags: HtmlTagObject[]; outputName: string; publicPath: string; plugin: HtmlRspackPlugin; } interface AfterTemplateExecutionData { html: string; headTags: HtmlTagObject[]; bodyTags: HtmlTagObject[]; outputName: string; plugin: HtmlRspackPlugin; } interface BeforeAssetTagGenerationData { assets: { publicPath: string; js: Array; css: Array; favicon?: string; }; outputName: string; plugin: HtmlRspackPlugin; } interface BeforeEmitData { html: string; outputName: string; plugin: HtmlRspackPlugin; } interface AfterEmitData { outputName: string; plugin: HtmlRspackPlugin; } interface Hooks { alterAssetTags: AsyncSeriesWaterfallHook; alterAssetTagGroups: AsyncSeriesWaterfallHook; afterTemplateExecution: AsyncSeriesWaterfallHook; beforeAssetTagGeneration: AsyncSeriesWaterfallHook; beforeEmit: AsyncSeriesWaterfallHook; afterEmit: AsyncSeriesWaterfallHook; } /** * 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; }; } } export { HtmlRspackPlugin as default };