11import { MutexInterface } from "async-mutex" ;
22import { ReplOutput , SyntaxStatus , ReplCommand } from "./repl" ;
3- import { PyodideProvider , usePyodide } from "./python/runtime" ;
4- import { RubyProvider , useRuby } from "./ruby/runtime" ;
53import { useWandbox , WandboxProvider } from "./wandbox/runtime" ;
6- import { JavaScriptProvider , useJavaScript } from "./javascript/runtime" ;
74import { AceLang } from "./editor" ;
85import { ReactNode } from "react" ;
6+ import { PyodideContext , usePyodide } from "./worker/pyodide" ;
7+ import { RubyContext , useRuby } from "./worker/ruby" ;
8+ import { JSEvalContext , useJSEval } from "./worker/jsEval" ;
9+ import { WorkerProvider } from "./worker/runtime" ;
910
1011/**
1112 * Common runtime context interface for different languages
@@ -23,7 +24,7 @@ export interface RuntimeContext {
2324 splitReplExamples ?: ( content : string ) => ReplCommand [ ] ;
2425 // file
2526 runFiles : ( filenames : string [ ] ) => Promise < ReplOutput [ ] > ;
26- getCommandlineStr : ( filenames : string [ ] ) => string ;
27+ getCommandlineStr ? : ( filenames : string [ ] ) => string ;
2728}
2829export interface LangConstants {
2930 tabSize : number ;
@@ -58,32 +59,32 @@ export function useRuntime(language: RuntimeLang): RuntimeContext {
5859 // すべての言語のcontextをインスタンス化
5960 const pyodide = usePyodide ( ) ;
6061 const ruby = useRuby ( ) ;
62+ const jsEval = useJSEval ( ) ;
6163 const wandboxCpp = useWandbox ( "cpp" ) ;
62- const javascript = useJavaScript ( ) ;
6364
6465 switch ( language ) {
6566 case "python" :
6667 return pyodide ;
6768 case "ruby" :
6869 return ruby ;
70+ case "javascript" :
71+ return jsEval ;
6972 case "cpp" :
7073 return wandboxCpp ;
71- case "javascript" :
72- return javascript ;
7374 default :
7475 language satisfies never ;
7576 throw new Error ( `Runtime not implemented for language: ${ language } ` ) ;
7677 }
7778}
7879export function RuntimeProvider ( { children } : { children : ReactNode } ) {
7980 return (
80- < PyodideProvider >
81- < RubyProvider >
82- < WandboxProvider >
83- < JavaScriptProvider > { children } </ JavaScriptProvider >
84- </ WandboxProvider >
85- </ RubyProvider >
86- </ PyodideProvider >
81+ < WorkerProvider context = { PyodideContext } script = "/pyodide.worker.js" >
82+ < WorkerProvider context = { RubyContext } script = "/ruby.worker.js" >
83+ < WorkerProvider context = { JSEvalContext } script = "/javascript.worker.js" >
84+ < WandboxProvider > { children } </ WandboxProvider >
85+ </ WorkerProvider >
86+ </ WorkerProvider >
87+ </ WorkerProvider >
8788 ) ;
8889}
8990
0 commit comments