aboutsummaryrefslogtreecommitdiff
path: root/src/client/northstar/utils/Extensions.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/northstar/utils/Extensions.ts')
-rw-r--r--src/client/northstar/utils/Extensions.ts28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/client/northstar/utils/Extensions.ts b/src/client/northstar/utils/Extensions.ts
index 04af36731..65af7ea87 100644
--- a/src/client/northstar/utils/Extensions.ts
+++ b/src/client/northstar/utils/Extensions.ts
@@ -20,21 +20,27 @@ String.prototype.Truncate = function (length: number, replacement: string): Stri
return target;
};
-type BatchConverterSync<I, O> = (batch: I[], isFullBatch: boolean) => O[];
-type BatchHandlerSync<I> = (batch: I[], isFullBatch: boolean) => void;
-type BatchConverterAsync<I, O> = (batch: I[], isFullBatch: boolean) => Promise<O[]>;
-type BatchHandlerAsync<I> = (batch: I[], isFullBatch: boolean) => Promise<void>;
+interface BatchContext {
+ completedBatches: number;
+ remainingBatches: number;
+ isFullBatch: boolean;
+}
+type BatchConverterSync<I, O> = (batch: I[], context: BatchContext) => O[];
+type BatchHandlerSync<I> = (batch: I[], context: BatchContext) => void;
+type BatchConverterAsync<I, O> = (batch: I[], context: BatchContext) => Promise<O[]>;
+type BatchHandlerAsync<I> = (batch: I[], context: BatchContext) => Promise<void>;
type BatchConverter<I, O> = BatchConverterSync<I, O> | BatchConverterAsync<I, O>;
type BatchHandler<I> = BatchHandlerSync<I> | BatchHandlerAsync<I>;
+type Batcher<I, A> = number | ((element: I, accumulator: A) => boolean | Promise<boolean>);
interface Array<T> {
- batch(batchSize: number): T[][];
- batchedForEach(batchSize: number, handler: BatchHandlerSync<T>): void;
- batchedMap<O>(batchSize: number, handler: BatchConverterSync<T, O>): O[];
- batchedForEachAsync(batchSize: number, handler: BatchHandler<T>): Promise<void>;
- batchedMapAsync<O>(batchSize: number, handler: BatchConverter<T, O>): Promise<O[]>;
- batchedForEachInterval(batchSize: number, handler: BatchHandler<T>, interval: number): Promise<void>;
- batchedMapInterval<O>(batchSize: number, handler: BatchConverter<T, O>, interval: number): Promise<O[]>;
+ batch(batchSize: undefined): T[][];
+ batchedForEach<A = undefined>(batcher: Batcher<T, A>, handler: BatchHandlerSync<T>): void;
+ batchedMap<O, A = undefined>(batcher: Batcher<T, A>, handler: BatchConverterSync<T, O>): O[];
+ batchedForEachAsync<A = undefined>(batcher: Batcher<T, A>, handler: BatchHandler<T>): Promise<void>;
+ batchedMapAsync<O, A = undefined>(batcher: Batcher<T, A>, handler: BatchConverter<T, O>): Promise<O[]>;
+ batchedForEachInterval<A = undefined>(batcher: Batcher<T, A>, handler: BatchHandler<T>, interval: number): Promise<void>;
+ batchedMapInterval<O, A = undefined>(batcher: Batcher<T, A>, handler: BatchConverter<T, O>, interval: number): Promise<O[]>;
lastElement(): T;
}