UNPKG

@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
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 }; }