import { DebouncedFunc } from "lodash-es";
export type AnyObject = Record<string, any>;
export type UnknownObject = Record<string, unknown>;
export type PickRequired<T, K extends keyof T> = T & Pick<Required<T>, K>;
export declare function asyncThrottle(fn: () => Promise<void>, time: number, opts?: {
    immediateRunWhenEndOfDefer?: boolean;
}): DebouncedFunc<() => void>;
export declare function replaceExtName(filePath: string, newExtName: string): string;
/**
 * 接收 fn ，返回一个和 fn 签名一致的函数 fn'。当已经有一个 fn' 在运行时，再调用
 * fn' 会直接返回运行中 fn' 的 Promise，直到 Promise 结束 pending 状态
 */
export declare function singleton<Fn extends (...args: any) => Promise<any>>(fn: Fn): Fn;
/**
 * 从数组中按照特定算法提取一些值（允许同个索引重复提取）。
 * 算法的行为类似 flex 的 space-between。
 *
 * examples:
 * ```
 * console.log(getValuesFromArrayLikeFlexSpaceBetween([1, 2, 3, 4, 5, 6, 7], 1))
 * // [1]
 * console.log(getValuesFromArrayLikeFlexSpaceBetween([1, 2, 3, 4, 5, 6, 7], 3))
 * // [1, 4, 7]
 * console.log(getValuesFromArrayLikeFlexSpaceBetween([1, 2, 3, 4, 5, 6, 7], 4))
 * // [1, 3, 5, 7]
 * console.log(getValuesFromArrayLikeFlexSpaceBetween([1, 2, 3, 4, 5, 6, 7], 11))
 * // [1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7]
 * ```
 */
export declare function getValuesFromArrayLikeFlexSpaceBetween<T>(array: T[], columnCount: number): T[];
export declare function ensureFolderExist(fileOrFolderPath: string): void;
export declare function assert(assertion: unknown, msg?: string): asserts assertion;
export declare function assertStringType(data: unknown, msg?: string): asserts data is string;
export declare function assertNumberType(data: unknown, msg?: string): asserts data is number;
export declare function assertObjectType(data: unknown, msg?: string): asserts data is object;
export declare function formatDate(date: Date, format: string): string;
export declare function removeSystemReservedChars(filename: string): string;
export declare function isFfmpegStartSegment(line: string): boolean;
export declare function isFfmpegStart(line: string): boolean;
export declare const formatTemplate: (string: string, ...args: any[]) => string;
export declare function createInvalidStreamChecker(count?: number): (ffmpegLogLine: string) => boolean;
export declare function createTimeoutChecker(onTimeout: () => void, time: number): {
    update: () => void;
    stop: () => void;
};
export declare function downloadImage(imageUrl: string, savePath: string): Promise<void>;
/**
 * 根据指定的顺序对对象数组进行排序
 * @param objects 要排序的对象数组
 * @param order 指定的顺序
 * @param key 用于排序的键
 * @returns 排序后的对象数组
 */
export declare function sortByKeyOrder<T, K extends keyof T>(objects: T[], order: T[K][], key: K): T[];
declare const _default: {
    replaceExtName: typeof replaceExtName;
    singleton: typeof singleton;
    getValuesFromArrayLikeFlexSpaceBetween: typeof getValuesFromArrayLikeFlexSpaceBetween;
    ensureFolderExist: typeof ensureFolderExist;
    assert: typeof assert;
    assertStringType: typeof assertStringType;
    assertNumberType: typeof assertNumberType;
    assertObjectType: typeof assertObjectType;
    asyncThrottle: typeof asyncThrottle;
    isFfmpegStartSegment: typeof isFfmpegStartSegment;
    createInvalidStreamChecker: typeof createInvalidStreamChecker;
    createTimeoutChecker: typeof createTimeoutChecker;
    downloadImage: typeof downloadImage;
    md5: (str: string) => string;
    uuid: () => `${string}-${string}-${string}-${string}-${string}`;
    sortByKeyOrder: typeof sortByKeyOrder;
};
export default _default;
