123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*
- 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;
|