qcobjects-cli 2.6.1 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/VERSION +1 -1
  3. package/package.json +6 -3
  4. package/public/cjs/cli-commands-lint.js +207 -0
  5. package/public/cjs/cli-commands-lint.js.map +1 -0
  6. package/public/cjs/cli-commands.js +2 -1
  7. package/public/cjs/cli-commands.js.map +1 -1
  8. package/public/cjs/collab-server.js +10 -9
  9. package/public/cjs/collab-server.js.map +1 -1
  10. package/public/cjs/defaultsettings.js +1 -1
  11. package/public/cjs/defaultsettings.js.map +1 -1
  12. package/public/cjs/main-http-gae-server.js +2 -2
  13. package/public/cjs/main-http-gae-server.js.map +1 -1
  14. package/public/cjs/main-http-server.js +2 -2
  15. package/public/cjs/main-http-server.js.map +1 -1
  16. package/public/cjs/main-http2-server.js +2 -2
  17. package/public/cjs/main-http2-server.js.map +1 -1
  18. package/public/cjs/qcobjects-shell.js +2 -2
  19. package/public/cjs/qcobjects-shell.js.map +1 -1
  20. package/public/esm/cli-commands-lint.mjs +139 -0
  21. package/public/esm/cli-commands-lint.mjs.map +7 -0
  22. package/public/esm/cli-commands.mjs +2 -0
  23. package/public/esm/cli-commands.mjs.map +2 -2
  24. package/public/esm/collab-server.mjs +2 -1
  25. package/public/esm/collab-server.mjs.map +2 -2
  26. package/public/esm/defaultsettings.mjs +2 -2
  27. package/public/esm/defaultsettings.mjs.map +2 -2
  28. package/public/esm/main-http-gae-server.mjs +3 -3
  29. package/public/esm/main-http-gae-server.mjs.map +2 -2
  30. package/public/esm/main-http-server.mjs +3 -3
  31. package/public/esm/main-http-server.mjs.map +2 -2
  32. package/public/esm/main-http2-server.mjs +3 -3
  33. package/public/esm/main-http2-server.mjs.map +2 -2
  34. package/public/esm/qcobjects-shell.mjs +2 -2
  35. package/public/esm/qcobjects-shell.mjs.map +2 -2
  36. package/public/types/index.d.ts +15 -0
  37. package/src/cli-commands-lint.ts +181 -0
  38. package/src/cli-commands.ts +2 -1
  39. package/src/collab-server.ts +2 -1
  40. package/src/defaultsettings.ts +2 -2
  41. package/src/main-http-gae-server.ts +3 -3
  42. package/src/main-http-server.ts +3 -3
  43. package/src/main-http2-server.ts +3 -3
  44. package/src/qcobjects-shell.ts +2 -2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/main-http2-server.ts"],
