UNPKG

@tsclean/core

Version:

Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.

36 lines 6.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.InterceptorsConsumer = void 0; const utils_1 = require("../utils"); const helpers_1 = require("../helpers"); const rxjs_1 = require("rxjs"); class InterceptorsConsumer { async intercept(interceptors, args, instance, callback, next, type) { if ((0, utils_1.isEmpty)(interceptors)) return next(); const context = this.createContext(args, instance, callback); context.setType(type); const start$ = (0, rxjs_1.defer)(() => this.transformDeferred(next)); const nextFn = (i = 0) => async () => { if (i >= interceptors.length) { return start$; } const handler = { handle: () => (0, rxjs_1.from)(nextFn(i + 1)()).pipe((0, rxjs_1.mergeAll)()), }; return interceptors[i].intercept(context, handler); }; return nextFn()(); } createContext(args, instance, callback) { return new helpers_1.ExecutionContextHost(args, instance.constructor, callback); } transformDeferred(next) { return (0, rxjs_1.from)(next()).pipe((0, rxjs_1.switchMap)(res => { const isDeferred = res instanceof Promise || res instanceof rxjs_1.Observable; return isDeferred ? res : Promise.resolve(res); })); } } exports.InterceptorsConsumer = InterceptorsConsumer; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3JzLWNvbnN1bWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtY29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0NBQWlDO0FBQ2pDLHdDQUFnRDtBQUloRCwrQkFBaUY7QUFFakYsTUFBYSxvQkFBb0I7SUFFdEIsS0FBSyxDQUFDLFNBQVMsQ0FDbEIsWUFBb0MsRUFDcEMsSUFBZSxFQUNmLFFBQXdCLEVBQ3hCLFFBQXlDLEVBQ3pDLElBQTRCLEVBQzVCLElBQVE7UUFHUixJQUFJLElBQUEsZUFBTyxFQUFDLFlBQVksQ0FBQztZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdELE9BQU8sQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLENBQUM7UUFFekIsTUFBTSxNQUFNLEdBQUcsSUFBQSxZQUFLLEVBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFekQsTUFBTSxNQUFNLEdBQ1IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FDTixLQUFLLElBQUksRUFBRTtZQUNQLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxNQUFNLENBQUM7WUFDbEIsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUF5QjtnQkFDbEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUEsV0FBVyxFQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFBLGVBQVEsR0FBRSxDQUFDO2FBQzlELENBQUM7WUFDRixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQztRQUNWLE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sYUFBYSxDQUNoQixJQUFlLEVBQ2YsUUFBd0IsRUFDeEIsUUFBeUM7UUFFekMsT0FBTyxJQUFJLDhCQUFvQixDQUMzQixJQUFJLEVBQ0osUUFBUSxDQUFDLFdBQTRCLEVBQ3JDLFFBQVEsQ0FDWCxDQUFDO0lBQ04sQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQXdCO1FBQzdDLE9BQU8sSUFBQSxXQUFXLEVBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzNCLElBQUEsZ0JBQVMsRUFBQyxHQUFHLENBQUMsRUFBRTtZQUNaLE1BQU0sVUFBVSxHQUFHLEdBQUcsWUFBWSxPQUFPLElBQUksR0FBRyxZQUFZLGlCQUFVLENBQUM7WUFDdkUsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztDQUNKO0FBcERELG9EQW9EQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eX0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHRIb3N0fSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7Q29udGV4dFR5cGUsIENvbnRyb2xsZXJUeXBlfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuaW1wb3J0IHtDYWxsSGFuZGxlckludGVyZmFjZSwgSW50ZXJjZXB0b3JJbnRlcmZhY2UsIFR5cGV9IGZyb20gXCIuLi9jb250cmFjdHNcIjtcbmltcG9ydCB7ZGVmZXIsIGZyb20gYXMgZnJvbVByb21pc2UsIG1lcmdlQWxsLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmNlcHRvcnNDb25zdW1lciB7XG5cbiAgICBwdWJsaWMgYXN5bmMgaW50ZXJjZXB0PFQgZXh0ZW5kcyBzdHJpbmcgPSBDb250ZXh0VHlwZT4oXG4gICAgICAgIGludGVyY2VwdG9yczogSW50ZXJjZXB0b3JJbnRlcmZhY2VbXSxcbiAgICAgICAgYXJnczogdW5rbm93bltdLFxuICAgICAgICBpbnN0YW5jZTogQ29udHJvbGxlclR5cGUsXG4gICAgICAgIGNhbGxiYWNrOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duLFxuICAgICAgICBuZXh0OiAoKSA9PiBQcm9taXNlPHVua25vd24+LFxuICAgICAgICB0eXBlPzogVFxuICAgICk6IFByb21pc2U8dW5rbm93bj4ge1xuXG4gICAgICAgIGlmIChpc0VtcHR5KGludGVyY2VwdG9ycykpIHJldHVybiBuZXh0KCk7XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlQ29udGV4dChhcmdzLCBpbnN0YW5jZSwgY2FsbGJhY2spO1xuICAgICAgICBjb250ZXh0LnNldFR5cGU8VD4odHlwZSk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQkID0gZGVmZXIoKCkgPT4gdGhpcy50cmFuc2Zvcm1EZWZlcnJlZChuZXh0KSk7XG5cbiAgICAgICAgY29uc3QgbmV4dEZuID1cbiAgICAgICAgICAgIChpID0gMCkgPT5cbiAgICAgICAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID49IGludGVyY2VwdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcjogQ2FsbEhhbmRsZXJJbnRlcmZhY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU6ICgpID0+IGZyb21Qcm9taXNlKG5leHRGbihpICsgMSkoKSkucGlwZShtZXJnZUFsbCgpKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yc1tpXS5pbnRlcmNlcHQoY29udGV4dCwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5leHRGbigpKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNvbnRleHQoXG4gICAgICAgIGFyZ3M6IHVua25vd25bXSxcbiAgICAgICAgaW5zdGFuY2U6IENvbnRyb2xsZXJUeXBlLFxuICAgICAgICBjYWxsYmFjazogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93blxuICAgICk6IEV4ZWN1dGlvbkNvbnRleHRIb3N0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeGVjdXRpb25Db250ZXh0SG9zdChcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICBpbnN0YW5jZS5jb25zdHJ1Y3RvciBhcyBUeXBlPHVua25vd24+LFxuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtRGVmZXJyZWQobmV4dDogKCkgPT4gUHJvbWlzZTxhbnk+KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKG5leHQoKSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRGVmZXJyZWQgPSByZXMgaW5zdGFuY2VvZiBQcm9taXNlIHx8IHJlcyBpbnN0YW5jZW9mIE9ic2VydmFibGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRGVmZXJyZWQgPyByZXMgOiBQcm9taXNlLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==