Uname: Linux webm016.cluster127.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Software: Apache
PHP version: 7.4.33 [ PHP INFO ] PHP os: Linux
Server Ip: 54.36.31.145
Your Ip: 216.73.216.182
User: homesquasz (91404) | Group: users (100)
Safe Mode: OFF
Disable Function:
_dyuweyrj4,_dyuweyrj4r,dl

name : limit.js
"use strict";

var ensureNaturalNumber  = require("type/natural-number/ensure")
  , ensurePlainFunction  = require("type/plain-function/ensure")
  , ensure               = require("type/ensure")
  , defineFunctionLength = require("../lib/private/define-function-length");

module.exports = function (limit, callback) {
	limit = ensure(
		["limit", limit, ensureNaturalNumber, { min: 1 }],
		["callback", callback, ensurePlainFunction]
	)[0];

	var Promise = this, ongoingCount = 0, pending = [];
	var onSuccess, onFailure;

	var release = function () {
		--ongoingCount;
		if (ongoingCount >= limit) return;
		var next = pending.shift();
		if (!next) return;
		++ongoingCount;
		try {
			next.resolve(
				Promise.resolve(callback.apply(next.context, next.arguments)).then(
					onSuccess, onFailure
				)
			);
		} catch (exception) {
			release();
			next.reject(exception);
		}
	};

	onSuccess = function (value) {
		release();
		return value;
	};

	onFailure = function (exception) {
		release();
		throw exception;
	};

	return defineFunctionLength(callback.length, function () {
		if (ongoingCount >= limit) {
			var context = this, args = arguments;
			return new Promise(function (resolve, reject) {
				pending.push({
					context: context,
					arguments: args,
					resolve: resolve,
					reject: reject
				});
			});
		}
		++ongoingCount;
		try {
			return Promise.resolve(callback.apply(this, arguments)).then(onSuccess, onFailure);
		} catch (exception) { return onFailure(exception); }
	});
};
© 2026 GrazzMean