qcobjects-cli
Version:
qcobjects cli command line tool
233 lines (232 loc) • 9.41 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
import mime from "mime";
import fs from "node:fs";
import path from "node:path";
import { Package, BackendMicroservice, CONFIG, logger } from "qcobjects";
var require_backend_microservice_static = __commonJS({
"src/backend/backend-microservice-static.ts"() {
const absolutePath = path.resolve(__dirname, "./");
Package("com.qcobjects.backend.microservice.static", [
class Microservice extends BackendMicroservice {
static {
__name(this, "Microservice");
}
stream;
fileName;
route;
request;
body;
finishWithBody() {
}
done() {
const microservice = this;
const stream = microservice.stream;
const fileName = !microservice.fileName.startsWith("/") ? `${process.cwd()}/${microservice.fileName}` : microservice.fileName;
const sendFileHTTP2 = /* @__PURE__ */ __name(function(stream2, fileName2) {
try {
const fd = fs.openSync(fileName2, "r");
const stat = fs.fstatSync(fd);
let headers = {
"content-length": stat.size,
"last-modified": stat.mtime.toUTCString(),
"content-type": mime.getType(fileName2),
"cache-control": CONFIG.get("cacheControl", "max-age=31536000")
};
if (typeof microservice.route.responseHeaders !== "undefined") {
headers = Object.assign(headers, microservice.route.responseHeaders);
}
stream2.respondWithFD(fd, headers);
stream2.on("close", () => {
logger.debug("closing file " + fileName2);
fs.closeSync(fd);
});
stream2.end();
} catch (e) {
logger.warn("[ERROR] Something went wrong when trying to send the response as file " + fileName2);
if (e.errno == -2) {
const headers = {
":status": 404,
"content-type": mime.getType(fileName2)
};
stream2.respond(headers);
stream2.write("<h1>404 - FILE NOT FOUND</h1>");
stream2.on("close", () => {
logger.debug("closing file " + fileName2);
});
stream2.end();
}
}
}, "sendFileHTTP2");
const sendFileLegacyHTTP = /* @__PURE__ */ __name(function(stream2, fileName2) {
let headers;
try {
logger.info("trying to read " + fileName2);
const fd = fs.openSync(fileName2, "r");
const stat = fs.fstatSync(fd);
headers = {
"Content-Length": stat.size,
"Last-Modified": stat.mtime.toUTCString(),
"Content-Type": mime.getType(fileName2),
"Cache-Control": CONFIG.get("cacheControl", "max-age=31536000")
};
if (typeof microservice.route.responseHeaders !== "undefined") {
headers = Object.assign(headers, microservice.route.responseHeaders);
}
logger.debug("closing file " + fileName2);
fs.closeSync(fd);
stream2.writeHead(200, headers);
stream2.write(fs.readFileSync(fileName2).toString());
stream2.on("close", () => {
logger.info("closing static file", fileName2);
});
} catch (e) {
if (e.errno == -2) {
headers = {
"status": 404,
"Content-Type": "text/html"
};
stream2.writeHead(404, headers);
stream2.write("<h1>404 - FILE NOT FOUND</h1>");
stream2.on("close", () => {
logger.info("closing static file with error: ", fileName2);
});
}
logger.warn(e);
stream2.end();
}
stream2.end();
}, "sendFileLegacyHTTP");
if (typeof stream.respondWithFD !== "undefined") {
sendFileHTTP2(stream, fileName);
} else {
sendFileLegacyHTTP(stream, fileName);
}
}
static(method, data) {
const microservice = this;
const redirect_to = microservice.route.redirect_to;
return new Promise(function(resolve, reject) {
const supported_methods = microservice.route.supported_methods;
let _method_allowed_ = false;
if (typeof supported_methods !== "undefined") {
if (supported_methods == "*" || typeof method === "undefined" || [...supported_methods].map((m) => m.toLowerCase()).indexOf(method.toLowerCase()) !== -1) {
_method_allowed_ = true;
}
} else {
_method_allowed_ = true;
}
logger.debug("Starting static delivery microservice call for method: " + method);
if (_method_allowed_) {
logger.info("I'm going to deliver a static path...");
if (redirect_to) {
const request_path = microservice.request.path;
const re = new RegExp(microservice.route.path.replace(/{(.*?)}/g, "(?<$1>.*)"), "g");
microservice.fileName = request_path.replace(re, microservice.route.redirect_to);
try {
resolve();
} catch (e) {
logger.warn("\u{1F926} Something went wrong \u{1F926} when trying to deliver a static path: " + microservice.fileName);
reject(e);
}
} else {
logger.info("There is no redirect_to setting declared in route properties. \n Skipping static delivery...");
reject(new Error("There is no redirect_to setting declared in route properties. \n Skipping static delivery..."));
}
} else {
logger.debug("Method: " + method + " will be skipped");
resolve();
}
});
}
head(formData) {
const microservice = this;
microservice.static("head", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
logger.warn(`An error ocurred: ${e}`);
});
}
get(formData) {
const microservice = this;
microservice.static("get", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((error) => {
console.error(error);
});
}
post(formData) {
const microservice = this;
microservice.static("post", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
logger.warn(`An error ocurred: ${e}`);
});
}
put(formData) {
const microservice = this;
microservice.static("put", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
logger.warn(`An error ocurred: ${e}`);
});
}
delete(formData) {
const microservice = this;
microservice.static("delete", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
logger.warn(`An error ocurred: ${e}`);
});
}
connect(formData) {
const microservice = this;
microservice.static("connect", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
logger.warn(`An error ocurred: ${e}`);
});
}
options(formData) {
const microservice = this;
microservice.static("options", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
logger.warn(`An error ocurred: ${e}`);
});
}
trace(formData) {
const microservice = this;
microservice.static("trace", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
logger.warn(`An error ocurred: ${e}`);
});
}
patch(formData) {
const microservice = this;
microservice.static("patch", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
logger.warn(`An error ocurred: ${e}`);
});
}
}
]);
}
});
export default require_backend_microservice_static();
//# sourceMappingURL=backend-microservice-static.mjs.map