4
- "sourcesContent": ["/**\n * QCObjects Framework CLI\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QCObjects is licensed under the MIT License\n * [LICENSE] (https://github.com/QCObjects/qcobjects-cli/blob/main/LICENSE.txt)\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n */\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\n\nimport { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory } from \"qcobjects\";\n\nimport mime from \"mime\";\nimport path from \"node:path\";\n\nimport http2 from \"node:http2\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport URL from \"node:url\";\nimport http from \"node:http\";\nimport { FileDispatcher } from \"./main-file\";\nimport { PipeLog } from \"./common-pipelog\";\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\nconst ImportMicroservice = function (microservicePackage: string) {\n var _ret_;\n var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + \".js\");\n if (standardPath !== null) {\n _ret_ = Import(microservicePackage);\n } else {\n var nonStandardPath = findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage) || findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage + \".js\");\n if (nonStandardPath !== null) {\n _ret_ = Import(absolutePath + \"/backend/\" + microservicePackage);\n } else {\n _ret_ = Promise.resolve((async () => (await import(microservicePackage)))());\n }\n }\n return _ret_;\n};\n\nclass HTTP2ServerResponse extends InheritClass {\n fileDispatcher: any;\n request: any;\n headers!: { [x: string]: string | number };\n stream: any;\n body: any;\n constructor({\n headers = {\n \":status\": 200,\n \"content-type\": \"text/html\",\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n },\n body = \"\",\n request = null,\n fileDispatcher = null,\n stream = null\n }) {\n super();\n var self = this;\n self.request = request || {};\n self.stream = stream;\n self.headers = headers;\n self.body = body;\n self.fileDispatcher = fileDispatcher;\n \n // Initialize request properties if not set\n if (!self.request.scriptname || !self.request.pathname) {\n const defaultPath = \"/\";\n self.request.pathname = self.request.pathname || defaultPath;\n self.request.scriptname = self.request.scriptname || CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n }\n\n // Ensure documentRoot is set\n if (!CONFIG.get(\"documentRoot\")) {\n CONFIG.set(\"documentRoot\", path.join(process.cwd(), \"public\"));\n }\n \n self._generateResponse();\n }\n\n sendFile(stream: { respondWithFD: (arg0: any, arg1: { \"content-length\": any; \"last-modified\": any; \"content-type\": any; \"cache-control\": any; }) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; respond: (arg0: { \":status\": number; \"content-type\": any; }) => void; write: (arg0: string) => void; }, fileName: string) {\n // read and send file content in the stream\n\n try {\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n const headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n stream.respondWithFD(fd, headers);\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n });\n stream.end();\n\n } catch (e: any) {\n logger.debug(\"[HTTP2ServerResponse][sendFile][ERROR] Something went wrong when trying to send the response as file \" + fileName);\n if (e.errno == -2) {\n const headers = {\n \":status\": 404,\n \"content-type\": mime.getType(fileName)\n };\n stream.respond(headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n });\n stream.end();\n }\n }\n }\n _generateResponse() {\n var response = this;\n response.fileDispatcher = New(FileDispatcher, {\n scriptname: response.request.scriptname,\n pathname: response.request.pathname,\n done(headers: { [x: string]: number; }, body: any, templateURI: any, isTemplate: any) {\n response.headers = headers;\n var stream = response.stream;\n if (isTemplate) {\n response.body = body;\n stream.respond(response.headers);\n stream.write(response.body);\n stream.end();\n } else if (headers[\":status\"] == 200) {\n response.sendFile(stream, templateURI);\n } else {\n stream.respond(response.headers);\n stream.end();\n }\n }\n });\n\n }\n\n}\n\nclass HTTP2ServerRequest extends InheritClass {\n constructor({\n scriptname = \"\",\n path = \"\",\n method = \"\",\n url = \"\",\n headers = null,\n flags = null,\n protocol = null,\n slashes = null,\n auth = null,\n host = null,\n port = null,\n hostname = null,\n hash = null,\n search = \"\",\n query = \"\",\n pathname = \"\",\n href = \"\"\n }) {\n super({\n scriptname,\n path,\n method,\n url,\n headers,\n flags,\n protocol,\n slashes,\n auth,\n host,\n port,\n hostname,\n hash,\n search,\n query,\n pathname,\n href\n });\n }\n}\n\n\n\nexport class HTTP2Server extends InheritClass {\n server!: http2.Http2SecureServer<typeof import(\"http\").IncomingMessage, typeof import(\"http\").ServerResponse, typeof http2.Http2ServerRequest, typeof http2.Http2ServerResponse>;\n interceptorInstances: any;\n request: any;\n response: any;\n constructor({\n request = null,\n response = \"\",\n server = null,\n scriptname = \"\",\n interceptorInstances = []\n }: { request: any, response: any, server?: any, scriptname: string, interceptorInstances: any[] }) {\n super({\n request,\n response,\n server,\n scriptname,\n interceptorInstances\n });\n\n const welcometo = \"Welcome to \\n\";\n const instructions = \"HTTP2Server \\n\";\n const logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n logger.debug(this.showIPAddress());\n logger.info(\"Listening on HTTP PORT: \" + CONFIG.get(\"serverPortHTTP\").toString());\n logger.info(\"Listening on HTTPS PORT: \" + CONFIG.get(\"serverPortHTTPS\").toString());\n logger.info(\"Go to: \\n\" + this.showPossibleURL());\n\n const http2ServerInstance = this;\n http2ServerInstance.server = http2.createSecureServer({\n key: fs.readFileSync(CONFIG.get(\"private-key-pem\")),\n cert: fs.readFileSync(CONFIG.get(\"private-cert-pem\")),\n allowHTTP1: CONFIG.get(\"allowHTTP1\"),\n origins: [\"https://\" + CONFIG.get(\"domain\"), \"http://\" + CONFIG.get(\"domain\")]\n });\n server = http2ServerInstance.server;\n\n server.on(\"error\", (err: any) => console.error(err));\n\n server.on(\"session\", (session: { altsvc: (arg0: string, arg1: string) => void; origin: (arg0: string, arg1: string) => void; }) => {\n // Set altsvc for origin https://example.org:80\n session.altsvc(\"h2=\\\":8000\\\"\", \"https://\" + CONFIG.get(\"domain\"));\n session.altsvc(\"https=\\\":\" + CONFIG.get(\"serverPortHTTPS\") + \"\\\"\", \"https://\" + CONFIG.get(\"domain\"));\n session.altsvc(\"http=\\\":\" + CONFIG.get(\"serverPortHTTP\") + \"\\\"\", \"http://\" + CONFIG.get(\"domain\"));\n session.origin(\"https://\" + CONFIG.get(\"domain\"), \"http://\" + CONFIG.get(\"domain\"));\n\n });\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Loading backend interceptors...\");\n const interceptors = CONFIG.get(\"backend\", {}).interceptors;\n if (typeof interceptors !== \"undefined\") {\n logger.info(\"Backend Interceptors Available\");\n interceptors.map((interceptor: { microservice: string; }) => {\n ImportMicroservice(interceptor.microservice);\n var interceptorClassFactory = ClassFactory(interceptor.microservice + \".Interceptor\");\n var interceptorInstance = New(interceptorClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n interceptor: interceptor,\n server: server\n });\n http2ServerInstance.interceptorInstances.push(interceptorInstance);\n });\n }\n }\n\n server.on(\"stream\", (stream: { session: { setTimeout: (arg0: any) => void; setMaxListeners: (arg0: number) => void; removeListener: (arg0: string, arg1: () => void) => void; on: (arg0: string, arg1: () => void) => void; altsvc: (arg0: string, arg1: any) => void; }; destroyed: any; respond: (arg0: { \":status\": number; \"content-type\": string; }) => void; on: (arg0: string, arg1: () => void) => void; write: (arg0: string) => void; end: () => void; id: any; }, headers: { [x: string]: any; }, flags: any) => {\n CONFIG.set(\"backendTimeout\", CONFIG.get(\"backendTimeout\") || 20000);\n stream.session.setTimeout(CONFIG.get(\"backendTimeout\"));\n stream.session.setMaxListeners(9999999999);\n var timeoutHandler = () => {\n // end the stream on timeout\n try {\n if (!stream.destroyed) {\n logger.info(\"A timeout occurred... \" + CONFIG.get(\"backendTimeout\").toString());\n logger.info(\"Killing session...\");\n stream.respond({\n \":status\": 500,\n \"content-type\": \"text/html\"\n });\n stream.on(\"error\", () => { });\n stream.write(\"<h1>500 - INTERNAL SERVER ERROR (TIMEOUT)</h1>\");\n stream.end();\n } else {\n logger.debug(\"Session was normally finishing...\");\n }\n } catch (e: any) {\n logger.debug(`An unhandled error occurred during timeout catching: ${e}`);\n }\n\n if (!stream.destroyed) {\n stream.session.removeListener(\"timeout\", timeoutHandler);\n } else {\n server.removeListener(\"timeout\", timeoutHandler);\n }\n\n };\n if (!stream.destroyed) {\n stream.session.on(\"timeout\", timeoutHandler);\n }\n\n stream.session.altsvc(\"h2=\\\":8000\\\"\", stream.id);\n stream.session.altsvc(\"https=\\\":\" + CONFIG.get(\"serverPortHTTPS\") + \"\\\"\", stream.id);\n stream.session.altsvc(\"http=\\\":\" + CONFIG.get(\"serverPortHTTP\") + \"\\\"\", stream.id);\n const request = Object.assign(New(HTTP2ServerRequest), URL.parse(headers[\":path\"]));\n request.headers = headers;\n request.flags = flags;\n http2ServerInstance.request = request;\n http2ServerInstance.request.method = headers[\":method\"];\n http2ServerInstance.request.path = headers[\":path\"];\n\n // Fix pathname and scriptname initialization\n const pathParts = http2ServerInstance.request.pathname.split(\"/\");\n if (pathParts.length > 0) {\n if (http2ServerInstance.request.pathname.indexOf(\".\") < 0) {\n http2ServerInstance.request.scriptname = CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n // Keep the original pathname as is, no need to reassign\n } else {\n http2ServerInstance.request.scriptname = pathParts[pathParts.length - 1];\n http2ServerInstance.request.pathname = http2ServerInstance.request.pathname.substr(0, http2ServerInstance.request.pathname.lastIndexOf(\"/\"));\n }\n } else {\n http2ServerInstance.request.scriptname = CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n http2ServerInstance.request.pathname = \"/\";\n }\n\n logger.debug(PipeLog.pipe(this.request));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Backend Microservices Available...\");\n\n logger.info(\"Loading backend routes...\");\n const routes = CONFIG.get(\"backend\", {}).routes;\n const selectedRoute = routes.filter((route: { path: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\");\n return (new RegExp(standardRoutePath, \"g\")).test(request.path);\n });\n if (selectedRoute.length > 0) {\n selectedRoute.map((route: { path: string; microservice: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\"); //allowing {param}\n console.log(standardRoutePath);\n const selectedRouteParams = {\n ...[...request.path.matchAll((new RegExp(standardRoutePath, \"g\")))][0][\"groups\"]\n };\n ImportMicroservice(route.microservice).then(function () {\n logger.debug(`Trying to execute ${route.microservice + \".Microservice\"}...`);\n var microServiceClassFactory = ClassFactory(route.microservice + \".Microservice\");\n if (typeof microServiceClassFactory !== \"undefined\") {\n http2ServerInstance.response = New(microServiceClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n route: route,\n routeParams: selectedRouteParams,\n server: server,\n stream: stream,\n request: request\n });\n\n } else {\n throw Error(`${route.microservice + \".Microservice\"} not defined.`);\n }\n }).catch((e: string | undefined) => {\n throw Error(e);\n });\n });\n } else {\n this.response = New(HTTP2ServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: server,\n stream: stream,\n request: request\n });\n }\n\n } else {\n // ...\n\n this.response = New(HTTP2ServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: server,\n stream: stream,\n request: request\n });\n\n }\n\n });\n\n }\n\n showIPAddress() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.map(function (ipGroup: any) {\n _ret_ += iface + \": \" + PipeLog.pipe(ipGroup) + \"\\n\";\n });\n });\n return _ret_;\n }\n showPossibleURL(): string {\n let _ret_ = \"\";\n const ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach((iface) => {\n ifaces[iface]?.forEach((ipGroup: any) => {\n if (ipGroup.family.toLowerCase() === \"ipv4\") {\n _ret_ += `http://${ipGroup.address}:${CONFIG.get(\"serverPortHTTP\")}/\\n`;\n _ret_ += `https://${ipGroup.address}:${CONFIG.get(\"serverPortHTTPS\")}/\\n`;\n }\n });\n });\n return _ret_;\n }\n\n start() {\n var server = this.server;\n\n // http2 port is 8443 but normally is used 443 by replacing current https\n\n\n const httpServer = http.createServer((req , res) => {\n res.writeHead(301, {\n Location: `https://${req.headers.host}${req.url}`\n });\n res.end();\n });\n\n httpServer.listen(CONFIG.get(\"serverPortHTTP\"));\n server.listen(CONFIG.get(\"serverPortHTTPS\"));\n }\n\n}\n\nPackage(\"org.quickcorp.qcobjects.main.http2.server\", [\n HTTP2ServerResponse, HTTP2ServerRequest, HTTP2Server\n\n]);\n\n\n\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * QCObjects Framework CLI\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QCObjects is licensed under the MIT License\n * [LICENSE] (https://github.com/QCObjects/qcobjects-cli/blob/main/LICENSE.txt)\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n */\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\n\nimport { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, get, ClassFactory } from \"qcobjects\";\n\nimport mime from \"mime\";\nimport path from \"node:path\";\n\nimport http2 from \"node:http2\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport URL from \"node:url\";\nimport http from \"node:http\";\nimport { FileDispatcher } from \"./main-file\";\nimport { PipeLog } from \"./common-pipelog\";\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\nconst ImportMicroservice = function (microservicePackage: string) {\n var _ret_;\n var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + \".js\");\n if (standardPath !== null) {\n _ret_ = Import(microservicePackage);\n } else {\n var nonStandardPath = findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage) || findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage + \".js\");\n if (nonStandardPath !== null) {\n _ret_ = Import(absolutePath + \"/backend/\" + microservicePackage);\n } else {\n _ret_ = Promise.resolve((async () => (await import(microservicePackage)))());\n }\n }\n return _ret_;\n};\n\nclass HTTP2ServerResponse extends InheritClass {\n fileDispatcher: any;\n request: any;\n headers!: { [x: string]: string | number };\n stream: any;\n body: any;\n constructor({\n headers = {\n \":status\": 200,\n \"content-type\": \"text/html\",\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n },\n body = \"\",\n request = null,\n fileDispatcher = null,\n stream = null\n }) {\n super();\n var self = this;\n self.request = request || {};\n self.stream = stream;\n self.headers = headers;\n self.body = body;\n self.fileDispatcher = fileDispatcher;\n \n // Initialize request properties if not set\n if (!self.request.scriptname || !self.request.pathname) {\n const defaultPath = \"/\";\n self.request.pathname = self.request.pathname || defaultPath;\n self.request.scriptname = self.request.scriptname || CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n }\n\n // Ensure documentRoot is set\n if (!CONFIG.get(\"documentRoot\")) {\n CONFIG.set(\"documentRoot\", path.join(process.cwd(), \"public\"));\n }\n \n self._generateResponse();\n }\n\n sendFile(stream: { respondWithFD: (arg0: any, arg1: { \"content-length\": any; \"last-modified\": any; \"content-type\": any; \"cache-control\": any; }) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; respond: (arg0: { \":status\": number; \"content-type\": any; }) => void; write: (arg0: string) => void; }, fileName: string) {\n // read and send file content in the stream\n\n try {\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n const headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n stream.respondWithFD(fd, headers);\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n });\n stream.end();\n\n } catch (e: any) {\n logger.debug(\"[HTTP2ServerResponse][sendFile][ERROR] Something went wrong when trying to send the response as file \" + fileName);\n if (e.errno == -2) {\n const headers = {\n \":status\": 404,\n \"content-type\": mime.getType(fileName)\n };\n stream.respond(headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n });\n stream.end();\n }\n }\n }\n _generateResponse() {\n var response = this;\n response.fileDispatcher = New(FileDispatcher, {\n scriptname: response.request.scriptname,\n pathname: response.request.pathname,\n done(headers: { [x: string]: number; }, body: any, templateURI: any, isTemplate: any) {\n response.headers = headers;\n var stream = response.stream;\n if (isTemplate) {\n response.body = body;\n stream.respond(response.headers);\n stream.write(response.body);\n stream.end();\n } else if (headers[\":status\"] == 200) {\n response.sendFile(stream, templateURI);\n } else {\n stream.respond(response.headers);\n stream.end();\n }\n }\n });\n\n }\n\n}\n\nclass HTTP2ServerRequest extends InheritClass {\n constructor({\n scriptname = \"\",\n path = \"\",\n method = \"\",\n url = \"\",\n headers = null,\n flags = null,\n protocol = null,\n slashes = null,\n auth = null,\n host = null,\n port = null,\n hostname = null,\n hash = null,\n search = \"\",\n query = \"\",\n pathname = \"\",\n href = \"\"\n }) {\n super({\n scriptname,\n path,\n method,\n url,\n headers,\n flags,\n protocol,\n slashes,\n auth,\n host,\n port,\n hostname,\n hash,\n search,\n query,\n pathname,\n href\n });\n }\n}\n\n\n\nexport class HTTP2Server extends InheritClass {\n server!: http2.Http2SecureServer<typeof import(\"http\").IncomingMessage, typeof import(\"http\").ServerResponse, typeof http2.Http2ServerRequest, typeof http2.Http2ServerResponse>;\n interceptorInstances: any;\n request: any;\n response: any;\n constructor({\n request = null,\n response = \"\",\n server = null,\n scriptname = \"\",\n interceptorInstances = []\n }: { request: any, response: any, server?: any, scriptname: string, interceptorInstances: any[] }) {\n super({\n request,\n response,\n server,\n scriptname,\n interceptorInstances\n });\n\n const welcometo = \"Welcome to \\n\";\n const instructions = \"HTTP2Server \\n\";\n const logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n logger.debug(this.showIPAddress());\n logger.info(\"Listening on HTTP PORT: \" + CONFIG.get(\"serverPortHTTP\").toString());\n logger.info(\"Listening on HTTPS PORT: \" + CONFIG.get(\"serverPortHTTPS\").toString());\n logger.info(\"Go to: \\n\" + this.showPossibleURL());\n\n const http2ServerInstance = this;\n http2ServerInstance.server = http2.createSecureServer({\n key: fs.readFileSync(CONFIG.get(\"private-key-pem\")),\n cert: fs.readFileSync(CONFIG.get(\"private-cert-pem\")),\n allowHTTP1: CONFIG.get(\"allowHTTP1\"),\n origins: [\"https://\" + CONFIG.get(\"domain\"), \"http://\" + CONFIG.get(\"domain\")]\n });\n server = http2ServerInstance.server;\n\n server.on(\"error\", (err: any) => console.error(err));\n\n server.on(\"session\", (session: { altsvc: (arg0: string, arg1: string) => void; origin: (arg0: string, arg1: string) => void; }) => {\n // Set altsvc for origin https://example.org:80\n session.altsvc(\"h2=\\\":8000\\\"\", \"https://\" + CONFIG.get(\"domain\"));\n session.altsvc(\"https=\\\":\" + CONFIG.get(\"serverPortHTTPS\") + \"\\\"\", \"https://\" + CONFIG.get(\"domain\"));\n session.altsvc(\"http=\\\":\" + CONFIG.get(\"serverPortHTTP\") + \"\\\"\", \"http://\" + CONFIG.get(\"domain\"));\n session.origin(\"https://\" + CONFIG.get(\"domain\"), \"http://\" + CONFIG.get(\"domain\"));\n\n });\n\n if (get(\"backendAvailable\")) {\n logger.info(\"Loading backend interceptors...\");\n const interceptors = CONFIG.get(\"backend\", {}).interceptors;\n if (typeof interceptors !== \"undefined\") {\n logger.info(\"Backend Interceptors Available\");\n interceptors.map((interceptor: { microservice: string; }) => {\n ImportMicroservice(interceptor.microservice);\n var interceptorClassFactory = ClassFactory(interceptor.microservice + \".Interceptor\");\n var interceptorInstance = New(interceptorClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n interceptor: interceptor,\n server: server\n });\n http2ServerInstance.interceptorInstances.push(interceptorInstance);\n });\n }\n }\n\n server.on(\"stream\", (stream: { session: { setTimeout: (arg0: any) => void; setMaxListeners: (arg0: number) => void; removeListener: (arg0: string, arg1: () => void) => void; on: (arg0: string, arg1: () => void) => void; altsvc: (arg0: string, arg1: any) => void; }; destroyed: any; respond: (arg0: { \":status\": number; \"content-type\": string; }) => void; on: (arg0: string, arg1: () => void) => void; write: (arg0: string) => void; end: () => void; id: any; }, headers: { [x: string]: any; }, flags: any) => {\n CONFIG.set(\"backendTimeout\", CONFIG.get(\"backendTimeout\") || 20000);\n stream.session.setTimeout(CONFIG.get(\"backendTimeout\"));\n stream.session.setMaxListeners(9999999999);\n var timeoutHandler = () => {\n // end the stream on timeout\n try {\n if (!stream.destroyed) {\n logger.info(\"A timeout occurred... \" + CONFIG.get(\"backendTimeout\").toString());\n logger.info(\"Killing session...\");\n stream.respond({\n \":status\": 500,\n \"content-type\": \"text/html\"\n });\n stream.on(\"error\", () => { });\n stream.write(\"<h1>500 - INTERNAL SERVER ERROR (TIMEOUT)</h1>\");\n stream.end();\n } else {\n logger.debug(\"Session was normally finishing...\");\n }\n } catch (e: any) {\n logger.debug(`An unhandled error occurred during timeout catching: ${e}`);\n }\n\n if (!stream.destroyed) {\n stream.session.removeListener(\"timeout\", timeoutHandler);\n } else {\n server.removeListener(\"timeout\", timeoutHandler);\n }\n\n };\n if (!stream.destroyed) {\n stream.session.on(\"timeout\", timeoutHandler);\n }\n\n stream.session.altsvc(\"h2=\\\":8000\\\"\", stream.id);\n stream.session.altsvc(\"https=\\\":\" + CONFIG.get(\"serverPortHTTPS\") + \"\\\"\", stream.id);\n stream.session.altsvc(\"http=\\\":\" + CONFIG.get(\"serverPortHTTP\") + \"\\\"\", stream.id);\n const request = Object.assign(New(HTTP2ServerRequest), URL.parse(headers[\":path\"]));\n request.headers = headers;\n request.flags = flags;\n http2ServerInstance.request = request;\n http2ServerInstance.request.method = headers[\":method\"];\n http2ServerInstance.request.path = headers[\":path\"];\n\n // Fix pathname and scriptname initialization\n const pathParts = http2ServerInstance.request.pathname.split(\"/\");\n if (pathParts.length > 0) {\n if (http2ServerInstance.request.pathname.indexOf(\".\") < 0) {\n http2ServerInstance.request.scriptname = CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n // Keep the original pathname as is, no need to reassign\n } else {\n http2ServerInstance.request.scriptname = pathParts[pathParts.length - 1];\n http2ServerInstance.request.pathname = http2ServerInstance.request.pathname.substr(0, http2ServerInstance.request.pathname.lastIndexOf(\"/\"));\n }\n } else {\n http2ServerInstance.request.scriptname = CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n http2ServerInstance.request.pathname = \"/\";\n }\n\n logger.debug(PipeLog.pipe(this.request));\n\n if (get(\"backendAvailable\")) {\n logger.info(\"Backend Microservices Available...\");\n\n logger.info(\"Loading backend routes...\");\n const routes = CONFIG.get(\"backend\", {}).routes;\n const selectedRoute = routes.filter((route: { path: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\");\n return (new RegExp(standardRoutePath, \"g\")).test(request.path);\n });\n if (selectedRoute.length > 0) {\n selectedRoute.map((route: { path: string; microservice: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\"); //allowing {param}\n console.log(standardRoutePath);\n const selectedRouteParams = {\n ...[...request.path.matchAll((new RegExp(standardRoutePath, \"g\")))][0][\"groups\"]\n };\n ImportMicroservice(route.microservice).then(function () {\n logger.debug(`Trying to execute ${route.microservice + \".Microservice\"}...`);\n var microServiceClassFactory = ClassFactory(route.microservice + \".Microservice\");\n if (typeof microServiceClassFactory !== \"undefined\") {\n http2ServerInstance.response = New(microServiceClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n route: route,\n routeParams: selectedRouteParams,\n server: server,\n stream: stream,\n request: request\n });\n\n } else {\n throw Error(`${route.microservice + \".Microservice\"} not defined.`);\n }\n }).catch((e: string | undefined) => {\n throw Error(e);\n });\n });\n } else {\n this.response = New(HTTP2ServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: server,\n stream: stream,\n request: request\n });\n }\n\n } else {\n // ...\n\n this.response = New(HTTP2ServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: server,\n stream: stream,\n request: request\n });\n\n }\n\n });\n\n }\n\n showIPAddress() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.map(function (ipGroup: any) {\n _ret_ += iface + \": \" + PipeLog.pipe(ipGroup) + \"\\n\";\n });\n });\n return _ret_;\n }\n showPossibleURL(): string {\n let _ret_ = \"\";\n const ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach((iface) => {\n ifaces[iface]?.forEach((ipGroup: any) => {\n if (ipGroup.family.toLowerCase() === \"ipv4\") {\n _ret_ += `http://${ipGroup.address}:${CONFIG.get(\"serverPortHTTP\")}/\\n`;\n _ret_ += `https://${ipGroup.address}:${CONFIG.get(\"serverPortHTTPS\")}/\\n`;\n }\n });\n });\n return _ret_;\n }\n\n start() {\n var server = this.server;\n\n // http2 port is 8443 but normally is used 443 by replacing current https\n\n\n const httpServer = http.createServer((req , res) => {\n res.writeHead(301, {\n Location: `https://${req.headers.host}${req.url}`\n });\n res.end();\n });\n\n httpServer.listen(CONFIG.get(\"serverPortHTTP\"));\n server.listen(CONFIG.get(\"serverPortHTTPS\"));\n }\n\n}\n\nPackage(\"org.quickcorp.qcobjects.main.http2.server\", [\n HTTP2ServerResponse, HTTP2ServerRequest, HTTP2Server\n\n]);\n\n\n\n\n"],
5
+ "mappings": "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",
6
6
  "names": ["path", "request"]
