Tachi67's picture
add code interpreter from open-interpreter
fcdf91d
raw
history blame
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