From 8b2172c39aa9cd41118b18d0a7028b4f2752cb8a Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Sat, 10 Oct 2026 10:49:42 +0500 Subject: [PATCH] fix: update field spec types --- docs/architecture-audit-2026-10.md | 18 ++++-- .../fields/schema/CheckboxControl.svelte | 6 +- .../fields/schema/ColorControl.svelte | 6 +- .../fields/schema/ColorPairControl.svelte | 10 +--- .../fields/schema/ColorsControl.svelte | 10 +--- .../fields/schema/DimensionField.svelte | 5 +- .../fields/schema/FontStyleControl.svelte | 10 +--- .../fields/schema/GradientControl.svelte | 6 +- .../fields/schema/OffsetControl.svelte | 6 +- .../fields/schema/PlateControl.svelte | 6 +- .../fields/schema/PositionControl.svelte | 10 +--- .../fields/schema/RangeControl.svelte | 6 +- .../fields/schema/SegmentedControl.svelte | 6 +- .../fields/schema/SelectControl.svelte | 6 +- .../fields/schema/TextControl.svelte | 6 +- .../lib/components/schema/SchemaFields.svelte | 57 ++++++++++++++----- .../components/schema/SchemaToolView.svelte | 24 ++++---- .../schema/schema-tool-state.svelte.ts | 6 +- web/src/lib/executor/executor.ts | 2 + 19 files changed, 112 insertions(+), 94 deletions(-) diff --git a/docs/architecture-audit-2026-10.md b/docs/architecture-audit-2026-10.md index 77a2752..63358c2 100644 --- a/docs/architecture-audit-2026-10.md +++ b/docs/architecture-audit-2026-10.md @@ -166,13 +166,19 @@ round-семантика `clampByte` и trunc-семантика `clampInt` со `$bindable`, пропс `ontogglealign` удалён; `SchemaToolView` передаёт `bind:aligned`. -### L4. Непроверяемые `as`-касты схемы +### L4. Непроверяемые `as`-касты схемы — СДЕЛАНО (2026-10) -`SchemaToolView.svelte:97,211` -(`tool.schema as ToolSchema>`) и паттерн `spec as XSpec` -в 14+ field-компонентах (`CheckboxControl.svelte:13`, `ColorControl.svelte:14`, -`GradientControl.svelte:16` и др.); двойной каст `as unknown as WorkerLike` в -`executor/executor.ts:35`. Касты отключают проверку соответствия spec kind'у. +- 14 field-контролов: `spec: FieldSpec` + `spec as XSpec` → точный тип спеки в + пропсах (`spec: ColorSpec` и т.д.); каст собран в одном месте — типизированный + хелпер `controlFor()` в `SchemaFields.svelte` (ключ kind в `FIELDS` + гарантирует подтип спеки по `fieldSpecs`). +- `SchemaToolView`/`toolSchemaOf`: касты + `as ToolSchema>` удалены — дефолт дженерика + `Tool

>` уже даёт нужный тип; `undefined` + обрабатывается гардами (`{#if stepSchema}` в разметке, `dims && stepSchema` в + `setStepValue`). +- `executor.ts` `as unknown as WorkerLike` оставлен намеренно: несовместимость + `onerror` (ErrorEvent vs Event) в типах lib.dom; добавлен комментарий-причина. ### L5. Хардкод slug-ов вне registry diff --git a/web/src/lib/components/fields/schema/CheckboxControl.svelte b/web/src/lib/components/fields/schema/CheckboxControl.svelte index 1e4f99a..b42ffa2 100644 --- a/web/src/lib/components/fields/schema/CheckboxControl.svelte +++ b/web/src/lib/components/fields/schema/CheckboxControl.svelte @@ -1,16 +1,16 @@ diff --git a/web/src/lib/components/fields/schema/ColorPairControl.svelte b/web/src/lib/components/fields/schema/ColorPairControl.svelte index 43ae765..9ae9b8c 100644 --- a/web/src/lib/components/fields/schema/ColorPairControl.svelte +++ b/web/src/lib/components/fields/schema/ColorPairControl.svelte @@ -1,22 +1,18 @@ diff --git a/web/src/lib/components/schema/SchemaFields.svelte b/web/src/lib/components/schema/SchemaFields.svelte index f1f5316..93cd3e7 100644 --- a/web/src/lib/components/schema/SchemaFields.svelte +++ b/web/src/lib/components/schema/SchemaFields.svelte @@ -1,8 +1,23 @@