Socket
Socket
Sign inDemoInstall

@verdaccio/local-storage

Package Overview
Dependencies
Maintainers
1
Versions
154
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@verdaccio/local-storage - npm Package Compare versions

Comparing version 0.0.14 to 0.1.0

145

lib/local-fs.js

@@ -36,2 +36,4 @@ 'use strict';

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

@@ -42,4 +44,8 @@

var resourceNotAvailable = 'EAGAIN';
var pkgFileName = 'package.json';
var fSError = function fSError(message) {
var err = (0, _httpErrors2.default)(409, message);
var code = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 409;
var err = (0, _httpErrors2.default)(code, message);
// $FlowFixMe

@@ -51,2 +57,11 @@ err.code = message;

var ErrorCode = {
get503: function get503() {
return fSError('resource temporarily unavailable', 500);
},
get404: function get404(customMessage) {
return fSError('no such package available', 404);
}
};
var tempFile = function tempFile(str) {

@@ -87,5 +102,65 @@ return `${str}.tmp${String(Math.random()).substr(2)}`;

/**
* This function allows to update the package thread-safely
Algorithm:
1. lock package.json for writing
2. read package.json
3. updateFn(pkg, cb), and wait for cb
4. write package.json.tmp
5. move package.json.tmp package.json
6. callback(err?)
* @param {*} name
* @param {*} updateHandler
* @param {*} onWrite
* @param {*} transformPackage
* @param {*} onEnd
*/
_createClass(LocalFS, [{
key: 'deleteJSON',
value: function deleteJSON(fileName, callback) {
key: 'updatePackage',
value: function updatePackage(name, updateHandler, onWrite, transformPackage, onEnd) {
var _this = this;
this._lockAndReadJSON(pkgFileName, function (err, json) {
var locked = false;
var self = _this;
// callback that cleans up lock first
var unLockCallback = function unLockCallback(lockError) {
var _args = arguments;
if (locked) {
self._unlockJSON(pkgFileName, function () {
// ignore any error from the unlock
onEnd.apply(lockError, _args);
});
} else {
onEnd.apply(undefined, _toConsumableArray(_args));
}
};
if (!err) {
locked = true;
}
if (_lodash2.default.isNil(err) === false) {
if (err.code === resourceNotAvailable) {
return unLockCallback(ErrorCode.get503());
} else if (err.code === noSuchFile) {
return unLockCallback(ErrorCode.get404());
} else {
return unLockCallback(err);
}
}
updateHandler(json, function (err) {
if (err) {
return unLockCallback(err);
}
onWrite(name, transformPackage(json), unLockCallback);
});
});
}
}, {
key: 'deletePackage',
value: function deletePackage(fileName, callback) {
return _fs2.default.unlink(this._getStorage(fileName), callback);

@@ -99,34 +174,14 @@ }

}, {
key: 'createJSON',
value: function createJSON(name, value, cb) {
key: 'createPackage',
value: function createPackage(name, value, cb) {
this._createFile(this._getStorage(name), this._convertToString(value), cb);
}
}, {
key: 'writeJSON',
value: function writeJSON(name, value, cb) {
key: 'savePackage',
value: function savePackage(name, value, cb) {
this._writeFile(this._getStorage(name), this._convertToString(value), cb);
}
}, {
key: 'lockAndReadJSON',
value: function lockAndReadJSON(name, cb) {
var fileName = this._getStorage(name);
(0, _fileLocking.readFile)(fileName, {
lock: true,
parse: true
}, function (err, res) {
if (err) {
return cb(err);
}
return cb(null, res);
});
}
}, {
key: 'unlockJSON',
value: function unlockJSON(name, cb) {
(0, _fileLocking.unlockFile)(this._getStorage(name), cb);
}
}, {
key: 'readJSON',
value: function readJSON(name, cb) {
key: 'readPackage',
value: function readPackage(name, cb) {
this._readStorageFile(this._getStorage(name)).then(function (res) {

@@ -145,4 +200,4 @@ try {

}, {
key: 'createWriteStream',
value: function createWriteStream(name) {
key: 'writeTarball',
value: function writeTarball(name) {
var uploadStream = new _streams.UploadTarball();

@@ -207,4 +262,4 @@

}, {
key: 'createReadStream',
value: function createReadStream(name, readTarballStream) {
key: 'readTarball',
value: function readTarball(name, readTarballStream) {
var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};

@@ -242,3 +297,3 @@

value: function _createFile(name, contents, callback) {
var _this = this;
var _this2 = this;

@@ -249,3 +304,3 @@ _fs2.default.exists(name, function (exists) {

}
_this._writeFile(name, contents, callback);
_this2._writeFile(name, contents, callback);
});

@@ -307,2 +362,22 @@ }

}
}, {
key: '_lockAndReadJSON',
value: function _lockAndReadJSON(name, cb) {
var fileName = this._getStorage(name);
(0, _fileLocking.readFile)(fileName, {
lock: true,
parse: true
}, function (err, res) {
if (err) {
return cb(err);
}
return cb(null, res);
});
}
}, {
key: '_unlockJSON',
value: function _unlockJSON(name, cb) {
(0, _fileLocking.unlockFile)(this._getStorage(name), cb);
}
}]);

@@ -309,0 +384,0 @@

{
"name": "@verdaccio/local-storage",
"version": "0.0.14",
"version": "0.1.0",
"description": "local storage implementation",

@@ -23,3 +23,3 @@ "main": "lib/index.js",

"devDependencies": {
"@verdaccio/types": "^0.0.7",
"@verdaccio/types": "^0.1.0",
"babel-cli": "6.24.1",

@@ -26,0 +26,0 @@ "babel-core": "6.25.0",

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