cross-process-lock 2.1.1 → 2.2.0
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/lock.js +10 -8
- package/lock.js.map +1 -1
- package/logger.js.map +1 -1
- package/metadata.js +4 -4
- package/metadata.js.map +1 -1
- package/package.json +18 -17
- package/unlock.js +4 -5
- package/unlock.js.map +1 -1
- package/with.js +1 -2
- package/with.js.map +1 -1
package/lock.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.LockError = void 0;
|
|
4
|
+
exports.lock = lock;
|
|
4
5
|
const tslib_1 = require("tslib");
|
|
5
6
|
const logger_1 = require("./logger");
|
|
6
7
|
const unlock_1 = require("./unlock");
|
|
7
|
-
const
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
8
9
|
const metadata_1 = require("./metadata");
|
|
9
10
|
const DEFAULT_OPTIONS = {
|
|
10
11
|
lockTimeout: 12e5,
|
|
@@ -24,12 +25,12 @@ exports.LockError = LockError;
|
|
|
24
25
|
* @param options The lock options/timeout.
|
|
25
26
|
* @returns The function to unlock the file.
|
|
26
27
|
*/
|
|
27
|
-
function lock(
|
|
28
|
-
return tslib_1.__awaiter(this,
|
|
28
|
+
function lock(file_1) {
|
|
29
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (file, options = {}) {
|
|
29
30
|
options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);
|
|
30
31
|
(0, logger_1.logger)("lock file:%s", file);
|
|
31
32
|
(0, logger_1.logger)("lock options:%o", options);
|
|
32
|
-
if (!(0,
|
|
33
|
+
if (!(0, node_fs_1.existsSync)(file)) {
|
|
33
34
|
(0, logger_1.logger)("lock file does not exist");
|
|
34
35
|
throw new Error(`The given file (${file}) does not exist!`);
|
|
35
36
|
}
|
|
@@ -51,7 +52,7 @@ function lock(file, options = {}) {
|
|
|
51
52
|
}, INTERVAL);
|
|
52
53
|
};
|
|
53
54
|
let def = Promise.resolve(null);
|
|
54
|
-
if ((0,
|
|
55
|
+
if ((0, node_fs_1.existsSync)(lockFile)) {
|
|
55
56
|
(0, logger_1.logger)("lock read metadata");
|
|
56
57
|
def = (0, metadata_1.readMetadata)(lockFile);
|
|
57
58
|
}
|
|
@@ -60,7 +61,9 @@ function lock(file, options = {}) {
|
|
|
60
61
|
const lockedTime = metadata ? actual - metadata.lockTime : -1;
|
|
61
62
|
(0, logger_1.logger)("lock metadata:%o", metadata);
|
|
62
63
|
(0, logger_1.logger)("lock actual:%d lockedTime:%d", actual, lockedTime);
|
|
63
|
-
if (!metadata ||
|
|
64
|
+
if (!metadata ||
|
|
65
|
+
metadata.pID === process.pid ||
|
|
66
|
+
lockedTime > options.lockTimeout) {
|
|
64
67
|
(0, logger_1.logger)("lock locking");
|
|
65
68
|
(0, metadata_1.saveMetadata)(lockFile, lockTime).then(done, next);
|
|
66
69
|
}
|
|
@@ -73,5 +76,4 @@ function lock(file, options = {}) {
|
|
|
73
76
|
return tryToLock();
|
|
74
77
|
});
|
|
75
78
|
}
|
|
76
|
-
exports.lock = lock;
|
|
77
79
|
//# sourceMappingURL=lock.js.map
|
package/lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../src/lock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../src/lock.ts"],"names":[],"mappings":"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"}
|
package/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAClB,QAAA,MAAM,GAAmB,KAAK,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAClB,QAAA,MAAM,GAAmB,KAAK,CACzC,sBAAsB,OAAO,CAAC,GAAG,EAAE,CACpC,CAAC"}
|
package/metadata.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.saveMetadata = exports.readMetadata = void 0;
|
|
4
|
-
const
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
5
|
const logger_1 = require("./logger");
|
|
6
6
|
/**
|
|
7
7
|
* Reads metadata from the given file
|
|
@@ -11,7 +11,7 @@ const logger_1 = require("./logger");
|
|
|
11
11
|
const readMetadata = (file) => {
|
|
12
12
|
return new Promise((resolve, reject) => {
|
|
13
13
|
(0, logger_1.logger)("readMetadata file:%s", file);
|
|
14
|
-
(0,
|
|
14
|
+
(0, node_fs_1.readFile)(file, { encoding: "utf8" }, (err, data) => {
|
|
15
15
|
(0, logger_1.logger)("readMetadata err:%s", err);
|
|
16
16
|
(0, logger_1.logger)("readMetadata data:%O", data);
|
|
17
17
|
if (err) {
|
|
@@ -44,10 +44,10 @@ const saveMetadata = (file, lockTime) => {
|
|
|
44
44
|
(0, logger_1.logger)("saveMetadata lockTime:%d", lockTime);
|
|
45
45
|
const metadata = {
|
|
46
46
|
pID: process.pid,
|
|
47
|
-
lockTime
|
|
47
|
+
lockTime,
|
|
48
48
|
};
|
|
49
49
|
(0, logger_1.logger)("saveMetadata metadata:%o", metadata);
|
|
50
|
-
(0,
|
|
50
|
+
(0, node_fs_1.writeFile)(file, JSON.stringify(metadata), { encoding: "utf8" }, (err) => {
|
|
51
51
|
(0, logger_1.logger)("saveMetadata done err:%o", err);
|
|
52
52
|
if (err) {
|
|
53
53
|
reject(err);
|
package/metadata.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":";;;AAAA,qCAA8C;AAC9C,qCAAkC;AAOlC;;;;GAIG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAyB,EAAE;IAClE,OAAO,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAQ,EAAE;QACzD,IAAA,eAAM,EAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QACrC,IAAA,kBAAQ,EAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,GAAU,EAAE,IAAI,EAAE,EAAE;YACxD,IAAA,eAAM,EAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;YACnC,IAAA,eAAM,EAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;YACrC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxC,IAAA,eAAM,EAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;oBACzC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAA,eAAM,EAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;oBACtC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AApBW,QAAA,YAAY,gBAoBvB;AAEF;;;;;GAKG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAiB,EAAE;IAC5E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAA,eAAM,EAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAiB;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ;SACT,CAAC;QACF,IAAA,eAAM,EAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAA,mBAAS,EACP,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EACxB,EAAE,QAAQ,EAAE,MAAM,EAAE,EACpB,CAAC,GAAU,EAAQ,EAAE;YACnB,IAAA,eAAM,EAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAvBW,QAAA,YAAY,gBAuBvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cross-process-lock",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Cross-process file locking solution with lock-queue",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -37,27 +37,28 @@
|
|
|
37
37
|
"node": ">=14.0.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"
|
|
41
|
-
"
|
|
40
|
+
"debug": "^4.4.3",
|
|
41
|
+
"tslib": "^2.8.1"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@
|
|
45
|
-
"@types/
|
|
46
|
-
"@types/
|
|
47
|
-
"@
|
|
48
|
-
"@typescript-eslint/parser": "^5.52.0",
|
|
44
|
+
"@eslint/js": "^9.0.0",
|
|
45
|
+
"@types/debug": "^4.1.12",
|
|
46
|
+
"@types/jest": "^30.0.0",
|
|
47
|
+
"@types/node": "^25.2.1",
|
|
49
48
|
"copyfiles": "^2.4.1",
|
|
50
|
-
"dotenv-ng": "^1.1
|
|
51
|
-
"
|
|
52
|
-
"
|
|
49
|
+
"dotenv-ng": "^1.2.1",
|
|
50
|
+
"eslint": "^9.39.2",
|
|
51
|
+
"globals": "^17.3.0",
|
|
52
|
+
"jest": "^30.0.0",
|
|
53
|
+
"jest-junit": "^16.0.0",
|
|
53
54
|
"proxyquire": "^2.1.3",
|
|
54
|
-
"rimraf": "^
|
|
55
|
-
"sinon": "^
|
|
56
|
-
"eslint": "^8.34.0",
|
|
55
|
+
"rimraf": "^6.1.1",
|
|
56
|
+
"sinon": "^21.0.1",
|
|
57
57
|
"ts-jest": "^29.0.5",
|
|
58
|
-
"typedoc": "^0.
|
|
59
|
-
"typescript": "^
|
|
60
|
-
"
|
|
58
|
+
"typedoc": "^0.28.16",
|
|
59
|
+
"typescript": "^5.9.3",
|
|
60
|
+
"typescript-eslint": "^8.54.0",
|
|
61
|
+
"yargs": "^18.0.0"
|
|
61
62
|
},
|
|
62
63
|
"jest": {
|
|
63
64
|
"reporters": [
|
package/unlock.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.unlock =
|
|
3
|
+
exports.unlock = unlock;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
6
|
const logger_1 = require("./logger");
|
|
7
7
|
const metadata_1 = require("./metadata");
|
|
8
8
|
/**
|
|
@@ -15,14 +15,14 @@ function unlock(file) {
|
|
|
15
15
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
16
16
|
(0, logger_1.logger)("unlock file:%s", file);
|
|
17
17
|
const lockFile = `${file}.lock`;
|
|
18
|
-
if (!(0,
|
|
18
|
+
if (!(0, node_fs_1.existsSync)(lockFile)) {
|
|
19
19
|
(0, logger_1.logger)("unlock lock file does not exist");
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
22
|
const metadata = yield (0, metadata_1.readMetadata)(lockFile);
|
|
23
23
|
if (!metadata || metadata.pID === process.pid) {
|
|
24
24
|
try {
|
|
25
|
-
(0,
|
|
25
|
+
(0, node_fs_1.unlinkSync)(lockFile);
|
|
26
26
|
}
|
|
27
27
|
catch (e) {
|
|
28
28
|
(0, logger_1.logger)("unlock error during deleting lock file:%s", e);
|
|
@@ -33,5 +33,4 @@ function unlock(file) {
|
|
|
33
33
|
}
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
exports.unlock = unlock;
|
|
37
36
|
//# sourceMappingURL=unlock.js.map
|
package/unlock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../src/unlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../src/unlock.ts"],"names":[],"mappings":";;AAUA,wBAoBC;;AA9BD,qCAAiD;AACjD,qCAAkC;AAClC,yCAAwD;AAExD;;;;;GAKG;AACH,SAAsB,MAAM,CAAC,IAAY;;QACvC,IAAA,eAAM,EAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAE/B,MAAM,QAAQ,GAAG,GAAG,IAAI,OAAO,CAAC;QAEhC,IAAI,CAAC,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAA,eAAM,EAAC,iCAAiC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAiB,MAAM,IAAA,uBAAY,EAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,IAAA,oBAAU,EAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAA,eAAM,EAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAA,eAAM,EAAC,0BAA0B,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;CAAA"}
|
package/with.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withLock =
|
|
3
|
+
exports.withLock = withLock;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const lock_1 = require("./lock");
|
|
6
6
|
function withLock(file, options, callback) {
|
|
@@ -21,5 +21,4 @@ function withLock(file, options, callback) {
|
|
|
21
21
|
}
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
|
-
exports.withLock = withLock;
|
|
25
24
|
//# sourceMappingURL=with.js.map
|
package/with.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with.js","sourceRoot":"","sources":["../src/with.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"with.js","sourceRoot":"","sources":["../src/with.ts"],"names":[],"mappings":";;AAgCA,4BAkBC;;AAlDD,iCAA2C;AAgC3C,SAAsB,QAAQ,CAC5B,IAAY,EACZ,OAAsC,EACtC,QAA0B;;QAE1B,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,QAAQ,GAAG,OAAO,CAAC;YACnB,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,WAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,OAAO,QAAQ,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CAAA"}
|