UNPKG

qcobjects-cli

Version:

qcobjects cli command line tool

8 lines (7 loc) 15.6 kB
{ "version": 3, "sources": ["../../../src/backend/backend-microservice-static.ts"], "sourcesContent": ["/**\n * QCObjects CLI 2.3.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\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/* eslint no-useless-escape: \"off\" */\n\"use strict\";\nimport mime from \"mime\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Package, BackendMicroservice, CONFIG, logger } from \"qcobjects\";\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\n\nPackage(\"com.qcobjects.backend.microservice.static\", [\n class Microservice extends BackendMicroservice {\n stream: any;\n fileName: any;\n route: any;\n request: any;\n body!: void;\n\n finishWithBody() { }\n done() {\n // read and send file content in the stream\n\n const microservice = this;\n const stream = microservice.stream;\n const fileName = (!microservice.fileName.startsWith(\"/\")) ? (`${process.cwd()}/${microservice.fileName}`) : (microservice.fileName);\n\n const sendFileHTTP2 = function (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 let 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 if (typeof microservice.route.responseHeaders !== \"undefined\") {\n headers = Object.assign(headers, microservice.route.responseHeaders);\n }\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.warn(\"[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 };\n\n const sendFileLegacyHTTP = function (stream: { writeHead: (arg0: number, arg1: { status: number; \"Content-Type\": string; }) => void; write: (arg0: string) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; }, fileName: string) {\n // read and send file content in the stream\n let headers;\n try {\n logger.info(\"trying to read \" + fileName);\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n 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 if (typeof microservice.route.responseHeaders !== \"undefined\") {\n headers = Object.assign(headers, microservice.route.responseHeaders);\n }\n\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n\n stream.writeHead(200, headers);\n\n stream.write(fs.readFileSync(fileName).toString());\n stream.on(\"close\", () => {\n logger.info(\"closing static file\", fileName);\n });\n\n } catch (e: any) {\n if (e.errno == -2) {\n headers = {\n \"status\": 404,\n \"Content-Type\": \"text/html\"\n };\n stream.writeHead(404, headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.info(\"closing static file with error: \", fileName);\n });\n }\n logger.warn(e);\n stream.end();\n }\n stream.end();\n\n };\n\n if (typeof stream.respondWithFD !== \"undefined\") {\n sendFileHTTP2(stream, fileName);\n } else {\n sendFileLegacyHTTP(stream, fileName);\n }\n\n }\n\n static(method: string, data: any) {\n const microservice = this;\n const redirect_to = microservice.route.redirect_to;\n return new Promise<void>(function (resolve, reject) {\n const supported_methods = microservice.route.supported_methods;\n let _method_allowed_ = false;\n if (typeof supported_methods !== \"undefined\") {\n if (supported_methods == \"*\" || (typeof method === \"undefined\") || [...supported_methods].map(m => m.toLowerCase()).indexOf(method.toLowerCase()) !== -1) {\n _method_allowed_ = true;\n }\n } else {\n _method_allowed_ = true;\n }\n\n logger.debug(\"Starting static delivery microservice call for method: \" + method);\n if (_method_allowed_) {\n logger.info(\"I'm going to deliver a static path...\");\n if (redirect_to) {\n const request_path = microservice.request.path;\n const re = (new RegExp(microservice.route.path.replace(/{(.*?)}/g, \"\\(\\?\\<$1\\>\\.\\*\\)\"), \"g\"));\n microservice.fileName = request_path.replace(re, microservice.route.redirect_to);\n try {\n resolve();\n } catch (e) {\n logger.warn(\"\\u{1F926} Something went wrong \\u{1F926} when trying to deliver a static path: \" + microservice.fileName);\n reject(e instanceof Error ? e : new Error(String(e)));\n }\n } else {\n logger.info(\"There is no redirect_to setting declared in route properties. \\n Skipping static delivery...\");\n reject(new Error(\"There is no redirect_to setting declared in route properties. \\n Skipping static delivery...\"));\n }\n } else {\n logger.debug(\"Method: \" + method + \" will be skipped\");\n resolve();\n }\n\n });\n }\n\n head(formData: any) {\n const microservice = this;\n microservice.static(\"head\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n }\n\n get(formData: any) {\n const microservice = this;\n microservice.static(\"get\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n }).catch(error => {\n console.error(error);\n });\n }\n\n post(formData: any) {\n const microservice = this;\n microservice.static(\"post\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n put(formData: any) {\n const microservice = this;\n microservice.static(\"put\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n delete(formData: any) {\n const microservice = this;\n microservice.static(\"delete\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n connect(formData: any) {\n const microservice = this;\n microservice.static(\"connect\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n options(formData: any) {\n const microservice = this;\n microservice.static(\"options\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n trace(formData: any) {\n const microservice = this;\n microservice.static(\"trace\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n patch(formData: any) {\n const microservice = this;\n microservice.static(\"patch\", formData).then(response => {\n microservice.body = response;\n microservice.done();\n })\n .catch((e: any) => { logger.warn(`An error ocurred: ${e}`); });\n\n }\n\n }\n\n]);\n"], "mappings": "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", "names": ["stream", "fileName"] }