UNPKG

replace-text-in-bundle-plugin

Version:

A webpack plugin for dynamically replacing text patterns in bundle files during the build process.

52 lines (44 loc) 1.26 kB
import {Compiler, Compilation} from 'webpack'; import {Option} from './constants'; import { getBundleSource, updateBundleSource, replaceText, escapeSpecialCharacters, } from './utils'; class ReplaceTextInBundlePlugin { private options: Option[]; constructor(options: Option[]) { this.options = options; } apply(compiler: Compiler): void { if (!Array.isArray(this.options)) { throw new Error( 'ReplaceTextInBundlePlugin: Expected an array in options' ); } compiler.hooks.emit.tap( 'ReplaceTextInBundlePlugin', (compilation: Compilation) => { this.options.forEach( this.processOption.bind(this, compilation) ); } ); } private processOption(compilation: Compilation, option: Option): void { if ( option.bundle === undefined || option.from === undefined || option.to === undefined ) { throw new Error('ReplaceTextInBundlePlugin: Invalid object key'); } const {bundle, from, to} = option; const bundleSource = getBundleSource(compilation, bundle); const escapedFrom = escapeSpecialCharacters(from); const modifiedBundleSource = replaceText(bundleSource, escapedFrom, to); updateBundleSource(compilation, bundle, modifiedBundleSource); } } export default ReplaceTextInBundlePlugin;