@verdaccio/file-locking
Advanced tools
Comparing version 9.3.1 to 9.3.2
@@ -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 @@ |
@@ -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'; |
185
lib/index.js
@@ -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" | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
16502
14
223
2
1