refactor: заменить shiki на самописный highlighter и обновить архитектуру

- Удалён shiki (9.5→0 МБ), создан regex-токенизатор для html/css/xml
- CLI переведён с аргументов на конфиг-файл svg-sprites.config.ts
- Превью переработано: React-приложение вместо инлайн HTML
- Добавлен футер с названием пакета и ссылкой на репозиторий
- Исправлена загрузка dev-data.js для Vite 8
- Футер прижат к низу, содержимое центрировано
This commit is contained in:
2026-04-22 16:54:35 +03:00
parent aad1c97f50
commit e77e7dfcf1
154 changed files with 9083 additions and 516 deletions

View File

@@ -5,28 +5,35 @@ import { createShapeTransform } from './transforms.js'
import type { SpriteFolder, SpriteMode, TransformOptions } from './types.js'
/** Конфигурация режима для svg-sprite. */
function getModeConfig(mode: SpriteMode, destDir: string) {
function getModeConfig(mode: SpriteMode, destDir: string, name: string) {
return {
dest: destDir,
sprite: `sprite.${mode}.svg`,
sprite: `${name}.sprite.svg`,
example: false,
rootviewbox: false,
}
}
/** Строит массив shape.transform на основе опций. */
function buildShapeTransforms(transform: TransformOptions) {
/** Строит массив shape.transform. */
function buildShapeTransforms(transform: TransformOptions = {}) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const transforms: any[] = ['svgo']
const hasCustomTransform =
transform.removeSize !== false ||
transform.replaceColors !== false ||
transform.addTransition !== false
if (hasCustomTransform) {
transforms.push(createShapeTransform(transform))
}
const transforms: any[] = [
{
svgo: {
plugins: [
{
name: 'preset-default',
params: {
overrides: {
removeViewBox: false,
},
},
},
],
},
},
createShapeTransform(transform),
]
return transforms
}
@@ -41,14 +48,12 @@ export async function compileSprite(
outputDir: string,
transform: TransformOptions = {},
): Promise<string> {
const destDir = path.join(outputDir, folder.name)
const config = {
shape: {
transform: buildShapeTransforms(transform),
},
mode: {
[folder.mode]: getModeConfig(folder.mode, destDir),
[folder.mode]: getModeConfig(folder.mode, outputDir, folder.name),
},
}