All files / domains/inject index.ts

100% Statements 28/28
100% Branches 0/0
83.33% Functions 5/6
100% Lines 19/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3317x 17x 17x 17x 17x 17x   57x 10x     17x 17x 2x 2x   17x 1x 1x   17x 1x 1x     17x              
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) {}