Showing
8 changed files
with
219 additions
and
0 deletions
.gitignore
0 → 100644
package-lock.json
0 → 100644
This diff could not be displayed because it is too large.
package.json
0 → 100644
1 | +{ | ||
2 | + "name": "learn_with_code", | ||
3 | + "version": "1.0.0", | ||
4 | + "description": "", | ||
5 | + "main": "index.js", | ||
6 | + "scripts": { | ||
7 | + "test": "echo \"Error: no test specified\" && exit 1", | ||
8 | + "start": "npm run build:live", | ||
9 | + "build": "tsc -p .", | ||
10 | + "build:live": "nodemon --watch 'src/**/*.ts' --exec \"ts-node\" src/index.ts" | ||
11 | + }, | ||
12 | + "keywords": [], | ||
13 | + "author": "", | ||
14 | + "license": "ISC", | ||
15 | + "devDependencies": { | ||
16 | + "@types/express": "^4.17.13", | ||
17 | + "@types/node": "^16.11.6", | ||
18 | + "nodemon": "^2.0.14", | ||
19 | + "ts-node": "^10.4.0", | ||
20 | + "typescript": "^4.4.4" | ||
21 | + }, | ||
22 | + "dependencies": { | ||
23 | + "express": "^4.17.1" | ||
24 | + } | ||
25 | +} |
src/index.ts
0 → 100644
1 | +const _PORT = 3000; | ||
2 | + | ||
3 | +import * as express from "express"; | ||
4 | +import {Runner} from "./runner"; | ||
5 | + | ||
6 | +const app = express.default(); | ||
7 | + | ||
8 | +app.use(express.json()); | ||
9 | + | ||
10 | +/*RESTful API*/ | ||
11 | + | ||
12 | +app.post("/runcode", function (req, res) { | ||
13 | + var run = new Runner(req); | ||
14 | + run.run(); | ||
15 | + res.send(run.output); | ||
16 | +}); | ||
17 | + | ||
18 | + | ||
19 | + | ||
20 | +app.listen(_PORT, () => { | ||
21 | + console.log("server started at port " + _PORT); | ||
22 | +}); |
src/runner.ts
0 → 100644
1 | +import * as child_process from "child_process"; | ||
2 | +import * as fs from "fs"; | ||
3 | + | ||
4 | +export class Runner { | ||
5 | + type: string; | ||
6 | + input: Array<string>; | ||
7 | + output: Array<string> = []; | ||
8 | + time: Date = new Date(); | ||
9 | + constructor(req: any) { | ||
10 | + this.type = req.body.type; | ||
11 | + this.input = req.body.input; | ||
12 | + fs.writeFileSync("tmp." + this.type, req.body.code); | ||
13 | + } | ||
14 | + run() { | ||
15 | + switch (this.type) { | ||
16 | + case "c": { | ||
17 | + this.c(); | ||
18 | + } | ||
19 | + case "c++": { | ||
20 | + this.cpp(); | ||
21 | + } | ||
22 | + case "js": { | ||
23 | + this.js(); | ||
24 | + } | ||
25 | + case "go": { | ||
26 | + this.go(); | ||
27 | + } | ||
28 | + case "ts": { | ||
29 | + this.ts(); | ||
30 | + } | ||
31 | + } | ||
32 | + } | ||
33 | + c() { | ||
34 | + if ((this.input = [])) { | ||
35 | + const test = child_process.spawnSync("gcc", ["~/OSS/main/tmp.c"], { | ||
36 | + encoding: "utf8", | ||
37 | + shell: true, | ||
38 | + }); | ||
39 | + console.log(test.stderr); | ||
40 | + const result = child_process.spawnSync("~/OSS/main/a.out", { | ||
41 | + encoding: "utf8", | ||
42 | + shell: true, | ||
43 | + }); | ||
44 | + console.log(result.stdout); | ||
45 | + this.output.push(fix(result.stdout)); | ||
46 | + } | ||
47 | + for (let ip of this.input) { | ||
48 | + const test = child_process.spawnSync("gcc", ["~/OSS/main/tmp.c"], { | ||
49 | + encoding: "utf8", | ||
50 | + shell: true, | ||
51 | + }); | ||
52 | + console.log(test.stderr); | ||
53 | + const result = child_process.spawnSync("~/OSS/main/a.out", { | ||
54 | + encoding: "utf8", | ||
55 | + shell: true, | ||
56 | + input: ip, | ||
57 | + }); | ||
58 | + console.log(result.stdout); | ||
59 | + this.output.push(fix(result.stdout)); | ||
60 | + } | ||
61 | + } | ||
62 | + cpp() { | ||
63 | + if (this.input = []) { | ||
64 | + const test = child_process.spawnSync("gcc", ["~/OSS/main/tmp.c"], { | ||
65 | + encoding: "utf8", | ||
66 | + shell: true, | ||
67 | + }); | ||
68 | + console.log(test.stderr); | ||
69 | + const result = child_process.spawnSync("~/OSS/main/a.out", { | ||
70 | + encoding: "utf8", | ||
71 | + shell: true, | ||
72 | + }); | ||
73 | + console.log(result.stdout); | ||
74 | + this.output.push(fix(result.stdout)); | ||
75 | + } | ||
76 | + for (let ip of this.input) { | ||
77 | + const test = child_process.spawnSync("gcc", ["~/OSS/main/tmp.c"], { | ||
78 | + encoding: "utf8", | ||
79 | + shell: true, | ||
80 | + }); | ||
81 | + console.log(test.stderr); | ||
82 | + const result = child_process.spawnSync("~/OSS/main/a.out", { | ||
83 | + encoding: "utf8", | ||
84 | + shell: true, | ||
85 | + input: ip, | ||
86 | + }); | ||
87 | + console.log(result.stdout); | ||
88 | + this.output.push(fix(result.stdout)); | ||
89 | + } | ||
90 | + } | ||
91 | + js() { | ||
92 | + if (this.input = []) { | ||
93 | + const test = child_process.spawnSync("node", ["~/OSS/main/tmp.c"], { | ||
94 | + encoding: "utf8", | ||
95 | + shell: true, | ||
96 | + }); | ||
97 | + console.log(test.stdout); | ||
98 | + this.output.push(fix(test.stdout)); | ||
99 | + } | ||
100 | + for (let ip of this.input) { | ||
101 | + const test = child_process.spawnSync("node", ["~/OSS/main/tmp.c"], { | ||
102 | + encoding: "utf8", | ||
103 | + shell: true, | ||
104 | + input: ip, | ||
105 | + }); | ||
106 | + console.log(test.stdout); | ||
107 | + this.output.push(fix(test.stdout)); | ||
108 | + } | ||
109 | + } | ||
110 | + go() { | ||
111 | + if (this.input = []) { | ||
112 | + const test = child_process.spawnSync("go", ["run", "~/OSS/main/tmp.c"], { | ||
113 | + encoding: "utf8", | ||
114 | + shell: true, | ||
115 | + }); | ||
116 | + console.log(test.stdout); | ||
117 | + this.output.push(fix(test.stdout)); | ||
118 | + } | ||
119 | + for (let ip of this.input) { | ||
120 | + const test = child_process.spawnSync("go", ["run", "~/OSS/main/tmp.c"], { | ||
121 | + encoding: "utf8", | ||
122 | + shell: true, | ||
123 | + input: ip, | ||
124 | + }); | ||
125 | + console.log(test.stdout); | ||
126 | + this.output.push(fix(test.stdout)); | ||
127 | + } | ||
128 | + } | ||
129 | + ts() { | ||
130 | + if (this.input = []) { | ||
131 | + const test = child_process.spawnSync("ts-node", ["run", "~/OSS/main/tmp.c"], { | ||
132 | + encoding: "utf8", | ||
133 | + shell: true, | ||
134 | + }); | ||
135 | + console.log(test.stdout); | ||
136 | + this.output.push(fix(test.stdout)); | ||
137 | + } | ||
138 | + for (let ip of this.input) { | ||
139 | + const test = child_process.spawnSync("ts-node", ["run", "~/OSS/main/tmp.c"], { | ||
140 | + encoding: "utf8", | ||
141 | + shell: true, | ||
142 | + input: ip, | ||
143 | + }); | ||
144 | + console.log(test.stdout); | ||
145 | + this.output.push(fix(test.stdout)); | ||
146 | + } | ||
147 | + } | ||
148 | +} | ||
149 | + | ||
150 | +const fix = (a: any): string => { | ||
151 | + if (typeof a === "string") { | ||
152 | + return a; | ||
153 | + } | ||
154 | + return ""; | ||
155 | +}; |
tsconfig.json
0 → 100644
This diff is collapsed. Click to expand it.
views/css/style.css
0 → 100644
File mode changed
views/index.html
0 → 100644
-
Please register or login to post a comment