Перейти к содержимому

Слой рендеринга render.ts

Обёртка над рендерингом handlebars-шаблонов.

Шаблоны отвечают только за каркас файла (заголовочный комментарий, import, открытие/закрытие пространств имён). Форматирование литералов каждого отдельного токена полностью выполняется в TS-коде target’а, а в шаблон подаётся уже собранная строка body.

target.ts: Форматирование каждого токена → собирается в строку body
▼
render.ts: render('android/LhTokens.kt.hbs', { package, imports, body })
▼
Шаблон: Заголовочный комментарий + объявление package + imports + {{{body}}}

Преимущество: в шаблоне нет сложной логики handlebars; изменение формата литералов затрагивает только TS target’а, изменение каркаса файла — только шаблон; они не мешают друг другу.

Внутренняя функция. Читает codegen/templates/<name> по имени шаблона:

const compiled = Handlebars.compile(source, { noEscape: true })
cache.set(name, compiled) // Кэширование результата компиляции, чтобы не компилировать повторно

Каталог шаблонов задаётся константой TEMPLATES_DIR (codegen/templates).

Единственный внешний интерфейс:

return loadTemplate(templateName)(data)

Target’ам нужна только эта одна строка.

В шаблонах не зарегистрировано ни одного handlebars-хелпера, используется только встроенное:

Синтаксис Назначение
{{{ }}} Тройные фигурные скобки + noEscape, вставка предформатированного body
{{#each}} Обход массивов вроде списка import’ов
Шаблон Артефакт
android/LhTokens.kt.hbs LhTokens.kt и LhDarkTokens.kt (общий для светлой и тёмной тем)
ios/LhTokens.swift.hbs LhTokens.swift и LhDarkTokens.swift
ios/LhShadow.swift.hbs LhShadow.swift (статический шаблон, без слота body)
harmony/LhTokens.ets.hbs LhTokens.ets и LhDarkTokens.ets
harmony/LhShadow.ets.hbs LhShadow.ets (статический шаблон)
c/lh_tokens.h.hbs lh_tokens.h
c/lh_dark_tokens.h.hbs lh_dark_tokens.h

Подробнее: Список шаблонов.

Copyright © 2024-2026 FengMo WenXue