qcobjects-cli
Version:
qcobjects cli command line tool
248 lines (247 loc) • 10.5 kB
JavaScript
;
var global = (() => {
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var import_mime = __toESM(require("mime"));
var import_node_fs = __toESM(require("node:fs"));
var import_node_path = __toESM(require("node:path"));
var import_qcobjects = require("qcobjects");
const absolutePath = import_node_path.default.resolve(__dirname, "./");
(0, import_qcobjects.Package)("com.qcobjects.backend.microservice.static", [
class Microservice extends import_qcobjects.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 = import_node_fs.default.openSync(fileName2, "r");
const stat = import_node_fs.default.fstatSync(fd);
let headers = {
"content-length": stat.size,
"last-modified": stat.mtime.toUTCString(),
"content-type": import_mime.default.getType(fileName2),
"cache-control": import_qcobjects.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", () => {
import_qcobjects.logger.debug("closing file " + fileName2);
import_node_fs.default.closeSync(fd);
});
stream2.end();
} catch (e) {
import_qcobjects.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": import_mime.default.getType(fileName2)
};
stream2.respond(headers);
stream2.write("<h1>404 - FILE NOT FOUND</h1>");
stream2.on("close", () => {
import_qcobjects.logger.debug("closing file " + fileName2);
});
stream2.end();
}
}
}, "sendFileHTTP2");
const sendFileLegacyHTTP = /* @__PURE__ */ __name(function(stream2, fileName2) {
let headers;
try {
import_qcobjects.logger.info("trying to read " + fileName2);
const fd = import_node_fs.default.openSync(fileName2, "r");
const stat = import_node_fs.default.fstatSync(fd);
headers = {
"Content-Length": stat.size,
"Last-Modified": stat.mtime.toUTCString(),
"Content-Type": import_mime.default.getType(fileName2),
"Cache-Control": import_qcobjects.CONFIG.get("cacheControl", "max-age=31536000")
};
if (typeof microservice.route.responseHeaders !== "undefined") {
headers = Object.assign(headers, microservice.route.responseHeaders);
}
import_qcobjects.logger.debug("closing file " + fileName2);
import_node_fs.default.closeSync(fd);
stream2.writeHead(200, headers);
stream2.write(import_node_fs.default.readFileSync(fileName2).toString());
stream2.on("close", () => {
import_qcobjects.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", () => {
import_qcobjects.logger.info("closing static file with error: ", fileName2);
});
}
import_qcobjects.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;
}
import_qcobjects.logger.debug("Starting static delivery microservice call for method: " + method);
if (_method_allowed_) {
import_qcobjects.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) {
import_qcobjects.logger.warn("\u{1F926} Something went wrong \u{1F926} when trying to deliver a static path: " + microservice.fileName);
reject(e);
}
} else {
import_qcobjects.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 {
import_qcobjects.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) => {
import_qcobjects.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) => {
import_qcobjects.logger.warn(`An error ocurred: ${e}`);
});
}
put(formData) {
const microservice = this;
microservice.static("put", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
import_qcobjects.logger.warn(`An error ocurred: ${e}`);
});
}
delete(formData) {
const microservice = this;
microservice.static("delete", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
import_qcobjects.logger.warn(`An error ocurred: ${e}`);
});
}
connect(formData) {
const microservice = this;
microservice.static("connect", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
import_qcobjects.logger.warn(`An error ocurred: ${e}`);
});
}
options(formData) {
const microservice = this;
microservice.static("options", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
import_qcobjects.logger.warn(`An error ocurred: ${e}`);
});
}
trace(formData) {
const microservice = this;
microservice.static("trace", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
import_qcobjects.logger.warn(`An error ocurred: ${e}`);
});
}
patch(formData) {
const microservice = this;
microservice.static("patch", formData).then((response) => {
microservice.body = response;
microservice.done();
}).catch((e) => {
import_qcobjects.logger.warn(`An error ocurred: ${e}`);
});
}
}
]);
})();
//# sourceMappingURL=backend-microservice-static.js.map