diff options
Diffstat (limited to 'node_modules/webpack/lib/ids/DeterministicChunkIdsPlugin.js')
| -rw-r--r-- | node_modules/webpack/lib/ids/DeterministicChunkIdsPlugin.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/ids/DeterministicChunkIdsPlugin.js b/node_modules/webpack/lib/ids/DeterministicChunkIdsPlugin.js new file mode 100644 index 00000000..4547400c --- /dev/null +++ b/node_modules/webpack/lib/ids/DeterministicChunkIdsPlugin.js @@ -0,0 +1,79 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Florent Cailhol @ooflorent +*/ + +"use strict"; + +const { compareChunksNatural } = require("../util/comparators"); +const { + getFullChunkName, + getUsedChunkIds, + assignDeterministicIds +} = require("./IdHelpers"); + +/** @typedef {import("../Compiler")} Compiler */ +/** @typedef {import("../Module")} Module */ + +/** + * @typedef {Object} DeterministicChunkIdsPluginOptions + * @property {string=} context context for ids + * @property {number=} maxLength maximum length of ids + */ + +class DeterministicChunkIdsPlugin { + /** + * @param {DeterministicChunkIdsPluginOptions} [options] options + */ + constructor(options = {}) { + this.options = options; + } + + /** + * Apply the plugin + * @param {Compiler} compiler the compiler instance + * @returns {void} + */ + apply(compiler) { + compiler.hooks.compilation.tap( + "DeterministicChunkIdsPlugin", + compilation => { + compilation.hooks.chunkIds.tap( + "DeterministicChunkIdsPlugin", + chunks => { + const chunkGraph = compilation.chunkGraph; + const context = this.options.context + ? this.options.context + : compiler.context; + const maxLength = this.options.maxLength || 3; + + const compareNatural = compareChunksNatural(chunkGraph); + + const usedIds = getUsedChunkIds(compilation); + assignDeterministicIds( + Array.from(chunks).filter(chunk => { + return chunk.id === null; + }), + chunk => + getFullChunkName(chunk, chunkGraph, context, compiler.root), + compareNatural, + (chunk, id) => { + const size = usedIds.size; + usedIds.add(`${id}`); + if (size === usedIds.size) return false; + chunk.id = id; + chunk.ids = [id]; + return true; + }, + [Math.pow(10, maxLength)], + 10, + usedIds.size + ); + } + ); + } + ); + } +} + +module.exports = DeterministicChunkIdsPlugin; |
