@module-federation/enhanced
Version:
This package provides enhanced features for module federation.
65 lines (63 loc) • 2.7 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path");
//#region src/lib/sharing/resolveMatchedConfigs.ts
const ModuleNotFoundError = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/ModuleNotFoundError"));
const LazySet = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/util/LazySet"));
const RELATIVE_REQUEST_REGEX = /^\.\.?(\/|$)/;
const ABSOLUTE_PATH_REGEX = /^(\/|[A-Za-z]:\\|\\\\)/;
const RESOLVE_OPTIONS = { dependencyType: "esm" };
function createCompositeKey(request, config) {
const layer = config.issuerLayer;
if (layer) return `(${layer})${request}`;
return request;
}
async function resolveMatchedConfigs(compilation, configs) {
const resolved = /* @__PURE__ */ new Map();
const unresolved = /* @__PURE__ */ new Map();
const prefixed = /* @__PURE__ */ new Map();
const resolveContext = {
fileDependencies: new LazySet(),
contextDependencies: new LazySet(),
missingDependencies: new LazySet()
};
const resolver = compilation.resolverFactory.get("normal", RESOLVE_OPTIONS);
const context = compilation.compiler.context;
await Promise.all(configs.map(([request, config]) => {
const resolveRequest = config.request || request;
if (RELATIVE_REQUEST_REGEX.test(resolveRequest)) return new Promise((resolve) => {
resolver.resolve({}, context, resolveRequest, resolveContext, (err, result) => {
if (err || result === false) {
err = err || /* @__PURE__ */ new Error(`Can't resolve ${resolveRequest}`);
compilation.errors.push(new ModuleNotFoundError(null, err, { name: `shared module ${resolveRequest}` }));
return resolve();
}
resolved.set(result, config);
resolve();
});
});
else if (ABSOLUTE_PATH_REGEX.test(resolveRequest)) {
resolved.set(resolveRequest, config);
return;
} else if (resolveRequest.endsWith("/")) {
const key = createCompositeKey(resolveRequest, config);
prefixed.set(key, config);
return;
} else {
const key = createCompositeKey(resolveRequest, config);
unresolved.set(key, config);
return;
}
}));
compilation.contextDependencies.addAll(resolveContext.contextDependencies);
compilation.fileDependencies.addAll(resolveContext.fileDependencies);
compilation.missingDependencies.addAll(resolveContext.missingDependencies);
return {
resolved,
unresolved,
prefixed
};
}
//#endregion
exports.resolveMatchedConfigs = resolveMatchedConfigs;
//# sourceMappingURL=resolveMatchedConfigs.js.map