openpencil/scripts/generate-tauri-menu.ts
2026-04-30 16:01:47 +03:00

36 lines
1.1 KiB
TypeScript

import { mkdirSync, writeFileSync } from 'node:fs'
import { dirname } from 'node:path'
import { APP_MENU_SCHEMA } from '../src/app/shell/menu/schema'
import type { AppMenuEntry, AppMenuGroupSchema } from '../src/app/shell/menu/schema'
function isNativeVisible(entry: { target?: string }): boolean {
return entry.target !== 'browser'
}
function cleanEntry(entry: AppMenuEntry): unknown | null {
if (!isNativeVisible(entry)) return null
if (entry.type === 'separator') return { type: 'separator' }
return {
id: entry.id,
label: entry.label,
accelerator: entry.accelerator,
checkbox: entry.checkbox,
sub: entry.sub?.map(cleanEntry).filter(Boolean)
}
}
function cleanGroup(group: AppMenuGroupSchema): unknown | null {
if (!isNativeVisible(group)) return null
return {
label: group.label,
items: group.items.map(cleanEntry).filter(Boolean)
}
}
const outputPath = 'desktop/generated/menu.json'
const menu = APP_MENU_SCHEMA.map(cleanGroup).filter(Boolean)
mkdirSync(dirname(outputPath), { recursive: true })
writeFileSync(outputPath, `${JSON.stringify(menu, null, 2)}\n`)