UNPKG

honion

Version:
139 lines (138 loc) 7.05 kB
"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;