@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
36 lines • 6.18 kB
JavaScript
;
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==