7
7
  }
@@ -45,11 +45,11 @@ Y88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \r
45
45
  __dirname: "./",
46
46
  __filename: "qcobjects-shell-file.js"
47
47
  };
48
- global.context = vm.createContext(sandbox);
48
+ globalThis.context = vm.createContext(sandbox);
49
49
  const runScript = /* @__PURE__ */ __name((code, logOutput = false) => {
50
50
  const options = { filename: sandbox.__filename };
51
51
  const backgroundRunScript = /* @__PURE__ */ __name((code2) => {
52
- var output2 = vm.runInContext(code2, global.context, options);
52
+ var output2 = vm.runInContext(code2, globalThis.context, options);
53
53
  return output2;
54
54
  }, "backgroundRunScript");
55
55
  var output = backgroundRunScript(code);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/qcobjects-shell.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n/**\n * QCObjects Framework CLI\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QCObjects is licensed under the MIT License\n * [LICENSE] (https://github.com/QCObjects/qcobjects-cli/blob/main/LICENSE.txt)\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\n\nconst welcometo = \"Welcome to \\n\";\nconst instructions = \"Type:\\n .exit to quit\\n .help for see a quick guide\\n And any other command to execute like pure javascript \\n All the QCObjects stuff is already loaded for you\";\n//const logo = ' .88888. a88888b. .88888. dP oo dP \\r\\nd8\\' `8b d8\\' `88 d8\\' `8b 88 88 \\r\\n88 88 88 88 88 88d888b. dP .d8888b. .d8888b. d8888P .d8888b. \\r\\n88 db 88 88 88 88 88\\' `88 88 88ooood8 88\\' `\\\"\\\" 88 Y8ooooo. \\r\\nY8. Y88P Y8. .88 Y8. .8P 88. .88 88 88. ... 88. ... 88 88 \\r\\n `8888PY8b Y88888P\\' `8888P\\' 88Y8888\\' 88 `88888P\\' `88888P\\' dP `88888P\\' \\r\\noooooooooooooooooooooooooooooooooooooooo88~oooooooooooooooooooooooooooooooooo\\r\\n dP ';\nconst logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\nimport path from \"path\";\nconst absolutePath = path.resolve( __dirname, \"./\" );\n\nimport vm from \"vm\";\n\nimport {InheritClass, global} from \"qcobjects\";\nimport \"./defaultsettings\";\nimport readline from \"readline\";\n\n\nclass Main extends InheritClass {\n constructor(){\n super();\n this.start();\n }\n\n start (){\n const sandbox = {\n require:require,\n module:module,\n __dirname:\"./\",\n __filename:\"qcobjects-shell-file.js\"\n };\n global.context = vm.createContext(sandbox);\n \n const runScript = (code: string,logOutput=false)=>{\n const options = {filename:sandbox.__filename};\n \n const backgroundRunScript = (code: string):any=>{\n var output = vm.runInContext(code,global.context,options);\n return output;\n };\n \n var output = backgroundRunScript(code);\n \n if (logOutput && typeof output !== \"undefined\"){\n console.log(output);\n }\n };\n \n const syncGlobal = ()=>{\n var s = \"Object.assign(this,this.constructor.constructor('return this')())\";\n runScript(s);\n };\n \n readline.emitKeypressEvents(process.stdin);\n if (process.stdin.isTTY)\n process.stdin.setRawMode(true);\n \n const qcobjects_version = global.__get_version_string__();\n \n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: qcobjects_version + \" >\"\n });\n \n const protected_symbols = [ \"clearInterval\",\n \"clearTimeout\",\n \"setInterval\",\n \"setTimeout\", \"queueMicrotask\",\n \"clearImmediate\", \"setImmediate\", \"_asyncLoad\",\n \"_fireAsyncLoad\", \"asyncLoad\", \"logger\",\n \"_Crypt\", \"CONFIG\", \"waitUntil\",\n \"_super_\", \"ComplexStorageCache\", \"TagElements\",\n \"onload\", \"InheritClass\", \"Component\",\n \"Controller\", \"View\", \"Service\",\n \"JSONService\", \"ConfigService\", \"VO\",\n \"serviceLoader\", \"componentLoader\", \"ComponentURI\",\n \"SourceJS\", \"SourceCSS\", \"ArrayList\",\n \"ArrayCollection\", \"Effect\", \"Timer\",\n \"Export\", \"Import\", \"Package\",\n \"Class\", \"New\", \"Tag\",\n \"Ready\", \"Contact\", \"FormField\",\n \"ButtonField\", \"InputField\", \"TextField\",\n \"EmailField\", \"GridComponent\", \"GridController\",\n \"GridView\", \"Move\", \"RotateX\",\n \"RotateY\", \"RotateZ\", \"Rotate\",\n \"Fade\", \"Radius\", \"CanvasTool\",\n \"BasicLayout\"\n ];\n \n const preloaded_scripts = [\n \"require('qcobjects')\",\n \"Object.assign(this,this.constructor.constructor('return this')())\"\n ];\n \n preloaded_scripts.map(preloaded_script =>\n runScript(preloaded_script.trim())\n );\n \n \n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n rl.prompt(true);\n \n rl.on(\"line\", (line) => {\n var codeline = line.trim();\n switch (true) {\n case codeline==\"hello\":\n console.log(\"world!\");\n break;\n case codeline==\".exit\":\n rl.close();\n break;\n default:\n try{\n runScript(codeline,true);\n syncGlobal.bind(sandbox)();\n }catch (e){\n console.log(\"An exeption ocurred while trying to run your awesome code! \");\n console.log(e);\n }\n break;\n }\n rl.prompt();\n }).on(\"close\", () => {\n console.log(\"Thank you for using QCObjects.\");\n console.log(\"Have a nice day!\");\n process.exit(0);\n });\n \n }\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\n/**\n * QCObjects Framework CLI\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QCObjects is licensed under the MIT License\n * [LICENSE] (https://github.com/QCObjects/qcobjects-cli/blob/main/LICENSE.txt)\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\n\nconst welcometo = \"Welcome to \\n\";\nconst instructions = \"Type:\\n .exit to quit\\n .help for see a quick guide\\n And any other command to execute like pure javascript \\n All the QCObjects stuff is already loaded for you\";\n//const logo = ' .88888. a88888b. .88888. dP oo dP \\r\\nd8\\' `8b d8\\' `88 d8\\' `8b 88 88 \\r\\n88 88 88 88 88 88d888b. dP .d8888b. .d8888b. d8888P .d8888b. \\r\\n88 db 88 88 88 88 88\\' `88 88 88ooood8 88\\' `\\\"\\\" 88 Y8ooooo. \\r\\nY8. Y88P Y8. .88 Y8. .8P 88. .88 88 88. ... 88. ... 88 88 \\r\\n `8888PY8b Y88888P\\' `8888P\\' 88Y8888\\' 88 `88888P\\' `88888P\\' dP `88888P\\' \\r\\noooooooooooooooooooooooooooooooooooooooo88~oooooooooooooooooooooooooooooooooo\\r\\n dP ';\nconst logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\nimport path from \"path\";\nconst absolutePath = path.resolve( __dirname, \"./\" );\n\nimport vm from \"vm\";\n\nimport {InheritClass, global} from \"qcobjects\";\nimport \"./defaultsettings\";\nimport readline from \"readline\";\n\n\nclass Main extends InheritClass {\n constructor(){\n super();\n this.start();\n }\n\n start (){\n const sandbox = {\n require:require,\n module:module,\n __dirname:\"./\",\n __filename:\"qcobjects-shell-file.js\"\n };\n (globalThis as any).context = vm.createContext(sandbox);\n \n const runScript = (code: string,logOutput=false)=>{\n const options = {filename:sandbox.__filename};\n \n const backgroundRunScript = (code: string):any=>{\n var output = vm.runInContext(code,(globalThis as any).context,options);\n return output;\n };\n \n var output = backgroundRunScript(code);\n \n if (logOutput && typeof output !== \"undefined\"){\n console.log(output);\n }\n };\n \n const syncGlobal = ()=>{\n var s = \"Object.assign(this,this.constructor.constructor('return this')())\";\n runScript(s);\n };\n \n readline.emitKeypressEvents(process.stdin);\n if (process.stdin.isTTY)\n process.stdin.setRawMode(true);\n \n const qcobjects_version = global.__get_version_string__();\n \n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: qcobjects_version + \" >\"\n });\n \n const protected_symbols = [ \"clearInterval\",\n \"clearTimeout\",\n \"setInterval\",\n \"setTimeout\", \"queueMicrotask\",\n \"clearImmediate\", \"setImmediate\", \"_asyncLoad\",\n \"_fireAsyncLoad\", \"asyncLoad\", \"logger\",\n \"_Crypt\", \"CONFIG\", \"waitUntil\",\n \"_super_\", \"ComplexStorageCache\", \"TagElements\",\n \"onload\", \"InheritClass\", \"Component\",\n \"Controller\", \"View\", \"Service\",\n \"JSONService\", \"ConfigService\", \"VO\",\n \"serviceLoader\", \"componentLoader\", \"ComponentURI\",\n \"SourceJS\", \"SourceCSS\", \"ArrayList\",\n \"ArrayCollection\", \"Effect\", \"Timer\",\n \"Export\", \"Import\", \"Package\",\n \"Class\", \"New\", \"Tag\",\n \"Ready\", \"Contact\", \"FormField\",\n \"ButtonField\", \"InputField\", \"TextField\",\n \"EmailField\", \"GridComponent\", \"GridController\",\n \"GridView\", \"Move\", \"RotateX\",\n \"RotateY\", \"RotateZ\", \"Rotate\",\n \"Fade\", \"Radius\", \"CanvasTool\",\n \"BasicLayout\"\n ];\n \n const preloaded_scripts = [\n \"require('qcobjects')\",\n \"Object.assign(this,this.constructor.constructor('return this')())\"\n ];\n \n preloaded_scripts.map(preloaded_script =>\n runScript(preloaded_script.trim())\n );\n \n \n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n rl.prompt(true);\n \n rl.on(\"line\", (line) => {\n var codeline = line.trim();\n switch (true) {\n case codeline==\"hello\":\n console.log(\"world!\");\n break;\n case codeline==\".exit\":\n rl.close();\n break;\n default:\n try{\n runScript(codeline,true);\n syncGlobal.bind(sandbox)();\n }catch (e){\n console.log(\"An exeption ocurred while trying to run your awesome code! \");\n console.log(e);\n }\n break;\n }\n rl.prompt();\n }).on(\"close\", () => {\n console.log(\"Thank you for using QCObjects.\");\n console.log(\"Have a nice day!\");\n process.exit(0);\n });\n \n }\n}"],
5
+ "mappings": "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",
6
6
  "names": ["code", "output"]
7
7
  }
@@ -92,6 +92,20 @@ declare module "cli-commands-jira" {
92
92
  getIssueList(): Promise<void>;
93
93
  }
94
94
  }
95
+ declare module "cli-commands-lint" {
96
+ import { InheritClass } from "qcobjects";
97
+ export class CommandHandler extends InheritClass {
98
+ choiceOption: {
99
+ lint: (targets: string[], options: {
100
+ fix?: boolean;
101
+ config?: string;
102
+ }) => Promise<void>;
103
+ };
104
+ constructor({ switchCommander }: {
105
+ switchCommander: any;
106
+ });
107
+ }
108
+ }
95
109
  declare module "cli-commands-publish-static" {
96
110
  import { InheritClass } from "qcobjects";
97
111
  export class CommandHandler extends InheritClass {
@@ -118,6 +132,7 @@ declare module "cli-commands" {
118
132
  export * as publishStatic from "cli-commands-publish-static";
119
133
  export * as buildTypescript from "cli-commands-build-typescript";
120
134
  export * as buildEsbuild from "cli-commands-build-esbuild";
135
+ export * as lintCommand from "cli-commands-lint";
121
136
  }
122
137
  declare module "defaultsettings" {
123
138
  import "qcobjects";
@@ -0,0 +1,181 @@
1
+ /**
2
+ * QCObjects Framework CLI
3
+ * ________________
4
+ *
5
+ * Author: Jean Machuca <correojean@gmail.com>
6
+ *
7
+ * Cross Browser Javascript Framework for MVC Patterns
8
+ * QCObjects is licensed under the MIT License
9
+ * [LICENSE] (https://github.com/QCObjects/qcobjects-cli/blob/main/LICENSE.txt)
10
+ *
11
+ * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>
12
+ *
13
+ * Everyone is permitted to copy and distribute verbatim copies of this
14
+ * license document, but changing it is not allowed.
15
+ */
16
+ /*eslint no-unused-vars: "off"*/
17
+ /*eslint no-redeclare: "off"*/
18
+ /*eslint no-empty: "off"*/
19
+ /*eslint strict: "off"*/
20
+ /*eslint no-mixed-operators: "off"*/
21
+ /*eslint no-undef: "off"*/
22
+ "use strict";
23
+ import fs from "node:fs";
24
+ import path from "node:path";
25
+ import { pathToFileURL } from "node:url";
26
+ import glob from "glob";
27
+ import { Linter } from "eslint";
28
+ import globals from "globals";
29
+ import * as tsParserModule from "@typescript-eslint/parser";
30
+ import * as tsPluginModule from "@typescript-eslint/eslint-plugin";
31
+ import { Package, InheritClass } from "qcobjects";
32
+
33
+ const tsParser = (tsParserModule as any).default ?? tsParserModule;
34
+ const tsPlugin = (tsPluginModule as any).default ?? tsPluginModule;
35
+
36
+ const DEFAULT_TARGETS = ["src/**/*.ts"];
37
+
38
+ const DEFAULT_IGNORES = [
39
+ "node_modules/**",
40
+ "build/**",
41
+ "public/**",
42
+ "dist/**",
43
+ "coverage/**",
44
+ ".git/**",
45
+ ];
46
+
47
+ const DEFAULT_FLAT_CONFIG: any[] = [
48
+ {
49
+ files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.mjs", "**/*.cjs"],
50
+ plugins: {
51
+ "@typescript-eslint": tsPlugin,
52
+ },
53
+ languageOptions: {
54
+ parser: tsParser,
55
+ ecmaVersion: "latest",
56
+ sourceType: "module",
57
+ globals: {
58
+ ...globals.browser,
59
+ ...globals.node,
60
+ ...globals.commonjs,
61
+ },
62
+ },
63
+ rules: {
64
+ "no-undef": "error",
65
+ "no-unused-vars": ["warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }],
66
+ "no-empty": "off",
67
+ "no-constant-condition": "off",
68
+ "no-redeclare": "off",
69
+ "no-var": "off",
70
+ "no-mixed-operators": "off",
71
+ },
72
+ },
73
+ ];
74
+
75
+ export class CommandHandler extends InheritClass {
76
+ choiceOption: {
77
+ lint: (targets: string[], options: { fix?: boolean; config?: string }) => Promise<void>;
78
+ };
79
+
80
+ constructor({
81
+ switchCommander
82
+ }: { switchCommander: any }) {
83
+ super({ switchCommander });
84
+ this.choiceOption = {
85
+ async lint(targets, options) {
86
+ try {
87
+ const cwd = process.cwd();
88
+ const requestedTargets = targets.length > 0 ? targets : DEFAULT_TARGETS;
89
+ const ignoreFlags = DEFAULT_IGNORES.map(ignored => new RegExp(ignored.replace(/\*\*/g, ".*")));
90
+ const files = requestedTargets
91
+ .flatMap(target => glob.sync(target, { cwd, nodir: true }))
92
+ .filter((file: string) => !ignoreFlags.some(flag => flag.test(file)));
93
+
94
+ if (files.length === 0) {
95
+ console.warn(`No files matched: ${requestedTargets.join(", ")}`);
96
+ process.exit(0);
97
+ }
98
+
99
+ let flatConfig = DEFAULT_FLAT_CONFIG;
100
+ const appConfigPath = ["eslint.config.js", "eslint.config.mjs", "eslint.config.cjs"]
101
+ .map(name => path.resolve(cwd, name))
102
+ .find(appConfigPath => fs.existsSync(appConfigPath));
103
+
104
+ if (options.config) {
105
+ const explicitConfigPath = path.resolve(cwd, options.config);
106
+ if (!fs.existsSync(explicitConfigPath)) {
107
+ console.warn(`Config file not found: ${explicitConfigPath}`);
108
+ process.exit(1);
109
+ }
110
+ flatConfig = (await import(pathToFileURL(explicitConfigPath).href)).default;
111
+ console.log(`Using config file: ${explicitConfigPath}`);
112
+ } else if (appConfigPath) {
113
+ flatConfig = (await import(pathToFileURL(appConfigPath).href)).default;
114
+ console.log(`Using app config file: ${appConfigPath}`);
115
+ } else if (fs.existsSync(path.resolve(cwd, ".eslintrc")) || fs.existsSync(path.resolve(cwd, ".eslintrc.js")) || fs.existsSync(path.resolve(cwd, ".eslintrc.cjs")) || fs.existsSync(path.resolve(cwd, ".eslintrc.json"))) {
116
+ console.warn("Legacy .eslintrc config detected but not supported; using built-in QCObjects settings. Migrate to eslint.config.mjs to override defaults.");
117
+ } else {
118
+ console.log("No app eslint config found. Using built-in QCObjects settings (overridable with an eslint.config.mjs in your app).");
119
+ }
120
+
121
+ const linter = new Linter({ cwd, configType: "flat" });
122
+ let errorCount = 0;
123
+ let warningCount = 0;
124
+ let fixedCount = 0;
125
+
126
+ for (const file of files) {
127
+ const absolutePath = path.resolve(cwd, file);
128
+ const source = fs.readFileSync(absolutePath, "utf8");
129
+ const result: { fixed: boolean; output: string; messages: any[] } = options.fix
130
+ ? linter.verifyAndFix(source, flatConfig, absolutePath)
131
+ : { fixed: false, output: source, messages: linter.verify(source, flatConfig, absolutePath) };
132
+ if (result.fixed) {
133
+ fixedCount++;
134
+ fs.writeFileSync(absolutePath, result.output);
135
+ }
136
+ for (const message of result.messages) {
137
+ const severity = message.severity === 2 ? "error" : message.severity === 1 ? "warning" : "info";
138
+ const output = `${file}:${message.line}:${message.column} ${severity} ${message.message} (${message.ruleId ?? "parse"})`;
139
+ if (message.severity === 2) {
140
+ errorCount++;
141
+ console.error(output);
142
+ } else if (message.severity === 1) {
143
+ warningCount++;
144
+ console.warn(output);
145
+ } else {
146
+ console.log(output);
147
+ }
148
+ }
149
+ }
150
+
151
+ const summary = `${files.length} file(s) linted, ${errorCount} error(s), ${warningCount} warning(s), ${fixedCount} file(s) fixed.`;
152
+ if (errorCount > 0) {
153
+ console.error(summary);
154
+ process.exit(1);
155
+ }
156
+ console.log(summary);
157
+ process.exit(0);
158
+ } catch (e: any) {
159
+ console.warn(`Something went wrong trying to lint: ${e.message}`);
160
+ process.exit(1);
161
+ }
162
+ }
163
+ };
164
+
165
+ const commandHandler = this;
166
+
167
+ const lintCommand = switchCommander.program.command("lint [targets...]")
168
+ .allowExcessArguments(false)
169
+ .option("-f, --fix", "Automatically fix problems")
170
+ .option("-c, --config <path>", "Use a specific eslint config file")
171
+ .description("Lints JS/TS files using built-in QCObjects settings. Default target: src/**/*.ts")
172
+ .action(function (targets: string[], options: { fix?: boolean; config?: string }) {
173
+ commandHandler.choiceOption.lint.call(commandHandler, targets ?? [], options);
174
+ });
175
+
176
+ }
177
+ }
178
+
179
+ Package("com.qcobjects.cli.commands.lint", [
180
+ CommandHandler
181
+ ]);
@@ -27,4 +27,5 @@ export * as versionCommand from "./cli-commands-version";
27
27
  export * as jiraCommand from "./cli-commands-jira";
