mirror of
https://github.com/Rushilwiz/spaceout.git
synced 2025-04-22 04:19:49 -04:00
76 lines
2.1 KiB
JavaScript
76 lines
2.1 KiB
JavaScript
/*
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
Author Tobias Koppers @sokra
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
/** @typedef {import("../Chunk")} Chunk */
|
|
/** @typedef {import("../Compilation")} Compilation */
|
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
|
/** @typedef {import("../ChunkGroup")} ChunkGroup */
|
|
/** @typedef {(string|number)[]} EntryItem */
|
|
|
|
// TODO move to this file to ../javascript/ChunkHelpers.js
|
|
|
|
/**
|
|
* @param {ChunkGroup} chunkGroup a chunk group
|
|
* @returns {Set<Chunk>} chunks
|
|
*/
|
|
const getAllChunks = chunkGroup => {
|
|
const queue = new Set([chunkGroup]);
|
|
const chunks = new Set();
|
|
for (const chunkGroup of queue) {
|
|
for (const chunk of chunkGroup.chunks) {
|
|
chunks.add(chunk);
|
|
}
|
|
for (const parent of chunkGroup.parentsIterable) {
|
|
queue.add(parent);
|
|
}
|
|
}
|
|
return chunks;
|
|
};
|
|
|
|
/**
|
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
|
* @param {Chunk} chunk the chunk
|
|
* @param {function(Chunk): boolean} chunkFilter the chunk filter function
|
|
* @returns {EntryItem[]} serialized entry info:
|
|
* inner arrays have this format [module id, ...chunk ids]
|
|
*/
|
|
exports.getEntryInfo = (chunkGraph, chunk, chunkFilter) => {
|
|
return Array.from(
|
|
chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
|
|
).map(([module, chunkGroup]) => {
|
|
const arr = [chunkGraph.getModuleId(module)];
|
|
for (const c of getAllChunks(chunkGroup)) {
|
|
if (!chunkFilter(c) && !c.hasRuntime()) continue;
|
|
const id = c.id;
|
|
if (id === chunk.id) continue;
|
|
arr.push(id);
|
|
}
|
|
return arr;
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @param {Compilation} compilation the compilation
|
|
* @param {Chunk} chunk the chunk
|
|
* @returns {boolean} true, when other chunks have this chunk as runtime chunk
|
|
*/
|
|
exports.needEntryDeferringCode = (compilation, chunk) => {
|
|
for (const entrypoint of compilation.entrypoints.values()) {
|
|
if (entrypoint.getRuntimeChunk() === chunk) {
|
|
if (entrypoint.chunks.length > 1 || entrypoint.chunks[0] !== chunk)
|
|
return true;
|
|
}
|
|
}
|
|
for (const entrypoint of compilation.asyncEntrypoints) {
|
|
if (entrypoint.getRuntimeChunk() === chunk) {
|
|
if (entrypoint.chunks.length > 1 || entrypoint.chunks[0] !== chunk)
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|