##### Node CGI Embedded - run interpreted scripts that support cgi using nodejs

* [x] CGI file execution
    - [x] Run any scripts that support CGI based serving/execution
    - [x] Run multiple CGI executables/ Interpreters in one or multiple applications
    - [x] Embed your own CGI/ Interpreted Language executables
 

##### Node Web Proxy - run web proxies

* [x] Running Proxies
    - [x] Run any host that serves a web app, using proxy 
    - [x] Run proxies for Application (Local / Remote)
    - [x] Supports websocket implementation in web proxies
    - [x] Run multiple proxies + websockets in one or multiple applications
    - [x] Run multiple protocols for proxies using external libraries
    - [] Run multiple protocols for proxies inbuilt


##### Node Processes - Manage web servers, database processes, or other system processes or services

* [x] Manage Processes or Services
    - [x] Allows running and closing process Executables
    - [x] Allows managing Embedding Web Servers, which can run web applications through proxies [Partially done]
    - [x] Allows managing Embedded Database servers [Partially done]
    - [x] Should run smoothly with Unsupported proxy servers/ processes/ services (not widely tested)
* [x] Embedding
    - [x] Multiple web servers in one or multiple applications [Partially done]
    - [x] Multiple databases in one or multiple applications [Partially done]
    - [x] Multiple processes and executables managed in one or multiple applications [Partially done]


# Functionality Details

##### The script should support piping all files of below interpreted languages:

* [x] Python (2.x, 3.x) - `py` (for Python .py extension files. Needed for *nix systems)
* [x] Perl (Version Independent) - `plc`, `pld`, `pl` (for Perl .pl, .plc, .pld extension files)
* [x] PHP (Version Independent) - `php` (for .php extension files)
* [x] Ruby (Version Independent) - `rb` (for Ruby .rb extension files)
* [x] Node.js (Version Independent) - `js` (for Node.js .js extension files)


##### The script should support piping all proxies of above languages and following:

* [x] Jsp (With Tomcat, or any webserver as proxy)
* [x] Aspx (With IIS, Apache, or any webserver as proxy)
* [] Jsp (With Tomcat embedded) [TODO]
* [] Aspx (With Nginx and Apache embedded) [TODO]


##### The script currently allows working with (starting, stopping, restarting) following web servers (directly, shell scripts, and as proxy):

* [x] IIS (Allows Proxy)
* [x] Nginx (Allows Proxy)
* [x] Nginx (Allows Embed)
* [x] Apache HTTPD (Allows Proxy)
* [x] Apache HTTPD (Allows Embed)
* [x] Apache TomCat (Allows Proxy)
* [] Apache TomCat (Allows Embed) [TODO]
* [] Mongoose (Allows Proxy) [PLANNED]
* [] Mongoose (Allows Embed) [PLANNED]
* [] Jetty (Allows Proxy) [PLANNED]
* [] Jetty (Allows Embed) [PLANNED]
* [] Putty (Allows Proxy) [PLANNED]
* [] Putty (Allows Embed) [PLANNED]
* [*] Other Proxy-able local/remote servers


##### The script currently allows working with (starting, stopping, restarting) following databases and processes:

* [x] Mysql
* [x] MongoDB
* [] PgSQL [TODO]
* [] Redis [TODO]
* [x] Other Processes for your application support


##### TODO ITEMS

Add:
- [*] CGI File serving [DONE]
- [*] Proxy local and remote web servers [DONE]
- [*] Proxy supporting websockets [DONE]
- [*] Manual commands [DONE]
- [*] Command line options for all interpretors in config object [DONE]
- [*] Work with any executables/processes [DONE]
- [*] Work with embedding Servers (HTTPD, Tomcat [INPROGRESS], Nginx) Partially done
- [*] Work with embedding Database Servers (MySQL, PgSQL [INPROGRESS], MongoDB) Partially done
- [*] Work with other using generic command process functions and executables [INPROGRESS] Partially done
- [] Improve performance by reducing config parsing time. Consider singletons for non-dynamic configs [TODO]
- [*] Move cgi file serving to be based on processes execute implementation keeping current method of cgi.serve implementation same [DONE]
- [*] Add implementation of phpcgijs into cgijs - cgi.serve(filename, executable, args) without moving current method of implementation [DONE]
- [*] Deprecate phpcgijs in favour of cgijs [INPROGRESS] Migration started
- [*] Consider testing serving of js file as CGI executable like PHP, an option. Considering cgi-node as an option [DONE]
- [*] Consider adding serving CGI file (.cgi) like PHP, an option [DONE]
- [*] Consider adding tracer for errors. Reconsider error handling mechanism [TODO]
- [*] Consider adding inbuilt PHP, Python, Ruby, Perl custom config based development server proxy to package api [INPROGRESS] Partially done
- [] Add middlewares for use with different frameworks for CGIJS CGI Files for all interpreted languages [TODO]
        ** Consider function name require('cgijs').middlewares.file.frameworkname(...arguments...) [TODO]
        ** Concept Credit - npm:http-php
