Socket
Socket
Sign inDemoInstall

async-lock

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

async-lock - npm Package Compare versions

Comparing version 1.2.3 to 1.2.4

4

History.md
1.2.4
==================
* Be robust to lock names that are also Object keys - simpler solution, extra tests.
1.2.3

@@ -3,0 +7,0 @@ ==================

86

lib/index.js
'use strict';
// Small Map polyfill to remain ES5-compatible as requested in issue #21 while also solving PR #30
var MapPolyfill = function () {
this.elements = [];
this.size = 0;
};
MapPolyfill.prototype.has = function (key) {
var i;
for (i = 0; i < this.elements.length; ++i) {
if (this.elements[i].key === key) {
return true;
}
}
return false;
};
MapPolyfill.prototype.get = function (key) {
var i;
for (i = 0; i < this.elements.length; ++i) {
if (this.elements[i].key === key) {
return this.elements[i].value;
}
}
return false;
};
MapPolyfill.prototype.set = function (key, value) {
var i;
for (i = 0; i < this.elements.length; ++i) {
if (this.elements[i].key === key) {
this.elements[i].value = value;
return;
}
}
this.elements.push({ key: key, value: value });
this.size++;
};
MapPolyfill.prototype.delete = function (key) {
var i;
for (i = 0; i < this.elements.length; ++i) {
if (this.elements[i].key === key) {
this.elements.splice(i, 1);
this.size--;
return;
}
}
};
var AsyncLock = function (opts) {

@@ -59,7 +9,7 @@ opts = opts || {};

// format: {key : [fn, fn]}
// queues.has(key) indicates job running for key
this.queues = new MapPolyfill();
// queues[key] = null indicates no job running for key
this.queues = Object.create(null);
// domain of current running func {key : fn}
this.domains = new MapPolyfill();
this.domains = Object.create(null);

@@ -117,6 +67,6 @@ // lock is reentrant for same domain

if (locked) {
if (self.queues.get(key).length === 0) {
self.queues.delete(key);
if (self.queues[key].length === 0) {
delete self.queues[key];
}
self.domains.delete(key);
delete self.domains[key];
}

@@ -144,4 +94,4 @@

//run next func
if (self.queues.has(key) && self.queues.get(key).length > 0) {
self.queues.get(key).shift()();
if (!!self.queues[key] && self.queues[key].length > 0) {
self.queues[key].shift()();
}

@@ -162,3 +112,3 @@ }

if (locked) {
self.domains.set(key, process.domain);
self.domains[key] = process.domain;
}

@@ -192,7 +142,7 @@

if (!self.queues.has(key)) {
self.queues.set(key, []);
if (!self.queues[key]) {
self.queues[key] = [];
exec(true);
}
else if (self.domainReentrant && !!process.domain && process.domain === self.domains.get(key)) {
else if (self.domainReentrant && !!process.domain && process.domain === self.domains[key]) {
// If code is in the same domain of current running task, run it directly

@@ -202,4 +152,4 @@ // Since lock is re-enterable

}
else if (self.queues.get(key).length >= self.maxPending) {
done(false, new Error('Too many pending tasks'));
else if (self.queues[key].length >= self.maxPending) {
done(false, new Error('Too much pending tasks'));
}

@@ -211,5 +161,5 @@ else {

if (opts.skipQueue) {
self.queues.get(key).unshift(taskFn);
self.queues[key].unshift(taskFn);
} else {
self.queues.get(key).push(taskFn);
self.queues[key].push(taskFn);
}

@@ -294,6 +244,6 @@

if (!key) {
return this.queues.size > 0;
return Object.keys(this.queues).length > 0;
}
else {
return this.queues.has(key);
return !!this.queues[key];
}

@@ -300,0 +250,0 @@ };

{
"name": "async-lock",
"description": "Lock on asynchronous code",
"version": "1.2.3",
"version": "1.2.4",
"author": {

@@ -6,0 +6,0 @@ "name": "Rogier Schouten",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc