summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/ids/OccurrenceChunkIdsPlugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/ids/OccurrenceChunkIdsPlugin.js')
-rw-r--r--node_modules/webpack/lib/ids/OccurrenceChunkIdsPlugin.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/ids/OccurrenceChunkIdsPlugin.js b/node_modules/webpack/lib/ids/OccurrenceChunkIdsPlugin.js
new file mode 100644
index 00000000..b0acac36
--- /dev/null
+++ b/node_modules/webpack/lib/ids/OccurrenceChunkIdsPlugin.js
@@ -0,0 +1,84 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { compareChunksNatural } = require("../util/comparators");
+const createSchemaValidation = require("../util/create-schema-validation");
+const { assignAscendingChunkIds } = require("./IdHelpers");
+
+/** @typedef {import("../../declarations/plugins/ids/OccurrenceChunkIdsPlugin").OccurrenceChunkIdsPluginOptions} OccurrenceChunkIdsPluginOptions */
+/** @typedef {import("../Chunk")} Chunk */
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("../Module")} Module */
+
+const validate = createSchemaValidation(
+ require("../../schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js"),
+ () => require("../../schemas/plugins/ids/OccurrenceChunkIdsPlugin.json"),
+ {
+ name: "Occurrence Order Chunk Ids Plugin",
+ baseDataPath: "options"
+ }
+);
+
+class OccurrenceChunkIdsPlugin {
+ /**
+ * @param {OccurrenceChunkIdsPluginOptions=} options options object
+ */
+ constructor(options = {}) {
+ validate(options);
+ this.options = options;
+ }
+
+ /**
+ * Apply the plugin
+ * @param {Compiler} compiler the compiler instance
+ * @returns {void}
+ */
+ apply(compiler) {
+ const prioritiseInitial = this.options.prioritiseInitial;
+ compiler.hooks.compilation.tap("OccurrenceChunkIdsPlugin", compilation => {
+ compilation.hooks.chunkIds.tap("OccurrenceChunkIdsPlugin", chunks => {
+ const chunkGraph = compilation.chunkGraph;
+
+ /** @type {Map<Chunk, number>} */
+ const occursInInitialChunksMap = new Map();
+
+ const compareNatural = compareChunksNatural(chunkGraph);
+
+ for (const c of chunks) {
+ let occurs = 0;
+ for (const chunkGroup of c.groupsIterable) {
+ for (const parent of chunkGroup.parentsIterable) {
+ if (parent.isInitial()) occurs++;
+ }
+ }
+ occursInInitialChunksMap.set(c, occurs);
+ }
+
+ const chunksInOccurrenceOrder = Array.from(chunks).sort((a, b) => {
+ if (prioritiseInitial) {
+ const aEntryOccurs =
+ /** @type {number} */
+ (occursInInitialChunksMap.get(a));
+ const bEntryOccurs =
+ /** @type {number} */
+ (occursInInitialChunksMap.get(b));
+ if (aEntryOccurs > bEntryOccurs) return -1;
+ if (aEntryOccurs < bEntryOccurs) return 1;
+ }
+ const aOccurs = a.getNumberOfGroups();
+ const bOccurs = b.getNumberOfGroups();
+ if (aOccurs > bOccurs) return -1;
+ if (aOccurs < bOccurs) return 1;
+ return compareNatural(a, b);
+ });
+ assignAscendingChunkIds(chunksInOccurrenceOrder, compilation);
+ });
+ });
+ }
+}
+
+module.exports = OccurrenceChunkIdsPlugin;