core-mvc
Version:
Simple but powerful MVC framework for NodeJS.
58 lines (57 loc) • 2.37 kB
JavaScript
;
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;