- [] Add common function for creation of proxies (HTTP+WS, UDP, TCP, Socks, gRPC, Sockets) [TODO]
        ** Consider function name require('proxy').init(protocol, config, handlers)
- [] Consider Adding and Differentiating MessagePattern with EventPattern in the next major version [TODO]
        ** Concept Credit - https://docs.nestjs.com/microservices/nats as an example for Pattern differentiator
        ** Check inline docs for .proxy.redirect section after line `redirect: {`
        ** Current proxy file does not differentiate Patterns. The file currently differentiates communication based on just protocols
- [] Consider Dependency Injection into CGIJS - https://github.com/mgechev/injection-js
- [*] Consider adding config parsers support: ini, csv, yaml, dotenv, xml, json [DONE]
- [*] Consider adding concurrency.js in cgijs and phpcgijs [INPROGRESS]
- [*] Consider adding calling functions of python and php (later others) directly from js. Check exposure of objects directly to JS. [TODO]

Modify:
- [*] Make config and options dynamic based on config file for file based demos [DONE]
- [*] Config based serving for file, web (proxy) applications [DONE]
- [*] Add 'other' or 'custom' CGI executable option for unaccomodated Interpreted language support [DONE]
    - [*] IMPORTANT: Remove multiple libraries for httpserver and fix one [DONE]
- [] Tests for Production release version 1.0.0 - file module [INPROGRESS] Partially done
- [*] Tests for Production release version 1.0.0 - process module [INPROGRESS] Partially done
- [*] Tests for Production release version 1.0.0 - proxy module [INPROGRESS] Partially done
- [*] Tests for Production release version 1.0.0 - utils module [INPROGRESS] Partially done
- [] Check and Redo Authentication for proxy connections for VLAN proxies [TODO]
- [] Consider adding inbuilt development server management (testing needed) for CGI executables like PHP, Ruby, Python, others [Testing]
- [] Consider support for gRPC for proxy. Consider adding socket's module [TODO] 
- [] Consider support for UDP for proxy. Consider adding socket's module [INPROGRESS] Partially done [Packages considered - udp-proxy**, http2udp, node-udp-forwarder, udp-messaging]
- [] Consider adding support for Socks proxy. Plus support for Socks to http proxy [INPROGRESS] Partially done (Packages Considered: socks**, http-proxy-to-socks)
- [*] Consider support for Other Protocols for proxy. Consider adding socket's module [DONE]
- [] Consider support for Other Protocols for proxy within package [INPROGRESS]
- [] Test Session management frameworks in PHP, Python, and Java Web Applications in http and https proxies (Memory/ File/ Cache/ Database Sessions) [TODO]
- [] Consider and test bi-directional communication with CGI Mode executables like PHP, Python, Ruby, Perl, etc [TODO]
- [] Add JSDoc compatible typing based documentation
        ** https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html
        ** https://jsdoc.app/tags-type.html
        ** https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler#type-expressions
- [] Consider concurrency for the package https://github.com/mkschreder/node-php/issues/23
- [*] Consider adding support for csv, xml, yaml, ini. [DONE]
- [] Consider @fast-csv/format and @fast-csv/parse


Prioritization and Version Consideration

High Priority, High Effort:
    - [] Test Session management frameworks in PHP, Python, and Java Web Applications in http and https proxies (Memory/ File/ Cache/ Database Sessions) [Testing] (Version 1.2.0)

High Priority, Low Effort:
    - [] Inbuilt development server management (CGI executables like PHP, Ruby, Python, others) [Testing] (Version 1.1.1)
    - [] Consider adding serving CGI file (.cgi) like PHP, an option [TODO] (Version 1.1.1)
    - [] Consider and test bi-directional communication with CGI Mode executables like PHP, Python, Ruby, Perl, etc [Testing]  (Version 1.2.0)

Low Priority, High Effort:
    - [] Putty SSH tunneling (Check usage with Process and Create Proxy) [TODO] (Version 1.2.0)
    - [] Mongoose web server (Check usage with Process and Create Proxy) [TODO]  (Version 1.2.0)
    - [] Consider testing serving of js file as CGI executable like PHP, an option. Considering cgi-node as an option [TODO]  (Version 2.0.0)
    - [] Consider support for Other Protocols for proxy within package [TODO] (Version 2.0.0)
    - [] Consider WASM support
        - "pyodide"
        - "micropython"
        - python-wasm
        - @cowasm/py-cython
        - @cowasm/py-pip , @cowasm/py-setuptools , @cowasm/python-pip
        - "ruby-head-wasm-wasi"
        - "ruby-head-wasm-emscripten"
        - "ruby-wasm-emscripten"
        - @cowasm/lua
        - @php-wasm/node , @php-wasm/web, @php-wasm/xxxx
        - php-wasm
        - @chriskoch/perl-wasm
        - @cgojin/rust-on-browser
        - @chriskoch/cpp-wasm
        - @tybys/cgen
        - @chriskoch/golang-wasm
        - @chriskoch/julia-wasm
        - @chriskoch/ocaml-wasm
        - @chriskoch/lld
        - webr [r-lang]
        - napi API - emnapi, napi-wasm 
        - @napi-rs/wasm-runtime


