Capa de renderizado render.ts
La envoltura del renderizado de plantillas Handlebars.
Principio de diseño: plantillas finas
Sección titulada «Principio de diseño: plantillas finas»La plantilla solo se responsabiliza del esqueleto del archivo (comentario de cabecera, imports, apertura y cierre de los espacios de nombres). El formateo literal, token a token, se completa íntegramente en el TS del target, que alimenta la plantilla con la cadena body ya ensamblada.
target.ts: formateo token a token → se ensambla la cadena body ▼render.ts: render('android/LhTokens.kt.hbs', { package, imports, body }) ▼plantilla: comentario de cabecera + declaración package + imports + {{{body}}}La ventaja: la plantilla no contiene lógica handlebars compleja; cambiar el formateo de los literales solo afecta al TS del target, y cambiar el esqueleto del archivo solo afecta a la plantilla, sin interferencias entre ambas.
Funciones
Sección titulada «Funciones»loadTemplate(name: string): HandlebarsTemplateDelegate
Sección titulada «loadTemplate(name: string): HandlebarsTemplateDelegate»Función interna. Lee codegen/templates/<name> según el nombre de la plantilla:
const compiled = Handlebars.compile(source, { noEscape: true })cache.set(name, compiled) // se cachea el resultado de la compilación, para evitar compilar de nuevoEl directorio de las plantillas lo indica la constante TEMPLATES_DIR (codegen/templates).
render<T>(templateName: string, data: T): string
Sección titulada «render<T>(templateName: string, data: T): string»La única interfaz hacia el exterior:
return loadTemplate(templateName)(data)Cada target solo necesita esta línea de código.
Sin helpers personalizados
Sección titulada «Sin helpers personalizados»Las plantillas no registran ningún helper de handlebars; solo se apoyan en las capacidades integradas:
| Sintaxis | Uso |
|---|---|
{{{ }}} |
Llaves triples + noEscape, para insertar el body preformateado |
{{#each}} |
Recorrer arrays como la lista de imports |
Las 7 plantillas
Sección titulada «Las 7 plantillas»| Plantilla | Artefacto |
|---|---|
android/LhTokens.kt.hbs |
LhTokens.kt y LhDarkTokens.kt (claro y oscuro comparten) |
ios/LhTokens.swift.hbs |
LhTokens.swift y LhDarkTokens.swift |
ios/LhShadow.swift.hbs |
LhShadow.swift (plantilla estática, sin ranura para body) |
harmony/LhTokens.ets.hbs |
LhTokens.ets y LhDarkTokens.ets |
harmony/LhShadow.ets.hbs |
LhShadow.ets (plantilla estática) |
c/lh_tokens.h.hbs |
lh_tokens.h |
c/lh_dark_tokens.h.hbs |
lh_dark_tokens.h |
Para más detalles, véase la Lista de plantillas.
Copyright © 2024-2026 FengMo WenXue