cross-process-lock
Version:
Cross-process file locking solution with lock-queue
62 lines • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.saveMetadata = exports.readMetadata = void 0;
const node_fs_1 = require("node:fs");
const logger_1 = require("./logger");
/**
* Reads metadata from the given file
* @param {string} file - path to file to read metadata from
* @returns {Promise}
*/
const readMetadata = (file) => {
return new Promise((resolve, reject) => {
(0, logger_1.logger)("readMetadata file:%s", file);
(0, node_fs_1.readFile)(file, { encoding: "utf8" }, (err, data) => {
(0, logger_1.logger)("readMetadata err:%s", err);
(0, logger_1.logger)("readMetadata data:%O", data);
if (err) {
reject(err);
}
else {
try {
const parsed = JSON.parse(String(data));
(0, logger_1.logger)("readMetadata parsed:%O", parsed);
resolve(parsed);
}
catch (e) {
(0, logger_1.logger)("readMetadata not JSON:%s", e);
resolve(null);
}
}
});
});
};
exports.readMetadata = readMetadata;
/**
* Saves metadata to the given file
* @param {string} file - path to file to write metadata to
* @param {number} lockTime - timestamp when lock should be registered
* @returns {Promise}
*/
const saveMetadata = (file, lockTime) => {
return new Promise((resolve, reject) => {
(0, logger_1.logger)("saveMetadata file:%s", file);
(0, logger_1.logger)("saveMetadata lockTime:%d", lockTime);
const metadata = {
pID: process.pid,
lockTime,
};
(0, logger_1.logger)("saveMetadata metadata:%o", metadata);
(0, node_fs_1.writeFile)(file, JSON.stringify(metadata), { encoding: "utf8" }, (err) => {
(0, logger_1.logger)("saveMetadata done err:%o", err);
if (err) {
reject(err);
}
else {
resolve();
}
});
});
};
exports.saveMetadata = saveMetadata;
//# sourceMappingURL=metadata.js.map