Skip to content

Commit 71acf23

Browse files
committed
feat: enhance validation logic to support NodeFunctionObject in parameter checks
1 parent e1ac004 commit 71acf23

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/components/d-flow/function/DFlowFunction.vaildation.hook.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
import { FunctionDefinition } from "./DFlowFunction.view";
2-
import { DataType, GenericType, isRefObject, Value } from "../data-type/DFlowDataType.view";
3-
import { DFlowDataTypeService } from "../data-type/DFlowDataType.service";
4-
import { InspectionSeverity, ValidationResult } from "../../../utils/inspection";
1+
import {FunctionDefinition} from "./DFlowFunction.view";
2+
import {DataType, GenericType, isRefObject, Value} from "../data-type/DFlowDataType.view";
3+
import {DFlowDataTypeService} from "../data-type/DFlowDataType.service";
4+
import {InspectionSeverity, ValidationResult} from "../../../utils/inspection";
55
import {
66
replaceGenericKeysInDataTypeObject,
77
replaceGenericKeysInType,
88
resolveGenericKeys
99
} from "../../../utils/generics";
10+
import {isNodeFunctionObject, NodeFunctionObject} from "../DFlow.view";
11+
import {useReturnType} from "./DFlowFunction.return.hook";
12+
import {useService} from "../../../utils/contextStore";
13+
import {DFlowFunctionReactiveService} from "./DFlowFunction.service";
1014

1115
//TODO need to test alo functions not only values and ref objects
1216

@@ -20,16 +24,16 @@ export const useFunctionValidation = (
2024
values: Value[],
2125
dataTypeService: DFlowDataTypeService
2226
): ValidationResult[] | null => {
27+
const functionService = useService(DFlowFunctionReactiveService)
2328
const genericTypeMap = resolveGenericKeys(func, values, dataTypeService)
2429
const parameters = func.parameters ?? []
2530
const genericKeys = func.genericKeys ?? []
26-
2731
const errors: ValidationResult[] = [];
2832

2933
parameters.forEach((parameter, index) => {
3034
const value = values[index];
3135
const parameterType = parameter.type;
32-
const valueType = dataTypeService.getTypeFromValue(value);
36+
const valueType = isNodeFunctionObject(value as NodeFunctionObject) ? useReturnType(functionService.getFunctionDefinition((value as NodeFunctionObject).function.function_id)!!, (value as NodeFunctionObject).parameters!!.map(p => p.value!!))!! : dataTypeService.getTypeFromValue(value);
3337
const parameterDataType = dataTypeService.getDataType(parameterType);
3438
const valueDataType = dataTypeService.getDataType(valueType);
3539

@@ -44,7 +48,7 @@ export const useFunctionValidation = (
4448

4549
if (isParameterGeneric) {
4650
if (typeof valueType === "object" && valueType && "type" in valueType && parameterDataType) {
47-
if (isRefObject(value)) {
51+
if (isRefObject(value) || isNodeFunctionObject(value as NodeFunctionObject)) {
4852
const resolvedParameterDT = new DataType(
4953
replaceGenericKeysInDataTypeObject(parameterDataType.json, genericTypeMap),
5054
dataTypeService
@@ -77,7 +81,7 @@ export const useFunctionValidation = (
7781
return;
7882
}
7983
if (valueDataType && parameterDataType && parameterDataType.genericKeys && valueDataType.json && parameterDataType.json) {
80-
if (isRefObject(value)) {
84+
if (isRefObject(value) || isNodeFunctionObject(value as NodeFunctionObject)) {
8185
const resolvedParameterDT = new DataType(
8286
replaceGenericKeysInDataTypeObject(parameterDataType.json, genericTypeMap),
8387
dataTypeService
@@ -100,7 +104,7 @@ export const useFunctionValidation = (
100104
// Non-generic parameter validation
101105
if (parameterDataType) {
102106
if (typeof valueType === "object" && valueType && "type" in valueType && parameterDataType) {
103-
if (isRefObject(value)) {
107+
if (isRefObject(value) || isNodeFunctionObject(value as NodeFunctionObject)) {
104108
const resolvedValueDT = new DataType(
105109
replaceGenericKeysInDataTypeObject(valueDataType?.json!, genericTypeMap),
106110
dataTypeService
@@ -118,7 +122,7 @@ export const useFunctionValidation = (
118122
return;
119123
}
120124
if (valueDataType) {
121-
if (isRefObject(value)) {
125+
if (isRefObject(value) || isNodeFunctionObject(value as NodeFunctionObject)) {
122126
isValid = parameterDataType.validateDataType(valueDataType);
123127
if (!isValid) {
124128
errors.push(errorResult(paramLabel, parameterType, value, "Non-generic: Ref Type mismatch"));

0 commit comments

Comments
 (0)