codedamnway-runner
v1.0.7
Published
You can execute any programming language with codedamnway-runner in Linux or Docker
Downloads
14
Maintainers
Readme
Note: This package is build especially for Linux environment.
- This library works as a wrapper over the compilers installed in your system.
- It provides APIs to execute programs by spawning child processes.
- It has built in supports for types.
- It can work with
async/await
andpromises
.
Supported Languages
- C
- Cpp
- Java
- JavaScript
- Python
- wython Python for window OS and syntax same as python
Prerequisites
The following should be installed on your machine and be added to the path.
| Language | Software | | ---------------------------------- | :------: | | C | gcc | | C++ | gcc | | Java | jdk | | wython | python | | Python | python | | JavaScript(in node.js environment) | node.js |
The library stores the source files for programs in the home directory in a folder named .codedamnway
. Make sure you have permissions for this folder.
Installation
You can install it by using npm
like below.
npm install codedamnway-rununer
or
yarn add codedamnway-rununer
or
pnpm add codedamnway-rununer
Usage
It have 5 modules each for a language containing namely.
const { c, cpp, node, python, java } = require("codedamnway-runner")
Each module have 2 functions :-
1. runFile
This enables you to run a file and takes filepath as an argument with options and callback as optional arguments.
2. runSource
This enables you to directly execute a source code in a stored in a string. It takes source code as an argument with options and callback as optional arguments.
Examples:-
- Running a cpp source code file.
let resultPromise = cpp.runFile("E:\\abcd.cpp", { stdin: "3\n2 " })
resultPromise
.then((result) => {
console.log(result) //result object
})
.catch((err) => {
console.log(err)
})
- Running a python source code string.
const sourcecode = `print("Hell0 W0rld!")`
let resultPromise = python.runSource(sourcecode)
resultPromise
.then((result) => {
console.log(result)
})
.catch((err) => {
console.log(err)
})
- Working with callback.
You can also use callback by passing it like -
- with options
cpp.runFile("E:\\abcd.cpp", { stdin: "3\n2 " }, (err, result) => {
if (err) {
console.log(err)
} else {
console.log(result)
}
})
- without options
cpp.runFile("E:\\abcd.cpp", (err, result) => {
if (err) {
console.log(err)
} else {
console.log(result)
}
})
- Providing path
// Providing custom path in java
java.runFile(
"E:\\Main.java",
{
compilationPath: "<path to javac>",
executionPath: "<path to java>",
},
(err, result) => console.log(err ? err : result),
)
//I have 2 versions of python installed 2.7 and 3.6. I can use 3.6 using python3
//to run python3 using codedamnway-runner I can do something like
python.runFile(
"/home/projects/scripts/abc.py",
{
executionPath: "python3",
},
(err, result) => console.log(err ? err : result),
)
//If I want to provide custom path of gcc in cpp
cpp.runFile(
"E:\\abc.cpp",
{
compilationPath: "<path to gcc>", // something like C:\\Program Files\\gcc\\bin
},
(err, result) => console.log(err ? err : result),
)
Result
Result is an object with the following keys:-
stdout
<string> - stdout of the program execution. For empty stdout an empty string is returned.stderr
<string> - stderr of the program execution, compilation or if public class name is not found in provided source string(In java). For empty stderr empty string is returned.exitCode
<number> - exit code of the program.errorType
<string|undefined> - It is set to the below values if there is some stderr or in case of a non-zero exitCode.'pre-compile-time'
- Only in case ofjava
. Can be arised due to invalid public class name if usingrunSource
forjava
.'compile-time'
- If some error has occured at the compile time.'run-time'
- If the error has occured at the run time.
cpuUsage
<number> - CPU Time as calculated in microseconds.memoryUsage
<number> - Memory Consumed in Bytes.signal
<string|null> - Signal resulting, if any, resulting from the code execution.
Disclaimer :- We don't gaurantee accuracy of cpuUsage
and memoryUsage
.
Options
API's offer an optional options object which has following keys:-
stdin
<string> - Input/stdin you want to pass to the program.timeout
<number> - timeout for program execution in milliseconds. Default is 3000 milliseconds.compileTimeout
- timeout during compilation for c, cpp, java in milliseconds. Default is 3000 milliseconds. Would be ignored if passed for node or pythoncompilationPath
- path for the compiler for c, cpp and java i.e for gcc and javac respectively. These paths defined by you if provided else defaults would be used.executionPath
- path for the command to execute the program used in java, python, nodejs i.e forjava
,python
andnode
respectively. These paths defined by you if provided else defaults would be used.