mp-holistic
Version:
si prefigge l'umile compito di aiutare nella creazione di : - un server API REST mediante express - un semplice ORM per Postgres Questo tramite decoratori o classi particolari.
373 lines • 19.4 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MainExpress = void 0;
const express_1 = __importDefault(require("express"));
const cookie_parser_1 = __importDefault(require("cookie-parser"));
const fs_1 = __importDefault(require("fs"));
const http = __importStar(require("http"));
const http_proxy_1 = __importDefault(require("http-proxy"));
const node_cache_1 = __importDefault(require("node-cache"));
const metadata_1 = require("../metadata");
const classe_express_1 = require("./classe.express");
const utility_1 = require("../utility");
const child_process_1 = require("child_process");
const crypto_1 = require("crypto");
class MainExpress {
constructor(path, server, isMultiProcesso) {
if (isMultiProcesso) {
MainExpress.isSottoProcesso = isMultiProcesso;
//this.isMultiProcesso = isMultiProcesso;
}
this.path = path;
this.percorsi = { pathGlobal: "", patheader: "", porta: 0 };
if (server == undefined)
this.serverExpressDecorato = (0, express_1.default)();
else
this.serverExpressDecorato = server;
}
DeterminaIfIsSottoProcesso() {
let sottoprosotto = false;
let porta = this.percorsi.porta;
try {
if (process.argv.length > 2) {
try {
console.log(process.argv[2]);
const substr = String(process.argv[2]).substring(8, undefined);
porta = Number(substr);
MainExpress.portaProcesso = porta;
sottoprosotto = true;
}
catch (error) {
console.log(error);
}
}
else {
return {
porta: undefined,
sottoprosotto: false
};
}
}
catch (error) {
console.log(error);
}
return {
porta: porta,
sottoprosotto: sottoprosotto
};
}
Inizializza(patheader, porta, /* rottaBase: boolean, creaFile?: boolean, */ pathDoveScrivereFile, sottoprocesso) {
var _a;
const isSottoprocesso = this.DeterminaIfIsSottoProcesso();
sottoprocesso = isSottoprocesso.sottoprosotto;
porta = (_a = isSottoprocesso.porta) !== null && _a !== void 0 ? _a : porta;
if (sottoprocesso)
MainExpress.isSottoProcesso = sottoprocesso;
const tmp = (0, metadata_1.GetListaClasseMeta)('nomeMetadataKeyTargetFor_Express', () => { return new classe_express_1.ListaExpressClasse(); });
console.log('');
if (tmp.length > 0) {
this.percorsi.patheader = patheader;
this.percorsi.porta = porta;
const pathGlobal = '/' + this.path;
this.percorsi.pathGlobal = pathGlobal;
(this.serverExpressDecorato).use(express_1.default.json());
(this.serverExpressDecorato).use((0, cookie_parser_1.default)());
tmp.ConfiguraListaRotteApplicazione(this.path, this.percorsi, this.serverExpressDecorato);
this.httpServer = http.createServer(this.serverExpressDecorato);
(0, metadata_1.SalvaListaMetaClasse)('nomeMetadataKeyTargetFor_Express', tmp);
if (pathDoveScrivereFile)
this.ScriviFile(pathDoveScrivereFile);
}
else {
console.log("Attenzione non vi sono rotte e quantaltro.");
}
}
ScriviFile(pathDoveScrivereFile) {
var _a;
try {
const tmp = (0, metadata_1.GetListaClasseMeta)('nomeMetadataKeyTargetFor_Express', () => { return new classe_express_1.ListaExpressClasse(); });
try {
fs_1.default.rmSync(pathDoveScrivereFile + '/FileGenerati_MP/express', { recursive: true });
}
catch (error) {
console.log(error);
}
fs_1.default.mkdirSync(pathDoveScrivereFile + '/FileGenerati_MP/express', { recursive: true });
let ritorno = '';
try {
for (let index = 0; index < tmp.length; index++) {
const classe = tmp[index];
const path = pathDoveScrivereFile + '/FileGenerati_MP/express' + '/api' + '/' + classe.nomeOriginale;
fs_1.default.mkdirSync(path, { recursive: true });
let ritornoClass = '';
if (classe.Istanziatore)
ritornoClass = ritornoClass + '\nIstanziatore : ' + classe.Istanziatore;
if (classe.LogGenerale)
ritornoClass = ritornoClass + '\nLogGenerale : ' + classe.LogGenerale;
if (classe.cacheOptionMemory)
ritornoClass = ritornoClass + '\ncacheOptionMemory : ' + JSON.stringify(classe.cacheOptionMemory);
if (classe.html)
ritornoClass = ritornoClass + '\nhtml : ' + JSON.stringify(classe.html);
if (classe.id)
ritornoClass = ritornoClass + '\nid : ' + classe.id;
if (classe.nome)
ritornoClass = ritornoClass + '\nnome : ' + classe.nome;
if (classe.nomeOriginale)
ritornoClass = ritornoClass + '\nnomeOriginale : ' + classe.nomeOriginale;
if (classe.nomeVariante)
ritornoClass = ritornoClass + '\nnomeVariante : ' + classe.nomeVariante;
if (classe.path)
ritornoClass = ritornoClass + '\npath : ' + classe.path;
if (classe.percorsi)
ritornoClass = ritornoClass + '\npercorsi : ' + JSON.stringify(classe.percorsi);
if (classe.rotte)
ritornoClass = ritornoClass + '\nrotte : ' + classe.rotte;
//fs.writeFileSync(path + '/' + classe.nomeOriginale + '.classe', ritornoClass);
fs_1.default.appendFileSync(path + '/' + classe.nomeOriginale + '.classe', ritornoClass);
ritornoClass = ritornoClass + '\n';
for (let index = 0; index < classe.listaMetodi.length; index++) {
const metodo = classe.listaMetodi[index];
let ritorno = '';
ritorno = ritorno + '' + metodo.PrintStruttura() + '';
ritornoClass = ritornoClass + ritorno + '\n********************\n';
fs_1.default.writeFileSync(path + '/' + metodo.nomeOriginale, ritorno);
}
//fs.writeFileSync(path + '/' + classe.nomeOriginale + '.collezione', ritornoClass);
fs_1.default.appendFileSync(path + '/' + classe.nomeOriginale + '.collezione', ritornoClass);
}
}
catch (error) {
return ritorno;
}
ritorno = '';
return ritorno;
}
catch (error) {
console.log(error);
return (_a = error.message) !== null && _a !== void 0 ? _a : '';
}
}
InizializzaCartellaFileLogProxy() {
try {
/**log proxy */
if (!fs_1.default.existsSync('./LogExpress/LogProxy_' + MainExpress.portaProxy)) {
fs_1.default.mkdirSync('./LogExpress/LogProxy_' + MainExpress.portaProxy, { recursive: true });
}
//fs.writeFileSync('./LogExpress/LogProxy_' + MainExpress.portaProcesso + '/log.txt', '');
fs_1.default.writeFileSync('./LogExpress/LogProxy_' + MainExpress.portaProxy + '/log.txt', '');
}
catch (error) {
console.log(error);
}
}
InizializzaCartelleFileLogExpress() {
try {
/**log processi express */
if (!fs_1.default.existsSync('./LogExpress')) {
fs_1.default.mkdirSync('./LogExpress', { recursive: true });
}
if (!fs_1.default.existsSync('./LogExpress/Processo_' + MainExpress.portaProcesso)) {
fs_1.default.mkdirSync('./LogExpress/Processo_' + MainExpress.portaProcesso, { recursive: true });
}
//fs.writeFileSync('./LogExpress/Processo_' + MainExpress.portaProcesso + '/log.txt', '');
fs_1.default.writeFileSync('./LogExpress/Processo_' + MainExpress.portaProcesso + '/log.txt', '');
}
catch (error) {
console.log(error);
}
}
StartHttpServer() {
this.InizializzaCartelleFileLogExpress();
try {
if (MainExpress.vettoreProcessi.length > 0) {
/* qui non arrivero mai! Perche il processo che viene avviato è un processo figlio,
questo vuol dire che sara con una porta gia definita */
let resto = true;
let tmp = this.percorsi.porta + parseInt((Math.random() * (Math.random() * 10)).toString());
while (resto) {
if (tmp > 9999)
tmp = 5000;
let esco = false;
tmp = tmp + parseInt((Math.random() * (Math.random() * 10)).toString());
for (let index = 0; index < MainExpress.vettoreProcessi.length && esco == false; index++) {
const element = MainExpress.vettoreProcessi[index];
if (element.porta == tmp) {
esco = true;
}
}
if (esco == false)
resto = false;
}
this.percorsi.porta = tmp;
this.httpServer.listen(this.percorsi.porta);
(0, utility_1.StartMonitoring)();
}
else {
if (MainExpress.isSottoProcesso == true) {
this.httpServer.listen(this.percorsi.porta);
}
else {
this.InizializzaCartellaFileLogProxy();
if (!fs_1.default.existsSync('./LogExpress/LogProxy_' + MainExpress.portaProxy)) {
fs_1.default.mkdirSync('./LogExpress/LogProxy_' + MainExpress.portaProxy, { recursive: true });
}
//fs.writeFileSync('./LogExpress/LogProxy_' + MainExpress.portaProxy + '/log.txt', '');
fs_1.default.writeFileSync('./LogExpress/LogProxy_' + MainExpress.portaProxy + '/log.txt', '');
MainExpress.portaProxy = this.percorsi.porta;
MainExpress.portaProcesso = this.percorsi.porta + 1;
this.httpServer.listen(MainExpress.portaProcesso);
(0, utility_1.StartMonitoring)();
/* */
const proxy = http_proxy_1.default.createProxyServer();
//httpProxy.createProxyServer({ target: 'http://localhost:3001' }).listen(3333);
MainExpress.proxyServer = http.createServer(function (req, res) {
// You can define here your custom logic to handle the request
// and then proxy the request.
// const variabileValore = '1';
let esco = false;
let stamp = '';
for (let index = 0; index < MainExpress.vettoreProcessi.length && esco == false; index++) {
const processo = MainExpress.vettoreProcessi[index];
processo.vettorePossibiliPosizioni;
//devo estrarre il dato per poterlo verificare con la variabile
for (let index = 0; index < processo.vettorePossibiliPosizioni.length && esco == false; index++) {
const element = processo.vettorePossibiliPosizioni[index];
/** si cerca solo nell'header perche siamo nel proxy, questo puo solo maneggiare l'header per semplicita e velocita */
if (req.headers[element.nome] != undefined && element.posizione == 'header') {
if (processo.valoreValiabile == req.headers[element.nome]) {
res.setHeader("proxy", "->http://localhost:" + processo.porta);
proxy.web(req, res, { target: 'http://localhost:' + processo.porta });
stamp = `
<!--################
proxy->http://localhost: ${processo.porta}
################--!>
`;
esco = true;
}
}
}
}
if (esco == false) {
res.setHeader("proxy", "->http://localhost:" + MainExpress.portaProcesso);
proxy.web(req, res, { target: 'http://localhost:' + MainExpress.portaProcesso });
stamp = `
<!--################
proxy->http://localhost: ${MainExpress.portaProcesso}
################--!>
`;
}
try {
fs_1.default.appendFileSync('./LogExpress/LogProxy_' + MainExpress.portaProxy + '/' + 'log.txt', stamp);
}
catch (error) {
console.log(error);
}
});
MainExpress.proxyServer.listen(MainExpress.portaProxy);
/* */
}
}
}
catch (error) {
if (MainExpress.vettoreProcessi.length > 0) {
let resto = true;
let tmp = this.percorsi.porta + parseInt((Math.random() * (Math.random() * 10)).toString());
while (resto) {
if (tmp > 9999)
tmp = 5000;
let esco = false;
tmp = tmp + parseInt((Math.random() * (Math.random() * 10)).toString());
for (let index = 0; index < MainExpress.vettoreProcessi.length && esco == false; index++) {
const element = MainExpress.vettoreProcessi[index];
if (element.porta == tmp) {
esco = true;
}
}
if (esco == false)
resto = false;
}
this.percorsi.porta = tmp;
this.httpServer.listen(this.percorsi.porta);
(0, utility_1.StartMonitoring)();
}
else {
throw error;
}
}
}
AggiungiCartellaStaticaPerExpress(path) {
this.serverExpressDecorato.use(express_1.default.static(path));
}
static AggiungiProcessoParallelo(metodoSpawProcess, valoreValiabile, porta) {
var _a, _b;
try {
if (MainExpress.vettoreProcessi.length > 0) {
if ('porta' in MainExpress.vettoreProcessi[MainExpress.vettoreProcessi.length - 1])
porta = MainExpress.vettoreProcessi[MainExpress.vettoreProcessi.length - 1].porta + 1;
}
if (MainExpress.vettoreProcessi.length == 0) {
porta = porta + (Math.random() * 100 + 30) +
((Math.random() * 10 * Math.random() * 20 * Math.random() * 30) +
(Math.random() * 10 * Math.random() * 20 * Math.random() * 30) -
(Math.random() * 10 * Math.random() * 20 * Math.random() * 10) +
(Math.random() * 10 * Math.random() * 20 * Math.random() * 30) -
(Math.random() * 10 * Math.random() * 20 * Math.random() * 5));
}
}
catch (error) {
porta = porta + (Math.random() * 100 + 30) +
((Math.random() * 10 * Math.random() * 20 * Math.random() * 30) +
(Math.random() * 10 * Math.random() * 20 * Math.random() * 30) -
(Math.random() * 10 * Math.random() * 20 * Math.random() * 10) +
(Math.random() * 10 * Math.random() * 20 * Math.random() * 30) -
(Math.random() * 10 * Math.random() * 20 * Math.random() * 5));
}
try {
porta = Number(porta.toFixed(0));
const temporaneamente = `node ./${MainExpress.pathExe}`;
console.log(temporaneamente);
const proc = (0, child_process_1.exec)(`node ./${MainExpress.pathExe}${MainExpress.pathExeIIparte}${porta}`); //exec(`npm run start-esempio`);
MainExpress.vettoreProcessi.push({
porta: porta,
nomeVariabile: (_a = metodoSpawProcess.isSpawTrigger) !== null && _a !== void 0 ? _a : String((0, crypto_1.randomUUID)()),
valoreValiabile: valoreValiabile,
vettorePossibiliPosizioni: (_b = metodoSpawProcess.checkSpawTrigger) !== null && _b !== void 0 ? _b : [],
processo: proc
});
}
catch (error) {
console.log(error);
}
}
}
exports.MainExpress = MainExpress;
MainExpress.cache = new node_cache_1.default();
MainExpress.portaProxy = 8080;
MainExpress.portaProcesso = 8081;
MainExpress.vettoreProcessi = [];
MainExpress.pathExe = 'dist/index.js';
MainExpress.pathExeIIparte = ' --porta=';
MainExpress.isSottoProcesso = false;
//# sourceMappingURL=main.express.js.map