dify/web/app/components/workflow/nodes/loop/utils.ts
Stephen Zhou a84c2d36a3
style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

175 lines
5.2 KiB
TypeScript

import { VarType } from '@/app/components/workflow/types'
import { ComparisonOperator } from './types'
export const isEmptyRelatedOperator = (operator: ComparisonOperator) => {
return [
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
ComparisonOperator.isNull,
ComparisonOperator.isNotNull,
ComparisonOperator.exists,
ComparisonOperator.notExists,
].includes(operator)
}
const notTranslateKey = [
ComparisonOperator.equal,
ComparisonOperator.notEqual,
ComparisonOperator.largerThan,
ComparisonOperator.largerThanOrEqual,
ComparisonOperator.lessThan,
ComparisonOperator.lessThanOrEqual,
] as const
type NotTranslateOperator = (typeof notTranslateKey)[number]
type TranslatableComparisonOperator = Exclude<ComparisonOperator, NotTranslateOperator>
export function isComparisonOperatorNeedTranslate(
operator: ComparisonOperator,
): operator is TranslatableComparisonOperator
export function isComparisonOperatorNeedTranslate(
operator?: ComparisonOperator,
): operator is TranslatableComparisonOperator
export function isComparisonOperatorNeedTranslate(
operator?: ComparisonOperator,
): operator is TranslatableComparisonOperator {
if (!operator) return false
return !(notTranslateKey as readonly ComparisonOperator[]).includes(operator)
}
export const getOperators = (type?: VarType, file?: { key: string }) => {
const isFile = !!file
if (isFile) {
const { key } = file
switch (key) {
case 'name':
return [
ComparisonOperator.contains,
ComparisonOperator.notContains,
ComparisonOperator.startWith,
ComparisonOperator.endWith,
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
case 'type':
return [ComparisonOperator.in, ComparisonOperator.notIn]
case 'size':
return [
ComparisonOperator.largerThan,
ComparisonOperator.largerThanOrEqual,
ComparisonOperator.lessThan,
ComparisonOperator.lessThanOrEqual,
]
case 'extension':
return [
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.contains,
ComparisonOperator.notContains,
]
case 'mime_type':
return [
ComparisonOperator.contains,
ComparisonOperator.notContains,
ComparisonOperator.startWith,
ComparisonOperator.endWith,
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
case 'transfer_method':
return [ComparisonOperator.in, ComparisonOperator.notIn]
case 'url':
return [
ComparisonOperator.contains,
ComparisonOperator.notContains,
ComparisonOperator.startWith,
ComparisonOperator.endWith,
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
}
return []
}
switch (type) {
case VarType.string:
return [
ComparisonOperator.contains,
ComparisonOperator.notContains,
ComparisonOperator.startWith,
ComparisonOperator.endWith,
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
case VarType.number:
return [
ComparisonOperator.equal,
ComparisonOperator.notEqual,
ComparisonOperator.largerThan,
ComparisonOperator.lessThan,
ComparisonOperator.largerThanOrEqual,
ComparisonOperator.lessThanOrEqual,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
case VarType.boolean:
return [
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
case VarType.object:
return [ComparisonOperator.empty, ComparisonOperator.notEmpty]
case VarType.file:
return [ComparisonOperator.exists, ComparisonOperator.notExists]
case VarType.arrayString:
case VarType.arrayNumber:
return [
ComparisonOperator.contains,
ComparisonOperator.notContains,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
case VarType.array:
case VarType.arrayObject:
return [ComparisonOperator.empty, ComparisonOperator.notEmpty]
case VarType.arrayFile:
return [
ComparisonOperator.contains,
ComparisonOperator.notContains,
ComparisonOperator.allOf,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
default:
return [
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
}
}
export const comparisonOperatorNotRequireValue = (operator?: ComparisonOperator) => {
if (!operator) return false
return [
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
ComparisonOperator.isNull,
ComparisonOperator.isNotNull,
ComparisonOperator.exists,
ComparisonOperator.notExists,
].includes(operator)
}