
This is a rather large commit that includes all of the following: - React UI with code editor, runtime renderer and input-output panes - Language providers for a sample language and Brainfuck - Implementation of code execution in a web worker - All-at-once unabortable execution of program fully functional
29 lines
743 B
TypeScript
29 lines
743 B
TypeScript
import React from "react";
|
|
import { useMonaco } from "@monaco-editor/react";
|
|
import { MonacoTokensProvider } from "../../engines/types";
|
|
|
|
type ConfigParams = {
|
|
languageId: string;
|
|
tokensProvider?: MonacoTokensProvider;
|
|
};
|
|
|
|
/** Add custom language and relevant providers to Monaco */
|
|
export const useEditorConfig = (params: ConfigParams) => {
|
|
const monaco = useMonaco();
|
|
|
|
React.useEffect(() => {
|
|
if (!monaco) return;
|
|
|
|
// Register language
|
|
monaco.languages.register({ id: params.languageId });
|
|
|
|
// If provided, register token provider for language
|
|
if (params.tokensProvider) {
|
|
monaco.languages.setMonarchTokensProvider(
|
|
params.languageId,
|
|
params.tokensProvider
|
|
);
|
|
}
|
|
}, [monaco]);
|
|
};
|