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 +};
1 +{
2 + "compilerOptions": {
3 + /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 +
5 + /* Projects */
6 + // "incremental": true, /* Enable incremental compilation */
7 + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8 + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
9 + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
10 + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11 + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12 +
13 + /* Language and Environment */
14 + "target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
15 + "lib": ["es6","dom"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16 + // "jsx": "preserve", /* Specify what JSX code is generated. */
17 + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
18 + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
19 + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
20 + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
21 + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
22 + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
23 + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
24 + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
25 +
26 + /* Modules */
27 + "module": "commonjs", /* Specify what module code is generated. */
28 + "rootDir": "src", /* Specify the root folder within your source files. */
29 + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
30 + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
31 + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
32 + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
33 + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
34 + // "types": [], /* Specify type package names to be included without being referenced in a source file. */
35 + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
36 + "resolveJsonModule": true, /* Enable importing .json files */
37 + // "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
38 +
39 + /* JavaScript Support */
40 + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
41 + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
42 + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
43 +
44 + /* Emit */
45 + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
46 + // "declarationMap": true, /* Create sourcemaps for d.ts files. */
47 + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
48 + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
49 + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
50 + "outDir": "lib", /* Specify an output folder for all emitted files. */
51 + // "removeComments": true, /* Disable emitting comments. */
52 + // "noEmit": true, /* Disable emitting files from a compilation. */
53 + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
54 + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
55 + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
56 + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
57 + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
58 + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
59 + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
60 + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
61 + // "newLine": "crlf", /* Set the newline character for emitting files. */
62 + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
63 + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
64 + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
65 + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
66 + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
67 +
68 + /* Interop Constraints */
69 + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
70 + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
71 + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
72 + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
73 + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
74 +
75 + /* Type Checking */
76 + "strict": true, /* Enable all strict type-checking options. */
77 + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
78 + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
79 + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
80 + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
81 + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
82 + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
83 + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
84 + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
85 + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
86 + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
87 + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
88 + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
89 + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
90 + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
91 + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
92 + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
93 + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
94 + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
95 +
96 + /* Completeness */
97 + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
98 + "skipLibCheck": true /* Skip type checking all .d.ts files. */
99 + }
100 +}
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>