Pular para o conteúdo principal

Configuração de Transformers

A configuração de transformers controla como o engine converte data/ em dist/. Ela define quais camadas de token construir, quais plataformas de output gerar e onde cada arquivo de output vai.

Essa configuração fica em theme-engine/transformers.config.mjs.


Referência completa

import { defineTransformersConfig } from '@aplica/aplica-theme-engine/transformers/config';

export default defineTransformersConfig({

// ── Camadas ────────────────────────────────────────────────────────────
layers: {
semantic: {
enabled: true,
platforms: ['json', 'esm', 'js', 'css']
},
foundation: {
enabled: true,
platforms: ['json', 'esm', 'js', 'css']
},
components: {
enabled: false,
platforms: ['json']
}
},

// ── Diretórios de output ──────────────────────────────────────────────
output: {
directories: {
json: './dist/json',
js: './dist/js',
esm: './dist/esm',
dts: './dist/js', // declarations TypeScript junto com CJS
dtsESM: './dist/esm', // declarations TypeScript junto com ESM
css: './dist/css/semantic',
scss: './dist/scss' // opcional
},
namespaces: {
semantic: {
css: './dist/css/semantic'
},
foundation: {
json: './dist/json/foundation',
js: './dist/js/foundation',
esm: './dist/esm/foundation',
css: './dist/css/foundation'
},
components: {
json: './dist/json/components',
js: './dist/js/components',
esm: './dist/esm/components',
css: './dist/css/components',
dts: './dist/json/components',
dtsESM: './dist/json/components'
}
}
},

// ── Assets ────────────────────────────────────────────────────────────
assets: {
copyFonts: true,
generateFontsManifest: true
},

// ── Opções de formato (desde 3.7.0) ───────────────────────────────────
formatOptions: {
jsonTyped: {
type: 'type',
value: 'value',
description: 'description', // omitir para excluir do output
path: 'path',
}
}

});

layers

Controla quais camadas de token são construídas e em quais formatos.

layers.semantic

A camada Semantic contém todos os tokens com propósito definido (semantic.color.*, semantic.typography.*, semantic.dimension.*, etc.). É a camada canônica para estilização de componentes.

CampoTipoDescrição
enabledbooleanSe deve construir esta camada
platformsstring[]Quais formatos de output gerar

layers.foundation

A camada Foundation contém aliases simplificados para times de produto (foundation.bg.*, foundation.txt.*, foundation.spacing.*). Sempre construída junto com a Semantic.

layers.components

Uma camada opcional para tokens com escopo de componente. Ignore se seu projeto só usa outputs Semantic e Foundation.

Nota: build:components termina de forma limpa com mensagem informativa quando nenhum dado de componente existe.


output.directories

Define o caminho de output raiz para cada plataforma. Todos os caminhos devem ficar dentro da raiz do projeto.

ChavePadrãoDescrição
json./dist/jsonArquivos de token JSON (valores em px, para Figma e Tokens Studio)
js./dist/jsMódulos CommonJS (valores em px, para Node.js e bundlers legados)
esm./dist/esmES Modules (valores em px, para JavaScript moderno)
dts./dist/jsDeclarações TypeScript co-localizadas com CJS
dtsESM./dist/esmDeclarações TypeScript co-localizadas com ESM
css./dist/css/semanticCSS custom properties (valores em rem, para Web)
scss./dist/scssVariáveis SCSS (opcional)

output.namespaces

Sobrescreve o caminho de output para camadas específicas. A camada Foundation sempre usa um sub-caminho estável para garantir contratos de import previsíveis.

Contrato de output do Foundation (estável entre versões do engine):

dist/json/foundation/<marca>/foundation.json
dist/js/foundation/<marca>/foundation.cjs
dist/esm/foundation/<marca>/foundation.mjs
dist/css/foundation/<marca>/foundation.css
dist/css/foundation/<marca>/typography.css
dist/css/foundation/<marca>/elevation.css

Esses caminhos são intencionalmente estáveis — consumidores downstream podem contar com eles não mudando entre versões menores do engine.


assets

CampoPadrãoDescrição
copyFontstrueCopiar arquivos de fonte de assets/fonts/ para dist/assets/fonts/
generateFontsManifesttrueGerar um fonts-manifest.json listando todos os arquivos de fonte

Se copyFonts for true mas assets/fonts/ não existir, o build avisa e continua. Nenhuma fonte é copiada; todos os outros outputs são gerados normalmente.


formatOptions (desde 3.7.0)

Controla o comportamento de formato de output para plataformas que suportam customização de metadata.

formatOptions.jsonTyped

Configura a plataforma de output jsonTyped — JSON com campos de metadata nomeados por token. Só ativo quando jsonTyped está listado em platforms de uma camada.

formatOptions: {
jsonTyped: {
type: 'type', // nome da chave para o tipo do token
value: 'value', // nome da chave para o valor resolvido
description: 'description', // nome da chave para descrição (omitir exclui o campo)
path: 'path', // nome da chave para o caminho completo do token
}
}
CampoPadrãoDescrição
type'type'Nome da chave que carrega o tipo do token (ex.: "color", "spacing")
value'value'Nome da chave que carrega o valor resolvido
description'description'Nome da chave para descrição do token — omitir a chave exclui o campo do output
path'path'Nome da chave para o caminho completo do token separado por pontos

Para renomear campos para um toolchain específico (ex.: para coincidir com um schema existente):

formatOptions: {
jsonTyped: {
type: '__type',
value: '__value',
path: '__path',
// description omitido → campo excluído do output
}
}

Configurações comuns

Projeto apenas para Web (CSS + JSON)

layers: {
semantic: { enabled: true, platforms: ['css', 'json'] },
foundation: { enabled: true, platforms: ['css', 'json'] },
components: { enabled: false, platforms: [] }
},
assets: { copyFonts: false, generateFontsManifest: false }

Projeto multi-plataforma (Web + Mobile + Figma)

layers: {
semantic: { enabled: true, platforms: ['json', 'esm', 'js', 'css'] },
foundation: { enabled: true, platforms: ['json', 'esm', 'js', 'css'] },
components: { enabled: false, platforms: ['json'] }
}

Publicando um pacote de tokens no npm

layers: {
semantic: { enabled: true, platforms: ['json', 'esm', 'js', 'css'] },
foundation: { enabled: true, platforms: ['json', 'esm', 'js', 'css'] },
components: { enabled: false, platforms: ['json'] }
},
output: {
directories: {
json: './dist/json',
js: './dist/js',
esm: './dist/esm',
dts: './dist/js',
css: './dist/css/semantic'
}
},
assets: { copyFonts: true, generateFontsManifest: true }

Adicione um array "files" ao seu package.json para controlar o que é publicado:

{
"files": ["dist/", "package.json", "README.md"],
"exports": {
"./foundation/css": "./dist/css/foundation/engine/foundation.css",
"./foundation/json": "./dist/json/foundation/engine/foundation.json",
"./foundation/esm": "./dist/esm/foundation/engine/foundation.mjs"
}
}

Validação

Se a config de transformers estiver ausente ou malformada, build:all falha rapidamente com um erro descritivo. O engine não faz fallback silencioso para padrões quando um arquivo de config explícito está presente mas inválido.

Quando nenhum arquivo de config existe, o engine usa seus padrões internos — útil para testes rápidos, mas não recomendado para produção.