import { GraphQLResolveInfo } from 'graphql';
import { injectorRegistry } from './registry';
export { injectorRegistry, InjectorsIndex, InjectorResolver } from './registry';
interface InjectorResolverData {
source: any;
args: { [key: string]: any };
context: any;
info: GraphQLResolveInfo;
}
type InjectorResolver = (data: InjectorResolverData) => any;
export function Inject(resolver: InjectorResolver): ParameterDecorator {
return (target: Object, fieldName: string, argIndex: number) => {
injectorRegistry.set(target.constructor, [fieldName, argIndex], resolver);
};
}
export const Context = Inject(({ source, args, context, info }) => {
return context;
});
export const Info = Inject(({ source, args, context, info }) => {
return info;
});
export const Source = Inject(({ source, args, context, info }) => {
return source;
});
export function createInjector(resolver: InjectorResolver) {}
|