28
28
  export * as publishStatic from "./cli-commands-publish-static";
29
29
  export * as buildTypescript from "./cli-commands-build-typescript";
30
- export * as buildEsbuild from "./cli-commands-build-esbuild";
30
+ export * as buildEsbuild from "./cli-commands-build-esbuild";
31
+ export * as lintCommand from "./cli-commands-lint";
@@ -20,7 +20,8 @@
20
20
  /*eslint strict: "off"*/
21
21
  /*eslint no-mixed-operators: "off"*/
22
22
  /*eslint no-undef: "off"*/
23
- import { CONFIG, Package, InheritClass, logger, global } from "qcobjects";
23
+ import { CONFIG, Package, InheritClass, logger } from "qcobjects";
24
+ const global = globalThis as any;
24
25
  import os from "os";
25
26
  import fs from "fs";
26
27
  import net from "node:net";
@@ -24,7 +24,7 @@ import "qcobjects";
24
24
  import {readFileSync} from "node:fs";
25
25
  import path from "node:path";
26
26
  import fs from "node:fs";
27
- import { CONFIG, global, logger, _Crypt, findPackageNodePath, Export, _DataStringify, Processor } from "qcobjects";
27
+ import { CONFIG, global, logger, _Crypt, findPackageNodePath, Export, _DataStringify, Processor, set } from "qcobjects";
28
28
 
