Skip to content

Commit 8153f25

Browse files
committed
feat: semaphore optional disposer
1 parent 935ba81 commit 8153f25

File tree

8 files changed

+3858
-822
lines changed

8 files changed

+3858
-822
lines changed

.babelrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"plugins": [
3-
"transform-strict-mode"
3+
"@babel/plugin-transform-strict-mode"
44
],
55
"env": {
66
"test": {

.nycrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"src/**/*.spec.js"
88
],
99
"require": [
10-
"babel-register"
10+
"@babel/register"
1111
],
1212
"sourceMap": false,
1313
"instrument": false,

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ Promise.using(semaphore.take(), () => {
177177
// do some work, return promise
178178
});
179179

180-
// option 2
181-
await semaphore.take();
180+
// option 2 - without disposer
181+
await semaphore.take(false);
182182
try {
183183
// perform some async work and ensure we call leave afterwards
184184
} finally {

__tests__/docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ version: '2'
22

33
services:
44
redis:
5-
image: redis:3.2.9-alpine
5+
image: redis:4.0.11-alpine
66
container_name: redis
77
hostname: redis
88
expose:
99
- 6379
1010

1111
tester:
12-
image: makeomatic/node:9.3.0-tester
12+
image: makeomatic/node:10.8.0-tester
1313
container_name: tester
1414
hostname: tester
1515
links:

__tests__/integration.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ describe('integration tests', () => {
197197
.catch(unexpectedError)
198198
.then(() => {
199199
assert.equal(job.callCount, 3);
200-
assert.ifError(failedToQueue.called, 'unexpected error was raised');
201-
assert.ifError(unexpectedError.called, 'fatal error was raised');
200+
assert.ok(!failedToQueue.called, 'unexpected error was raised');
201+
assert.ok(!unexpectedError.called, 'fatal error was raised');
202202
return null;
203203
});
204204
});
@@ -217,7 +217,7 @@ describe('integration tests', () => {
217217
.then(() => {
218218
assert.equal(job.callCount, 1);
219219
assert.equal(failedToQueue.callCount, 1, 'unexpected error was raised');
220-
assert.ifError(unexpectedError.called, 'fatal error was raised');
220+
assert.ok(!unexpectedError.called, 'fatal error was raised');
221221
return null;
222222
});
223223
});

package.json

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
"scripts": {
77
"test": "yarn lint && mdep test run",
88
"pretest": "yarn compile",
9-
"prepublish": "yarn compile",
9+
"prepare": "yarn compile",
1010
"lint": "eslint ./src",
1111
"compile": "babel -d ./lib src",
12-
"semantic-release": "semantic-release"
12+
"semantic-release": "semantic-release",
13+
"commitmsg": "commitlint -e $GIT_PARAMS",
14+
"preparecommitmsg": "./node_modules/@makeomatic/deploy/git-hooks/prepare-commit-msg $GIT_PARAMS"
1315
},
1416
"repository": {
1517
"type": "git",
@@ -37,31 +39,34 @@
3739
"bluebird": "^3.5.1",
3840
"bunyan": "^1.8.12",
3941
"callback-queue": "^2.0.0",
40-
"denque": "^1.2.2",
42+
"denque": "^1.3.0",
4143
"ioredis-lock": "^3.4.0",
42-
"lodash": "^4.17.4",
44+
"lodash": "^4.17.10",
4345
"serialize-error": "^2.1.0"
4446
},
4547
"devDependencies": {
48+
"@babel/cli": "^7.0.0-rc.1",
49+
"@babel/core": "^7.0.0-rc.1",
50+
"@babel/plugin-transform-strict-mode": "^7.0.0-rc.1",
51+
"@babel/register": "^7.0.0-rc.1",
4652
"@makeomatic/condition-semaphore": "^2.0.0",
47-
"@makeomatic/deploy": "^5.0.2",
53+
"@makeomatic/deploy": "^7.0.1",
4854
"@makeomatic/last-release-npm": "^1.0.1",
49-
"babel-cli": "^6.26.0",
50-
"babel-eslint": "^8.2.1",
51-
"babel-plugin-istanbul": "^4.1.5",
52-
"babel-plugin-transform-strict-mode": "^6.24.1",
53-
"babel-register": "^6.26.0",
54-
"codecov": "^3.0.0",
55-
"cross-env": "^5.1.3",
56-
"eslint": "^4.15.0",
57-
"eslint-config-makeomatic": "^2.0.1",
58-
"eslint-plugin-import": "^2.8.0",
59-
"eslint-plugin-promise": "^3.6.0",
55+
"babel-core": "^7.0.0-0",
56+
"babel-eslint": "^8.2.6",
57+
"babel-jest": "^23.4.2",
58+
"babel-plugin-istanbul": "^5.0.0",
59+
"codecov": "^3.0.4",
60+
"cross-env": "^5.2.0",
61+
"eslint": "^5.3.0",
62+
"eslint-config-makeomatic": "^3.0.0",
63+
"eslint-plugin-import": "^2.13.0",
64+
"eslint-plugin-promise": "^3.8.0",
6065
"ioredis": "^3.2.2",
61-
"jest-cli": "^22.1.1",
62-
"mocha": "^4.1.0",
63-
"nyc": "^11.4.1",
64-
"sinon": "^4.1.6"
66+
"jest-cli": "^23.5.0",
67+
"mocha": "^5.2.0",
68+
"nyc": "^12.0.2",
69+
"sinon": "^6.1.5"
6570
},
6671
"engine": {
6772
"node": ">= 8.9.0"

src/semaphore.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@ class Semaphore {
1515
this._take = this._take.bind(this);
1616
}
1717

18-
take() {
19-
return Promise
20-
.fromCallback(this._take)
21-
.disposer(this.leave);
18+
take(disposer = true) {
19+
const promise = Promise.fromCallback(this._take);
20+
21+
// with disposer by default
22+
if (disposer === true) {
23+
return promise.disposer(this.leave);
24+
}
25+
26+
return promise;
2227
}
2328

2429
_take(next) {
@@ -40,9 +45,11 @@ class Semaphore {
4045
})
4146
.catch((e) => {
4247
this.dlock.logger.error('semaphore operational error', e);
43-
return Promise.bind(this, next)
48+
return Promise
4449
.delay(50)
45-
.then(this._take);
50+
.return(next)
51+
.then(this._take)
52+
.then(this.next);
4653
});
4754
}
4855

0 commit comments

Comments
 (0)