2024-09-21 07:11:20 +08:00

41 lines
1.2 KiB
TypeScript

import type { ResolvedData } from './types.js'
import { kebabCase } from '@pengzhanbo/utils'
import handlebars from 'handlebars'
export interface RenderData extends ResolvedData {
name: string
siteName: string
locales: { path: string, lang: string, isEn: boolean, prefix: string }[]
isEN: boolean
}
handlebars.registerHelper('removeLeadingSlash', (path: string) => path.replace(/^\//, ''))
handlebars.registerHelper('equal', (a: string, b: string) => a === b)
export function createRender(result: ResolvedData) {
const data: RenderData = {
...result,
name: kebabCase(result.siteName),
isEN: result.defaultLanguage === 'en-US',
locales: result.defaultLanguage === 'en-US'
? [
{ path: '/', lang: 'en-US', isEn: true, prefix: 'en' },
{ path: '/zh/', lang: 'zh-CN', isEn: false, prefix: 'zh' },
]
: [
{ path: '/', lang: 'zh-CN', isEn: false, prefix: 'zh' },
{ path: '/en/', lang: 'en-US', isEn: true, prefix: 'en' },
],
}
return function render(source: string): string {
try {
const template = handlebars.compile(source)
return template(data)
}
catch (e) {
console.error(e)
return source
}
}
}