/
h0tnanny
/
IotPlatform
Обзор
Документация
Войти
/
h0tnanny
/
IotPlatform
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/workflow/nodes/ConditionNode.ts
76 строк
2 KB
h0tnanny
исправление багов
07 фев 2026, 00:39
07 фев 2026, 00:39
a2638cd
Код
Авторство
О чём код?
import { BaseFunction, ExecutionContext } from '../BaseFunction'; import { Field } from '../../entities/Field'; /** * Оператор сравнения */ export type ComparisonOperator = '==' | '!=' | '>' | '<' | '>=' | '<='; /** * ConditionNode (IfElse) - сравнивает Field и возвращает trueNextId или falseNextId */ export class ConditionNode extends BaseFunction { constructor( id: string, name: string, public readonly fieldName: string, public readonly operator: ComparisonOperator, public readonly compareValue: unknown, public readonly trueNextId: string | null, public readonly falseNextId: string | null ) { super(id, name); } execute(context: ExecutionContext): string | null { const field = context.variableList.get(this.fieldName); if (!field) { return this.falseNextId; } // Резолвим compareValue: если это имя переменной — берём её значение const resolvedValue = this.resolveCompareValue(context); const result = this.compare(field, resolvedValue); const nextNodeId = result ? this.trueNextId : this.falseNextId; return nextNodeId; } /** * Резолвит compareValue: если строка совпадает с именем переменной — возвращает значение переменной, * иначе возвращает compareValue как есть (статическое значение) */ private resolveCompareValue(context: ExecutionContext): unknown { if (typeof this.compareValue === 'string') { const compareField = context.variableList.get(this.compareValue); if (compareField) { return compareField.value; } } return this.compareValue; } /** * Выполняет сравнение значения поля с эталонным значением */ private compare(field: Field, compareValue: unknown): boolean { const fieldValue = field.value; switch (this.operator) { case '==': return fieldValue == compareValue; case '!=': return fieldValue != compareValue; case '>': return Number(fieldValue) > Number(compareValue); case '<': return Number(fieldValue) < Number(compareValue); case '>=': return Number(fieldValue) >= Number(compareValue); case '<=': return Number(fieldValue) <= Number(compareValue); default: return false; } } }