honion
Version:
139 lines (138 loc) • 7.05 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var _Middleware_instances, _Middleware_index, _Middleware_mds, _Middleware_ctx, _Middleware_isInstanceOf, _Middleware_createNextMiddleware;
Object.defineProperty(exports, "__esModule", { value: true });
exports.invokeMiddlewares = exports.Middleware = exports.createMiddleware = void 0;
const hook_middleware_1 = require("./hook.middleware");
function isMiddlewareConstructor(md) {
return !!md.prototype;
}
function isMdClass(val) {
return (typeof val == "function" &&
/^class\s/.test(Function.prototype.toString.call(val)));
}
function createMiddleware(ctx, middleware) {
return __awaiter(this, void 0, void 0, function* () {
if (middleware instanceof Middleware) {
return middleware;
}
else if (isMiddlewareConstructor(middleware)) {
return yield (0, hook_middleware_1.execHooks)(ctx, middleware, hook_middleware_1.HookType.Constructor);
}
else if (Array.isArray(middleware)) {
return createMiddleware(ctx, yield middleware[0](ctx));
}
else {
return createMiddleware(ctx, yield middleware(ctx));
}
});
}
exports.createMiddleware = createMiddleware;
class Middleware {
constructor() {
_Middleware_instances.add(this);
_Middleware_index.set(this, void 0);
_Middleware_mds.set(this, void 0);
_Middleware_ctx.set(this, void 0);
_Middleware_createNextMiddleware.set(this, () => __awaiter(this, void 0, void 0, function* () {
const middleware = __classPrivateFieldGet(this, _Middleware_mds, "f")[__classPrivateFieldGet(this, _Middleware_index, "f") + 1];
return yield createMiddleware(this.ctx, middleware);
}));
}
get ctx() {
return __classPrivateFieldGet(this, _Middleware_ctx, "f");
}
get logger() {
return this.ctx.logger;
}
set logger(val) {
this.ctx.logger = val;
}
isPrevInstanceOf(target) {
const prevMd = __classPrivateFieldGet(this, _Middleware_mds, "f")[__classPrivateFieldGet(this, _Middleware_index, "f") - 1];
return __classPrivateFieldGet(this, _Middleware_instances, "m", _Middleware_isInstanceOf).call(this, prevMd, target);
}
isNextInstanceOf(target) {
const nextMd = __classPrivateFieldGet(this, _Middleware_mds, "f")[__classPrivateFieldGet(this, _Middleware_index, "f") + 1];
return __classPrivateFieldGet(this, _Middleware_instances, "m", _Middleware_isInstanceOf).call(this, nextMd, target);
}
next() {
return __awaiter(this, void 0, void 0, function* () {
let nextMd = undefined;
try {
if (false == (yield (0, hook_middleware_1.execHooks)(this.ctx, this, hook_middleware_1.HookType.BeforeNext))) {
return;
}
if (__classPrivateFieldGet(this, _Middleware_mds, "f").length <= __classPrivateFieldGet(this, _Middleware_index, "f") + 1)
return;
nextMd = yield __classPrivateFieldGet(this, _Middleware_createNextMiddleware, "f").call(this);
nextMd.init(this.ctx, __classPrivateFieldGet(this, _Middleware_index, "f") + 1, __classPrivateFieldGet(this, _Middleware_mds, "f"));
if (false == (yield (0, hook_middleware_1.execHooks)(this.ctx, nextMd, hook_middleware_1.HookType.BeforeInvoke))) {
return;
}
yield nextMd.invoke();
yield (0, hook_middleware_1.execHooks)(this.ctx, nextMd, hook_middleware_1.HookType.AfterInvoke);
}
catch (err) {
const error = err;
if ("breakthrough" in error && error.breakthrough) {
throw err;
}
else {
const hookResult = yield (0, hook_middleware_1.execHooks)(this.ctx, nextMd !== null && nextMd !== void 0 ? nextMd : this, hook_middleware_1.HookType.Error, error);
if (!hookResult) {
this.ctx.catchError(err);
}
}
}
});
}
init(ctx, index, mds) {
__classPrivateFieldSet(this, _Middleware_mds, mds, "f");
__classPrivateFieldSet(this, _Middleware_ctx, ctx, "f");
__classPrivateFieldSet(this, _Middleware_index, index, "f");
return this;
}
}
exports.Middleware = Middleware;
_Middleware_index = new WeakMap(), _Middleware_mds = new WeakMap(), _Middleware_ctx = new WeakMap(), _Middleware_createNextMiddleware = new WeakMap(), _Middleware_instances = new WeakSet(), _Middleware_isInstanceOf = function _Middleware_isInstanceOf(md, target) {
if (!md)
return false;
if (md == target)
return true;
if (Array.isArray(md)) {
return md[1] == target || md[1].prototype instanceof target;
}
else if (isMdClass(md)) {
return md.prototype instanceof target;
}
else {
return md instanceof target;
}
};
function invokeMiddlewares(ctx, mds) {
return __awaiter(this, void 0, void 0, function* () {
const md = yield createMiddleware(ctx, mds[0]);
yield md.init(ctx, 0, mds).invoke();
});
}
exports.invokeMiddlewares = invokeMiddlewares;