29
29
  export const __get_version__ = () => {
30
30
 
@@ -196,7 +196,7 @@ const __load_default_settings__ = () => {
196
196
  setDevMode(CONFIG.get("devmode", ""));
197
197
 
198
198
  if (typeof CONFIG.get("backend") !== "undefined") {
199
- global.set("backendAvailable", true);
199
+ set("backendAvailable", true);
200
200
  }
201
201
 
202
202
  if (typeof CONFIG.get("basePath") !== "undefined") {
@@ -20,7 +20,7 @@
20
20
  /*eslint no-mixed-operators: "off"*/
21
21
  /*eslint no-undef: "off"*/
22
22
  "use strict";
23
- import { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory, Export } from "qcobjects";
23
+ import { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, get, ClassFactory, Export } from "qcobjects";
24
24
  import os from "node:os";
25
25
  import path from "node:path";
26
26
  import fs from "node:fs";
@@ -74,7 +74,7 @@ export class HTTPServer extends InheritClass {
74
74
 
75
75
  server?.on("error", (err: any) => console.error(err));
76
76
 
77
- if (global.get("backendAvailable")) {
77
+ if (get("backendAvailable")) {
78
78
  logger.info("Loading backend interceptors...");
79
79
  const interceptors = CONFIG.get("backend", {}).interceptors;
80
80
  if (typeof interceptors !== "undefined") {
@@ -139,7 +139,7 @@ export class HTTPServer extends InheritClass {
139
139
 
140
140
  logger.debug(PipeLog.pipe(this.request));
141
141
 
142
- if (global.get("backendAvailable")) {
142
+ if (get("backendAvailable")) {
143
143
  logger.info("Backend GAE Microservices Available");
144
144
  const routes = CONFIG.get("backend").routes;
145
145
  const selectedRoute = routes.filter((route: { path: string; }) => {
@@ -22,7 +22,7 @@
22
22
  "use strict";
23
23
  import os from "node:os";
24
24
  import path from "node:path";
25
- import { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory, Export } from "qcobjects";
25
+ import { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, get, ClassFactory, Export } from "qcobjects";
26
26
  import fs from "fs";
27
27
  import mime from "mime";
28
28
  import http from "http";
@@ -428,7 +428,7 @@ export class HTTPServer extends InheritClass {
428
428
 
429
429
  this.server.on("error", (err: any) => console.error(err));
430
430
 
431
- if (global.get("backendAvailable")) {
431
+ if (get("backendAvailable")) {
432
432
  logger.info("Loading backend interceptors...");
433
433
  const interceptors = CONFIG.get("backend", {}).interceptors;
434
434
  if (typeof interceptors !== "undefined") {
@@ -492,7 +492,7 @@ export class HTTPServer extends InheritClass {
492
492
 
493
493
  logger.debug(PipeLog.pipe(this.request));
494
494
 
495
- if (global.get("backendAvailable")) {
495
+ if (get("backendAvailable")) {
496
496
  logger.info("Backend Legacy Microservices Available...");
497
497
 
498
498
  logger.info("Loading backend routes...");
@@ -21,7 +21,7 @@
21
21
  /*eslint no-undef: "off"*/
22
22
  "use strict";
23
23
 
24
- import { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory } from "qcobjects";
24
+ import { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, get, ClassFactory } from "qcobjects";
25
25
 
26
26
  import mime from "mime";
27
27
  import path from "node:path";
@@ -248,7 +248,7 @@ export class HTTP2Server extends InheritClass {
248
248
 
249
249
  });
250
250
 
251
- if (global.get("backendAvailable")) {
251
+ if (get("backendAvailable")) {
252
252
  logger.info("Loading backend interceptors...");
253
253
  const interceptors = CONFIG.get("backend", {}).interceptors;
254
254
  if (typeof interceptors !== "undefined") {
@@ -330,7 +330,7 @@ export class HTTP2Server extends InheritClass {
330
330
 
331
331
  logger.debug(PipeLog.pipe(this.request));
332
332
 
333
- if (global.get("backendAvailable")) {
333
+ if (get("backendAvailable")) {
334
334
  logger.info("Backend Microservices Available...");
335
335
 
336
336
  logger.info("Loading backend routes...");
@@ -49,13 +49,13 @@ class Main extends InheritClass {
49
49
  __dirname:"./",
50
50
  __filename:"qcobjects-shell-file.js"
51
51
  };
52
- global.context = vm.createContext(sandbox);
52
+ (globalThis as any).context = vm.createContext(sandbox);
53
53
 
54
54
  const runScript = (code: string,logOutput=false)=>{
55
55
  const options = {filename:sandbox.__filename};
56
56
 
57
57
  const backgroundRunScript = (code: string):any=>{
58
- var output = vm.runInContext(code,global.context,options);
58
+ var output = vm.runInContext(code,(globalThis as any).context,options);
59
59
  return output;
60
60
  };
61
61