@verdaccio/local-storage
Version:
Local storage implementation
79 lines (77 loc) • 2.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.findPackages = findPackages;
exports.getFileStats = getFileStats;
exports.readDirectory = readDirectory;
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _lodash = _interopRequireDefault(require("lodash"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function getFileStats(packagePath) {
return new Promise((resolve, reject) => {
_fs.default.stat(packagePath, (err, stats) => {
if (_lodash.default.isNil(err) === false) {
return reject(err);
}
resolve(stats);
});
});
}
function readDirectory(packagePath) {
return new Promise((resolve, reject) => {
_fs.default.readdir(packagePath, (err, scopedPackages) => {
if (_lodash.default.isNil(err) === false) {
return reject(err);
}
resolve(scopedPackages);
});
});
}
function hasScope(file) {
return file.match(/^@/) !== null;
}
/* eslint-disable no-async-promise-executor */
async function findPackages(storagePath, validationHandler) {
const listPackages = [];
return new Promise(async (resolve, reject) => {
try {
const scopePath = _path.default.resolve(storagePath);
const storageDirs = await readDirectory(scopePath);
for (const directory of storageDirs) {
// we check whether has 2nd level
if (hasScope(directory)) {
// we read directory multiple
const scopeDirectory = _path.default.resolve(storagePath, directory);
const scopedPackages = await readDirectory(scopeDirectory);
for (const scopedDirName of scopedPackages) {
if (validationHandler(scopedDirName)) {
// we build the complete scope path
const scopePath = _path.default.resolve(storagePath, directory, scopedDirName);
// list content of such directory
listPackages.push({
name: `${directory}/${scopedDirName}`,
path: scopePath
});
}
}
} else {
// otherwise we read as single level
if (validationHandler(directory)) {
const scopePath = _path.default.resolve(storagePath, directory);
listPackages.push({
name: directory,
path: scopePath
});
}
}
}
} catch (error) {
reject(error);
}
resolve(listPackages);
});
}
/* eslint-enable no-async-promise-executor */
//# sourceMappingURL=utils.js.map