@lingui/cli
Version:
Lingui CLI to extract messages, compile catalogs, and manage translation workflows
38 lines (37 loc) • 1.35 kB
JavaScript
/**
* Traverse the chunk import graph to determine which entry points depend on each chunk.
* This lets us extract messages from shared/common chunks once and attribute them to all
* consuming entry catalogs.
*/
export function buildChunkGraph(rawChunks) {
const chunkById = new Map(rawChunks.map((c) => [c.id, c]));
const chunkToEntries = new Map();
for (const chunk of rawChunks) {
if (!chunk.entryPoint)
continue;
const queue = [chunk.id];
const visited = new Set();
while (queue.length > 0) {
const currentId = queue.pop();
if (visited.has(currentId))
continue;
visited.add(currentId);
if (!chunkToEntries.has(currentId)) {
chunkToEntries.set(currentId, new Set());
}
chunkToEntries.get(currentId).add(chunk.entryPoint);
const current = chunkById.get(currentId);
if (current) {
for (const imp of current.imports) {
if (chunkById.has(imp)) {
queue.push(imp);
}
}
}
}
}
return Array.from(chunkToEntries.entries()).map(([id, entries]) => ({
filePath: chunkById.get(id).filePath,
entryPoints: Array.from(entries),
}));
}