diff --git a/web/src/lib/components/ToolPage.svelte b/web/src/lib/components/ToolPage.svelte index 7e5cc4d..4a7d78c 100644 --- a/web/src/lib/components/ToolPage.svelte +++ b/web/src/lib/components/ToolPage.svelte @@ -10,6 +10,7 @@ import ToolSearch from './search/ToolSearch.svelte'; import ChainToolBlock from './chain/ChainToolBlock.svelte'; import { createAutoRunner } from '$lib/tools/auto-run'; + import { executeStep } from '$lib/tools/executor'; import ParamsCard from './tool/ParamsCard.svelte'; import ResultCard from './tool/ResultCard.svelte'; import SourceCard from './tool/SourceCard.svelte'; @@ -146,9 +147,8 @@ } else if (isSourceless) { next = await tool.generate!(sanitized); } else { - next = await tool.run!(source!, sanitized); + next = await executeStep(tool, source!, sanitized); } - let nextPreview: PixelImage | null = null; if (tool.preview && source) { try { @@ -173,7 +173,7 @@ continue; } try { - current = await stepTool.run(current, sanitizeParams(stepTool, step.values)); + current = await executeStep(stepTool, current, sanitizeParams(stepTool, step.values)); } catch (e) { const message = e instanceof Error ? e.message : String(e); throw new Error(`Шаг ${i + 1} (${stepTool.title}): ${message}`); diff --git a/web/src/lib/tools/executor.ts b/web/src/lib/tools/executor.ts new file mode 100644 index 0000000..187912c --- /dev/null +++ b/web/src/lib/tools/executor.ts @@ -0,0 +1,16 @@ +import type { PixelImage } from '../core/types'; + +type MaybeRunnable = { + run?: (img: PixelImage, params: Record) => Promise | PixelImage; +}; + +export async function executeStep( + tool: MaybeRunnable, + img: PixelImage, + params: Record +): Promise { + if (!tool.run) { + throw new Error('Этот инструмент не обрабатывает изображения'); + } + return await tool.run(img, params); +}