UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

116 lines (111 loc) 3.74 kB
const require_runtime = require('./_virtual/_rolldown/runtime.cjs'); let node_fs = require("node:fs"); let node_path = require("node:path"); //#region src/sidebar.ts const ICON_IMPORTS = { Home: "lucide-react", Globe: "lucide-react", FolderKanban: "lucide-react", Building2: "lucide-react", Settings: "lucide-react", User: "lucide-react", Users: "lucide-react", Shield: "lucide-react", LayoutDashboard: "lucide-react", CreditCard: "lucide-react", Bell: "lucide-react", Key: "lucide-react", FileText: "lucide-react", Database: "lucide-react", Activity: "lucide-react", BarChart3: "lucide-react", Zap: "lucide-react", Terminal: "lucide-react", Code: "lucide-react", Package: "lucide-react", Store: "lucide-react", ShoppingBag: "lucide-react", Wallet: "lucide-react", Coins: "lucide-react", Plug: "lucide-react", Link: "lucide-react", ExternalLink: "lucide-react", Puzzle: "lucide-react", Layers: "lucide-react", Grid3X3: "lucide-react", AppWindow: "lucide-react" }; function resolveIconModule(iconName) { if (ICON_IMPORTS[iconName]) return ICON_IMPORTS[iconName]; return "lucide-react"; } function collectIconImports(items) { const moduleMap = /* @__PURE__ */ new Map(); for (const item of items) { const module = resolveIconModule(item.icon); if (!moduleMap.has(module)) moduleMap.set(module, /* @__PURE__ */ new Set()); moduleMap.get(module).add(item.icon); } return moduleMap; } function generatePluginSidebarContent(runtimeConfig) { const coreItems = [{ icon: "Home", label: "home", to: "/", roleRequired: "anon" }]; if (runtimeConfig.auth?.sidebar) for (const item of runtimeConfig.auth.sidebar) coreItems.push({ ...item, to: item.to ?? "/auth", roleRequired: item.roleRequired ?? "member" }); const pluginItems = []; if (runtimeConfig.plugins) for (const [key, entry] of Object.entries(runtimeConfig.plugins)) { const sidebar = entry.sidebar; if (!sidebar) continue; for (const item of sidebar) pluginItems.push({ ...item, to: item.to ?? `/${key}`, roleRequired: item.roleRequired ?? "member" }); } const allItems = [...coreItems, ...pluginItems]; const moduleMap = collectIconImports(allItems); const importLines = []; for (const [module, icons] of moduleMap) { const iconList = [...icons].join(", "); importLines.push(`import { ${iconList} } from "${module}";`); } const itemsCode = allItems.map((item) => ` { icon: ${item.icon}, label: "${item.label}", to: "${item.to}" as const, roleRequired: "${item.roleRequired}" as const },`).join("\n"); return `// Auto-generated by bos sync/pluginAdd/pluginRemove. Do not edit. ${importLines.join("\n")} export type SidebarRole = "anon" | "member" | "admin"; export interface SidebarItem { icon: React.ComponentType<{ className?: string }>; label: string; to: string; roleRequired: SidebarRole; } export const pluginSidebarItems: SidebarItem[] = [ ${itemsCode} ]; `; } function writePluginSidebarGen(configDir, runtimeConfig) { const outputPath = (0, node_path.join)(configDir, "ui/src/lib/plugin-sidebar.gen.ts"); const content = generatePluginSidebarContent(runtimeConfig); const outputDir = (0, node_path.dirname)(outputPath); if (!(0, node_fs.existsSync)(outputDir)) (0, node_fs.mkdirSync)(outputDir, { recursive: true }); let existingContent = null; try { existingContent = (0, node_fs.existsSync)(outputPath) ? (0, node_fs.readFileSync)(outputPath, "utf-8") : null; } catch {} if (existingContent === content) return outputPath; (0, node_fs.writeFileSync)(outputPath, content); return outputPath; } //#endregion exports.generatePluginSidebarContent = generatePluginSidebarContent; exports.writePluginSidebarGen = writePluginSidebarGen; //# sourceMappingURL=sidebar.cjs.map