Build your own ide with nodejs and reactjs

Build your own ide with nodejs and reactjs

Link:- www.github.com/mnnkhndlwl/compilerXpress

So, build this ide using nodejs and reactjs so let me start by first explaining to you how I implemented functionality to compile and execute Java program with input so here is the code snippet

exports.compileJavaWithInput = function (envData, code, input, fn) {
  var dirname = uuid.createId();
  path = "./codes/" + dirname;

  fs.mkdir(path, 0777, function (err) {
    if (err) console.log(err.toString().red);
    else {
      fs.writeFile(path + "/Main.java", code, function (err) {
        if (err) console.log("ERROR: ".red + err);
        else {
          console.log("INFO: ".green + path + "/Main.java created");
          fs.writeFile(path + "/input.txt", input, function (err) {
            if (err) console.log("ERROR: ".red + err);
            else {
              var command = "cd " + path + " & " + " javac Main.java";
              exec(command, function (error, stdout, stderr) {
                if (error) {
                  console.log(
                    "INFO: ".green +
                      path +
                      "/Main.java contained an error while compiling"
                  );
                  var out = { error: stderr };
                  fn(out);
                } else {
                  console.log("INFO: ".green + "compiled a java file");
                  var command = "cd " + path + " & java Main < input.txt";
                  exec(command, function (error, stdout, stderr) {
                    if (error) {
                      console.log(
                        "INFO: ".green +
                          path +
                          "/Main.java contained an error while executing"
                      );

                      if (
                        error
                          .toString()
                          .indexOf("Error: stdout maxBuffer exceeded.") != -1
                      ) {
                        var out = {
                          error:
                            "Error: stdout maxBuffer exceeded. You might have initialized an infinite loop.",
                        };
                        fn(out);
                      } else {
                        var out = { error: stderr };
                        fn(out);
                      }
                    } else {
                      console.log(
                        "INFO: ".green +
                          path +
                          "/Main.java successfully compiled and executed !"
                      );

                      var out = { output: stdout };
                      fn(out);
                    }
                  });
                }
              });
            }
          });
        }
      });
    }
  });
};

In this code:

  • The function takes four parameters: envData, code, input, and fn.

  • It generates a unique directory name using uuid.createId() and assigns it to the dirname variable.

  • The path variable is set to the directory path where the Java files will be stored.

  • The function creates a directory using fs.mkdir with the specified path and permissions of 0777.

  • It then writes the code (Java source code) to a Main.java file within the directory using fs.writeFile.

  • Additionally, it writes the input to an input.txt file within the directory.

  • The function compiles the Main.java file by executing the command "cd " + path + " & " + " javac Main.java" using exec.

  • If there is an error during the compilation, it logs an error message and calls the fn function with an error object.

  • If the compilation is successful, it executes the Main class with the provided input by executing the command "cd " + path + " & java Main < input.txt" using exec.

  • If there is an error during execution, it logs an error message and calls the fn function with an error object.

  • If execution is successful, it logs a success message, and the fn function is called with an output object containing the program's output.

  • I hope it's clear further you will understand by looking at the repo and if you know the basics of nodejs and react.js then you will have no problem understanding it