mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
refactor: better typing for tool icons
This commit is contained in:
@@ -180,12 +180,19 @@ round-семантика `clampByte` и trunc-семантика `clampInt` со
|
||||
- `executor.ts` `as unknown as WorkerLike` оставлен намеренно: несовместимость
|
||||
`onerror` (ErrorEvent vs Event) в типах lib.dom; добавлен комментарий-причина.
|
||||
|
||||
### L5. Хардкод slug-ов вне registry
|
||||
### L5. Хардкод slug-ов вне registry — СДЕЛАНО (2026-10)
|
||||
|
||||
`tool-icons.ts:54-142` — карта slug→icon без типизации по slug-union
|
||||
(переименование slug ломает иконки молча); `kit/+page.svelte:40` — захардкожены
|
||||
`["linear-gradient-png","resize-png","quantize-png"]` (kit — витрина, не
|
||||
production).
|
||||
`Page` стал readonly, группы `registry/pages/*` —
|
||||
`as const satisfies readonly Page[]`; в `registry/index.ts` добавлен union
|
||||
`PageSlug`. `TOOL_ICONS` типизирован `Record<PageSlug, IconComponent>` —
|
||||
переименование или удаление страницы теперь ломает компиляцию, а не падает
|
||||
молча. Чтение с внешней строкой — через аксессор `toolIcon(slug)`. Попутно
|
||||
найдены и удалены 9 мёртвых ключей иконок (страницы уже не существуют:
|
||||
`png-info`, `jpg-to-png`, `webp-to-png`, `gif-to-png`, `bmp-to-png`,
|
||||
`ico-to-png`, `compress-png`, `reduce-to-size-png`, `watermark-image-png`).
|
||||
Добавлен runtime-тест `web/src/lib/tool-icons.test.ts` (оба направления: сироты
|
||||
и страницы без иконки). Хардкод в `kit/+page.svelte` оставлен — витрина, не
|
||||
production.
|
||||
|
||||
### L6. Дублирование CSS-значения превью-тайла — СДЕЛАНО (2026-10)
|
||||
|
||||
|
||||
+12
-12
@@ -222,18 +222,18 @@ i18n-подписи → тест в `registry-schema.test.ts`.
|
||||
|
||||
## 7. Точки расширения
|
||||
|
||||
| Задача | Где править |
|
||||
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| Новый инструмент | `registry/tools/<group>.ts` + страница в `registry/pages/<group>.ts` + i18n + тесты (рецепт ниже) |
|
||||
| Новая страница на готовом инструменте | запись `Page` со своим `slug` и текстами; новый код не нужен |
|
||||
| Смена `id` | `registry/tools/*` + ключи `tools.*` в словарях + хардкод id в тестах; адреса, имена файлов, иконки и карта не меняются |
|
||||
| Смена `slug` | `registry/pages/*` + `pages.*` в словарях + `tool-icons.ts` + `docs/tools-map.md` + хардкод slug в тестах и e2e; меняется адрес страницы — операция с SEO-последствиями, не часть обычной задачи |
|
||||
| Новый вид поля | `registry-schema.ts` + контрол + `FIELDS` (раздел 4) |
|
||||
| Новый маршрут/страница | `web/src/routes/**` + ссылка в каталоге |
|
||||
| Новый визуальный элемент | компонент в `components/**` по образцу `ui/` или `layout/` |
|
||||
| Новый дизайн-токен | `web/src/app.css` (только там) + потребитель сразу |
|
||||
| Тяжёлая операция → worker/wasm | `executor/**`, без правок компонентов |
|
||||
| Мультифайловый результат | `result: "files"` + `zip.ts` |
|
||||
| Задача | Где править |
|
||||
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Новый инструмент | `registry/tools/<group>.ts` + страница в `registry/pages/<group>.ts` + i18n + тесты (рецепт ниже) |
|
||||
| Новая страница на готовом инструменте | запись `Page` со своим `slug` и текстами; новый код не нужен |
|
||||
| Смена `id` | `registry/tools/*` + ключи `tools.*` в словарях + хардкод id в тестах; адреса, имена файлов, иконки и карта не меняются |
|
||||
| Смена `slug` | `registry/pages/*` + `pages.*` в словарях + `docs/tools-map.md` + хардкод slug в тестах и e2e; иконки править не нужно — `TOOL_ICONS` типизирован `Record<PageSlug, _>` и ломает компиляцию; меняется адрес страницы — операция с SEO-последствиями, не часть обычной задачи |
|
||||
| Новый вид поля | `registry-schema.ts` + контрол + `FIELDS` (раздел 4) |
|
||||
| Новый маршрут/страница | `web/src/routes/**` + ссылка в каталоге |
|
||||
| Новый визуальный элемент | компонент в `components/**` по образцу `ui/` или `layout/` |
|
||||
| Новый дизайн-токен | `web/src/app.css` (только там) + потребитель сразу |
|
||||
| Тяжёлая операция → worker/wasm | `executor/**`, без правок компонентов |
|
||||
| Мультифайловый результат | `result: "files"` + `zip.ts` |
|
||||
|
||||
## 8. Рецепт: добавить инструмент
|
||||
|
||||
|
||||
@@ -194,6 +194,7 @@
|
||||
|
||||
## Тесты и lint
|
||||
|
||||
- [ ] линтер на deprecated иконки возможен? 'FilePlus2' is deprecated.
|
||||
- [ ] `tseslint.config(...)` deprecated: сигнатура
|
||||
`(...configs: InfiniteDepthConfigWithExtends[]): ConfigArray` помечена
|
||||
устаревшей, нужен переход на `defineConfig` из `eslint/config` (ESLint
|
||||
|
||||
Reference in New Issue
Block a user