You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* 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;
|