mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 10:53:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			180 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { ComparisonOperator } from './types'
 | |
| import { VarType } from '@/app/components/workflow/types'
 | |
| import type { Branch } from '@/app/components/workflow/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,
 | |
| ]
 | |
| 
 | |
| export const isComparisonOperatorNeedTranslate = (operator?: ComparisonOperator) => {
 | |
|   if (!operator)
 | |
|     return false
 | |
|   return !notTranslateKey.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.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)
 | |
| }
 | |
| 
 | |
| export const branchNameCorrect = (branches: Branch[]) => {
 | |
|   const branchLength = branches.length
 | |
|   if (branchLength < 2)
 | |
|     throw new Error('if-else node branch number must than 2')
 | |
| 
 | |
|   if (branchLength === 2) {
 | |
|     return branches.map((branch) => {
 | |
|       return {
 | |
|         ...branch,
 | |
|         name: branch.id === 'false' ? 'ELSE' : 'IF',
 | |
|       }
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   return branches.map((branch, index) => {
 | |
|     return {
 | |
|       ...branch,
 | |
|       name: branch.id === 'false' ? 'ELSE' : `CASE ${index + 1}`,
 | |
|     }
 | |
|   })
 | |
| }
 | 
