Project Init

This commit is contained in:
Muluhabt
2026-05-29 15:23:46 +03:00
commit 2fbc557aac
67387 changed files with 6063341 additions and 0 deletions

View File

@@ -0,0 +1,308 @@
const require_runtime = require('../_virtual/_rolldown/runtime.js');
//#region src/plugins/ChunkCorrelationPlugin.js
var require_ChunkCorrelationPlugin = /* @__PURE__ */ require_runtime.__commonJSMin(((exports, module) => {
const PLUGIN_NAME = "FederationStatsPlugin";
/** @typedef {import("./webpack-stats-types").WebpackStats} WebpackStats */
/** @typedef {import( "./webpack-stats-types").WebpackStatsChunk} WebpackStatsChunk */
/** @typedef {import("./webpack-stats-types").WebpackStatsModule} WebpackStatsModule */
/**
* @typedef {object} SharedDependency
* @property {string} shareScope
* @property {string} shareKey
* @property {string} requiredVersion
* @property {boolean} strictVersion
* @property {boolean} singleton
* @property {boolean} eager
*/
/**
* @typedef {object} SharedModule
* @property {string[]} chunks
* @property {SharedDependency[]} provides
*/
/**
* @typedef {object} Exposed
* @property {string[]} chunks
* @property {SharedModule[]} sharedModules
*/
/**
* @typedef {object} FederatedContainer
* @property {string} remote
* @property {string} entry
* @property {SharedModule[]} sharedModules
* @property {{ [key: string]: Exposed }} exposes
*/
/**
* @typedef {object} FederatedStats
* @property {SharedModule[]} sharedModules
* @property {FederatedContainer[]} federatedModules
*/
const concat = (x, y) => x.concat(y);
const flatMap = (xs, f) => xs.map(f).reduce(concat, []);
/**
*
* @param {WebpackStats} stats
* @returns {}
*/
function getRemoteModules(stats) {
return stats.modules.filter((mod) => mod.moduleType === "remote-module").reduce((acc, remoteModule) => {
acc[remoteModule.nameForCondition] = remoteModule.id;
return acc;
}, {});
}
/**
*
* @param {WebpackStats} stats
* @param {string} exposedFile
* @returns {WebpackStatsModule[]}
*/
function getExposedModules(stats, exposedFile) {
return stats.modules.filter((mod) => mod.name?.startsWith(exposedFile));
}
/**
*
* @param {WebpackStats} stats
* @param {WebpackStatsModule} mod
* @returns {Exposed}
*/
function getExposed(stats, mod) {
const chunks = stats.chunks.filter((chunk) => {
return chunk.modules.find((modsInChunk) => {
return modsInChunk.id === mod.id && !modsInChunk.dependent;
});
});
const dependencies = stats.modules.filter((sharedModule) => {
if (sharedModule.moduleType !== "consume-shared-module") return false;
return sharedModule.issuerId === mod.id;
}).map((sharedModule) => {
return sharedModule.identifier.split("|")[2];
});
return flatMap(chunks, (chunk) => ({ [chunk.id]: {
files: chunk.files.map((f) => `${stats.publicPath === "auto" ? "" : stats.publicPath || ""}${f}`),
requiredModules: dependencies
} })).reduce((acc, chunk) => {
Object.assign(acc, chunk);
return acc;
}, {});
}
/**
*
* @param {import("webpack").Module} mod
* @param {(issuer: string) => boolean} check
* @returns {boolean}
*/
function searchIssuer(mod, check) {
if (mod.issuer && check(mod.issuer)) return true;
return !!mod.modules && mod.modules.some((m) => searchIssuer(m, check));
}
function searchReason(mod, check) {
if (mod.reasons && check(mod.reasons)) return true;
return !!mod.reasons && mod.reasons.some((m) => searchReason(m, check));
}
function searchIssuerAndReason(mod, check) {
const foundIssuer = searchIssuer(mod, (issuer) => check(issuer));
if (foundIssuer) return foundIssuer;
return searchReason(mod, (reason) => reason.some((r) => check(r?.moduleIdentifier)));
}
/**
* @param {import("webpack").Module} mod
* @param {(issuer: string) => boolean} check
* @returns {string[]}
*/
function getIssuers(mod, check) {
if (mod.issuer && check(mod.issuer)) return [mod.issuer];
return mod.modules && mod.modules.filter((m) => searchIssuer(m, check)).map((m) => m.issuer) || [];
}
function getIssuersAndReasons(mod, check) {
if (mod.issuer && check(mod.issuer)) return [mod.issuer];
if (mod.reasons && searchReason(mod, (reason) => reason.some((r) => check(r?.moduleIdentifier)))) return mod.reasons.filter((r) => {
return r.moduleIdentifier && check(r.moduleIdentifier);
}).map((r) => r.moduleIdentifier);
return mod.modules && mod.modules.filter((m) => searchIssuerAndReason(m, check)).map((m) => {
return m.issuer || m.reasons.find((r) => check(r?.moduleIdentifier)).moduleIdentifier;
}) || [];
}
/**
* @param {string} issuer
* @returns {SharedDependency}
*/
function parseFederatedIssuer(issuer) {
const split = issuer?.split("|") || [];
if (split.length !== 8 || split[0] !== "consume-shared-module") return null;
const [, shareScope, shareKey, requiredVersion, strictVersion, , singleton, eager] = split;
return {
shareScope,
shareKey,
requiredVersion,
strictVersion: JSON.parse(strictVersion),
singleton: JSON.parse(singleton),
eager: JSON.parse(eager)
};
}
/**
*
* @param {WebpackStats} stats
* @param {import("webpack").container.ModuleFederationPlugin} federationPlugin
* @returns {SharedModule[]}
*/
function getSharedModules(stats, federationPlugin) {
return flatMap(stats.chunks.filter((chunk) => {
if (!stats.entrypoints[federationPlugin.name]) return false;
return stats.entrypoints[federationPlugin.name].chunks.some((id) => chunk.id === id);
}), (chunk) => flatMap(chunk.children, (id) => stats.chunks.filter((c) => c.id === id && c.files.length > 0 && c.parents.some((p) => stats.entrypoints[federationPlugin.name].chunks.some((c) => c === p)) && c.modules.some((m) => searchIssuer(m, (issuer) => issuer?.startsWith("consume-shared-module")))))).map((chunk) => ({
chunks: chunk.files.map((f) => `${stats.publicPath === "auto" ? "" : stats.publicPath || ""}${f}`),
provides: flatMap(chunk.modules.filter((m) => searchIssuer(m, (issuer) => issuer?.startsWith("consume-shared-module"))), (m) => getIssuers(m, (issuer) => issuer?.startsWith("consume-shared-module"))).map(parseFederatedIssuer).filter((f) => !!f)
})).filter((c) => c.provides.length > 0);
}
/**
* @param {WebpackStats} stats
* @returns {SharedModule[]}
*/
function getMainSharedModules(stats) {
return flatMap(stats.namedChunkGroups["main"] ? flatMap(stats.namedChunkGroups["main"].chunks, (c) => stats.chunks.filter((chunk) => chunk.id === c)) : [], (chunk) => flatMap(chunk.children, (id) => stats.chunks.filter((c) => {
return c.id === id && c.files.length > 0 && c.modules.some((m) => {
return searchIssuerAndReason(m, (check) => check?.startsWith("consume-shared-module"));
});
}))).map((chunk) => {
return {
chunks: chunk.files.map((f) => `${stats.publicPath === "auto" ? "" : stats.publicPath || ""}${f}`),
provides: flatMap(chunk.modules.filter((m) => searchIssuerAndReason(m, (check) => check?.startsWith("consume-shared-module"))), (m) => getIssuersAndReasons(m, (issuer) => issuer?.startsWith("consume-shared-module"))).map(parseFederatedIssuer).filter((f) => !!f)
};
}).filter((c) => c.provides.length > 0);
}
/**
*
* @param {WebpackStats} stats
* @param {import("webpack").container.ModuleFederationPlugin} federationPlugin
* @returns {FederatedStats}
*/
function getFederationStats(stats, federationPluginOptions) {
const exposedModules = Object.entries(federationPluginOptions.exposes).reduce((exposedModules, [exposedAs, exposedFile]) => Object.assign(exposedModules, { [exposedAs]: getExposedModules(stats, exposedFile) }), {});
/** @type {{ [key: string]: Exposed }} */
const exposes = Object.entries(exposedModules).reduce((exposedChunks, [exposedAs, exposedModules]) => Object.assign(exposedChunks, { [exposedAs]: flatMap(exposedModules, (mod) => getExposed(stats, mod)) }), {});
/** @type {string} */
const remote = federationPluginOptions.library?.name || federationPluginOptions.name;
const sharedModules = getSharedModules(stats, federationPluginOptions);
const remoteModules = getRemoteModules(stats);
return {
remote,
entry: `${stats.publicPath === "auto" ? "" : stats.publicPath || ""}${stats.assetsByChunkName[remote] && stats.assetsByChunkName[remote].length === 1 ? stats.assetsByChunkName[remote][0] : federationPluginOptions.filename}`,
sharedModules,
exposes,
remoteModules
};
}
/**
* @typedef {object} FederationStatsPluginOptions
* @property {string | string[]} filename The filename or an array of filenames in the `output.path` directory to write stats to.
*/
/**
* Writes relevant federation stats to a file for further consumption.
*/
var FederationStatsPlugin = class {
/**
*
* @param {FederationStatsPluginOptions} options
*/
constructor(options) {
if (!options || !options.filename) throw new Error("filename option is required.");
this._options = options;
}
/**
*
* @param {import("webpack").Compiler} compiler
*/
apply(compiler) {
const federationPlugins = compiler.options.plugins?.filter((plugin) => [
"NextFederationPlugin",
"UniversalFederationPlugin",
"NodeFederationPlugin",
"ModuleFederationPlugin"
].includes(plugin.constructor.name) && plugin?._options?.exposes);
if (!federationPlugins || federationPlugins.length === 0) return;
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
compilation.hooks.processAssets.tap({
name: PLUGIN_NAME,
stage: compilation.constructor.PROCESS_ASSETS_STAGE_REPORT
}, () => {
const [federationOpts] = federationPlugins.map((federationPlugin) => federationPlugin?._options);
let container;
for (const [name, entry] of compilation.entrypoints) {
if (container) break;
federationOpts.name.includes(name) && (container = entry);
}
if (!container) return;
container = container?.getEntrypointChunk();
const [containerEntryModule] = Array.from(compilation.chunkGraph.getChunkEntryModulesIterable(container));
const { blocks } = containerEntryModule;
const exposedResolved = {};
const builtExposes = {};
for (let block of blocks) {
const blockmodule = block;
for (const dep of blockmodule.dependencies) {
const connection = compilation.moduleGraph.getConnection(dep);
if (!connection) continue;
const { module: module$1 } = connection;
const moduleChunks = compilation.chunkGraph.getModuleChunksIterable(module$1);
for (let exposedChunk of moduleChunks) {
const isForThisRuntime = (typeof exposedChunk.runtime === "string" ? new Set([exposedChunk.runtime]) : exposedChunk.runtime).has(containerEntryModule._name);
const moduleActuallyNeedsChunk = compilation.chunkGraph.getChunkRootModules(exposedChunk).includes(module$1);
if (!isForThisRuntime || !moduleActuallyNeedsChunk) continue;
builtExposes[dep.exposedName] = [...builtExposes[dep.exposedName] || [], ...exposedChunk.files || []];
}
exposedResolved[dep.exposedName] = module$1;
}
}
const stats = compilation.getStats().toJson({
all: false,
assets: true,
reasons: true,
modules: true,
children: true,
chunkGroups: true,
chunkModules: true,
chunkOrigins: false,
entrypoints: true,
namedChunkGroups: false,
chunkRelations: true,
chunks: true,
ids: true,
nestedModules: false,
outputPath: true,
publicPath: true
});
const federatedModules = getFederationStats(stats, federationOpts);
federatedModules.exposes = builtExposes;
const sharedModules = getMainSharedModules(stats);
const vendorChunks = /* @__PURE__ */ new Set();
for (const share of sharedModules) if (share?.chunks) for (const file of share.chunks) vendorChunks.add(file);
const statsResult = {
sharedModules,
federatedModules: [federatedModules]
};
const statsJson = JSON.stringify(statsResult);
const statsBuffer = Buffer.from(statsJson, "utf-8");
const statsSource = {
source: () => statsBuffer,
size: () => statsBuffer.length
};
const { filename } = this._options;
if (Array.isArray(filename)) for (const file of filename) if (compilation.getAsset(file)) compilation.updateAsset(file, statsSource);
else compilation.emitAsset(file, statsSource);
else if (compilation.getAsset(filename)) compilation.updateAsset(filename, statsSource);
else compilation.emitAsset(filename, statsSource);
});
});
}
};
module.exports = FederationStatsPlugin;
}));
//#endregion
Object.defineProperty(exports, 'default', {
enumerable: true,
get: function () {
return require_ChunkCorrelationPlugin();
}
});
//# sourceMappingURL=ChunkCorrelationPlugin.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,305 @@
import { __commonJSMin } from "../_virtual/_rolldown/runtime.mjs";
//#region src/plugins/ChunkCorrelationPlugin.js
var require_ChunkCorrelationPlugin = /* @__PURE__ */ __commonJSMin(((exports, module) => {
const PLUGIN_NAME = "FederationStatsPlugin";
/** @typedef {import("./webpack-stats-types").WebpackStats} WebpackStats */
/** @typedef {import( "./webpack-stats-types").WebpackStatsChunk} WebpackStatsChunk */
/** @typedef {import("./webpack-stats-types").WebpackStatsModule} WebpackStatsModule */
/**
* @typedef {object} SharedDependency
* @property {string} shareScope
* @property {string} shareKey
* @property {string} requiredVersion
* @property {boolean} strictVersion
* @property {boolean} singleton
* @property {boolean} eager
*/
/**
* @typedef {object} SharedModule
* @property {string[]} chunks
* @property {SharedDependency[]} provides
*/
/**
* @typedef {object} Exposed
* @property {string[]} chunks
* @property {SharedModule[]} sharedModules
*/
/**
* @typedef {object} FederatedContainer
* @property {string} remote
* @property {string} entry
* @property {SharedModule[]} sharedModules
* @property {{ [key: string]: Exposed }} exposes
*/
/**
* @typedef {object} FederatedStats
* @property {SharedModule[]} sharedModules
* @property {FederatedContainer[]} federatedModules
*/
const concat = (x, y) => x.concat(y);
const flatMap = (xs, f) => xs.map(f).reduce(concat, []);
/**
*
* @param {WebpackStats} stats
* @returns {}
*/
function getRemoteModules(stats) {
return stats.modules.filter((mod) => mod.moduleType === "remote-module").reduce((acc, remoteModule) => {
acc[remoteModule.nameForCondition] = remoteModule.id;
return acc;
}, {});
}
/**
*
* @param {WebpackStats} stats
* @param {string} exposedFile
* @returns {WebpackStatsModule[]}
*/
function getExposedModules(stats, exposedFile) {
return stats.modules.filter((mod) => mod.name?.startsWith(exposedFile));
}
/**
*
* @param {WebpackStats} stats
* @param {WebpackStatsModule} mod
* @returns {Exposed}
*/
function getExposed(stats, mod) {
const chunks = stats.chunks.filter((chunk) => {
return chunk.modules.find((modsInChunk) => {
return modsInChunk.id === mod.id && !modsInChunk.dependent;
});
});
const dependencies = stats.modules.filter((sharedModule) => {
if (sharedModule.moduleType !== "consume-shared-module") return false;
return sharedModule.issuerId === mod.id;
}).map((sharedModule) => {
return sharedModule.identifier.split("|")[2];
});
return flatMap(chunks, (chunk) => ({ [chunk.id]: {
files: chunk.files.map((f) => `${stats.publicPath === "auto" ? "" : stats.publicPath || ""}${f}`),
requiredModules: dependencies
} })).reduce((acc, chunk) => {
Object.assign(acc, chunk);
return acc;
}, {});
}
/**
*
* @param {import("webpack").Module} mod
* @param {(issuer: string) => boolean} check
* @returns {boolean}
*/
function searchIssuer(mod, check) {
if (mod.issuer && check(mod.issuer)) return true;
return !!mod.modules && mod.modules.some((m) => searchIssuer(m, check));
}
function searchReason(mod, check) {
if (mod.reasons && check(mod.reasons)) return true;
return !!mod.reasons && mod.reasons.some((m) => searchReason(m, check));
}
function searchIssuerAndReason(mod, check) {
const foundIssuer = searchIssuer(mod, (issuer) => check(issuer));
if (foundIssuer) return foundIssuer;
return searchReason(mod, (reason) => reason.some((r) => check(r?.moduleIdentifier)));
}
/**
* @param {import("webpack").Module} mod
* @param {(issuer: string) => boolean} check
* @returns {string[]}
*/
function getIssuers(mod, check) {
if (mod.issuer && check(mod.issuer)) return [mod.issuer];
return mod.modules && mod.modules.filter((m) => searchIssuer(m, check)).map((m) => m.issuer) || [];
}
function getIssuersAndReasons(mod, check) {
if (mod.issuer && check(mod.issuer)) return [mod.issuer];
if (mod.reasons && searchReason(mod, (reason) => reason.some((r) => check(r?.moduleIdentifier)))) return mod.reasons.filter((r) => {
return r.moduleIdentifier && check(r.moduleIdentifier);
}).map((r) => r.moduleIdentifier);
return mod.modules && mod.modules.filter((m) => searchIssuerAndReason(m, check)).map((m) => {
return m.issuer || m.reasons.find((r) => check(r?.moduleIdentifier)).moduleIdentifier;
}) || [];
}
/**
* @param {string} issuer
* @returns {SharedDependency}
*/
function parseFederatedIssuer(issuer) {
const split = issuer?.split("|") || [];
if (split.length !== 8 || split[0] !== "consume-shared-module") return null;
const [, shareScope, shareKey, requiredVersion, strictVersion, , singleton, eager] = split;
return {
shareScope,
shareKey,
requiredVersion,
strictVersion: JSON.parse(strictVersion),
singleton: JSON.parse(singleton),
eager: JSON.parse(eager)
};
}
/**
*
* @param {WebpackStats} stats
* @param {import("webpack").container.ModuleFederationPlugin} federationPlugin
* @returns {SharedModule[]}
*/
function getSharedModules(stats, federationPlugin) {
return flatMap(stats.chunks.filter((chunk) => {
if (!stats.entrypoints[federationPlugin.name]) return false;
return stats.entrypoints[federationPlugin.name].chunks.some((id) => chunk.id === id);
}), (chunk) => flatMap(chunk.children, (id) => stats.chunks.filter((c) => c.id === id && c.files.length > 0 && c.parents.some((p) => stats.entrypoints[federationPlugin.name].chunks.some((c) => c === p)) && c.modules.some((m) => searchIssuer(m, (issuer) => issuer?.startsWith("consume-shared-module")))))).map((chunk) => ({
chunks: chunk.files.map((f) => `${stats.publicPath === "auto" ? "" : stats.publicPath || ""}${f}`),
provides: flatMap(chunk.modules.filter((m) => searchIssuer(m, (issuer) => issuer?.startsWith("consume-shared-module"))), (m) => getIssuers(m, (issuer) => issuer?.startsWith("consume-shared-module"))).map(parseFederatedIssuer).filter((f) => !!f)
})).filter((c) => c.provides.length > 0);
}
/**
* @param {WebpackStats} stats
* @returns {SharedModule[]}
*/
function getMainSharedModules(stats) {
return flatMap(stats.namedChunkGroups["main"] ? flatMap(stats.namedChunkGroups["main"].chunks, (c) => stats.chunks.filter((chunk) => chunk.id === c)) : [], (chunk) => flatMap(chunk.children, (id) => stats.chunks.filter((c) => {
return c.id === id && c.files.length > 0 && c.modules.some((m) => {
return searchIssuerAndReason(m, (check) => check?.startsWith("consume-shared-module"));
});
}))).map((chunk) => {
return {
chunks: chunk.files.map((f) => `${stats.publicPath === "auto" ? "" : stats.publicPath || ""}${f}`),
provides: flatMap(chunk.modules.filter((m) => searchIssuerAndReason(m, (check) => check?.startsWith("consume-shared-module"))), (m) => getIssuersAndReasons(m, (issuer) => issuer?.startsWith("consume-shared-module"))).map(parseFederatedIssuer).filter((f) => !!f)
};
}).filter((c) => c.provides.length > 0);
}
/**
*
* @param {WebpackStats} stats
* @param {import("webpack").container.ModuleFederationPlugin} federationPlugin
* @returns {FederatedStats}
*/
function getFederationStats(stats, federationPluginOptions) {
const exposedModules = Object.entries(federationPluginOptions.exposes).reduce((exposedModules, [exposedAs, exposedFile]) => Object.assign(exposedModules, { [exposedAs]: getExposedModules(stats, exposedFile) }), {});
/** @type {{ [key: string]: Exposed }} */
const exposes = Object.entries(exposedModules).reduce((exposedChunks, [exposedAs, exposedModules]) => Object.assign(exposedChunks, { [exposedAs]: flatMap(exposedModules, (mod) => getExposed(stats, mod)) }), {});
/** @type {string} */
const remote = federationPluginOptions.library?.name || federationPluginOptions.name;
const sharedModules = getSharedModules(stats, federationPluginOptions);
const remoteModules = getRemoteModules(stats);
return {
remote,
entry: `${stats.publicPath === "auto" ? "" : stats.publicPath || ""}${stats.assetsByChunkName[remote] && stats.assetsByChunkName[remote].length === 1 ? stats.assetsByChunkName[remote][0] : federationPluginOptions.filename}`,
sharedModules,
exposes,
remoteModules
};
}
/**
* @typedef {object} FederationStatsPluginOptions
* @property {string | string[]} filename The filename or an array of filenames in the `output.path` directory to write stats to.
*/
/**
* Writes relevant federation stats to a file for further consumption.
*/
var FederationStatsPlugin = class {
/**
*
* @param {FederationStatsPluginOptions} options
*/
constructor(options) {
if (!options || !options.filename) throw new Error("filename option is required.");
this._options = options;
}
/**
*
* @param {import("webpack").Compiler} compiler
*/
apply(compiler) {
const federationPlugins = compiler.options.plugins?.filter((plugin) => [
"NextFederationPlugin",
"UniversalFederationPlugin",
"NodeFederationPlugin",
"ModuleFederationPlugin"
].includes(plugin.constructor.name) && plugin?._options?.exposes);
if (!federationPlugins || federationPlugins.length === 0) return;
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
compilation.hooks.processAssets.tap({
name: PLUGIN_NAME,
stage: compilation.constructor.PROCESS_ASSETS_STAGE_REPORT
}, () => {
const [federationOpts] = federationPlugins.map((federationPlugin) => federationPlugin?._options);
let container;
for (const [name, entry] of compilation.entrypoints) {
if (container) break;
federationOpts.name.includes(name) && (container = entry);
}
if (!container) return;
container = container?.getEntrypointChunk();
const [containerEntryModule] = Array.from(compilation.chunkGraph.getChunkEntryModulesIterable(container));
const { blocks } = containerEntryModule;
const exposedResolved = {};
const builtExposes = {};
for (let block of blocks) {
const blockmodule = block;
for (const dep of blockmodule.dependencies) {
const connection = compilation.moduleGraph.getConnection(dep);
if (!connection) continue;
const { module: module$1 } = connection;
const moduleChunks = compilation.chunkGraph.getModuleChunksIterable(module$1);
for (let exposedChunk of moduleChunks) {
const isForThisRuntime = (typeof exposedChunk.runtime === "string" ? new Set([exposedChunk.runtime]) : exposedChunk.runtime).has(containerEntryModule._name);
const moduleActuallyNeedsChunk = compilation.chunkGraph.getChunkRootModules(exposedChunk).includes(module$1);
if (!isForThisRuntime || !moduleActuallyNeedsChunk) continue;
builtExposes[dep.exposedName] = [...builtExposes[dep.exposedName] || [], ...exposedChunk.files || []];
}
exposedResolved[dep.exposedName] = module$1;
}
}
const stats = compilation.getStats().toJson({
all: false,
assets: true,
reasons: true,
modules: true,
children: true,
chunkGroups: true,
chunkModules: true,
chunkOrigins: false,
entrypoints: true,
namedChunkGroups: false,
chunkRelations: true,
chunks: true,
ids: true,
nestedModules: false,
outputPath: true,
publicPath: true
});
const federatedModules = getFederationStats(stats, federationOpts);
federatedModules.exposes = builtExposes;
const sharedModules = getMainSharedModules(stats);
const vendorChunks = /* @__PURE__ */ new Set();
for (const share of sharedModules) if (share?.chunks) for (const file of share.chunks) vendorChunks.add(file);
const statsResult = {
sharedModules,
federatedModules: [federatedModules]
};
const statsJson = JSON.stringify(statsResult);
const statsBuffer = Buffer.from(statsJson, "utf-8");
const statsSource = {
source: () => statsBuffer,
size: () => statsBuffer.length
};
const { filename } = this._options;
if (Array.isArray(filename)) for (const file of filename) if (compilation.getAsset(file)) compilation.updateAsset(file, statsSource);
else compilation.emitAsset(file, statsSource);
else if (compilation.getAsset(filename)) compilation.updateAsset(filename, statsSource);
else compilation.emitAsset(filename, statsSource);
});
});
}
};
module.exports = FederationStatsPlugin;
}));
//#endregion
export default require_ChunkCorrelationPlugin();
export { require_ChunkCorrelationPlugin };
//# sourceMappingURL=ChunkCorrelationPlugin.mjs.map

File diff suppressed because one or more lines are too long