Sha256: ce4098f11f4bf3f8a75325e047abca38b4967b755e05bf71852ba4c08d293937
Contents?: true
Size: 1.68 KB
Versions: 26
Compression:
Stored size: 1.68 KB
Contents
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const createHash = require("./util/createHash"); const validateOptions = require("schema-utils"); const schema = require("../schemas/plugins/HashedModuleIdsPlugin.json"); /** @typedef {import("../declarations/plugins/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions} HashedModuleIdsPluginOptions */ class HashedModuleIdsPlugin { /** * @param {HashedModuleIdsPluginOptions=} options options object */ constructor(options) { if (!options) options = {}; validateOptions(schema, options, "Hashed Module Ids Plugin"); /** @type {HashedModuleIdsPluginOptions} */ this.options = Object.assign( { context: null, hashFunction: "md4", hashDigest: "base64", hashDigestLength: 4 }, options ); } apply(compiler) { const options = this.options; compiler.hooks.compilation.tap("HashedModuleIdsPlugin", compilation => { const usedIds = new Set(); compilation.hooks.beforeModuleIds.tap( "HashedModuleIdsPlugin", modules => { for (const module of modules) { if (module.id === null && module.libIdent) { const id = module.libIdent({ context: this.options.context || compiler.options.context }); const hash = createHash(options.hashFunction); hash.update(id); const hashId = /** @type {string} */ (hash.digest( options.hashDigest )); let len = options.hashDigestLength; while (usedIds.has(hashId.substr(0, len))) len++; module.id = hashId.substr(0, len); usedIds.add(module.id); } } } ); }); } } module.exports = HashedModuleIdsPlugin;
Version data entries
26 entries across 25 versions & 8 rubygems