/* 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); return hash.digest("hex").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;