/** * Copyright 2022 Gravwell, Inc. All rights reserved. * * Contact: [legal@gravwell.io](mailto:legal@gravwell.io) * * This software may be modified and distributed under the terms of the MIT * license. See the LICENSE file for details. */ export const lazyFirst = (getFirst: () => First) => ) => any>(f: F) => (...args: DropFirst>): ReturnType => f(getFirst(), ...args); export type DropFirst> = ((...args: Args) => any) extends (arg: any, ...rest: infer Rest) => any ? Rest : Args; export type GetFirst> = Args[0];