1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
#ifndef CLNODEJS_H
#define CLNODEJS_H
#include "asyncprocess.h"
#include "cl_command_event.h"
#include "codelite_exports.h"
#include <unordered_map>
#include <wx/event.h>
#include <wx/filename.h>
#include <wx/process.h>
#include <wx/string.h>
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_SDK, wxEVT_NODE_COMMAND_TERMINATED, clProcessEvent);
class WXDLLIMPEXP_SDK clNodeJS : public wxEvtHandler
{
protected:
class ProcessData
{
protected:
wxFileName filename;
wxString output;
wxString uid;
wxEvtHandler* sink = nullptr;
public:
ProcessData() {}
virtual ~ProcessData() {}
void SetFilename(const wxFileName& filename) { this->filename = filename; }
void SetOutput(const wxString& output) { this->output = output; }
const wxFileName& GetFilename() const { return filename; }
const wxString& GetOutput() const { return output; }
wxString& GetOutput() { return output; }
void SetUid(const wxString& uid) { this->uid = uid; }
const wxString& GetUid() const { return this->uid; }
wxString& GetUid() { return this->uid; }
void SetSink(wxEvtHandler* sink) { this->sink = sink; }
wxEvtHandler* GetSink() const { return sink; }
};
protected:
bool m_initialised = false;
wxFileName m_npm;
wxFileName m_node;
std::unordered_map<IProcess*, ProcessData> m_processes;
protected:
void OnProcessOutput(clProcessEvent& event);
void OnProcessTerminated(clProcessEvent& event);
void ProcessLintOuput(const wxFileName& fn, const wxString& output);
private:
clNodeJS();
void BindEvents();
void UnBindEvents();
public:
static clNodeJS& Get();
virtual ~clNodeJS();
/**
* @brief execute NodeJS script. Return the wxProcess executed
*/
wxProcess* RunScript(const wxArrayString& argv, const wxString& workingDirectory = "",
size_t execFlags = wxEXEC_ASYNC | wxEXEC_MAKE_GROUP_LEADER | wxEXEC_HIDE_CONSOLE);
/**
* @brief initialise this class by finding all the binaries required
*/
bool Initialise(const wxArrayString& hints = {});
/**
* @brief terminate this instance
*/
void Shutdown();
/**
* @brief install an npm package
*/
bool NpmInstall(const wxString& package, const wxString& workingDirectory, const wxString& args,
wxEvtHandler* sink = nullptr, const wxString& uid = "");
/**
* @brief install package without user interference
*/
bool NpmSilentInstall(const wxString& package, const wxString& workingDirectory, const wxString& args,
wxEvtHandler* sink = nullptr, const wxString& uid = "");
/**
* @brief run npm init in a directory
*/
bool NpmInit(const wxString& workingDirectory, wxEvtHandler* sink = nullptr);
/**
* @brief lint file. The error are reported in the output view
*/
void LintFile(const wxFileName& filename);
bool IsInitialised() const { return m_initialised; }
const wxFileName& GetNode() const { return m_node; }
const wxFileName& GetNpm() const { return m_npm; }
};
#endif // CLNODEJS_H
|