fix monaco.

This commit is contained in:
2023-01-12 09:36:13 +08:00
parent 75e6906c16
commit ab5cb8610b
20 changed files with 281 additions and 132 deletions

View File

@@ -189,6 +189,27 @@ export const DEAD_RESULTS = {
output: "黄岩一职",
},
},
Python2: {
encoded: "",
result: {
status: 3,
output: "黄岩一职",
},
},
Golang: {
encoded: "",
result: {
status: 3,
output: "黄岩一职",
},
},
JavaScript: {
encoded: "",
result: {
status: 3,
output: "黄岩一职",
},
},
}
export const LANGUAGE_LABEL = {

View File

@@ -49,3 +49,13 @@ export function submissionTimeFormat(time: number) {
if (time === undefined) return "--"
return time + "ms"
}
export function debounce(fn: Function, n = 100) {
let handle: any
return (...args: any[]) => {
if (handle) clearTimeout(handle)
handle = setTimeout(() => {
fn(...args)
}, n)
}
}

59
src/utils/judge.ts Normal file
View File

@@ -0,0 +1,59 @@
import axios from "axios"
import { DEAD_RESULTS } from "./constants"
import { Code } from "./types"
const http = axios.create({ baseURL: "https://judge0api.hyyz.izhai.net" })
function encode(str: string) {
return btoa(unescape(encodeURIComponent(str || "")))
}
function decode(bytes: string) {
let escaped = escape(atob(bytes || ""))
try {
return decodeURIComponent(escaped)
} catch (e) {
return unescape(escaped)
}
}
export async function createTestSubmission(code: Code, input: string) {
const encodedCode = encode(code.value)
if (encodedCode === DEAD_RESULTS[code.language].encoded) {
return DEAD_RESULTS[code.language].result
} else {
const id = {
C: 50,
"C++": 54,
Java: 62,
Golang: 60,
JavaScript: 63,
Python2: 70,
Python3: 71,
}[code.language]
let compilerOptions = ""
if (id === 50) compilerOptions = "-lm" // 解决 GCC 的链接问题
const payload = {
source_code: encodedCode,
language_id: id,
stdin: encode(input),
redirect_stderr_to_stdout: true,
compiler_options: compilerOptions,
}
try {
const response = await http.post("/submissions", payload, {
params: { base64_encoded: true, wait: true },
})
const data = response.data
return {
status: data.status && data.status.id,
output: [decode(data.compile_output), decode(data.stdout)]
.join("\n")
.trim(),
}
} catch (e) {
console.error(e)
}
}
}