@zuu/owl
Version:
Zuu's Experimental GraphQL Implementation
88 lines • 4.41 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../helpers/types");
const validate_arg_1 = require("./validate-arg");
const container_1 = require("../utils/container");
const auth_middleware_1 = require("../helpers/auth-middleware");
function getParams(params, { root, args, context, info }, globalValidate, pubSub) {
return __awaiter(this, void 0, void 0, function* () {
return Promise.all(params.sort((a, b) => a.index - b.index).map((paramInfo) => __awaiter(this, void 0, void 0, function* () {
switch (paramInfo.kind) {
case "args":
return yield validate_arg_1.validateArg(types_1.convertToType(paramInfo.getType(), args), globalValidate, paramInfo.validate);
case "arg":
return yield validate_arg_1.validateArg(types_1.convertToType(paramInfo.getType(), args[paramInfo.name]), globalValidate, paramInfo.validate);
case "context":
if (paramInfo.propertyName) {
return context[paramInfo.propertyName];
}
return context;
case "root":
const rootValue = paramInfo.propertyName ? root[paramInfo.propertyName] : root;
if (!paramInfo.getType) {
return rootValue;
}
return types_1.convertToType(paramInfo.getType(), rootValue);
case "info":
return info;
case "pubSub":
if (paramInfo.triggerKey) {
return (payload) => pubSub.publish(paramInfo.triggerKey, payload);
}
return pubSub;
}
})));
});
}
exports.getParams = getParams;
function applyAuthChecker(middlewares, authMode, authChecker, roles) {
if (authChecker && roles) {
middlewares.unshift(auth_middleware_1.AuthMiddleware(authChecker, authMode, roles));
}
}
exports.applyAuthChecker = applyAuthChecker;
function applyMiddlewares(resolverData, middlewares, resolverHandlerFunction) {
return __awaiter(this, void 0, void 0, function* () {
let middlewaresIndex = -1;
function dispatchHandler(currentIndex) {
return __awaiter(this, void 0, void 0, function* () {
if (currentIndex <= middlewaresIndex) {
throw new Error("next() called multiple times");
}
middlewaresIndex = currentIndex;
let handlerFn;
if (currentIndex === middlewares.length) {
handlerFn = resolverHandlerFunction;
}
else {
const currentMiddleware = middlewares[currentIndex];
// arrow function or class
if (currentMiddleware.prototype !== undefined) {
const middlewareClassInstance = container_1.IOCContainer.getInstance(currentMiddleware);
handlerFn = middlewareClassInstance.use.bind(middlewareClassInstance);
}
else {
handlerFn = currentMiddleware;
}
}
let nextResult;
const result = yield handlerFn(resolverData, () => __awaiter(this, void 0, void 0, function* () {
nextResult = yield dispatchHandler(currentIndex + 1);
return nextResult;
}));
return result !== undefined ? result : nextResult;
});
}
return dispatchHandler(0);
});
}
exports.applyMiddlewares = applyMiddlewares;
//# sourceMappingURL=helpers.js.map