mirror of
https://github.com/langgenius/dify.git
synced 2026-02-03 17:41:35 +08:00
Some checks are pending
autofix.ci / autofix (push) Waiting to run
Build and Push API & Web / build (api, DIFY_API_IMAGE_NAME, linux/amd64, build-api-amd64) (push) Waiting to run
Build and Push API & Web / build (api, DIFY_API_IMAGE_NAME, linux/arm64, build-api-arm64) (push) Waiting to run
Build and Push API & Web / build (web, DIFY_WEB_IMAGE_NAME, linux/amd64, build-web-amd64) (push) Waiting to run
Build and Push API & Web / build (web, DIFY_WEB_IMAGE_NAME, linux/arm64, build-web-arm64) (push) Waiting to run
Build and Push API & Web / create-manifest (api, DIFY_API_IMAGE_NAME, merge-api-images) (push) Blocked by required conditions
Build and Push API & Web / create-manifest (web, DIFY_WEB_IMAGE_NAME, merge-web-images) (push) Blocked by required conditions
Main CI Pipeline / Check Changed Files (push) Waiting to run
Main CI Pipeline / API Tests (push) Blocked by required conditions
Main CI Pipeline / Web Tests (push) Blocked by required conditions
Main CI Pipeline / Style Check (push) Waiting to run
Main CI Pipeline / VDB Tests (push) Blocked by required conditions
Main CI Pipeline / DB Migration Test (push) Blocked by required conditions
73 lines
2.4 KiB
TypeScript
73 lines
2.4 KiB
TypeScript
import type { InputForm } from './type'
|
|
import { getProcessedFiles } from '@/app/components/base/file-uploader/utils'
|
|
import { InputVarType } from '@/app/components/workflow/types'
|
|
|
|
export const processOpeningStatement = (openingStatement: string, inputs: Record<string, any>, inputsForm: InputForm[]) => {
|
|
if (!openingStatement)
|
|
return openingStatement
|
|
|
|
return openingStatement.replace(/\{\{([^}]+)\}\}/g, (match, key) => {
|
|
const name = inputs[key]
|
|
if (name) { // has set value
|
|
return name
|
|
}
|
|
|
|
const valueObj = inputsForm.find(v => v.variable === key)
|
|
return valueObj ? `{{${valueObj.label}}}` : match
|
|
})
|
|
}
|
|
|
|
export const processInputFileFromServer = (fileItem: Record<string, any>) => {
|
|
return {
|
|
type: fileItem.type,
|
|
transfer_method: fileItem.transfer_method,
|
|
url: fileItem.remote_url,
|
|
upload_file_id: fileItem.related_id,
|
|
}
|
|
}
|
|
|
|
export const getProcessedInputs = (inputs: Record<string, any>, inputsForm: InputForm[]) => {
|
|
const processedInputs = { ...inputs }
|
|
|
|
inputsForm.forEach((item) => {
|
|
const inputValue = inputs[item.variable]
|
|
// set boolean type default value
|
|
if (item.type === InputVarType.checkbox) {
|
|
processedInputs[item.variable] = !!inputValue
|
|
return
|
|
}
|
|
|
|
if (inputValue == null)
|
|
return
|
|
|
|
if (item.type === InputVarType.singleFile) {
|
|
if ('transfer_method' in inputValue)
|
|
processedInputs[item.variable] = processInputFileFromServer(inputValue)
|
|
else
|
|
processedInputs[item.variable] = getProcessedFiles([inputValue])[0]
|
|
}
|
|
else if (item.type === InputVarType.multiFiles) {
|
|
if ('transfer_method' in inputValue[0])
|
|
processedInputs[item.variable] = inputValue.map(processInputFileFromServer)
|
|
else
|
|
processedInputs[item.variable] = getProcessedFiles(inputValue)
|
|
}
|
|
else if (item.type === InputVarType.jsonObject) {
|
|
// Prefer sending an object if the user entered valid JSON; otherwise keep the raw string.
|
|
try {
|
|
const v = typeof inputValue === 'string' ? JSON.parse(inputValue) : inputValue
|
|
if (v && typeof v === 'object' && !Array.isArray(v))
|
|
processedInputs[item.variable] = v
|
|
else
|
|
processedInputs[item.variable] = inputValue
|
|
}
|
|
catch {
|
|
// keep original string; backend will parse/validate
|
|
processedInputs[item.variable] = inputValue
|
|
}
|
|
}
|
|
})
|
|
|
|
return processedInputs
|
|
}
|