sanka-baileyss
Version:
WhatsApp API Modification By Sanka_Vollerei
64 lines (59 loc) • 1.6 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true })
const _queueAsyncBuckets = new Map()
const _gcLimit = 10000
async function _asyncQueueExecutor(queue, cleanup) {
let offt = 0
// eslint-disable-next-line no-constant-condition
while (true) {
const limit = Math.min(queue.length, _gcLimit)
for (let i = offt; i < limit; i++) {
const job = queue[i]
try {
job.resolve(await job.awaitable())
}
catch (e) {
job.reject(e)
}
}
if (limit < queue.length) {
if (limit >= _gcLimit) {
queue.splice(0, limit)
offt = 0
}
else {
offt = limit
}
}
else {
break
}
}
cleanup()
}
function queueJob(bucket, awaitable) {
// Skip name assignment since it's readonly in strict mode
if (typeof bucket !== 'string') {
console.warn('Unhandled bucket type (for naming):', typeof bucket, bucket)
}
let inactive = false
if (!_queueAsyncBuckets.has(bucket)) {
_queueAsyncBuckets.set(bucket, [])
inactive = true
}
const queue = _queueAsyncBuckets.get(bucket)
const job = new Promise((resolve, reject) => {
queue.push({
awaitable,
resolve: resolve,
reject
})
})
if (inactive) {
_asyncQueueExecutor(queue, () => _queueAsyncBuckets.delete(bucket))
}
return job
}
module.exports = {
queueJob
}