API и режим watch
Сборка стилей из кода через build() и generate(), TypeScript-типы и пересборка при изменении токенов.
build()
build() делает то же, что CLI: читает файлы токенов, собирает стили и записывает их в output. Принимает те же поля, что config.json, или путь к конфигу. Возвращает объект с содержимым записанных файлов.
import { build } from 'mixin-dictionary';
await build({
platforms: ['css', 'scss'],
source: ['tokens/*.json'],
output: './styles',
});
// или
await build({ config: './config.json' });generate()
generate() не работает с файловой системой: принимает токены объектами и возвращает содержимое файлов. Подходит для своих скриптов сборки, плагинов и браузера.
import { generate } from 'mixin-dictionary/generate';
const files = await generate({
tokens: { color: { $type: 'color', white: { $value: '#ffffff' } } },
themes: { dark: { color: { white: { $value: '#000000' } } } }, // необязательно
platforms: ['css', 'less', 'scss'],
});
files['css/index.css']; // а также 'less/index.less' и 'scss/index.scss'Необязательные mediaAliases и keyframesAliases работают так же, как в конфиге. В themes можно передать и default — имя темы по умолчанию. Предупреждения выводятся через console.warn; чтобы их перехватить, передайте logger: { warn(message) {} }.
В браузере generate() работает без полифиллов fs и path, но тянет за собой Style Dictionary:
бандл получается заметным: в продакшен-сборке с минификацией около 0,8 МБ (≈ 265 КБ в gzip), без
минификации около 3,6 МБ. Загружайте его лениво, через динамический import().
TypeScript
Типы входят в пакет: для build(), generate() и конфига.
import { build } from 'mixin-dictionary';
import { generate } from 'mixin-dictionary/generate';Для JSON-конфига используйте JSON Schema из пакета:
{
"$schema": "./node_modules/mixin-dictionary/schema/config.schema.json"
}Режим watch
npx mixin-dictionary -c ./config.json --watchСтили пересобираются при изменении файлов из source, themes и самого конфига. Отслеживаются только каталоги с токенами, а не весь проект.
Ошибки
Ошибки выводятся одной строкой с именем файла и путём токена, код выхода — 1:
✘ Config file not found: nope.json
✘ Token "color.text" (tokens/color.json) references {color.nope}, which is not defined
✘ No token files matched: tokens/*.jsonОстанавливают сборку: битая ссылка, typography без fontSize, смешение value и $value, отсутствующий или битый конфиг. Неизвестный $type и токен темы, которого нет в одной из тем, дают предупреждение. Неизвестная платформа в platforms: в CLI и build() она пропускается с сообщением, а generate() бросает ошибку.