You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

@escapace/sequentialize

Package Overview
Dependencies
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@escapace/sequentialize - npm Package Compare versions

Comparing version
2.1.4
to
3.0.0
+82
lib/neutral/index.js
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
// src/deferred.ts
var Deferred = class {
constructor() {
// eslint-disable-next-line typescript/no-explicit-any
__publicField(this, "_reject");
__publicField(this, "_resolve");
__publicField(this, "fate");
__publicField(this, "state");
__publicField(this, "promise");
this.state = "pending";
this.fate = "unresolved";
this.promise = new Promise((resolve, reject) => {
this._resolve = resolve;
this._reject = reject;
});
this.promise.then(
() => this.state = "fulfilled",
() => this.state = "rejected"
);
}
isFulfilled() {
return this.state === "fulfilled";
}
isPending() {
return this.state === "pending";
}
isRejected() {
return this.state === "rejected";
}
isResolved() {
return this.fate === "resolved";
}
// eslint-disable-next-line typescript/no-explicit-any
reject(reason) {
if (this.fate === "resolved") {
throw new Error("Deferred cannot be resolved twice");
}
this.fate = "resolved";
if (this._reject !== void 0) {
this._reject(reason);
}
}
resolve(value) {
if (this.fate === "resolved") {
throw new Error("Deferred cannot be resolved twice");
}
this.fate = "resolved";
if (this._resolve !== void 0) {
this._resolve(value);
}
}
};
var deferred = () => new Deferred();
// src/sequentialize.ts
var sequentialize = () => {
const locks = [];
return (function_) => (...arguments_) => {
for (let l = locks.length - 1; l >= 0; l -= 1) {
if (locks[l].isResolved()) {
locks.splice(l, 1);
}
}
const lock = new Deferred();
const promises = [...locks].map((value) => value.promise);
locks.push(lock);
return Promise.all(promises).then(() => function_(...arguments_)).then((value) => {
lock.resolve();
return value;
}).catch((reason) => {
lock.reject(reason);
return Promise.reject(reason);
});
};
};
export { deferred, sequentialize };
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sources":["../../src/deferred.ts","../../src/sequentialize.ts"],"sourcesContent":null,"names":[],"mappings":"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"}
+7
-7

