const concurrentCounts = new Map();
/**
 * Detects if there are concurrent tasks occuring for a given key
 * within the same event loop tick. Registers the request, yields to allow
 * other concurrent calls to register, then returns whether multiple requests
 * were detected.
 *
 * @example
 * ```ts
 * const isConcurrent = await Concurrent.detect(address)
 * ```
 */
export async function detect(key) {
    concurrentCounts.set(key, (concurrentCounts.get(key) ?? 0) + 1);
    await Promise.resolve();
    const isConcurrent = (concurrentCounts.get(key) ?? 0) > 1;
    queueMicrotask(() => {
        const count = concurrentCounts.get(key) ?? 0;
        if (count <= 1)
            concurrentCounts.delete(key);
        else
            concurrentCounts.set(key, count - 1);
    });
    return isConcurrent;
}
//# sourceMappingURL=concurrent.js.map