Files
medusa-store/www/packages/build-scripts/src/generate-split-sidebars.ts
2025-03-10 10:32:45 +02:00

52 lines
1.2 KiB
TypeScript

import { Sidebar } from "types"
import { generateSidebar, GenerateSidebarOptions } from "./index.js"
import path from "path"
import { existsSync, mkdirSync } from "fs"
import { writeFile } from "fs/promises"
function toCamelCase(str: string) {
return str
.replace(/-([a-z])/g, (g) => g[1].toUpperCase())
.replace(/^./, (g) => g.toUpperCase())
}
export async function generateSplitSidebars({
sidebars,
options,
}: {
sidebars: Sidebar.RawSidebar[]
options?: GenerateSidebarOptions
}) {
const generatedDirPath = path.resolve("generated")
if (!existsSync(generatedDirPath)) {
mkdirSync(generatedDirPath)
}
for (const sidebarItem of sidebars) {
const generatedSidebar = (
(await generateSidebar([sidebarItem], {
...options,
writeToFile: false,
})) as Sidebar.RawSidebar[]
)[0]
const varName = `generated${toCamelCase(sidebarItem.sidebar_id)}Sidebar`
await writeFile(
path.resolve(
generatedDirPath,
`generated-${sidebarItem.sidebar_id}-sidebar.mjs`
),
`const generated${varName}Sidebar = ${JSON.stringify(
generatedSidebar,
null,
2
)}\n\nexport default generated${varName}Sidebar`,
{
flag: "w",
}
)
}
}