Socket
Socket
Sign inDemoInstall

@verdaccio/file-locking

Package Overview
Dependencies
Maintainers
4
Versions
54
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@verdaccio/file-locking - npm Package Compare versions

Comparing version 9.3.1 to 9.3.2

lib/lockfile.d.ts

8

CHANGELOG.md

@@ -6,2 +6,10 @@ # Change Log

## [9.3.2](https://github.com/verdaccio/monorepo/compare/v9.3.1...v9.3.2) (2020-03-08)
**Note:** Version bump only for package @verdaccio/file-locking
## [9.3.1](https://github.com/verdaccio/monorepo/compare/v9.3.0...v9.3.1) (2020-02-23)

@@ -8,0 +16,0 @@

16

lib/index.d.ts

@@ -1,13 +0,3 @@

declare const lockFile: (name: string, callback: Function) => void;
declare const unlockFile: (name: string, next: Function) => void;
/**
* Reads a local file, which involves
* optionally taking a lock
* reading the file contents
* optionally parsing JSON contents
* @param {*} name
* @param {*} options
* @param {*} callback
*/
declare function readFile(name: string, options?: any, callback?: any): void;
export { lockFile, unlockFile, readFile };
export * from './unclock';
export * from './readFile';
export * from './lockfile';

@@ -6,168 +6,37 @@ "use strict";

});
exports.readFile = readFile;
exports.unlockFile = exports.lockFile = void 0;
var _fs = _interopRequireDefault(require("fs"));
var _unclock = require("./unclock");
var _path = _interopRequireDefault(require("path"));
var _lockfile = _interopRequireDefault(require("lockfile"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// locks a file by creating a lock file
const lockFile = function (name, callback) {
const statDir = name => {
return new Promise((resolve, reject) => {
// test to see if the directory exists
const dirPath = _path.default.dirname(name);
_fs.default.stat(dirPath, function (err, stats) {
if (err) {
return reject(err);
} else if (!stats.isDirectory()) {
return resolve(new Error(`${_path.default.dirname(name)} is not a directory`));
} else {
return resolve(null);
}
});
});
};
const statfile = name => {
return new Promise((resolve, reject) => {
// test to see if the directory exists
_fs.default.stat(name, function (err, stats) {
if (err) {
return reject(err);
} else if (!stats.isFile()) {
return resolve(new Error(`${_path.default.dirname(name)} is not a file`));
} else {
return resolve(null);
}
});
});
};
const lockfile = name => {
return new Promise(resolve => {
const lockOpts = {
// time (ms) to wait when checking for stale locks
wait: 1000,
// how often (ms) to re-check stale locks
pollPeriod: 100,
// locks are considered stale after 5 minutes
stale: 5 * 60 * 1000,
// number of times to attempt to create a lock
retries: 100,
// time (ms) between tries
retryWait: 100
};
const lockFileName = `${name}.lock`;
_lockfile.default.lock(lockFileName, lockOpts, () => {
resolve();
});
});
};
Promise.resolve().then(() => {
return statDir(name);
}).then(() => {
return statfile(name);
}).then(() => {
return lockfile(name);
}).then(() => {
callback(null);
}).catch(err => {
callback(err);
Object.keys(_unclock).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _unclock[key];
}
});
}; // unlocks file by removing existing lock file
});
var _readFile = require("./readFile");
exports.lockFile = lockFile;
const unlockFile = function (name, next) {
const lockFileName = `${name}.lock`;
_lockfile.default.unlock(lockFileName, function () {
return next(null);
Object.keys(_readFile).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _readFile[key];
}
});
};
/**
* Reads a local file, which involves
* optionally taking a lock
* reading the file contents
* optionally parsing JSON contents
* @param {*} name
* @param {*} options
* @param {*} callback
*/
});
var _lockfile = require("./lockfile");
exports.unlockFile = unlockFile;
function readFile(name, options = {}, callback = () => {}) {
if (typeof options === 'function') {
callback = options;
options = {};
}
options.lock = options.lock || false;
options.parse = options.parse || false;
const lock = function (options) {
return new Promise((resolve, reject) => {
if (!options.lock) {
return resolve(null);
}
lockFile(name, function (err) {
if (err) {
return reject(err);
}
return resolve(null);
});
});
};
const read = function () {
return new Promise((resolve, reject) => {
_fs.default.readFile(name, 'utf8', function (err, contents) {
if (err) {
return reject(err);
}
resolve(contents);
});
});
};
const parseJSON = function (contents) {
return new Promise((resolve, reject) => {
if (!options.parse) {
return resolve(contents);
}
try {
contents = JSON.parse(contents);
return resolve(contents);
} catch (err) {
return reject(err);
}
});
};
Promise.resolve().then(() => {
return lock(options);
}).then(() => {
return read();
}).then(content => {
return parseJSON(content);
}).then(result => {
callback(null, result);
}, err => {
callback(err);
Object.keys(_lockfile).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _lockfile[key];
}
});
}
});
{
"name": "@verdaccio/file-locking",
"version": "9.3.1",
"version": "9.3.2",
"description": "library that handle file locking",

@@ -36,4 +36,4 @@ "keywords": [

"devDependencies": {
"@verdaccio/babel-preset": "^9.3.1",
"@verdaccio/eslint-config": "^9.0.0",
"@verdaccio/babel-preset": "^9.3.2",
"@verdaccio/eslint-config": "^9.3.2",
"@verdaccio/types": "^9.3.0"

@@ -56,3 +56,3 @@ },

},
"gitHead": "df1fa45b7d8643ecfb0cb117e03ca6e7da77a8b0"
"gitHead": "d8af80dd28afc238b2ffaa6eafab5344fab38a81"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc