1
0
Fork 0
mirror of synced 2024-09-11 15:08:05 +12:00
budibase/packages/shared-core/src/utils.ts
2023-06-07 12:29:36 +01:00

45 lines
862 B
TypeScript

export function unreachable(
value: never,
message = `No such case in exhaustive switch: ${value}`
) {
throw new Error(message)
}
export async function parallelForeach<T>(
items: T[],
task: (item: T) => Promise<void>,
maxConcurrency: number
): Promise<void> {
const promises: Promise<void>[] = []
let index = 0
const processItem = async (item: T) => {
try {
await task(item)
} finally {
processNext()
}
}
const processNext = () => {
if (index >= items.length) {
// No more items to process
return
}
const item = items[index]
index++
const promise = processItem(item)
promises.push(promise)
if (promises.length >= maxConcurrency) {
Promise.race(promises).then(processNext)
} else {
processNext()
}
}
processNext()
await Promise.all(promises)
}