feat: manually mirror opencoze's code from bytedance
Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* Copyright 2025 coze-dev Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { injectable, inject } from 'inversify';
|
||||
import { type FlowNodeEntity } from '@flowgram-adapter/free-layout-editor';
|
||||
import {
|
||||
type ValueExpression,
|
||||
type ValueExpressionDTO,
|
||||
type RefExpression,
|
||||
ValueExpressionType,
|
||||
WorkflowVariableService,
|
||||
variableUtils,
|
||||
} from '@coze-workflow/variable';
|
||||
import { ValueExpression as ValueExpressionUtils } from '@coze-workflow/base';
|
||||
|
||||
import { type ValueExpressionService } from './value-expression-service';
|
||||
|
||||
@injectable()
|
||||
export class ValueExpressionServiceImpl implements ValueExpressionService {
|
||||
@inject(WorkflowVariableService)
|
||||
private readonly variableService: WorkflowVariableService;
|
||||
|
||||
public isValueExpression(value: unknown): boolean {
|
||||
if (value === undefined || value === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ValueExpressionUtils.isExpression(value as ValueExpression);
|
||||
}
|
||||
|
||||
public isValueExpressionDTO(value: unknown): boolean {
|
||||
return (
|
||||
(typeof value === 'object' &&
|
||||
value !== null &&
|
||||
(value as any).value?.type === ValueExpressionType.REF) ||
|
||||
(value as any).value?.type === ValueExpressionType.LITERAL
|
||||
);
|
||||
}
|
||||
|
||||
public isRefExpression(value: unknown): boolean {
|
||||
if (value === undefined || value === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ValueExpressionUtils.isRef(value as ValueExpression);
|
||||
}
|
||||
|
||||
public isLiteralExpression(value: unknown): boolean {
|
||||
if (value === undefined || value === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ValueExpressionUtils.isLiteral(value as ValueExpression);
|
||||
}
|
||||
|
||||
// 将 ValueExpression 转换为 ValueExpressionDTO
|
||||
public toDTO(
|
||||
valueExpression?: ValueExpression,
|
||||
currentNode?: FlowNodeEntity,
|
||||
): ValueExpressionDTO | undefined {
|
||||
if (!valueExpression) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const dto = variableUtils.valueExpressionToDTO(
|
||||
valueExpression,
|
||||
this.variableService,
|
||||
{ node: currentNode },
|
||||
);
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
// 从 ValueExpressionDTO 生成 ValueExpression
|
||||
public toVO(dto?: ValueExpressionDTO): ValueExpression | undefined {
|
||||
if (!dto) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const vo = variableUtils.valueExpressionToVO(dto, this.variableService);
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
public isRefExpressionVariableExists(
|
||||
value: RefExpression,
|
||||
node: FlowNodeEntity,
|
||||
): boolean {
|
||||
const variable = this.variableService.getViewVariableByKeyPath(
|
||||
value?.content?.keyPath,
|
||||
{
|
||||
node,
|
||||
},
|
||||
);
|
||||
|
||||
const isValidVariable = variable !== null && variable !== undefined;
|
||||
|
||||
return isValidVariable;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user