sungjin

Start Project with File Runner

1 +node_modules
2 +a.out
3 +tmp.c
4 +
This diff could not be displayed because it is too large.
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 +}
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 +});
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 +};
This diff is collapsed. Click to expand it.
File mode changed
1 +<!DOCTYPE html>
2 +<html>
3 + <head>
4 + <link rel="stylesheet" href="css/style.css" />
5 + </head>
6 + <body>
7 + <div class="wrapper">
8 + <div class="header">Code in Web</div>
9 + <h1>My First Heading</h1>
10 + <p>My first paragraph.</p>
11 + </div>
12 + </body>
13 +</html>