@agatee/graphql
Version:
Graphql module to use with Agatee
102 lines (101 loc) • 4.94 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Permission = exports.Custom = exports.Mutation = exports.Query = exports.GatGqlResolver = void 0;
const core_1 = require("@agatee/core");
require("reflect-metadata");
const callsite_1 = __importDefault(require("callsite"));
const path_1 = __importDefault(require("path"));
const QueryMethods = Symbol('QueryMethods');
const MutationMethods = Symbol('MutationMethods');
const CustomResolverMethods = Symbol('CustomResolverMethods');
const PermissionsMethods = Symbol('PermissionsMethods');
function GatGqlResolver(params) {
var stack = (0, callsite_1.default)(), requester = stack[1].getFileName();
params.__dirname = path_1.default.dirname(requester);
return function (constructorFunc) {
let newConstructorFunc = function (...args) {
var _a, _b, _c, _d;
let func = function () {
let metadata = Reflect.getMetadata('design:paramtypes', constructorFunc) || [];
let injections = metadata.map(token => core_1.Injector.resolve(token));
return new constructorFunc(...injections);
};
func.prototype = constructorFunc.prototype;
func.prototype.__schema = params.schema;
func.prototype.__dirname = params.__dirname;
let newInstance = new func();
if (func.prototype[QueryMethods]) {
let __querieSchema = '\n';
let __queriesResolvers = {};
let __queriesPermission = {};
for (let [method, schema] of func.prototype[QueryMethods]) {
__querieSchema += `\t${schema}\n`;
__queriesResolvers[method] = newInstance[method].bind(newInstance);
if ((_a = func.prototype[PermissionsMethods]) === null || _a === void 0 ? void 0 : _a.get(method)) {
__queriesPermission[method] = (_b = func.prototype[PermissionsMethods]) === null || _b === void 0 ? void 0 : _b.get(method);
}
}
func.prototype.__querieSchema = __querieSchema;
func.prototype.__queriesResolvers = __queriesResolvers;
func.prototype.__queriesPermission = __queriesPermission;
}
if (func.prototype[MutationMethods]) {
let __mutationSchema = '\n';
let __mutationsResolvers = {};
let __mutationPermission = {};
for (let [method, schema] of func.prototype[MutationMethods]) {
__mutationSchema += `\t${schema}\n`;
__mutationsResolvers[method] = newInstance[method].bind(newInstance);
if ((_c = func.prototype[PermissionsMethods]) === null || _c === void 0 ? void 0 : _c.get(method)) {
__mutationPermission[method] = (_d = func.prototype[PermissionsMethods]) === null || _d === void 0 ? void 0 : _d.get(method);
}
}
func.prototype.__mutationSchema = __mutationSchema;
func.prototype.__mutationsResolvers = __mutationsResolvers;
func.prototype.__mutationPermission = __mutationPermission;
}
if (func.prototype[CustomResolverMethods]) {
let __customResolvers = [];
for (let method of func.prototype[CustomResolverMethods]) {
__customResolvers.push(newInstance[method].bind(newInstance));
}
func.prototype.__customResolvers = __customResolvers;
}
return newInstance;
};
newConstructorFunc.prototype = constructorFunc.prototype;
return newConstructorFunc;
};
}
exports.GatGqlResolver = GatGqlResolver;
function Query(schema) {
return function (target, key, descriptor) {
target[QueryMethods] = target[QueryMethods] || new Map();
target[QueryMethods].set(key, schema || key.toLowerCase());
};
}
exports.Query = Query;
function Mutation(schema) {
return function (target, key, descriptor) {
target[MutationMethods] = target[MutationMethods] || new Map();
target[MutationMethods].set(key, schema || key.toLowerCase());
};
}
exports.Mutation = Mutation;
function Custom() {
return function (target, key, descriptor) {
target[CustomResolverMethods] = target[CustomResolverMethods] || [];
target[CustomResolverMethods].push(key);
};
}
exports.Custom = Custom;
function Permission(rule) {
return function (target, key, descriptor) {
target[PermissionsMethods] = target[PermissionsMethods] || new Map();
target[PermissionsMethods].set(key, rule);
};
}
exports.Permission = Permission;