@lsdsoftware/utils 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -3,4 +3,5 @@ import { makeStateMachine } from "./state-machine";
3
3
  import { makeConnectionManager } from "./connection-manager";
4
4
  import { makeMessageDispatcher } from "./message-dispatcher";
5
5
  import { makeRateLimiter } from "./rate-limiter";
6
- export { makeLineReader, makeStateMachine, makeConnectionManager, makeMessageDispatcher, makeRateLimiter, };
6
+ import { makeSemaphore } from "./semaphore";
7
+ export { makeLineReader, makeStateMachine, makeConnectionManager, makeMessageDispatcher, makeRateLimiter, makeSemaphore, };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeRateLimiter = exports.makeMessageDispatcher = exports.makeConnectionManager = exports.makeStateMachine = exports.makeLineReader = void 0;
3
+ exports.makeSemaphore = exports.makeRateLimiter = exports.makeMessageDispatcher = exports.makeConnectionManager = exports.makeStateMachine = exports.makeLineReader = void 0;
4
4
  const line_reader_1 = require("./line-reader");
5
5
  Object.defineProperty(exports, "makeLineReader", { enumerable: true, get: function () { return line_reader_1.makeLineReader; } });
6
6
  const state_machine_1 = require("./state-machine");
@@ -11,3 +11,5 @@ const message_dispatcher_1 = require("./message-dispatcher");
11
11
  Object.defineProperty(exports, "makeMessageDispatcher", { enumerable: true, get: function () { return message_dispatcher_1.makeMessageDispatcher; } });
12
12
  const rate_limiter_1 = require("./rate-limiter");
13
13
  Object.defineProperty(exports, "makeRateLimiter", { enumerable: true, get: function () { return rate_limiter_1.makeRateLimiter; } });
14
+ const semaphore_1 = require("./semaphore");
15
+ Object.defineProperty(exports, "makeSemaphore", { enumerable: true, get: function () { return semaphore_1.makeSemaphore; } });
@@ -0,0 +1,3 @@
1
+ export declare function makeSemaphore(count: number): {
2
+ runTask<T>(task: () => Promise<T>): Promise<T>;
3
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.makeSemaphore = void 0;
13
+ function makeSemaphore(count) {
14
+ const waiters = [];
15
+ return {
16
+ runTask(task) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ if (count > 0)
19
+ count--;
20
+ else
21
+ yield new Promise(f => waiters.push(f));
22
+ try {
23
+ return yield task();
24
+ }
25
+ finally {
26
+ count++;
27
+ while (count > 0 && waiters.length > 0) {
28
+ count--;
29
+ waiters.shift()();
30
+ }
31
+ }
32
+ });
33
+ }
34
+ };
35
+ }
36
+ exports.makeSemaphore = makeSemaphore;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lsdsoftware/utils",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Useful JavaScript utilities",
5
5
  "main": "dist/index.js",
6
6
  "files": [