@gez/core
Version:
A high-performance microfrontend framework supporting Vue, React, Preact, Solid, and Svelte with SSR and Module Federation capabilities.
80 lines (79 loc) • 2.37 kB
JavaScript
import path from "node:path";
export var PathType = /* @__PURE__ */ ((PathType2) => {
PathType2["npm"] = "npm:";
PathType2["root"] = "root:";
return PathType2;
})(PathType || {});
export function parseModuleConfig(name, root, config = {}) {
const exports = [];
if (config.exports) {
config.exports.forEach((key) => {
if (key.startsWith("npm:" /* npm */)) {
const exportName = key.substring("npm:" /* npm */.length);
exports.push({
name: key,
type: "npm:" /* npm */,
importName: `${name}/npm/${exportName}`,
exportName: `./npm/${exportName}`,
exportPath: exportName,
externalName: exportName
});
} else if (key.startsWith("root:" /* root */)) {
const exportName = key.substring("root:" /* root */.length);
const exportNameNoSuffix = exportName.replace(/\.(ts|js)$/, "");
exports.push({
name: key,
type: "root:" /* root */,
importName: `${name}/${exportNameNoSuffix}`,
exportName: `./${exportNameNoSuffix}`,
exportPath: `./${exportName}`,
externalName: `${name}/${exportNameNoSuffix}`
});
}
});
}
const links = [];
if (config.links) {
const getLocalPath = (dir) => {
if (dir.startsWith("root:" /* root */)) {
return path.resolve(root, dir.substring("root:" /* root */.length));
} else if (path.isAbsolute(dir)) {
return dir;
}
return path.resolve(process.cwd(), dir);
};
const _links = config.links;
Object.keys(config.links).forEach((key) => {
const value = _links[key].trim();
links.push({
name: key,
root: getLocalPath(value)
});
});
}
const imports = {};
exports.forEach(({ importName, externalName }) => {
imports[externalName] = {
match: new RegExp(`^${externalName}$`),
import: importName
};
});
links.forEach(({ name: name2 }) => {
imports[name2] = {
match: new RegExp(`^${[name2]}/`)
};
});
if (config.imports) {
Object.entries(config.imports).forEach(([key, value]) => {
imports[key] = {
import: value,
match: new RegExp(`^${key}$`)
};
});
}
links.push({
name,
root: path.resolve(root, "dist")
});
return { name, root, exports, links, imports };
}