zephyr-xpack-internal
Version:
Xpack internals for Zephyr
221 lines (220 loc) • 11.8 kB
JavaScript
;
var __webpack_modules__ = {
"node:module" (module) {
module.exports = require("node:module");
}
};
var __webpack_module_cache__ = {};
function __webpack_require__(moduleId) {
var cachedModule = __webpack_module_cache__[moduleId];
if (void 0 !== cachedModule) return cachedModule.exports;
var module = __webpack_module_cache__[moduleId] = {
exports: {}
};
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
return module.exports;
}
(()=>{
__webpack_require__.d = (exports1, getters, values)=>{
var define = (defs, kind)=>{
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
[kind]: defs[key]
});
};
define(getters, "get");
define(values, "value");
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
__webpack_require__.r = (exports1)=>{
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
(()=>{
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
FederationDashboardPlugin: ()=>FederationDashboardPlugin,
resolveFederationGraphConfiguration: ()=>resolveFederationGraphConfiguration
});
const external_node_path_namespaceObject = require("node:path");
const external_zephyr_agent_namespaceObject = require("zephyr-agent");
const index_js_namespaceObject = require("../../../xpack-extract/index.js");
const convert_to_graph_js_namespaceObject = require("../convert-to-graph/convert-to-graph.js");
const external_add_runtime_requirement_to_promise_external_js_namespaceObject = require("./add-runtime-requirement-to-promise-external.js");
const external_compute_version_strategy_js_namespaceObject = require("./compute-version-strategy.js");
const external_find_package_json_js_namespaceObject = require("./find-package-json.js");
const { createRequire: createProjectRequire } = __webpack_require__("node:module");
function resolveFederationGraphConfiguration(mfConfig, fallback, applicationName) {
const plugins = mfConfig ? Array.isArray(mfConfig) ? mfConfig : [
mfConfig
] : [];
const configurations = plugins.flatMap((plugin)=>{
const config = (0, index_js_namespaceObject.extractFederatedConfig)(plugin);
return config ? [
config
] : [];
});
const resolvedConfigurations = configurations.length > 0 ? configurations : Object.keys(fallback).length > 0 ? [
fallback
] : [];
const remoteNames = [
...new Set(resolvedConfigurations.flatMap((config)=>(0, index_js_namespaceObject.parseRemotesAsEntries)(config.remotes).map(([remoteName])=>remoteName)))
];
return {
configurations: resolvedConfigurations,
graphConfiguration: 1 === resolvedConfigurations.length ? resolvedConfigurations[0] : {
name: applicationName
},
remoteNames
};
}
class FederationDashboardPlugin {
_options;
_dashData;
allArgumentsUsed = [];
FederationPluginOptions = {};
constructor(options){
this._options = Object.assign({
debug: false,
useAST: false
}, options);
}
apply(compiler) {
compiler.options.output.uniqueName = `v${Date.now()}`;
new external_add_runtime_requirement_to_promise_external_js_namespaceObject.AddRuntimeRequirementToPromiseExternal().apply(compiler);
const FederationPlugin = compiler.options.plugins.find(index_js_namespaceObject.isModuleFederationPlugin);
this._options.standalone = void 0 === FederationPlugin;
if (FederationPlugin) this.FederationPluginOptions = Object.assign({}, (0, index_js_namespaceObject.extractFederatedConfig)(FederationPlugin), this._options.standalone || {});
else if (this._options.standalone) this.FederationPluginOptions = {};
else throw new Error('Dashboard plugin is missing Module Federation or standalone option');
}
processWebpackGraph({ stats, stats_json, pluginOptions }) {
const { configurations, graphConfiguration, remoteNames } = resolveFederationGraphConfiguration(pluginOptions.mfConfig, this.FederationPluginOptions, this._options.app?.name);
this.FederationPluginOptions = graphConfiguration;
const remoteEntryChunk = 1 === configurations.length ? this.getRemoteEntryChunk(stats_json, graphConfiguration) : void 0;
const validChunkArray = Array.from(new Set(configurations.flatMap((configuration)=>this.buildValidChunkArray(stats, configuration))));
const chunkDependencies = this.getChunkDependencies(validChunkArray);
const vendorFederation = this.buildVendorFederationMap(stats);
const getPlatformFromStats = stats.compilation.name;
const rawData = {
name: graphConfiguration.name,
filename: graphConfiguration.filename || '',
remotes: remoteNames,
metadata: Object.assign({}, this._options.metadata, this.attach_remote_bundle_name_to_metadata(configurations)) || {},
topLevelPackage: vendorFederation || {},
publicPath: stats_json.publicPath,
federationRemoteEntry: remoteEntryChunk,
buildHash: stats_json.hash,
environment: this._options.environment || 'development',
version: (0, external_compute_version_strategy_js_namespaceObject.computeVersionStrategy)(stats_json, this._options.versionStrategy),
posted: this._options.posted || new Date(),
group: this._options.group || 'default',
sha: external_compute_version_strategy_js_namespaceObject.gitSha,
modules: stats_json.modules,
chunkDependencies,
functionRemotes: this.allArgumentsUsed,
target: pluginOptions.target ?? pluginOptions.zephyr_engine.env.target ?? getPlatformFromStats
};
let graphData;
try {
graphData = (0, convert_to_graph_js_namespaceObject.convertToGraph)(rawData);
} catch (err) {
console.warn('Error during dashboard data processing');
console.warn(err);
}
if (!graphData) return;
return graphData;
}
getRemoteEntryChunk(stats, FederationPluginOptions) {
if (!stats.chunks) return;
return stats.chunks.find((chunk)=>chunk.names?.find((name)=>name === FederationPluginOptions.name));
}
getChunkDependencies(validChunkArray) {
return validChunkArray.reduce((acc, chunk)=>{
const subset = chunk.getAllReferencedChunks();
const stringifiableChunk = Array.from(subset).map((sub)=>{
const cleanSet = Object.getOwnPropertyNames(sub).reduce((acc, key)=>{
if ('_groups' === key) return acc;
return Object.assign(acc, {
[key]: sub[key]
});
}, {});
return this.mapToObjectRec(cleanSet);
});
return Object.assign(acc, {
[`${chunk.id}`]: stringifiableChunk
});
}, {});
}
buildVendorFederationMap(liveStats) {
const vendorFederation = {};
let packageJson;
if (this._options.packageJsonPath) try {
packageJson = require(this._options.packageJsonPath);
} catch (error) {
console.warn(`Unable to read package JSON at ${this._options.packageJsonPath}: ${String(error)}`);
}
else {
const initialPath = liveStats.compilation.options.context?.split(external_node_path_namespaceObject.sep);
packageJson = (0, external_find_package_json_js_namespaceObject.findPackageJson)(initialPath);
}
if (packageJson) {
const resolveFrom = this._options.packageJsonPath ? (0, external_node_path_namespaceObject.dirname)(this._options.packageJsonPath) : liveStats.compilation.options.context ?? process.cwd();
const projectRequire = createProjectRequire((0, external_node_path_namespaceObject.resolve)(resolveFrom, 'package.json'));
const resolveVersion = (packageName)=>(0, external_find_package_json_js_namespaceObject.resolveInstalledPackageVersion)(packageName, projectRequire);
vendorFederation.dependencies = (0, external_find_package_json_js_namespaceObject.buildVersionedDependencyMap)(packageJson, 'dependencies', resolveVersion);
vendorFederation.devDependencies = (0, external_find_package_json_js_namespaceObject.buildVersionedDependencyMap)(packageJson, 'devDependencies', resolveVersion);
vendorFederation.optionalDependencies = (0, external_find_package_json_js_namespaceObject.buildVersionedDependencyMap)(packageJson, 'optionalDependencies', resolveVersion);
}
return vendorFederation;
}
mapToObjectRec(m) {
const lo = {};
for (const [key, value] of Object.entries(m))if (value instanceof Map && value.size > 0) lo[key] = this.mapToObjectRec(value);
else if (value instanceof Set && value.size > 0) lo[key] = this.mapToObjectRec(Array.from(value));
else lo[key] = value;
return lo;
}
buildValidChunkArray(liveStats, FederationPluginOptions) {
if (!FederationPluginOptions.name) return [];
const namedChunkRefs = liveStats.compilation.namedChunks.get(FederationPluginOptions.name);
if (!namedChunkRefs) return [];
const AllReferencedChunksByRemote = namedChunkRefs.getAllReferencedChunks();
const validChunkArray = [];
for (const chunk of AllReferencedChunksByRemote)if (chunk.id !== FederationPluginOptions.name) validChunkArray.push(chunk);
return validChunkArray;
}
attach_remote_bundle_name_to_metadata(configurations = [
this.FederationPluginOptions
]) {
if (1 !== configurations.length) return;
const [configuration] = configurations;
if (!configuration?.exposes) return;
if (!configuration.bundle_name) return void console.warn(external_zephyr_agent_namespaceObject.ZeErrors.ERR_MF_CONFIG_MISSING_FILENAME);
return {
remote_bundle_name: configuration.bundle_name
};
}
async postDashboardData() {}
}
})();
exports.FederationDashboardPlugin = __webpack_exports__.FederationDashboardPlugin;
exports.resolveFederationGraphConfiguration = __webpack_exports__.resolveFederationGraphConfiguration;
for(var __rspack_i in __webpack_exports__)if (-1 === [
"FederationDashboardPlugin",
"resolveFederationGraphConfiguration"
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
Object.defineProperty(exports, '__esModule', {
value: true
});
//# sourceMappingURL=FederationDashboardPlugin.js.map