|
|
@@ -18663,11 +18663,11 @@ var require_view = __commonJS({
|
|
|
"use strict";
|
|
|
var debug = require_src()("express:view");
|
|
|
var path2 = require("node:path");
|
|
|
- var fs3 = require("node:fs");
|
|
|
+ var fs4 = require("node:fs");
|
|
|
var dirname = path2.dirname;
|
|
|
var basename = path2.basename;
|
|
|
var extname = path2.extname;
|
|
|
- var join = path2.join;
|
|
|
+ var join2 = path2.join;
|
|
|
var resolve = path2.resolve;
|
|
|
module2.exports = View;
|
|
|
function View(name, options) {
|
|
|
@@ -18729,12 +18729,12 @@ var require_view = __commonJS({
|
|
|
};
|
|
|
View.prototype.resolve = function resolve2(dir, file) {
|
|
|
var ext = this.ext;
|
|
|
- var path3 = join(dir, file);
|
|
|
+ var path3 = join2(dir, file);
|
|
|
var stat = tryStat(path3);
|
|
|
if (stat && stat.isFile()) {
|
|
|
return path3;
|
|
|
}
|
|
|
- path3 = join(dir, basename(file, ext), "index" + ext);
|
|
|
+ path3 = join2(dir, basename(file, ext), "index" + ext);
|
|
|
stat = tryStat(path3);
|
|
|
if (stat && stat.isFile()) {
|
|
|
return path3;
|
|
|
@@ -18743,7 +18743,7 @@ var require_view = __commonJS({
|
|
|
function tryStat(path3) {
|
|
|
debug('stat "%s"', path3);
|
|
|
try {
|
|
|
- return fs3.statSync(path3);
|
|
|
+ return fs4.statSync(path3);
|
|
|
} catch (e) {
|
|
|
return void 0;
|
|
|
}
|
|
|
@@ -22429,7 +22429,7 @@ var require_send = __commonJS({
|
|
|
var escapeHtml = require_escape_html();
|
|
|
var etag = require_etag();
|
|
|
var fresh = require_fresh();
|
|
|
- var fs3 = require("fs");
|
|
|
+ var fs4 = require("fs");
|
|
|
var mime = require_mime_types();
|
|
|
var ms = require_ms();
|
|
|
var onFinished = require_on_finished();
|
|
|
@@ -22439,7 +22439,7 @@ var require_send = __commonJS({
|
|
|
var Stream = require("stream");
|
|
|
var util = require("util");
|
|
|
var extname = path2.extname;
|
|
|
- var join = path2.join;
|
|
|
+ var join2 = path2.join;
|
|
|
var normalize = path2.normalize;
|
|
|
var resolve = path2.resolve;
|
|
|
var sep = path2.sep;
|
|
|
@@ -22611,7 +22611,7 @@ var require_send = __commonJS({
|
|
|
return res;
|
|
|
}
|
|
|
parts = path3.split(sep);
|
|
|
- path3 = normalize(join(root, path3));
|
|
|
+ path3 = normalize(join2(root, path3));
|
|
|
} else {
|
|
|
if (UP_PATH_REGEXP.test(path3)) {
|
|
|
debug('malicious path "%s"', path3);
|
|
|
@@ -22711,7 +22711,7 @@ var require_send = __commonJS({
|
|
|
var i = 0;
|
|
|
var self2 = this;
|
|
|
debug('stat "%s"', path3);
|
|
|
- fs3.stat(path3, function onstat(err, stat) {
|
|
|
+ fs4.stat(path3, function onstat(err, stat) {
|
|
|
var pathEndsWithSep = path3[path3.length - 1] === sep;
|
|
|
if (err && err.code === "ENOENT" && !extname(path3) && !pathEndsWithSep) {
|
|
|
return next(err);
|
|
|
@@ -22728,7 +22728,7 @@ var require_send = __commonJS({
|
|
|
}
|
|
|
var p = path3 + "." + self2._extensions[i++];
|
|
|
debug('stat "%s"', p);
|
|
|
- fs3.stat(p, function(err2, stat) {
|
|
|
+ fs4.stat(p, function(err2, stat) {
|
|
|
if (err2) return next(err2);
|
|
|
if (stat.isDirectory()) return next();
|
|
|
self2.emit("file", p, stat);
|
|
|
@@ -22744,9 +22744,9 @@ var require_send = __commonJS({
|
|
|
if (err) return self2.onStatError(err);
|
|
|
return self2.error(404);
|
|
|
}
|
|
|
- var p = join(path3, self2._index[i]);
|
|
|
+ var p = join2(path3, self2._index[i]);
|
|
|
debug('stat "%s"', p);
|
|
|
- fs3.stat(p, function(err2, stat) {
|
|
|
+ fs4.stat(p, function(err2, stat) {
|
|
|
if (err2) return next(err2);
|
|
|
if (stat.isDirectory()) return next();
|
|
|
self2.emit("file", p, stat);
|
|
|
@@ -22758,7 +22758,7 @@ var require_send = __commonJS({
|
|
|
SendStream.prototype.stream = function stream(path3, options) {
|
|
|
var self2 = this;
|
|
|
var res = this.res;
|
|
|
- var stream2 = fs3.createReadStream(path3, options);
|
|
|
+ var stream2 = fs4.createReadStream(path3, options);
|
|
|
this.emit("stream", stream2);
|
|
|
stream2.pipe(res);
|
|
|
function cleanup() {
|
|
|
@@ -27647,8 +27647,8 @@ var require_node2 = __commonJS({
|
|
|
}
|
|
|
break;
|
|
|
case "FILE":
|
|
|
- var fs3 = require("fs");
|
|
|
- stream2 = new fs3.SyncWriteStream(fd2, { autoClose: false });
|
|
|
+ var fs4 = require("fs");
|
|
|
+ stream2 = new fs4.SyncWriteStream(fd2, { autoClose: false });
|
|
|
stream2._type = "fs";
|
|
|
break;
|
|
|
case "PIPE":
|
|
|
@@ -50001,7 +50001,7 @@ var require_binary2 = __commonJS({
|
|
|
var require_file = __commonJS({
|
|
|
"node_modules/@apidevtools/json-schema-ref-parser/lib/resolvers/file.js"(exports2, module2) {
|
|
|
"use strict";
|
|
|
- var fs3 = require("fs");
|
|
|
+ var fs4 = require("fs");
|
|
|
var { ono } = require_cjs();
|
|
|
var url = require_url();
|
|
|
var { ResolverError } = require_errors();
|
|
|
@@ -50042,7 +50042,7 @@ var require_file = __commonJS({
|
|
|
reject(new ResolverError(ono.uri(err, `Malformed URI: ${file.url}`), file.url));
|
|
|
}
|
|
|
try {
|
|
|
- fs3.readFile(path2, (err, data) => {
|
|
|
+ fs4.readFile(path2, (err, data) => {
|
|
|
if (err) {
|
|
|
reject(new ResolverError(ono(err, `Error opening file "${path2}"`), path2));
|
|
|
} else {
|
|
|
@@ -57048,7 +57048,7 @@ var require_old = __commonJS({
|
|
|
"node_modules/fs.realpath/old.js"(exports2) {
|
|
|
var pathModule = require("path");
|
|
|
var isWindows = process.platform === "win32";
|
|
|
- var fs3 = require("fs");
|
|
|
+ var fs4 = require("fs");
|
|
|
var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);
|
|
|
function rethrow() {
|
|
|
var callback;
|
|
|
@@ -57113,7 +57113,7 @@ var require_old = __commonJS({
|
|
|
base = m[0];
|
|
|
previous = "";
|
|
|
if (isWindows && !knownHard[base]) {
|
|
|
- fs3.lstatSync(base);
|
|
|
+ fs4.lstatSync(base);
|
|
|
knownHard[base] = true;
|
|
|
}
|
|
|
}
|
|
|
@@ -57131,7 +57131,7 @@ var require_old = __commonJS({
|
|
|
if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
|
|
|
resolvedLink = cache[base];
|
|
|
} else {
|
|
|
- var stat = fs3.lstatSync(base);
|
|
|
+ var stat = fs4.lstatSync(base);
|
|
|
if (!stat.isSymbolicLink()) {
|
|
|
knownHard[base] = true;
|
|
|
if (cache) cache[base] = base;
|
|
|
@@ -57145,8 +57145,8 @@ var require_old = __commonJS({
|
|
|
}
|
|
|
}
|
|
|
if (linkTarget === null) {
|
|
|
- fs3.statSync(base);
|
|
|
- linkTarget = fs3.readlinkSync(base);
|
|
|
+ fs4.statSync(base);
|
|
|
+ linkTarget = fs4.readlinkSync(base);
|
|
|
}
|
|
|
resolvedLink = pathModule.resolve(previous, linkTarget);
|
|
|
if (cache) cache[base] = resolvedLink;
|
|
|
@@ -57180,7 +57180,7 @@ var require_old = __commonJS({
|
|
|
base = m[0];
|
|
|
previous = "";
|
|
|
if (isWindows && !knownHard[base]) {
|
|
|
- fs3.lstat(base, function(err) {
|
|
|
+ fs4.lstat(base, function(err) {
|
|
|
if (err) return cb(err);
|
|
|
knownHard[base] = true;
|
|
|
LOOP();
|
|
|
@@ -57206,7 +57206,7 @@ var require_old = __commonJS({
|
|
|
if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
|
|
|
return gotResolvedLink(cache[base]);
|
|
|
}
|
|
|
- return fs3.lstat(base, gotStat);
|
|
|
+ return fs4.lstat(base, gotStat);
|
|
|
}
|
|
|
function gotStat(err, stat) {
|
|
|
if (err) return cb(err);
|
|
|
@@ -57221,9 +57221,9 @@ var require_old = __commonJS({
|
|
|
return gotTarget(null, seenLinks[id], base);
|
|
|
}
|
|
|
}
|
|
|
- fs3.stat(base, function(err2) {
|
|
|
+ fs4.stat(base, function(err2) {
|
|
|
if (err2) return cb(err2);
|
|
|
- fs3.readlink(base, function(err3, target) {
|
|
|
+ fs4.readlink(base, function(err3, target) {
|
|
|
if (!isWindows) seenLinks[id] = target;
|
|
|
gotTarget(err3, target);
|
|
|
});
|
|
|
@@ -57252,9 +57252,9 @@ var require_fs = __commonJS({
|
|
|
realpath.realpathSync = realpathSync;
|
|
|
realpath.monkeypatch = monkeypatch;
|
|
|
realpath.unmonkeypatch = unmonkeypatch;
|
|
|
- var fs3 = require("fs");
|
|
|
- var origRealpath = fs3.realpath;
|
|
|
- var origRealpathSync = fs3.realpathSync;
|
|
|
+ var fs4 = require("fs");
|
|
|
+ var origRealpath = fs4.realpath;
|
|
|
+ var origRealpathSync = fs4.realpathSync;
|
|
|
var version = process.version;
|
|
|
var ok = /^v[0-5]\./.test(version);
|
|
|
var old = require_old();
|
|
|
@@ -57292,12 +57292,12 @@ var require_fs = __commonJS({
|
|
|
}
|
|
|
}
|
|
|
function monkeypatch() {
|
|
|
- fs3.realpath = realpath;
|
|
|
- fs3.realpathSync = realpathSync;
|
|
|
+ fs4.realpath = realpath;
|
|
|
+ fs4.realpathSync = realpathSync;
|
|
|
}
|
|
|
function unmonkeypatch() {
|
|
|
- fs3.realpath = origRealpath;
|
|
|
- fs3.realpathSync = origRealpathSync;
|
|
|
+ fs4.realpath = origRealpath;
|
|
|
+ fs4.realpathSync = origRealpathSync;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
@@ -58417,7 +58417,7 @@ var require_sync = __commonJS({
|
|
|
"node_modules/glob/sync.js"(exports2, module2) {
|
|
|
module2.exports = globSync;
|
|
|
globSync.GlobSync = GlobSync;
|
|
|
- var fs3 = require("fs");
|
|
|
+ var fs4 = require("fs");
|
|
|
var rp = require_fs();
|
|
|
var minimatch = require_minimatch();
|
|
|
var Minimatch = minimatch.Minimatch;
|
|
|
@@ -58596,7 +58596,7 @@ var require_sync = __commonJS({
|
|
|
var lstat;
|
|
|
var stat;
|
|
|
try {
|
|
|
- lstat = fs3.lstatSync(abs);
|
|
|
+ lstat = fs4.lstatSync(abs);
|
|
|
} catch (er) {
|
|
|
if (er.code === "ENOENT") {
|
|
|
return null;
|
|
|
@@ -58622,7 +58622,7 @@ var require_sync = __commonJS({
|
|
|
return c;
|
|
|
}
|
|
|
try {
|
|
|
- return this._readdirEntries(abs, fs3.readdirSync(abs));
|
|
|
+ return this._readdirEntries(abs, fs4.readdirSync(abs));
|
|
|
} catch (er) {
|
|
|
this._readdirError(abs, er);
|
|
|
return null;
|
|
|
@@ -58733,7 +58733,7 @@ var require_sync = __commonJS({
|
|
|
if (!stat) {
|
|
|
var lstat;
|
|
|
try {
|
|
|
- lstat = fs3.lstatSync(abs);
|
|
|
+ lstat = fs4.lstatSync(abs);
|
|
|
} catch (er) {
|
|
|
if (er && (er.code === "ENOENT" || er.code === "ENOTDIR")) {
|
|
|
this.statCache[abs] = false;
|
|
|
@@ -58742,7 +58742,7 @@ var require_sync = __commonJS({
|
|
|
}
|
|
|
if (lstat && lstat.isSymbolicLink()) {
|
|
|
try {
|
|
|
- stat = fs3.statSync(abs);
|
|
|
+ stat = fs4.statSync(abs);
|
|
|
} catch (er) {
|
|
|
stat = lstat;
|
|
|
}
|
|
|
@@ -58818,7 +58818,7 @@ var require_inflight = __commonJS({
|
|
|
var require_glob = __commonJS({
|
|
|
"node_modules/glob/glob.js"(exports2, module2) {
|
|
|
module2.exports = glob;
|
|
|
- var fs3 = require("fs");
|
|
|
+ var fs4 = require("fs");
|
|
|
var rp = require_fs();
|
|
|
var minimatch = require_minimatch();
|
|
|
var Minimatch = minimatch.Minimatch;
|
|
|
@@ -59162,7 +59162,7 @@ var require_glob = __commonJS({
|
|
|
var self2 = this;
|
|
|
var lstatcb = inflight(lstatkey, lstatcb_);
|
|
|
if (lstatcb)
|
|
|
- fs3.lstat(abs, lstatcb);
|
|
|
+ fs4.lstat(abs, lstatcb);
|
|
|
function lstatcb_(er, lstat) {
|
|
|
if (er && er.code === "ENOENT")
|
|
|
return cb();
|
|
|
@@ -59191,7 +59191,7 @@ var require_glob = __commonJS({
|
|
|
return cb(null, c);
|
|
|
}
|
|
|
var self2 = this;
|
|
|
- fs3.readdir(abs, readdirCb(this, abs, cb));
|
|
|
+ fs4.readdir(abs, readdirCb(this, abs, cb));
|
|
|
};
|
|
|
function readdirCb(self2, abs, cb) {
|
|
|
return function(er, entries) {
|
|
|
@@ -59337,10 +59337,10 @@ var require_glob = __commonJS({
|
|
|
var self2 = this;
|
|
|
var statcb = inflight("stat\0" + abs, lstatcb_);
|
|
|
if (statcb)
|
|
|
- fs3.lstat(abs, statcb);
|
|
|
+ fs4.lstat(abs, statcb);
|
|
|
function lstatcb_(er, lstat) {
|
|
|
if (lstat && lstat.isSymbolicLink()) {
|
|
|
- return fs3.stat(abs, function(er2, stat2) {
|
|
|
+ return fs4.stat(abs, function(er2, stat2) {
|
|
|
if (er2)
|
|
|
self2._stat2(f, abs, null, lstat, cb);
|
|
|
else
|
|
|
@@ -60096,7 +60096,7 @@ var require_lodash3 = __commonJS({
|
|
|
// node_modules/swagger-jsdoc/src/utils.js
|
|
|
var require_utils5 = __commonJS({
|
|
|
"node_modules/swagger-jsdoc/src/utils.js"(exports2, module2) {
|
|
|
- var fs3 = require("fs");
|
|
|
+ var fs4 = require("fs");
|
|
|
var path2 = require("path");
|
|
|
var glob = require_glob();
|
|
|
var mergeWith = require_lodash3();
|
|
|
@@ -60118,7 +60118,7 @@ var require_utils5 = __commonJS({
|
|
|
return yamlParts;
|
|
|
}
|
|
|
function extractAnnotations(filePath, encoding = "utf8") {
|
|
|
- const fileContent = fs3.readFileSync(filePath, { encoding });
|
|
|
+ const fileContent = fs4.readFileSync(filePath, { encoding });
|
|
|
const ext = path2.extname(filePath);
|
|
|
const jsDocRegex = /\/\*\*([\s\S]*?)\*\//gm;
|
|
|
const csDocRegex = /###([\s\S]*?)###/gm;
|
|
|
@@ -60470,7 +60470,7 @@ var require_swagger_jsdoc = __commonJS({
|
|
|
// lib/index.ts
|
|
|
var index_exports = {};
|
|
|
__export(index_exports, {
|
|
|
- $$: () => $$,
|
|
|
+ $: () => $,
|
|
|
Guid: () => Guid,
|
|
|
HttpHandler: () => HttpHandler,
|
|
|
HttpMethod: () => HttpMethod,
|
|
|
@@ -60492,10 +60492,8 @@ __export(index_exports, {
|
|
|
module.exports = __toCommonJS(index_exports);
|
|
|
|
|
|
// lib/server/Server.ts
|
|
|
-var import_path = __toESM(require("path"));
|
|
|
var import_fs2 = __toESM(require("fs"));
|
|
|
-var import_http9 = __toESM(require("http"));
|
|
|
-var import_url = require("url");
|
|
|
+var import_http11 = __toESM(require("http"));
|
|
|
var import_express3 = __toESM(require_express2());
|
|
|
|
|
|
// lib/base/http/HttpHandler.ts
|
|
|
@@ -60679,11 +60677,11 @@ var i18nLoader = class _i18nLoader {
|
|
|
this.locale = locale;
|
|
|
this.map = {
|
|
|
"en_US": {
|
|
|
- "org.crazydoctor.expressts.start": "org.crazydoctor.expressts server started on port {port}",
|
|
|
- "org.crazydoctor.expressts.httpError.500": "Internal server error",
|
|
|
- "org.crazydoctor.expressts.httpError.404": "Page {url} not found",
|
|
|
- "org.crazydoctor.expressts.swagger.registered": "Swagger documentation is available on {path}",
|
|
|
- "org.crazydoctor.expressts.swagger.routeGenerated": "Swagger documentation for route '{route}' generated"
|
|
|
+ "org.crazydoctor.extress.start": "Extress server started on port {port}",
|
|
|
+ "org.crazydoctor.extress.httpError.500": "Internal server error",
|
|
|
+ "org.crazydoctor.extress.httpError.404": "Page {url} not found",
|
|
|
+ "org.crazydoctor.extress.swagger.registered": "Swagger documentation is available on {path}",
|
|
|
+ "org.crazydoctor.extress.swagger.routeGenerated": "Swagger documentation for route '{route}' generated"
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
@@ -60730,7 +60728,7 @@ var i18nLoader = class _i18nLoader {
|
|
|
return value ?? key;
|
|
|
}
|
|
|
};
|
|
|
-var $$ = (key, params) => {
|
|
|
+var $ = (key, params) => {
|
|
|
let text = i18nLoader.getInstance().get(key);
|
|
|
if (params) {
|
|
|
for (const param of Object.keys(params)) {
|
|
|
@@ -60771,6 +60769,52 @@ var Guid = class {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+// lib/base/registry/Registry.ts
|
|
|
+var Registry = class _Registry {
|
|
|
+ constructor() {
|
|
|
+ this.server = null;
|
|
|
+ }
|
|
|
+ static {
|
|
|
+ this.httpHandlers = {};
|
|
|
+ }
|
|
|
+ async registerHttpHandlers() {
|
|
|
+ await this.registerRoutes();
|
|
|
+ await this.registerMiddlewares();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ registerHttpHandler(handler) {
|
|
|
+ let id = Guid.new();
|
|
|
+ while (_Registry.httpHandlers[id] != null)
|
|
|
+ id = Guid.new();
|
|
|
+ _Registry.httpHandlers[id] = handler;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ setServer(server) {
|
|
|
+ if (this.server != null)
|
|
|
+ return this;
|
|
|
+ return this.server = server, this;
|
|
|
+ }
|
|
|
+ getServer() {
|
|
|
+ return this.server;
|
|
|
+ }
|
|
|
+ static getHttpHandlers() {
|
|
|
+ const handlers = [];
|
|
|
+ const middlewareOrders = [];
|
|
|
+ for (const key in _Registry.httpHandlers) {
|
|
|
+ const handler = _Registry.httpHandlers[key];
|
|
|
+ if (handler instanceof Middleware) {
|
|
|
+ const order = handler.getOrder();
|
|
|
+ if (middlewareOrders.includes(order))
|
|
|
+ throw `Invalid middleware order number: ${handler.constructor.name}`;
|
|
|
+ middlewareOrders.push(order);
|
|
|
+ }
|
|
|
+ handlers.push(_Registry.httpHandlers[key]);
|
|
|
+ }
|
|
|
+ return handlers.sort((a, b) => a instanceof Middleware && b instanceof Middleware && a.getOrder() - b.getOrder() || (a instanceof Middleware && -1 || (b instanceof Middleware && 1 || 0)));
|
|
|
+ }
|
|
|
+};
|
|
|
+var Registry_default = Registry;
|
|
|
+
|
|
|
// lib/middlewares/ExpressJsonMiddleware.ts
|
|
|
var import_express = __toESM(require_express2());
|
|
|
var ExpressJsonMiddleware = class extends Middleware {
|
|
|
@@ -60801,7 +60845,7 @@ var InternalServerErrorHandler = class extends Middleware {
|
|
|
this.route = null;
|
|
|
this.action = (err, req, res, next) => {
|
|
|
this.context.logError(`${err.message}: ${err.stack}`);
|
|
|
- res.status(500 /* INTERNAL_SERVER_ERROR */).send($$("org.crazydoctor.expressts.httpError.500"));
|
|
|
+ res.status(500 /* INTERNAL_SERVER_ERROR */).send($("org.crazydoctor.extress.httpError.500"));
|
|
|
};
|
|
|
}
|
|
|
};
|
|
|
@@ -60813,7 +60857,7 @@ var NotFoundErrorHandler = class extends Middleware {
|
|
|
this.order = 9999 /* NotFoundErrorHandler */;
|
|
|
this.route = null;
|
|
|
this.action = (req, res, next) => {
|
|
|
- res.status(404 /* NOT_FOUND */).send($$("org.crazydoctor.expressts.httpError.404", { url: req.url }));
|
|
|
+ res.status(404 /* NOT_FOUND */).send($("org.crazydoctor.extress.httpError.404", { url: req.url }));
|
|
|
};
|
|
|
}
|
|
|
};
|
|
|
@@ -60823,7 +60867,7 @@ var PoweredByHeaderMiddleware = class extends Middleware {
|
|
|
constructor() {
|
|
|
super(...arguments);
|
|
|
this.action = (req, res, next) => {
|
|
|
- res.setHeader("X-Powered-By", "org.crazydoctor.expressts");
|
|
|
+ res.setHeader("X-Powered-By", "Extress");
|
|
|
next();
|
|
|
};
|
|
|
this.order = -101 /* PoweredByHeaderMiddleware */;
|
|
|
@@ -60887,30 +60931,97 @@ var SwaggerUiSetupMiddleware = class extends Middleware {
|
|
|
if (this.context.swaggerSecurity)
|
|
|
swaggerOptions.swaggerDefinition.security = this.context.swaggerSecurity;
|
|
|
const swaggerDocs = (0, import_swagger_jsdoc.default)(swaggerOptions);
|
|
|
- this.context.logInfo($$("org.crazydoctor.expressts.swagger.registered", { path: this.context.swaggerRoute }));
|
|
|
+ this.context.logInfo($("org.crazydoctor.extress.swagger.registered", { path: this.context.swaggerRoute }));
|
|
|
return import_swagger_ui_express2.default.setup(swaggerDocs);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+// lib/base/registry/SystemRegistry.ts
|
|
|
+var SystemRegistry = class extends Registry_default {
|
|
|
+ constructor(config) {
|
|
|
+ super();
|
|
|
+ this.json = config.json;
|
|
|
+ this.urlencoded = config.urlencoded;
|
|
|
+ this.sessions = config.sessions;
|
|
|
+ this.swagger = config.swagger;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ async registerRoutes() {
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ async registerMiddlewares() {
|
|
|
+ const json = this.json, urlencoded = this.urlencoded, swagger = this.swagger, sessions = this.sessions, server = this.getServer();
|
|
|
+ json && this.registerHttpHandler(new ExpressJsonMiddleware(server));
|
|
|
+ urlencoded && this.registerHttpHandler(new ExpressUrlencodedMiddleware(server));
|
|
|
+ sessions && this.registerHttpHandler(new SessionMiddleware(server));
|
|
|
+ swagger && this.registerHttpHandler(new SwaggerUiServeMiddleware(server));
|
|
|
+ swagger && this.registerHttpHandler(new SwaggerUiSetupMiddleware(server));
|
|
|
+ this.registerHttpHandler(new InternalServerErrorHandler(server));
|
|
|
+ this.registerHttpHandler(new NotFoundErrorHandler(server));
|
|
|
+ this.registerHttpHandler(new PoweredByHeaderMiddleware(server));
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+};
|
|
|
+var SystemRegistry_default = SystemRegistry;
|
|
|
+
|
|
|
+// lib/base/registry/DynamicRegistry.ts
|
|
|
+var import_url = require("url");
|
|
|
+var path = __toESM(require("path"));
|
|
|
+var fs2 = __toESM(require("fs"));
|
|
|
+var DynamicRegistry = class extends Registry_default {
|
|
|
+ constructor(routesDir, middlewaresDir) {
|
|
|
+ super();
|
|
|
+ this.routesDir = routesDir;
|
|
|
+ this.middlewaresDir = middlewaresDir;
|
|
|
+ }
|
|
|
+ async registerRoutes() {
|
|
|
+ if (this.routesDir == null)
|
|
|
+ return this;
|
|
|
+ const routesDir = this.routesDir;
|
|
|
+ const files = fs2.readdirSync(routesDir, { recursive: true, encoding: "utf8" });
|
|
|
+ for (const file of files) {
|
|
|
+ if (/\.js$/.test(file)) {
|
|
|
+ const fileUrl = (0, import_url.pathToFileURL)(path.join(routesDir, file)).toString();
|
|
|
+ const RouteClass = await import(fileUrl).then((mod) => mod.default?.default ?? mod.default ?? mod);
|
|
|
+ if (RouteClass.prototype instanceof Route) {
|
|
|
+ this.registerHttpHandler(new RouteClass(this.getServer()));
|
|
|
+ } else throw new InvalidRouteException(fileUrl);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ async registerMiddlewares() {
|
|
|
+ if (this.middlewaresDir == null)
|
|
|
+ return this;
|
|
|
+ const middlewaresDir = this.middlewaresDir;
|
|
|
+ const files = fs2.readdirSync(middlewaresDir, { recursive: true, encoding: "utf8" });
|
|
|
+ for (const file of files) {
|
|
|
+ if (/\.js$/.test(file)) {
|
|
|
+ const fileUrl = (0, import_url.pathToFileURL)(path.join(middlewaresDir, file)).toString();
|
|
|
+ const MiddlewareClass = await import(fileUrl).then((mod) => mod.default?.default ?? mod.default ?? mod);
|
|
|
+ if (MiddlewareClass.prototype instanceof Middleware) {
|
|
|
+ this.registerHttpHandler(new MiddlewareClass(this.getServer()));
|
|
|
+ } else throw new InvalidMiddlewareException(fileUrl);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+};
|
|
|
+var DynamicRegistry_default = DynamicRegistry;
|
|
|
+
|
|
|
// lib/server/Server.ts
|
|
|
-var Server = class {
|
|
|
+var Server = class _Server {
|
|
|
constructor(properties) {
|
|
|
- this.swagger = false;
|
|
|
- this.json = false;
|
|
|
- this.urlencoded = false;
|
|
|
this.instance = (0, import_express3.default)();
|
|
|
- this.httpServer = import_http9.default.createServer(this.instance);
|
|
|
+ this.httpServer = import_http11.default.createServer(this.instance);
|
|
|
this.port = properties.port;
|
|
|
this.host = properties.host || `http://localhost:${this.port}`;
|
|
|
this.i18n = i18nLoader.getInstance();
|
|
|
if (properties.locale)
|
|
|
this.i18n.setLocale(properties.locale);
|
|
|
this.logger = new Logger();
|
|
|
- this.httpHandlers = {};
|
|
|
this.wsHandlers = properties.wsHandlers || {};
|
|
|
this.wsServers = {};
|
|
|
- this.json = properties.json || false;
|
|
|
- this.urlencoded = properties.urlencoded || false;
|
|
|
this.i18nPath = properties.i18nPath;
|
|
|
this.middlewaresPath = properties.middlewaresPath;
|
|
|
this.routesPath = properties.routesPath;
|
|
|
@@ -60925,8 +61036,15 @@ var Server = class {
|
|
|
this.swaggerRoute = properties.swagger?.route || "/api-docs";
|
|
|
this.swaggerComponents = properties.swagger?.components;
|
|
|
this.swaggerSecurity = properties.swagger?.security;
|
|
|
- this.swagger = true;
|
|
|
}
|
|
|
+ this.systemRegistry = new SystemRegistry_default({
|
|
|
+ json: properties.json || false,
|
|
|
+ urlencoded: properties.urlencoded || false,
|
|
|
+ sessions: properties.sessions || false,
|
|
|
+ swagger: properties.swagger != null
|
|
|
+ }).setServer(this);
|
|
|
+ _Server.registry = _Server.registry == null ? new DynamicRegistry_default(this.routesPath, this.middlewaresPath) : _Server.registry;
|
|
|
+ _Server.registry.setServer(this);
|
|
|
this.initialized = false;
|
|
|
}
|
|
|
async init() {
|
|
|
@@ -60934,7 +61052,7 @@ var Server = class {
|
|
|
this.instance.set("view engine", this.viewEngine);
|
|
|
if (this.viewsPath)
|
|
|
this.instance.set("views", this.viewsPath);
|
|
|
- this.registerSystemMiddlewares();
|
|
|
+ await this.systemRegistry.registerHttpHandlers();
|
|
|
await this.postInit();
|
|
|
this.initialized = true;
|
|
|
return this;
|
|
|
@@ -60942,10 +61060,7 @@ var Server = class {
|
|
|
async postInit() {
|
|
|
if (this.i18nPath)
|
|
|
this.i18n.load(this.i18nPath);
|
|
|
- if (this.middlewaresPath)
|
|
|
- await this.registerMiddlewares(this.middlewaresPath);
|
|
|
- if (this.routesPath)
|
|
|
- await this.registerRoutes(this.routesPath);
|
|
|
+ await _Server.registry.registerHttpHandlers();
|
|
|
if (this.swaggerDocsPath)
|
|
|
import_fs2.default.writeFileSync(this.swaggerDocsPath, "");
|
|
|
if (Object.keys(this.wsHandlers).length > 0) {
|
|
|
@@ -60954,20 +61069,7 @@ var Server = class {
|
|
|
}
|
|
|
}
|
|
|
processHttpHandlers() {
|
|
|
- const handlers = [];
|
|
|
- const middlewareOrders = [];
|
|
|
- for (const key in this.httpHandlers) {
|
|
|
- const handler = this.httpHandlers[key];
|
|
|
- if (handler instanceof Middleware) {
|
|
|
- const order = handler.getOrder();
|
|
|
- if (middlewareOrders.includes(order))
|
|
|
- throw `Ivalid order number: ${handler.constructor.name}`;
|
|
|
- middlewareOrders.push(order);
|
|
|
- }
|
|
|
- handlers.push(this.httpHandlers[key]);
|
|
|
- }
|
|
|
- handlers.sort((a, b) => a instanceof Middleware && b instanceof Middleware && a.getOrder() - b.getOrder() || (a instanceof Middleware && -1 || (b instanceof Middleware && 1 || 0)));
|
|
|
- for (const handler of handlers) {
|
|
|
+ for (const handler of Registry_default.getHttpHandlers()) {
|
|
|
if (handler instanceof Middleware)
|
|
|
this.addMiddleware(handler);
|
|
|
else if (handler instanceof Route)
|
|
|
@@ -60996,8 +61098,7 @@ var Server = class {
|
|
|
registerRoutesDocumentation() {
|
|
|
if (!this.swaggerDocsPath)
|
|
|
return this;
|
|
|
- for (const routeName in this.httpHandlers) {
|
|
|
- const route = this.httpHandlers[routeName];
|
|
|
+ for (const route of Registry_default.getHttpHandlers()) {
|
|
|
if (!(route instanceof Route))
|
|
|
continue;
|
|
|
if (route.getRoute() == null)
|
|
|
@@ -61008,7 +61109,7 @@ var Server = class {
|
|
|
if (docs.length > 0) {
|
|
|
import_fs2.default.appendFileSync(this.swaggerDocsPath, `${docs}
|
|
|
`);
|
|
|
- this.logInfo($$("org.crazydoctor.expressts.swagger.routeGenerated", { route: route.getRoute() }));
|
|
|
+ this.logInfo($("org.crazydoctor.extress.swagger.routeGenerated", { route: route.getRoute() }));
|
|
|
}
|
|
|
}
|
|
|
return this;
|
|
|
@@ -61071,50 +61172,6 @@ var Server = class {
|
|
|
this.instance.post(route.getRoute(), route.getAction());
|
|
|
return this;
|
|
|
}
|
|
|
- registerSystemMiddlewares() {
|
|
|
- const json = this.json, urlencoded = this.urlencoded, swagger = this.swagger;
|
|
|
- json && this.appendHttpHandler(new ExpressJsonMiddleware(this));
|
|
|
- urlencoded && this.appendHttpHandler(new ExpressUrlencodedMiddleware(this));
|
|
|
- this.appendHttpHandler(new InternalServerErrorHandler(this));
|
|
|
- this.appendHttpHandler(new NotFoundErrorHandler(this));
|
|
|
- this.appendHttpHandler(new PoweredByHeaderMiddleware(this));
|
|
|
- this.appendHttpHandler(new SessionMiddleware(this));
|
|
|
- swagger && this.appendHttpHandler(new SwaggerUiServeMiddleware(this));
|
|
|
- swagger && this.appendHttpHandler(new SwaggerUiSetupMiddleware(this));
|
|
|
- return this;
|
|
|
- }
|
|
|
- appendHttpHandler(handler) {
|
|
|
- let id = Guid.new();
|
|
|
- while (this.httpHandlers[id] != null)
|
|
|
- id = Guid.new();
|
|
|
- this.httpHandlers[id] = handler;
|
|
|
- }
|
|
|
- async registerRoutes(dir) {
|
|
|
- const files = import_fs2.default.readdirSync(dir, { recursive: true, encoding: "utf8" });
|
|
|
- for (const file of files) {
|
|
|
- if (/\.js$/.test(file)) {
|
|
|
- const fileUrl = (0, import_url.pathToFileURL)(import_path.default.join(dir, file)).toString();
|
|
|
- const RouteClass = await import(fileUrl).then((mod) => mod.default?.default ?? mod.default ?? mod);
|
|
|
- if (RouteClass.prototype instanceof Route) {
|
|
|
- this.appendHttpHandler(new RouteClass(this));
|
|
|
- } else throw new InvalidRouteException(fileUrl);
|
|
|
- }
|
|
|
- }
|
|
|
- return this;
|
|
|
- }
|
|
|
- async registerMiddlewares(dir) {
|
|
|
- const files = import_fs2.default.readdirSync(dir, { recursive: true, encoding: "utf8" });
|
|
|
- for (const file of files) {
|
|
|
- if (/\.js$/.test(file)) {
|
|
|
- const fileUrl = (0, import_url.pathToFileURL)(import_path.default.join(dir, file)).toString();
|
|
|
- const MiddlewareClass = await import(fileUrl).then((mod) => mod.default?.default ?? mod.default ?? mod);
|
|
|
- if (MiddlewareClass.prototype instanceof Middleware) {
|
|
|
- this.appendHttpHandler(new MiddlewareClass(this));
|
|
|
- } else throw new InvalidMiddlewareException(fileUrl);
|
|
|
- }
|
|
|
- }
|
|
|
- return this;
|
|
|
- }
|
|
|
getLogger() {
|
|
|
return this.logger;
|
|
|
}
|
|
|
@@ -61128,16 +61185,19 @@ var Server = class {
|
|
|
getOption(key) {
|
|
|
return this.options ? this.options[key] || null : null;
|
|
|
}
|
|
|
- start(callback) {
|
|
|
- if (!this.initialized)
|
|
|
- throw new ServerNotInitializedException();
|
|
|
- this.registerRoutesDocumentation();
|
|
|
- this.processHttpHandlers();
|
|
|
- const cb = () => {
|
|
|
- this.logInfo($$("org.crazydoctor.expressts.start", { "port": this.port }));
|
|
|
- if (callback) callback();
|
|
|
- };
|
|
|
- this.httpServer.listen(this.port, cb);
|
|
|
+ async start(callback) {
|
|
|
+ return this.init().then((server) => {
|
|
|
+ if (!this.initialized)
|
|
|
+ throw new ServerNotInitializedException();
|
|
|
+ this.registerRoutesDocumentation();
|
|
|
+ this.processHttpHandlers();
|
|
|
+ const cb = () => {
|
|
|
+ this.logInfo($("org.crazydoctor.extress.start", { "port": this.port }));
|
|
|
+ if (callback) callback();
|
|
|
+ };
|
|
|
+ this.httpServer.listen(this.port, cb);
|
|
|
+ return server;
|
|
|
+ });
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -61308,7 +61368,7 @@ var SwaggerParameterIn = /* @__PURE__ */ ((SwaggerParameterIn2) => {
|
|
|
})(SwaggerParameterIn || {});
|
|
|
// Annotate the CommonJS export names for ESM import in node:
|
|
|
0 && (module.exports = {
|
|
|
- $$,
|
|
|
+ $,
|
|
|
Guid,
|
|
|
HttpHandler,
|
|
|
HttpMethod,
|