UNPKG

core-mvc

Version:

Simple but powerful MVC framework for NodeJS.

58 lines (57 loc) 2.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const graphql_1 = require("graphql"); const gqlDefinitions_1 = require("./gqlDefinitions"); const gql_1 = require("../gql"); const gqlSymbols_1 = require("./gqlSymbols"); const securityHandler_1 = require("./securityHandler"); // eslint-disable-next-line @typescript-eslint/no-explicit-any const buildResolverObject = (fullPath, value) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const resolvers = {}; let current = resolvers; const keys = fullPath.split('.'); for (const key of keys.slice(0, -1)) { current[key] = {}; current = current[key]; } current[keys.slice(-1)[0]] = value; return resolvers; }; // eslint-disable-next-line @typescript-eslint/no-explicit-any const gqlHandler = (controller, instance, name) => { const fullPaths = Reflect.getMetadata(gqlSymbols_1.gqlFieldResolverSymbol, controller, name); if (fullPaths) { for (const fullPath of fullPaths) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const resolvers = buildResolverObject(fullPath, async (...args) => { // const rawContext: GraphQLResolverContext = args[2]; const resolverRequest = { params: args[1], parent: args[0], user: args[2].req.user, }; if ((0, securityHandler_1.shouldDenyAccess)(controller, name, args[2])) { throw new graphql_1.GraphQLError(`Not authorized to do this`, { extensions: { code: 'FORBIDDEN' }, }); } const response = await instance[name](resolverRequest); if (response instanceof gql_1.Result) { const { cookies } = response; if (cookies) { for (const [cookieName, value] of Object.entries(cookies)) { args[2].res.cookie(cookieName, value); } } return response.data; } return response; }); (0, gqlDefinitions_1.define)({ resolvers, }); } } }; exports.default = gqlHandler;