react-p-queue
Version:
A React library for handling promise-based queue management with support for batch processing, throttling, and concurrency control using `p-queue`
52 lines (49 loc) • 1.81 kB
TypeScript
import * as react_jsx_runtime from 'react/jsx-runtime';
import PQueue from 'p-queue';
import React from 'react';
interface Identifiable {
[key: string]: any;
}
type PQResolverResult<T, E = any> = {
data: T | null;
error?: E | null;
};
type TaskPayload<P> = P;
type PQSingleResolver<T, P> = (task: TaskPayload<P>) => Promise<PQResolverResult<T>>;
type PQBatchResolver<T, P> = (...task: TaskPayload<P>[]) => Promise<PQResolverResult<T[]>>;
type PQConfig<T> = {
/**
* The maximum size of the resolved data saved within the memory. set falsy (0 | -1 | false | null) for no limit.
* This is to prevent memory leak when handling with huge queue that will be keep being triggered.
*/
identifier: keyof T;
};
type TResolverByBatch<B, T, P> = B extends true ? PQBatchResolver<T, P> : PQSingleResolver<T, P>;
type QueueProviderProps<T, P> = {
config: PQConfig<T>;
queue: PQueue;
} & ({
/**
* batch size
*/
batch: number;
/**
* throttle time in ms
*/
throttle: number;
resolver: TResolverByBatch<true, T, P>;
} | {
batch?: null | false;
throttle?: null | false;
resolver: TResolverByBatch<false, T, P>;
});
declare function QueueProvider<T extends Identifiable, P extends Identifiable>({ config, resolver, batch, throttle, queue, children, }: React.PropsWithChildren<QueueProviderProps<T, P>>): react_jsx_runtime.JSX.Element;
type PQAddDispatcher<T, P> = (task: P) => Promise<PQResolverResult<T>>;
type PQClearDispatcher = () => void;
type UseQueueReturnType<T, P> = {
add: PQAddDispatcher<T, P>;
clear: PQClearDispatcher;
};
declare function useQueueStore<T, P>(): PQResolverResult<T, any>[];
declare function useQueue<T, P>(): UseQueueReturnType<T, P>;
export { QueueProvider as default, useQueue, useQueueStore };