@feugene/granularity-test-kit
Releases of @feugene/granularity-test-kit from its CHANGELOG: the latest 8 in full, the earlier ones as a list of versions.
v2.4.02026-10-28
Added
componentSheetиlookElementв./vue— каскад листа компонента без браузера: тесты читают вид компонента из его<style>, а не строку классов. Жили в тестах ядра; спутнику, который переносит вид в лист, они нужны так же. Лист файлом (GrRichText/styles.css) читается целиком.
v2.3.02026-10-22
Added
defineThemeGate({ onlyTargets })— сверять только разделы пакетов изtargets: тема каталога несёт разделы многих пакетов, и каждый пакет сверяет свой. Пакет темы флаг не включает — раздел пакета внеtargetsдля него опечатка.packageComponentTokens()— реестр токенов пакета из егоtokens.jsonв формеtargetsгейта тем: для спутника, который не экспортирует реестр.
v2.2.02026-10-21
Added
defineThemeGate— гейт пакета темы: тема собирается сборкой дизайн-системы (loadTheme), значения компонентов полны по реестрам целевых пакетов, в разделах — только токены видаthemeсвоих компонентов, пакет раздела — вtargets.- Флаги
defineComponentTokensGate, по умолчанию выключены — пакет включает их на своём переводе:themeSources(вид токенов в разделах тем пакета токенов),themeTokenFallback(токен темы читается без запасного значения),hookLiterals(литерал хука — с причинойliteralв реестре),themesDirAbsent(у компонентов нетthemesDir),themeKindOnly(в папке тем компонента — только видtheme, без допуска хуков 2.1.0).
v2.1.02026-10-21
Added
withRegistryHookTokens(provider, srcDir)в корневой точке входа: хуки реестра (kind: "hook"вtokens.jsonкомпонента и его группы) — вhookTokensдескрипторов на сборке пакета, передgranumProvider. granum 3.7 называет токен, который читается только черезvar(--x, запасное), находкойtoken-fallback-only, если дескриптор не объявил его хуком; природу токена знает только реестр, и второй список вconfig.tsне нужен.
Changed
componentTokens: в файлах тем допустимы и хуки. Ключ вthemes/<тема>/…обязан быть токеном реестра видаthemeилиhook: тема вправе задать значение точке кастомизации (--gr-button-neutral-bgу «Глины»), и это не поломка реестра. Токеныcssиinlineв теме по-прежнему ошибка — их значение пишет сам компонент.
v2.0.02026-10-19
Changed
- Peer
@feugene/granum—>=3.0.0 <4.0.0. Ядро@feugene/granularityтеперь провайдер granum 3 (манифест формата 3, контракт версии 2), и спутник объявляет тот же мажор. componentTokensчитает токены тем по раскладкеthemesDirgranum 3 —<Компонент>/themes/<тема>/root.{json,css}иmodes/<режим>.{json,css}вместоthemes/*.css. JSON-ключи сверяются с реестром (requireThemeKind), ссылки из значений — с объявленными токенами, а сами объявления считаются употреблением. Новые экспорты —readThemeSources,readComponentThemeSources.
v1.2.02026-10-16
Changed
- Необязательный peer
@feugene/granum—>=2.0.0 <3.0.0. Гейт реестров берёт части составных компонентов из@feugene/granum/codegengranum 2.0, с которым собраны ядро и спутники; сообщение о недостающем пакете называет ту же версию.
v1.1.02026-10-06
Added
defineSafelistGate— гейт safelist-контракта, общий для ядра и спутников. Safelist компонента — только классы, собранные в рантайме из частей; запись, которая лежит в коде компонента целым литералом, гейт называет лишней: granum извлечёт её и так. Код компонента обходится так же, как его обходит сборка: от файлов компонента по относительным импортам — сквозьshared/,internal/и общие директории группы, — но не в директорию другого компонента. Наружу выставлены и части гейта:componentCodeFiles,parseRelativeImports,redundantSafelistEntries.
Changed
defineSafelistGateвходит вREQUIRED_GATES: пакет, который его не подключил, краснеет наdefineGateCoverage.
v1.0.02026-09-28
Переезд на @feugene/granum 1.0 и первый мажор пакета.
Публичная поверхность не менялась — ломающий тут сам конвейер: peer-зависимость
уезжает с @feugene/unocss-preset-granular на @feugene/granum
(>=1.0.0 <2.0.0), а приложение переходит с uno.config.ts на
granum.config.ts. Версия выровнена с ядром: @feugene/granularity 1.0.0.
Перед обновлением стоит прочитать руководство по переезду в granum — в частности про каскадные слои и сброс браузерных стилей, который теперь нужно импортировать в слой.
Changed
- The optional peer is
@feugene/granum>=0.4.0 <1.0.0. The kit’s gates do not depend on the engine vocabulary, but the range moved with the others: diverged ranges would leave a consumer with an uninstallable set. - The optional peer changed:
@feugene/granum>=0.2.0 <1.0.0instead of@feugene/unocss-preset-granular. The registry gate learns the parts of a composite component from@feugene/granum/codegen(collectGranumSubcomponents); it is still imported lazily and only insidedefineRegistryGate, so the other eight factories work without it. defineRegistryGatechecks the granum shape of a package. Instead of assertions about a generated block of vite entries there are three new ones: component entries are not maintained by hand invite.config.ts(granumProvider({,engine: miniEngine(), not a single component-entry marker), the manifest is exported as./granum.manifest.jsonright after".", and the provider registry arrives ascomponentConfigs.defineComponentTokensGatealso looks intosrc/components/shared/. Helpers shared by several components live there, and without this their tokens would look declared into the void.
Earlier versions
The bodies of these releases are not shown: the full feed weighs more than a page is allowed to. The file in the repository is always complete.
v0.10.02026-08-31v0.9.02026-08-31v0.8.12026-08-27v0.8.02026-08-27v0.7.42026-08-25v0.7.32026-08-23v0.7.22026-08-23v0.7.12026-08-23v0.7.02026-08-23v0.6.02026-08-22v0.5.02026-08-22v0.4.02026-08-20v0.3.02026-08-19v0.2.02026-08-19v0.1.02026-08-15