
import { wrapResolver } from "./wrapResolver";

export namespace modifyResolver {
  export type Modifier<Source, Context, Args> = (
    result: unknown,
    ...rest: wrapResolver.Arguments<Source, Context, Args>
  ) => unknown;
}

export function modifyResolver<
  Source = unknown, Context = unknown, Args = Record<string, unknown>
> (
  target: wrapResolver.Target<Source, Context, Args>,
  modifier: modifyResolver.Modifier<Source, Context, Args>
) {
  wrapResolver(target, function wrapper ( resolver, ...rest ) {
    return modifier(resolver(...rest), ...rest);
  });
}
