-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
129 lines (90 loc) · 3.43 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const express = require('express');
const assert = require("assert");
const cors = require('cors');
const handlebars = require('express-handlebars');
const { createTempFileWithContent, readTsFiles} = require('./parse');
const { loadExercise } = require('./load')
const { TSProcessor } = require('./classes/ts_processor')
const {runMochaTests} = require("./runMocha");
const {join} = require("node:path");
const app = express();
const port = 10000;
app.use(cors());
app.use(express.json());
app.use(express.text({ type: 'text/plain' })); // Чтобы парсить запросы с типом content-type text/plain
app.use(express.static('public'));
app.engine('handlebars', handlebars.engine()); // or just handlebars()
app.set('view engine', 'handlebars');
app.set('views', './views'); // Make sure this path is correct
// test 2
app.get('/ts/:taskID', async (req, res) => {
try {
const exerciseData = await loadExercise(req.params.taskID)
res.sendFile('typescript.html', { root: join(__dirname, 'views') }); // Relative path
} catch (error) {
res.status(500).json({"error": "Cannot load exercise data. Please contact server administrator"})
}
});
app.get('/load/:taskID', async (req, res) => {
try {
const data = await loadExercise(req.params.taskID)
res.json(data)
} catch {
res.json({"error": "Cannot load exercise data. Please contact server administrator"})
res.status(500)
}
})
// DEPRECATED
app.post('/validate', (req, res) => {
const requestData = req.body;
const processor = new TSProcessor(requestData["main.ts"])
processor.validate()
res.setHeader('Content-Type', 'application/json')
res.json(processor.errors);
})
// DEPRECATED
app.post('/process', (req, res) => {
const requestData = req.body;
const processor = new TSProcessor(requestData["main.ts"])
processor.process()
res.setHeader('Content-Type', 'application/json')
res.json({"main.js": processor.result});
})
// DEPRECATED
app.post('/parse', (req, res) => {
const files = req.body;
const result = {};
for (const [filename, filecontent] of Object.entries(files)) {
const tempFilePath = createTempFileWithContent(filecontent);
result[filename] = readTsFiles([tempFilePath])
}
res.setHeader('Content-Type', 'application/json')
res.json(result);
});
app.post('/check/ts', (req, res) => {
let result = {};
let metadata = {};
let errors = []
const requestData = req.body;
const mainTsContent = requestData["main.ts"];
// Здесь валидируем код
const processor = new TSProcessor(mainTsContent)
processor.validate()
errors = processor.errors
// Здесь вытаскиваем результат и ошибки
if (errors.length === 0) { // Only process if validation passes
processor.process();
result = { "main.js": processor.result };
}
// Здесь парсим – вытаскиваем структуру
const files = req.body;
for (const [filename, filecontent] of Object.entries(files)) {
const tempFilePath = createTempFileWithContent(filecontent);
metadata[filename] = readTsFiles([tempFilePath])
}
res.setHeader('Content-Type', 'application/json');
res.json({ errors: errors, result: result, metadata: metadata });
});
app.listen(port, () => {
console.log(`Server running on http://localhost:${port}`);
});