mirror of https://github.com/01-edu/public.git
Merge 36f1c07317
into 2f7977a95a
This commit is contained in:
commit
0338dfad69
|
@ -149,17 +149,27 @@ ${tests.trim()};`.trim()
|
|||
}
|
||||
|
||||
const loadAndSanitizeSolution = async () => {
|
||||
const path = `${solutionPath}/${name}.js`
|
||||
const rawCode = await read(path, "student solution")
|
||||
try {
|
||||
const path = `${solutionPath}/${name}.js`
|
||||
const rawCode = await read(path, "student solution")
|
||||
const sanitizedCode = removeComments(rawCode)
|
||||
|
||||
// this is a very crude and basic removal of comments
|
||||
// since checking code is only use to prevent cheating
|
||||
// it's not that important if it doesn't work 100% of the time.
|
||||
const code = rawCode.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, "").trim()
|
||||
if (code.includes("import")) fatal("import keyword not allowed")
|
||||
return { code, rawCode, path }
|
||||
if (sanitizedCode.includes("import ")) { // space is important as it prevents "imported" or "importance" or other words containing "import"
|
||||
throw new Error("The use of the 'import' keyword is not allowed.")
|
||||
}
|
||||
return { code: sanitizedCode, rawCode, path }
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
|
||||
const removeComments = (code) => {
|
||||
// removes JS single line and multi-line comments only. Not for bash files etc.
|
||||
// for use with multiple file-types, I suggest writing a removeComments function with language-type as input and then handling accordingly
|
||||
return code.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, "").trim()
|
||||
}
|
||||
|
||||
|
||||
const runTests = async ({ url, path, code }) => {
|
||||
const { setup, tests } = await import(url).catch(err =>
|
||||
fatal(`Unable to execute ${name}, error:\n${stackFmt(err, url)}`),
|
||||
|
|
Loading…
Reference in New Issue