| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const createHash = require("./util/createHash");const RequestShortener = require("./RequestShortener");const getHash = str => {	const hash = createHash("md4");	hash.update(str);	const digest = /** @type {string} */ (hash.digest("hex"));	return digest.substr(0, 4);};class NamedModulesPlugin {	constructor(options) {		this.options = options || {};	}	apply(compiler) {		compiler.hooks.compilation.tap("NamedModulesPlugin", compilation => {			compilation.hooks.beforeModuleIds.tap("NamedModulesPlugin", modules => {				const namedModules = new Map();				const context = this.options.context || compiler.options.context;				for (const module of modules) {					if (module.id === null && module.libIdent) {						module.id = module.libIdent({ context });					}					if (module.id !== null) {						const namedModule = namedModules.get(module.id);						if (namedModule !== undefined) {							namedModule.push(module);						} else {							namedModules.set(module.id, [module]);						}					}				}				for (const namedModule of namedModules.values()) {					if (namedModule.length > 1) {						for (const module of namedModule) {							const requestShortener = new RequestShortener(context);							module.id = `${module.id}?${getHash(								requestShortener.shorten(module.identifier())							)}`;						}					}				}			});		});	}}module.exports = NamedModulesPlugin;
 |