/
melnik-demyan
/
ipdocgen
Обзор
Документация
Войти
/
melnik-demyan
/
ipdocgen
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/render.ts
60 строк
2 KB
Demyan Melnik
Increase signature size + migrate client data
11 июн 2026, 14:34
11 июн 2026, 14:34
e279ca3
Код
Авторство
О чём код?
import fs from 'fs'; import path from 'path'; import Handlebars from 'handlebars'; import type TConfig from './@types/TConfig'; const PARTIALS_DIR = './templates/partials'; if (fs.existsSync(PARTIALS_DIR)) { for (const file of fs.readdirSync(PARTIALS_DIR)) { if (!file.endsWith('.html')) continue; const name = path.basename(file, '.html'); Handlebars.registerPartial(name, fs.readFileSync(path.join(PARTIALS_DIR, file), 'utf8')); } } Handlebars.registerHelper('upper', (value: unknown) => String(value ?? '').toUpperCase()); Handlebars.registerHelper('shortName', (value: unknown) => { const parts = String(value ?? '').trim().split(/\s+/).filter(Boolean); if (parts.length === 0) return ''; const [first, ...rest] = parts; const initials = rest.slice(0, 2).map((p) => `${p.charAt(0)}.`); return [first, ...initials].join(' '); }); export const monthNames = [ 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь', ] as const; type TBaseData = { actNumber: number, config: TConfig, }; export type TTzData = TBaseData & { year: number, tzDate: string, monthName: typeof monthNames[number], tasks: Set<string>, }; export type TActData = TBaseData & { totalTime: string, actDate?: string, items: { project: string, description: string, task: string, duration: string, }[], }; export type TTemplateName = 'tz' | 'act'; export type TTemplateData = TTzData | TActData; export const renderHtml = (templateName: TTemplateName, data: TTemplateData): string => { const templatePath = `./templates/${templateName}.html`; const template = Handlebars.compile(fs.readFileSync(templatePath, 'utf8')); return template(data); };