| 
					
				 | 
			
			
				@@ -2,7 +2,9 @@ import os 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from typing import Optional, Union, cast 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.helper.code_executor.code_executor import CodeExecutionException, CodeExecutor, CodeLanguage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from core.model_runtime.utils.encoders import jsonable_encoder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.helper.code_executor.code_node_provider import CodeNodeProvider 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.helper.code_executor.javascript.javascript_code_provider import JavascriptCodeProvider 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.helper.code_executor.python3.python3_code_provider import Python3CodeProvider 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.workflow.entities.node_entities import NodeRunResult, NodeType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.workflow.entities.variable_pool import VariablePool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.workflow.nodes.base_node import BaseNode 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -18,16 +20,6 @@ MAX_STRING_ARRAY_LENGTH = int(os.environ.get('CODE_MAX_STRING_ARRAY_LENGTH', '30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MAX_OBJECT_ARRAY_LENGTH = int(os.environ.get('CODE_MAX_OBJECT_ARRAY_LENGTH', '30')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MAX_NUMBER_ARRAY_LENGTH = int(os.environ.get('CODE_MAX_NUMBER_ARRAY_LENGTH', '1000')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-JAVASCRIPT_DEFAULT_CODE = """function main({arg1, arg2}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        result: arg1 + arg2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-PYTHON_DEFAULT_CODE = """def main(arg1: int, arg2: int) -> dict: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        "result": arg1 + arg2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class CodeNode(BaseNode): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     _node_data_cls = CodeNodeData 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -40,58 +32,15 @@ class CodeNode(BaseNode): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         :param filters: filter by node config parameters. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         :return: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if filters and filters.get("code_language") == CodeLanguage.JAVASCRIPT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "type": "code", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "config": { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    "variables": [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            "variable": "arg1", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            "value_selector": [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            "variable": "arg2", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            "value_selector": [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    "code_language": CodeLanguage.JAVASCRIPT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    "code": JAVASCRIPT_DEFAULT_CODE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    "outputs": { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "result": { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            "type": "string", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            "children": None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "available_dependencies": [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        code_language = CodeLanguage.PYTHON3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if filters: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            code_language = (filters.get("code_language", CodeLanguage.PYTHON3)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "type": "code", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "config": { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "variables": [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "variable": "arg1", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "value_selector": [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "variable": "arg2", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "value_selector": [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "code_language": CodeLanguage.PYTHON3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "code": PYTHON_DEFAULT_CODE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "outputs": { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    "result": { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "type": "string", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        "children": None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "dependencies": [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "available_dependencies": jsonable_encoder(CodeExecutor.list_dependencies('python3')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        providers: list[type[CodeNodeProvider]] = [Python3CodeProvider, JavascriptCodeProvider] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        code_provider: type[CodeNodeProvider] = next(p for p in providers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                     if p.is_accept_language(code_language)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return code_provider.get_default_config() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def _run(self, variable_pool: VariablePool) -> NodeRunResult: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 |