@@ -7,16 +7,16 @@ /**

export declare class Deferred<T> {
promise: Promise<T>;
private _reject;
private _resolve;
private fate;
private state;
private _resolve;
private _reject;
promise: Promise<T>;
constructor();
resolve(value?: T | PromiseLike<T> | undefined): void;
reject(reason?: any): void;
isResolved(): boolean;
isFulfilled(): boolean;
isPending(): boolean;
isFulfilled(): boolean;
isRejected(): boolean;
isResolved(): boolean;
reject(reason?: any): void;
resolve(value?: PromiseLike<T> | T): void;
}
export declare const deferred: <T>() => Deferred<T>;
//# sourceMappingURL=deferred.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"deferred.d.ts","sourceRoot":"","sources":["../../src/deferred.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAa,QAAQ,CAAC,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAE1B,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,KAAK,CAAsC;IAEnD,OAAO,CAAC,QAAQ,CAEH;IAGb,OAAO,CAAC,OAAO,CAAsC;;IAiB9C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;IAa9C,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG;IAYnB,UAAU;IAIV,SAAS;IAIT,WAAW;IAIX,UAAU;CAGlB;AAED,eAAO,MAAM,QAAQ,sBAA6B,CAAA"}
{"version":3,"file":"deferred.d.ts","sourceRoot":"","sources":["../../src/deferred.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAa,QAAQ,CAAC,CAAC;IAErB,OAAO,CAAC,OAAO,CAAsC;IAErD,OAAO,CAAC,QAAQ,CAAoD;IACpE,OAAO,CAAC,IAAI,CAA2B;IAEvC,OAAO,CAAC,KAAK,CAAsC;IAE5C,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;;IAiBnB,WAAW;IAIX,SAAS;IAIT,UAAU;IAIV,UAAU;IAKV,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG;IAYnB,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;CAW1C;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,kBAAwB,CAAA"}

@@ -1,2 +0,2 @@

export declare const sequentialize: () => <T extends (...args: any[]) => Promise<any>>(fn: T) => T;
export declare const sequentialize: () => <T extends (...arguments_: any[]) => Promise<any>>(function_: T) => T;
//# sourceMappingURL=sequentialize.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"sequentialize.d.ts","sourceRoot":"","sources":["../../src/sequentialize.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,6BAGI,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC,aA2BnD,CAAA"}
{"version":3,"file":"sequentialize.d.ts","sourceRoot":"","sources":["../../src/sequentialize.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,SAGhB,CAAC,SAAS,CAAC,GAAG,UAAU,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAG,CA0B1E,CAAA"}

@@ -0,1 +1,2 @@

Mozilla Public License Version 2.0

@@ -360,3 +361,3 @@ ==================================

License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
file, You can obtain one at https://mozilla.org/MPL/2.0/.

@@ -363,0 +364,0 @@ If it is not possible or desirable to put the notice in a particular

{
"name": "@escapace/sequentialize",
"description": "",
"version": "2.1.4",
"author": "escapace <opensource@escapace.com>",
"version": "3.0.0",
"author": {
"name": "escapace",
"email": "opensource@escapace.com"
},
"bugs": "https://github.com/escapace/sequentialize/issues",
"devDependencies": {
"@commitlint/cli": "17.7.1",
"@commitlint/config-conventional": "17.7.0",
"@ls-lint/ls-lint": "2.1.0",
"@types/chai": "4.3.6",
"@types/mocha": "10.0.1",
"@types/node": "20.6.3",
"@types/sinon": "10.0.16",
"@typescript-eslint/eslint-plugin": "6.7.2",
"@typescript-eslint/parser": "6.7.2",
"c8": "8.0.1",
"chai": "4.3.8",
"esbuild": "0.19.3",
"eslint": "8.49.0",
"eslint-config-escapace": "3.18.1",
"eslint-config-prettier": "9.0.0",
"eslint-plugin-editorconfig": "4.0.3",
"eslint-plugin-no-null": "1.0.2",
"execa": "8.0.1",
"fast-glob": "3.3.1",
"fs-extra": "11.1.1",
"husky": "8.0.3",
"is-ci": "3.0.1",
"lint-staged": "14.0.1",
"mocha": "10.2.0",
"prettier": "3.0.3",
"prettier-config-escapace": "1.0.6",
"semver": "7.5.4",
"sinon": "16.0.0",
"syncpack": "11.2.1",
"typescript": "5.2.2"
"@commitlint/cli": "19.6.0",
"@commitlint/config-conventional": "19.6.0",
"@escapace/pnpm-pack": "0.5.3",
"@ls-lint/ls-lint": "2.2.3",
"@vitest/coverage-v8": "2.1.8",
"eslint": "9.17.0",
"eslint-config-escapace": "5.4.0",
"esroll": "0.3.0",
"knip": "5.40.0",
"lefthook": "1.9.2",
"prettier": "3.4.2",
"prettier-config-escapace": "1.2.1",
"syncpack": "13.0.0",
"tsx": "4.19.2",
"typescript": "5.7.2",
"vitest": "2.1.8"
},
"engines": {
"node": ">= 18.18.0",
"pnpm": ">= 8.7.6"
"pnpm": ">=9.14.4"
},
"exports": {
".": {
"import": "./lib/esm/index.mjs",
"types": "./lib/types/index.d.ts"
"types": "./lib/types/index.d.ts",
"import": "./lib/neutral/index.js"
}
},
"files": [
"lib/esm",
"lib/neutral",
"lib/types"
],
"homepage": "https://github.com/escapace/sequentialize",
"homepage": "https://github.com/escapace/sequentialize#readme",
"license": "MPL-2.0",
"module": "lib/esm/index.mjs",
"module": "lib/neutral/index.js",
"private": false,
"repository": "https://github.com/escapace/sequentialize.git",
"publishConfig": {
"access": "public",
"provenance": true
},
"repository": "escapace/sequentialize",
"sideEffects": false,

@@ -62,7 +54,11 @@ "type": "module",

"scripts": {
"build": "node ./scripts/build.mjs",
"lint": "ls-lint && eslint 'src/**/*.{js,mjs,cjs,ts,mts,cts}'",
"test": "node ./scripts/test.mjs && c8 mocha --enable-source-maps 'lib/tests/**/*.spec.js'",
"build": "tsx scripts/build.ts",
"format": "syncpack format && eslint --no-warn-ignored --fix && prettier -uw .",
"lint": "ls-lint --config .ls-lint.yaml && knip --no-config-hints && eslint",
"ls-lint": "ls-lint --config .ls-lint.yaml",
"pack": "pnpm-pack package --pack-destination lib",
"syncpack": "syncpack fix-mismatches && syncpack set-semver-ranges && syncpack format",
"test": "vitest --no-watch --coverage",
"typecheck": "tsc --noEmit"
}
}
// src/deferred.ts
var Deferred = class {
promise;
fate;
state;
_resolve;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
_reject;
constructor() {
this.state = "pending", this.fate = "unresolved", this.promise = new Promise((resolve, reject) => {
this._resolve = resolve, this._reject = reject;
}), this.promise.then(
() => this.state = "fulfilled",
() => this.state = "rejected"
);
}
resolve(value) {
if (this.fate === "resolved")
throw new Error("Deferred cannot be resolved twice");
this.fate = "resolved", this._resolve !== void 0 && this._resolve(value);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
reject(reason) {
if (this.fate === "resolved")
throw new Error("Deferred cannot be resolved twice");
this.fate = "resolved", this._reject !== void 0 && this._reject(reason);
}
isResolved() {
return this.fate === "resolved";
}
isPending() {
return this.state === "pending";
}
isFulfilled() {
return this.state === "fulfilled";
}
isRejected() {
return this.state === "rejected";
}
}, deferred = () => new Deferred();
// src/sequentialize.ts
var sequentialize = () => {
let locks = [];
return (fn) => (...args) => {
for (let l = locks.length - 1; l >= 0; l -= 1)
locks[l].isRejected() && locks.splice(l, 1);
let lock = new Deferred(), promises = locks.map(({ promise }) => promise);
return locks.push(lock), Promise.all(promises).then(() => fn(...args)).then((value) => (lock.resolve(), value)).catch((reason) => {
throw lock.resolve(), reason;
});
};
};
export {
deferred,
sequentialize
};
//# sourceMappingURL=index.mjs.map
{
"version": 3,
"sources": ["../../src/deferred.ts", "../../src/sequentialize.ts"],
"sourcesContent": ["/**\n * A deferred represents a promise which can be either resolved via\n * deferred.resolve or rejected via deferred.reject.The promise can be acessed\n * via the promise property on the deferred.\n */\n\nexport class Deferred<T> {\n public promise: Promise<T>\n\n private fate: 'resolved' | 'unresolved'\n private state: 'pending' | 'fulfilled' | 'rejected'\n\n private _resolve:\n | ((value?: T | PromiseLike<T> | undefined) => void)\n | undefined\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _reject: ((reason?: any) => void) | undefined\n\n constructor() {\n this.state = 'pending'\n this.fate = 'unresolved'\n\n this.promise = new Promise((resolve, reject) => {\n this._resolve = resolve as typeof this._resolve\n this._reject = reject\n })\n\n this.promise.then(\n () => (this.state = 'fulfilled'),\n () => (this.state = 'rejected')\n )\n }\n\n public resolve(value?: T | PromiseLike<T> | undefined) {\n if (this.fate === 'resolved') {\n throw new Error('Deferred cannot be resolved twice')\n }\n\n this.fate = 'resolved'\n\n if (this._resolve !== undefined) {\n this._resolve(value)\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public reject(reason?: any) {\n if (this.fate === 'resolved') {\n throw new Error('Deferred cannot be resolved twice')\n }\n\n this.fate = 'resolved'\n\n if (this._reject !== undefined) {\n this._reject(reason)\n }\n }\n\n public isResolved() {\n return this.fate === 'resolved'\n }\n\n public isPending() {\n return this.state === 'pending'\n }\n\n public isFulfilled() {\n return this.state === 'fulfilled'\n }\n\n public isRejected() {\n return this.state === 'rejected'\n }\n}\n\nexport const deferred = <T>() => new Deferred<T>()\n", "/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Deferred } from './deferred'\n\nexport const sequentialize = () => {\n const locks: Array<Deferred<any>> = []\n\n return <T extends (...args: any[]) => Promise<any>>(fn: T): T => {\n return ((...args: any[]) => {\n for (let l = locks.length - 1; l >= 0; l -= 1) {\n if (locks[l].isRejected()) {\n locks.splice(l, 1)\n }\n }\n\n const lock = new Deferred<any>()\n const promises = locks.map(({ promise }) => promise)\n\n locks.push(lock)\n\n return Promise.all(promises)\n .then(() => fn(...args))\n .then((value) => {\n lock.resolve()\n\n return value\n })\n .catch((reason) => {\n lock.resolve()\n\n throw reason\n })\n }) as T\n }\n}\n"],
"mappings": ";AAMO,IAAM,WAAN,MAAkB;AAAA,EAChB;AAAA,EAEC;AAAA,EACA;AAAA,EAEA;AAAA;AAAA,EAKA;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ,WACb,KAAK,OAAO,cAEZ,KAAK,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC9C,WAAK,WAAW,SAChB,KAAK,UAAU;AAAA,IACjB,CAAC,GAED,KAAK,QAAQ;AAAA,MACX,MAAO,KAAK,QAAQ;AAAA,MACpB,MAAO,KAAK,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EAEO,QAAQ,OAAwC;AACrD,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI,MAAM,mCAAmC;AAGrD,SAAK,OAAO,YAER,KAAK,aAAa,UACpB,KAAK,SAAS,KAAK;AAAA,EAEvB;AAAA;AAAA,EAGO,OAAO,QAAc;AAC1B,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI,MAAM,mCAAmC;AAGrD,SAAK,OAAO,YAER,KAAK,YAAY,UACnB,KAAK,QAAQ,MAAM;AAAA,EAEvB;AAAA,EAEO,aAAa;AAClB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEO,YAAY;AACjB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEO,cAAc;AACnB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEO,aAAa;AAClB,WAAO,KAAK,UAAU;AAAA,EACxB;AACF,GAEa,WAAW,MAAS,IAAI,SAAY;;;ACtE1C,IAAM,gBAAgB,MAAM;AACjC,MAAM,QAA8B,CAAC;AAErC,SAAO,CAA6C,OAC1C,IAAI,SAAgB;AAC1B,aAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,MAAI,MAAM,CAAC,EAAE,WAAW,KACtB,MAAM,OAAO,GAAG,CAAC;AAIrB,QAAM,OAAO,IAAI,SAAc,GACzB,WAAW,MAAM,IAAI,CAAC,EAAE,QAAQ,MAAM,OAAO;AAEnD,iBAAM,KAAK,IAAI,GAER,QAAQ,IAAI,QAAQ,EACxB,KAAK,MAAM,GAAG,GAAG,IAAI,CAAC,EACtB,KAAK,CAAC,WACL,KAAK,QAAQ,GAEN,MACR,EACA,MAAM,CAAC,WAAW;AACjB,iBAAK,QAAQ,GAEP;AAAA,IACR,CAAC;AAAA,EACL;AAEJ;",
"names": []
}