12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Natsu @xiaoxiaojx
- */
- "use strict";
- const { updateHashForEntryStartup } = require("./StartupHelpers");
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
- /** @typedef {import("../Module")} Module */
- /** @typedef {import("../Chunk")} Chunk */
- /** @typedef {import("../Entrypoint")} Entrypoint */
- /** @typedef {import("../util/Hash")} Hash */
- /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
- /**
- * Gets information about a chunk including its entries and runtime chunk
- * @param {Chunk} chunk The chunk to get information for
- * @param {ChunkGraph} chunkGraph The chunk graph containing the chunk
- * @returns {{entries: Array<[Module, Entrypoint | undefined]>, runtimeChunk: Chunk|null}} Object containing chunk entries and runtime chunk
- */
- function getChunkInfo(chunk, chunkGraph) {
- const entries = [
- ...chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
- ];
- const runtimeChunk =
- entries.length > 0
- ? /** @type {Entrypoint[][]} */
- (entries)[0][1].getRuntimeChunk()
- : null;
- return {
- entries,
- runtimeChunk
- };
- }
- /**
- * Creates a chunk hash handler
- * @param {string} name The name of the chunk
- * @returns {(chunk: Chunk, hash: Hash, { chunkGraph }: ChunkHashContext) => void} The chunk hash handler
- */
- function createChunkHashHandler(name) {
- /**
- * @param {Chunk} chunk The chunk to get information for
- * @param {Hash} hash The hash to update
- * @param {ChunkHashContext} chunkHashContext The chunk hash context
- * @returns {void}
- */
- return (chunk, hash, { chunkGraph }) => {
- if (chunk.hasRuntime()) return;
- const { entries, runtimeChunk } = getChunkInfo(chunk, chunkGraph);
- hash.update(name);
- hash.update("1");
- if (runtimeChunk && runtimeChunk.hash) {
- // https://github.com/webpack/webpack/issues/19439
- // Any change to runtimeChunk should trigger a hash update,
- // we shouldn't depend on or inspect its internal implementation.
- // import __webpack_require__ from "./runtime-main.e9400aee33633a3973bd.js";
- hash.update(runtimeChunk.hash);
- }
- updateHashForEntryStartup(hash, chunkGraph, entries, chunk);
- };
- }
- module.exports = {
- createChunkHashHandler,
- getChunkInfo
- };
|