UNPKG

qcobjects-cli

Version:

qcobjects cli command line tool

8 lines (7 loc) 16.1 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\n const absolutePath = path.resolve(__dirname, \"./\");\n\n\n Package(\"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 as Error);\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"] }