Download code_interpreters/languages/javascript.py from aiflows/InterpreterFlowModule: direct link, hf CLI and curl.
- Browser
- Download file 1.74 kB
-
https://huggingface.co/aiflows/InterpreterFlowModule/resolve/f5ba9f9afc5a4b5f9cc00ef80230b60bcc8bd9cc/code_interpreters/languages/javascript.py
- Command line
-
hf download hf://aiflows/InterpreterFlowModule@f5ba9f9afc5a4b5f9cc00ef80230b60bcc8bd9cc/code_interpreters/languages/javascript.py
-
curl -L -o javascript.py https://huggingface.co/aiflows/InterpreterFlowModule/resolve/f5ba9f9afc5a4b5f9cc00ef80230b60bcc8bd9cc/code_interpreters/languages/javascript.py
1.74 kB
| from ..subprocess_code_interpreter import SubprocessCodeInterpreter | |
| import re | |
| class JavaScript(SubprocessCodeInterpreter): | |
| file_extension = "js" | |
| proper_name = "JavaScript" | |
| def __init__(self): | |
| super().__init__() | |
| self.start_cmd = "node -i" | |
| def preprocess_code(self, code): | |
| return preprocess_javascript(code) | |
| def line_postprocessor(self, line): | |
| # Node's interactive REPL outputs a billion things | |
| # So we clean it up: | |
| if "Welcome to Node.js" in line: | |
| return None | |
| if line.strip() in ["undefined", 'Type ".help" for more information.']: | |
| return None | |
| # Remove trailing ">"s | |
| line = re.sub(r'^\s*(>\s*)+', '', line) | |
| return line | |
| def detect_active_line(self, line): | |
| if "## active_line " in line: | |
| return int(line.split("## active_line ")[1].split(" ##")[0]) | |
| return None | |
| def detect_end_of_execution(self, line): | |
| return "## end_of_execution ##" in line | |
| def preprocess_javascript(code): | |
| """ | |
| Add active line markers | |
| Wrap in a try catch | |
| Add end of execution marker | |
| """ | |
| # Split code into lines | |
| lines = code.split("\n") | |
| processed_lines = [] | |
| for i, line in enumerate(lines, 1): | |
| # Add active line print | |
| processed_lines.append(f'console.log("## active_line {i} ##");') | |
| processed_lines.append(line) | |
| # Join lines to form the processed code | |
| processed_code = "\n".join(processed_lines) | |
| # Wrap in a try-catch and add end of execution marker | |
| processed_code = f""" | |
| try {{ | |
| {processed_code} | |
| }} catch (e) {{ | |
| console.log(e); | |
| }} | |
| console.log("## end_of_execution ##"); | |
| """ | |
| return processed_code |