Skip to content

Commit 522621d

Browse files
committed
Bump version to 1.0.1: Docs and README refinements
1 parent 8adc193 commit 522621d

9 files changed

+39
-25
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ async function refreshUsersCache(userIDs: ReadonlyArray<string>) {
103103
// their completion.
104104

105105
// Graceful termination, if desired.
106-
await dbAccessSemaphore.waitTillAllExecutingJobsAreSettlled();
106+
await dbAccessSemaphore.waitTillAllExecutingJobsAreSettled();
107107
console.info(`Finished refreshing users cache for ${userIDs.length} users`);
108108
}
109109
```

dist/ZeroBackpressureSemaphore.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ export declare class ZeroBackpressureSemaphore<T> {
125125
*
126126
* @param job - The job to be executed in the given room.
127127
* @returns A promise that resolves with the job's return value or rejects with its error.
128-
* Rejection occurs only if triggered by `waitForCompletion`.
128+
* Rejection occurs only if triggered by `waitForCompletion`.
129129
*/
130130
_handleJobExecution(job: SemaphoreJob<T>, allottedRoom: number, isBackgroundTask: boolean): Promise<T>;
131131
}

dist/ZeroBackpressureSemaphore.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/ZeroBackpressureSemaphore.test.js

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/ZeroBackpressureSemaphore.test.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "zero-backpressure-semaphore-typescript",
3-
"version": "1.0.0",
3+
"version": "1.0.1",
44
"description": "A classic semaphore with modern API, inspired by the RAII idiom, offering backpressure control for enhanced efficiency",
55
"repository": {
66
"type": "git",
@@ -19,13 +19,15 @@
1919
},
2020
"keywords": [
2121
"semaphore",
22-
"backpressure",
22+
"mutex",
23+
"lock",
2324
"job",
2425
"concurrency",
26+
"backpressure",
27+
"limit",
2528
"async",
2629
"typescript",
27-
"ts",
28-
"lock"
30+
"ts"
2931
],
3032
"engines": {
3133
"node": ">=14.5.0"

src/ZeroBackpressureSemaphore.test.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
import { ZeroBackpressureSemaphore, SemaphoreJob } from './ZeroBackpressureSemaphore';
22

3-
type PromiseResolveType = (value?: unknown) => void;
4-
5-
const resolveFast = async () => { expect(14).toBeGreaterThan(3); };
6-
const delay = (ms: number) => new Promise(res => setTimeout(res, ms));
3+
type PromiseResolveCallbackType = (value?: unknown) => void;
4+
5+
/**
6+
* resolveFast
7+
*
8+
* The one-and-only purpose of this function, is triggerring an event-loop iteration.
9+
* It is relevant whenever a test needs to simulate tasks from the Node.js' micro-tasks queue.
10+
*/
11+
const resolveFast = async () => {
12+
expect(14).toBeGreaterThan(3);
13+
};
714

815
describe('ZeroBackpressureSemaphore tests', () => {
916
describe('Happy path tests', () => {
1017
test('waitForCompletion: should process only one job at a time, when jobs happen to be scheduled sequentially (trivial case)', async () => {
1118
const maxConcurrentJobs = 7;
1219
const semaphore = new ZeroBackpressureSemaphore<void>(maxConcurrentJobs);
13-
let finishCurrentJob: PromiseResolveType;
20+
let finishCurrentJob: PromiseResolveCallbackType;
1421
const numberOfJobs = 10;
1522

1623
for (let jobNo = 1; jobNo <= numberOfJobs; ++jobNo) {
@@ -30,7 +37,7 @@ describe('ZeroBackpressureSemaphore tests', () => {
3037
const maxConcurrentJobs = 1;
3138
const lock = new ZeroBackpressureSemaphore<void>(maxConcurrentJobs);
3239
const numberOfJobs = 10;
33-
const jobCompletionCallbacks: PromiseResolveType[] = [];
40+
const jobCompletionCallbacks: PromiseResolveCallbackType[] = [];
3441
const waitTillCompletionPromises: Promise<void>[] = [];
3542

3643
for (let jobNo = 0; jobNo < numberOfJobs; ++jobNo) {
@@ -73,7 +80,7 @@ describe('ZeroBackpressureSemaphore tests', () => {
7380
test('waitForCompletion: should not exceed max concurrently executing jobs, when the amont of pending jobs is bigger than the amount of rooms', async () => {
7481
const maxConcurrentJobs = 5;
7582
const numberOfJobs = 17 * maxConcurrentJobs - 1;
76-
const jobCompletionCallbacks: PromiseResolveType[] = [];
83+
const jobCompletionCallbacks: PromiseResolveCallbackType[] = [];
7784
const waitTillCompletionPromises: Promise<void>[] = [];
7885

7986
const semaphore = new ZeroBackpressureSemaphore<void>(maxConcurrentJobs);
@@ -88,7 +95,7 @@ describe('ZeroBackpressureSemaphore tests', () => {
8895
}
8996

9097
for (let jobNo = 0; jobNo < numberOfJobs; ++jobNo) {
91-
// Just trigger the event loop, let the Semaphore to decide which jobs can
98+
// Triggering the event loop, allowing the Semaphore to decide which jobs can
9299
// start their execution.
93100
await Promise.race([...waitTillCompletionPromises, resolveFast()]);
94101

@@ -144,7 +151,7 @@ describe('ZeroBackpressureSemaphore tests', () => {
144151

145152
test('waitTillAllExecutingJobsAreSettled: should resolve once all executing jobs are settled', async () => {
146153
const maxConcurrentJobs = 12;
147-
const jobCompletionCallbacks: PromiseResolveType[] = [];
154+
const jobCompletionCallbacks: PromiseResolveCallbackType[] = [];
148155
const waitTillCompletionPromises: Promise<void>[] = [];
149156

150157
const semaphore = new ZeroBackpressureSemaphore<void>(maxConcurrentJobs);
@@ -158,7 +165,6 @@ describe('ZeroBackpressureSemaphore tests', () => {
158165
waitTillCompletionPromises.push(waitPromise);
159166
}
160167

161-
await resolveFast(); // Trigger the event loop.
162168
const waitTillAllAreSettledPromise = semaphore.waitTillAllExecutingJobsAreSettled();
163169
await resolveFast(); // Trigger the event loop.
164170

src/ZeroBackpressureSemaphore.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ export class ZeroBackpressureSemaphore<T> {
194194
*
195195
* @param job - The job to be executed in the given room.
196196
* @returns A promise that resolves with the job's return value or rejects with its error.
197-
* Rejection occurs only if triggered by `waitForCompletion`.
197+
* Rejection occurs only if triggered by `waitForCompletion`.
198198
*/
199199
public async _handleJobExecution(
200200
job: SemaphoreJob<T>,

0 commit comments

Comments
 (0)