@verdaccio/local-storage 10.1.1 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,8 +31,6 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
31
31
 
32
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
33
 
34
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
35
-
36
34
  const DEPRECATED_DB_NAME = '.sinopia-db.json';
37
35
  const DB_NAME = '.verdaccio-db.json';
38
36
  const debug = (0, _debug.default)('verdaccio:plugin:local-storage');
@@ -40,17 +38,6 @@ const debug = (0, _debug.default)('verdaccio:plugin:local-storage');
40
38
  class LocalDatabase extends _token.default {
41
39
  constructor(config, logger) {
42
40
  super(config);
43
-
44
- _defineProperty(this, "path", void 0);
45
-
46
- _defineProperty(this, "logger", void 0);
47
-
48
- _defineProperty(this, "data", void 0);
49
-
50
- _defineProperty(this, "config", void 0);
51
-
52
- _defineProperty(this, "locked", void 0);
53
-
54
41
  this.config = config;
55
42
  this.path = this._buildStoragePath(config);
56
43
  this.logger = logger;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/local-database.ts"],"names":["DEPRECATED_DB_NAME","DB_NAME","debug","LocalDatabase","TokenActions","constructor","config","logger","path","_buildStoragePath","locked","data","_fetchLocalPackages","_sync","getSecret","Promise","resolve","secret","setSecret","add","name","cb","list","indexOf","push","search","onPackage","onEnd","validateName","storages","_getCustomPackageLocalStorages","JSON","stringify","base","Path","dirname","self_path","self","storageKeys","Object","keys","async","eachSeries","storage","position","base2","join","storagePath","fs","readdir","err","files","file","includes","match","fileLocation","file2","packagePath","stat","stats","_","isNil","item","time","mtime","getTime","remove","get","error","pkgName","splice","totalItems","length","getPackageStorage","packageName","packageAccess","getMatchedPackagesSpec","_getLocalStoragePath","undefined","isString","packageStoragePath","LocalDriver","clean","packages","listPackagesConf","map","pkg","Error","folderName","mkdirp","sync","writeFileSync","globalConfigStorage","sinopiadbPath","_dbGenPath","accessSync","constants","F_OK","process","emitWarning","code","detail","noSuchFile","emptyDatabase","message"],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport Path from 'path';\n\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport async from 'async';\nimport mkdirp from 'mkdirp';\nimport { Callback, Config, IPackageStorage, IPluginStorage, LocalStorage, Logger, StorageList } from '@verdaccio/types';\nimport { getInternalError } from '@verdaccio/commons-api';\n\nimport LocalDriver, { noSuchFile } from './local-fs';\nimport { loadPrivatePackages } from './pkg-utils';\nimport TokenActions from './token';\n\nconst DEPRECATED_DB_NAME = '.sinopia-db.json';\nconst DB_NAME = '.verdaccio-db.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage');\n\nclass LocalDatabase extends TokenActions implements IPluginStorage<{}> {\n public path: string;\n public logger: Logger;\n public data: LocalStorage;\n public config: Config;\n public locked: boolean;\n\n public constructor(config: Config, logger: Logger) {\n super(config);\n this.config = config;\n this.path = this._buildStoragePath(config);\n this.logger = logger;\n this.locked = false;\n this.data = this._fetchLocalPackages();\n this._sync();\n }\n\n public getSecret(): Promise<string> {\n return Promise.resolve(this.data.secret);\n }\n\n public setSecret(secret: string): Promise<Error | null> {\n return new Promise((resolve): void => {\n this.data.secret = secret;\n\n resolve(this._sync());\n });\n }\n\n public add(name: string, cb: Callback): void {\n if (this.data.list.indexOf(name) === -1) {\n this.data.list.push(name);\n\n debug('the private package %o has been added', name);\n cb(this._sync());\n } else {\n debug('the private package %o was not added', name);\n cb(null);\n }\n }\n\n public search(onPackage: Callback, onEnd: Callback, validateName: (name: string) => boolean): void {\n const storages = this._getCustomPackageLocalStorages();\n debug(`search custom local packages: %o`, JSON.stringify(storages));\n const base = Path.dirname(this.config.self_path);\n const self = this;\n const storageKeys = Object.keys(storages);\n debug(`search base: %o keys: %o`, base, storageKeys);\n\n async.eachSeries(\n storageKeys,\n function(storage, cb) {\n const position = storageKeys.indexOf(storage);\n const base2 = Path.join(position !== 0 ? storageKeys[0] : '');\n const storagePath: string = Path.resolve(base, base2, storage);\n debug('search path: %o : %o', storagePath, storage);\n fs.readdir(storagePath, (err, files) => {\n if (err) {\n return cb(err);\n }\n\n async.eachSeries(\n files,\n function(file, cb) {\n debug('local-storage: [search] search file path: %o', file);\n if (storageKeys.includes(file)) {\n return cb();\n }\n\n if (file.match(/^@/)) {\n // scoped\n const fileLocation = Path.resolve(base, storage, file);\n debug('search scoped file location: %o', fileLocation);\n fs.readdir(fileLocation, function(err, files) {\n if (err) {\n return cb(err);\n }\n\n async.eachSeries(\n files,\n (file2, cb) => {\n if (validateName(file2)) {\n const packagePath = Path.resolve(base, storage, file, file2);\n\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return cb(err);\n }\n const item = {\n name: `${file}/${file2}`,\n path: packagePath,\n time: stats.mtime.getTime(),\n };\n onPackage(item, cb);\n });\n } else {\n cb();\n }\n },\n cb\n );\n });\n } else if (validateName(file)) {\n const base2 = Path.join(position !== 0 ? storageKeys[0] : '');\n const packagePath = Path.resolve(base, base2, storage, file);\n debug('search file location: %o', packagePath);\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return cb(err);\n }\n onPackage(\n {\n name: file,\n path: packagePath,\n time: self.getTime(stats.mtime.getTime(), stats.mtime),\n },\n cb\n );\n });\n } else {\n cb();\n }\n },\n cb\n );\n });\n },\n // @ts-ignore\n onEnd\n );\n }\n\n public remove(name: string, cb: Callback): void {\n this.get((err, data) => {\n if (err) {\n cb(getInternalError('error remove private package'));\n this.logger.error({ err }, '[local-storage/remove]: remove the private package has failed @{err}');\n debug('error on remove package %o', name);\n }\n\n const pkgName = data.indexOf(name);\n if (pkgName !== -1) {\n this.data.list.splice(pkgName, 1);\n\n debug('remove package %o has been removed', name);\n }\n\n cb(this._sync());\n });\n }\n\n /**\n * Return all database elements.\n * @return {Array}\n */\n public get(cb: Callback): void {\n const list = this.data.list;\n const totalItems = this.data.list.length;\n\n cb(null, list);\n\n debug('get full list of packages (%o) has been fetched', totalItems);\n }\n\n public getPackageStorage(packageName: string): IPackageStorage {\n const packageAccess = this.config.getMatchedPackagesSpec(packageName);\n\n const packagePath: string = this._getLocalStoragePath(packageAccess ? packageAccess.storage : undefined);\n debug('storage path selected: ', packagePath);\n\n if (_.isString(packagePath) === false) {\n debug('the package %o has no storage defined ', packageName);\n return;\n }\n\n const packageStoragePath: string = Path.join(\n Path.resolve(Path.dirname(this.config.self_path || ''), packagePath),\n packageName\n );\n\n debug('storage absolute path: ', packageStoragePath);\n\n return new LocalDriver(packageStoragePath, this.logger);\n }\n\n public clean(): void {\n this._sync();\n }\n\n private getTime(time: number, mtime: Date): number | Date {\n return time ? time : mtime;\n }\n\n private _getCustomPackageLocalStorages(): object {\n const storages = {};\n\n // add custom storage if exist\n if (this.config.storage) {\n storages[this.config.storage] = true;\n }\n\n const { packages } = this.config;\n\n if (packages) {\n const listPackagesConf = Object.keys(packages || {});\n\n listPackagesConf.map(pkg => {\n const storage = packages[pkg].storage;\n if (storage) {\n storages[storage] = false;\n }\n });\n }\n\n return storages;\n }\n\n /**\n * Syncronize {create} database whether does not exist.\n * @return {Error|*}\n */\n private _sync(): Error | null {\n debug('sync database started');\n\n if (this.locked) {\n this.logger.error(\n 'Database is locked, please check error message printed during startup to ' + 'prevent data loss.'\n );\n return new Error(\n 'Verdaccio database is locked, please contact your administrator to checkout ' +\n 'logs during verdaccio startup.'\n );\n }\n // Uses sync to prevent ugly race condition\n try {\n // https://www.npmjs.com/package/mkdirp#mkdirpsyncdir-opts\n const folderName = Path.dirname(this.path);\n mkdirp.sync(folderName);\n debug('sync folder %o created succeed', folderName);\n } catch (err) {\n debug('sync create folder has failed with error: %o', err);\n return null;\n }\n\n try {\n fs.writeFileSync(this.path, JSON.stringify(this.data));\n debug('sync write succeed');\n\n return null;\n } catch (err) {\n debug('sync failed %o', err);\n\n return err;\n }\n }\n\n /**\n * Verify the right local storage location.\n * @param {String} path\n * @return {String}\n * @private\n */\n private _getLocalStoragePath(storage: string | void): string {\n const globalConfigStorage = this.config ? this.config.storage : undefined;\n if (_.isNil(globalConfigStorage)) {\n throw new Error('global storage is required for this plugin');\n } else {\n if (_.isNil(storage) === false && _.isString(storage)) {\n return Path.join(globalConfigStorage as string, storage as string);\n }\n\n return globalConfigStorage as string;\n }\n }\n\n /**\n * Build the local database path.\n * @param {Object} config\n * @return {string|String|*}\n * @private\n */\n private _buildStoragePath(config: Config): string {\n const sinopiadbPath: string = this._dbGenPath(DEPRECATED_DB_NAME, config);\n try {\n fs.accessSync(sinopiadbPath, fs.constants.F_OK);\n // @ts-ignore\n process.emitWarning('Database name deprecated!', {\n code: 'VERCODE01',\n detail: `Please rename database name from ${DEPRECATED_DB_NAME} to ${DB_NAME}`,\n });\n return sinopiadbPath;\n } catch (err) {\n if (err.code === noSuchFile) {\n return this._dbGenPath(DB_NAME, config);\n }\n\n throw err;\n }\n }\n\n /**\n * Fetch local packages.\n * @private\n * @return {Object}\n */\n private _fetchLocalPackages(): LocalStorage {\n const list: StorageList = [];\n const emptyDatabase = { list, secret: '' };\n\n try {\n return loadPrivatePackages(this.path, this.logger);\n } catch (err) {\n // readFileSync is platform specific, macOS, Linux and Windows thrown an error\n // Only recreate if file not found to prevent data loss\n if (err.code !== noSuchFile) {\n this.locked = true;\n this.logger.error(\n 'Failed to read package database file, please check the error printed below:\\n',\n `File Path: ${this.path}\\n\\n ${err.message}`\n );\n }\n\n return emptyDatabase;\n }\n }\n}\n\nexport default LocalDatabase;\n"],"file":"local-database.js"}
1
+ {"version":3,"sources":["../src/local-database.ts"],"names":["DEPRECATED_DB_NAME","DB_NAME","debug","LocalDatabase","TokenActions","constructor","config","logger","path","_buildStoragePath","locked","data","_fetchLocalPackages","_sync","getSecret","Promise","resolve","secret","setSecret","add","name","cb","list","indexOf","push","search","onPackage","onEnd","validateName","storages","_getCustomPackageLocalStorages","JSON","stringify","base","Path","dirname","self_path","self","storageKeys","Object","keys","async","eachSeries","storage","position","base2","join","storagePath","fs","readdir","err","files","file","includes","match","fileLocation","file2","packagePath","stat","stats","_","isNil","item","time","mtime","getTime","remove","get","error","pkgName","splice","totalItems","length","getPackageStorage","packageName","packageAccess","getMatchedPackagesSpec","_getLocalStoragePath","undefined","isString","packageStoragePath","LocalDriver","clean","packages","listPackagesConf","map","pkg","Error","folderName","mkdirp","sync","writeFileSync","globalConfigStorage","sinopiadbPath","_dbGenPath","accessSync","constants","F_OK","process","emitWarning","code","detail","noSuchFile","emptyDatabase","message"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;;;;;;;AAEA,MAAMA,kBAAkB,GAAG,kBAA3B;AACA,MAAMC,OAAO,GAAG,oBAAhB;AAEA,MAAMC,KAAK,GAAG,oBAAW,gCAAX,CAAd;;AAEA,MAAMC,aAAN,SAA4BC,cAA5B,CAAuE;AAO9DC,EAAAA,WAAW,CAACC,MAAD,EAAiBC,MAAjB,EAAiC;AACjD,UAAMD,MAAN;AACA,SAAKA,MAAL,GAAcA,MAAd;AACA,SAAKE,IAAL,GAAY,KAAKC,iBAAL,CAAuBH,MAAvB,CAAZ;AACA,SAAKC,MAAL,GAAcA,MAAd;AACA,SAAKG,MAAL,GAAc,KAAd;AACA,SAAKC,IAAL,GAAY,KAAKC,mBAAL,EAAZ;;AACA,SAAKC,KAAL;AACD;;AAEMC,EAAAA,SAAS,GAAoB;AAClC,WAAOC,OAAO,CAACC,OAAR,CAAgB,KAAKL,IAAL,CAAUM,MAA1B,CAAP;AACD;;AAEMC,EAAAA,SAAS,CAACD,MAAD,EAAwC;AACtD,WAAO,IAAIF,OAAJ,CAAaC,OAAD,IAAmB;AACpC,WAAKL,IAAL,CAAUM,MAAV,GAAmBA,MAAnB;AAEAD,MAAAA,OAAO,CAAC,KAAKH,KAAL,EAAD,CAAP;AACD,KAJM,CAAP;AAKD;;AAEMM,EAAAA,GAAG,CAACC,IAAD,EAAeC,EAAf,EAAmC;AAC3C,QAAI,KAAKV,IAAL,CAAUW,IAAV,CAAeC,OAAf,CAAuBH,IAAvB,MAAiC,CAAC,CAAtC,EAAyC;AACvC,WAAKT,IAAL,CAAUW,IAAV,CAAeE,IAAf,CAAoBJ,IAApB;AAEAlB,MAAAA,KAAK,CAAC,uCAAD,EAA0CkB,IAA1C,CAAL;AACAC,MAAAA,EAAE,CAAC,KAAKR,KAAL,EAAD,CAAF;AACD,KALD,MAKO;AACLX,MAAAA,KAAK,CAAC,sCAAD,EAAyCkB,IAAzC,CAAL;AACAC,MAAAA,EAAE,CAAC,IAAD,CAAF;AACD;AACF;;AAEMI,EAAAA,MAAM,CAACC,SAAD,EAAsBC,KAAtB,EAAuCC,YAAvC,EAAsF;AACjG,UAAMC,QAAQ,GAAG,KAAKC,8BAAL,EAAjB;;AACA5B,IAAAA,KAAK,CAAE,kCAAF,EAAqC6B,IAAI,CAACC,SAAL,CAAeH,QAAf,CAArC,CAAL;;AACA,UAAMI,IAAI,GAAGC,cAAKC,OAAL,CAAa,KAAK7B,MAAL,CAAY8B,SAAzB,CAAb;;AACA,UAAMC,IAAI,GAAG,IAAb;AACA,UAAMC,WAAW,GAAGC,MAAM,CAACC,IAAP,CAAYX,QAAZ,CAApB;AACA3B,IAAAA,KAAK,CAAE,0BAAF,EAA6B+B,IAA7B,EAAmCK,WAAnC,CAAL;;AAEAG,mBAAMC,UAAN,CACEJ,WADF,EAEE,UAASK,OAAT,EAAkBtB,EAAlB,EAAsB;AACpB,YAAMuB,QAAQ,GAAGN,WAAW,CAACf,OAAZ,CAAoBoB,OAApB,CAAjB;;AACA,YAAME,KAAK,GAAGX,cAAKY,IAAL,CAAUF,QAAQ,KAAK,CAAb,GAAiBN,WAAW,CAAC,CAAD,CAA5B,GAAkC,EAA5C,CAAd;;AACA,YAAMS,WAAmB,GAAGb,cAAKlB,OAAL,CAAaiB,IAAb,EAAmBY,KAAnB,EAA0BF,OAA1B,CAA5B;;AACAzC,MAAAA,KAAK,CAAC,sBAAD,EAAyB6C,WAAzB,EAAsCJ,OAAtC,CAAL;;AACAK,kBAAGC,OAAH,CAAWF,WAAX,EAAwB,CAACG,GAAD,EAAMC,KAAN,KAAgB;AACtC,YAAID,GAAJ,EAAS;AACP,iBAAO7B,EAAE,CAAC6B,GAAD,CAAT;AACD;;AAEDT,uBAAMC,UAAN,CACES,KADF,EAEE,UAASC,IAAT,EAAe/B,EAAf,EAAmB;AACjBnB,UAAAA,KAAK,CAAC,8CAAD,EAAiDkD,IAAjD,CAAL;;AACA,cAAId,WAAW,CAACe,QAAZ,CAAqBD,IAArB,CAAJ,EAAgC;AAC9B,mBAAO/B,EAAE,EAAT;AACD;;AAED,cAAI+B,IAAI,CAACE,KAAL,CAAW,IAAX,CAAJ,EAAsB;AACpB;AACA,kBAAMC,YAAY,GAAGrB,cAAKlB,OAAL,CAAaiB,IAAb,EAAmBU,OAAnB,EAA4BS,IAA5B,CAArB;;AACAlD,YAAAA,KAAK,CAAC,iCAAD,EAAoCqD,YAApC,CAAL;;AACAP,wBAAGC,OAAH,CAAWM,YAAX,EAAyB,UAASL,GAAT,EAAcC,KAAd,EAAqB;AAC5C,kBAAID,GAAJ,EAAS;AACP,uBAAO7B,EAAE,CAAC6B,GAAD,CAAT;AACD;;AAEDT,6BAAMC,UAAN,CACES,KADF,EAEE,CAACK,KAAD,EAAQnC,EAAR,KAAe;AACb,oBAAIO,YAAY,CAAC4B,KAAD,CAAhB,EAAyB;AACvB,wBAAMC,WAAW,GAAGvB,cAAKlB,OAAL,CAAaiB,IAAb,EAAmBU,OAAnB,EAA4BS,IAA5B,EAAkCI,KAAlC,CAApB;;AAEAR,8BAAGU,IAAH,CAAQD,WAAR,EAAqB,CAACP,GAAD,EAAMS,KAAN,KAAgB;AACnC,wBAAIC,gBAAEC,KAAF,CAAQX,GAAR,MAAiB,KAArB,EAA4B;AAC1B,6BAAO7B,EAAE,CAAC6B,GAAD,CAAT;AACD;;AACD,0BAAMY,IAAI,GAAG;AACX1C,sBAAAA,IAAI,EAAG,GAAEgC,IAAK,IAAGI,KAAM,EADZ;AAEXhD,sBAAAA,IAAI,EAAEiD,WAFK;AAGXM,sBAAAA,IAAI,EAAEJ,KAAK,CAACK,KAAN,CAAYC,OAAZ;AAHK,qBAAb;AAKAvC,oBAAAA,SAAS,CAACoC,IAAD,EAAOzC,EAAP,CAAT;AACD,mBAVD;AAWD,iBAdD,MAcO;AACLA,kBAAAA,EAAE;AACH;AACF,eApBH,EAqBEA,EArBF;AAuBD,aA5BD;AA6BD,WAjCD,MAiCO,IAAIO,YAAY,CAACwB,IAAD,CAAhB,EAAwB;AAC7B,kBAAMP,KAAK,GAAGX,cAAKY,IAAL,CAAUF,QAAQ,KAAK,CAAb,GAAiBN,WAAW,CAAC,CAAD,CAA5B,GAAkC,EAA5C,CAAd;;AACA,kBAAMmB,WAAW,GAAGvB,cAAKlB,OAAL,CAAaiB,IAAb,EAAmBY,KAAnB,EAA0BF,OAA1B,EAAmCS,IAAnC,CAApB;;AACAlD,YAAAA,KAAK,CAAC,0BAAD,EAA6BuD,WAA7B,CAAL;;AACAT,wBAAGU,IAAH,CAAQD,WAAR,EAAqB,CAACP,GAAD,EAAMS,KAAN,KAAgB;AACnC,kBAAIC,gBAAEC,KAAF,CAAQX,GAAR,MAAiB,KAArB,EAA4B;AAC1B,uBAAO7B,EAAE,CAAC6B,GAAD,CAAT;AACD;;AACDxB,cAAAA,SAAS,CACP;AACEN,gBAAAA,IAAI,EAAEgC,IADR;AAEE5C,gBAAAA,IAAI,EAAEiD,WAFR;AAGEM,gBAAAA,IAAI,EAAE1B,IAAI,CAAC4B,OAAL,CAAaN,KAAK,CAACK,KAAN,CAAYC,OAAZ,EAAb,EAAoCN,KAAK,CAACK,KAA1C;AAHR,eADO,EAMP3C,EANO,CAAT;AAQD,aAZD;AAaD,WAjBM,MAiBA;AACLA,YAAAA,EAAE;AACH;AACF,SA7DH,EA8DEA,EA9DF;AAgED,OArED;AAsED,KA7EH,EA8EE;AACAM,IAAAA,KA/EF;AAiFD;;AAEMuC,EAAAA,MAAM,CAAC9C,IAAD,EAAeC,EAAf,EAAmC;AAC9C,SAAK8C,GAAL,CAAS,CAACjB,GAAD,EAAMvC,IAAN,KAAe;AACtB,UAAIuC,GAAJ,EAAS;AACP7B,QAAAA,EAAE,CAAC,kCAAiB,8BAAjB,CAAD,CAAF;AACA,aAAKd,MAAL,CAAY6D,KAAZ,CAAkB;AAAElB,UAAAA;AAAF,SAAlB,EAA2B,sEAA3B;AACAhD,QAAAA,KAAK,CAAC,4BAAD,EAA+BkB,IAA/B,CAAL;AACD;;AAED,YAAMiD,OAAO,GAAG1D,IAAI,CAACY,OAAL,CAAaH,IAAb,CAAhB;;AACA,UAAIiD,OAAO,KAAK,CAAC,CAAjB,EAAoB;AAClB,aAAK1D,IAAL,CAAUW,IAAV,CAAegD,MAAf,CAAsBD,OAAtB,EAA+B,CAA/B;AAEAnE,QAAAA,KAAK,CAAC,oCAAD,EAAuCkB,IAAvC,CAAL;AACD;;AAEDC,MAAAA,EAAE,CAAC,KAAKR,KAAL,EAAD,CAAF;AACD,KAfD;AAgBD;AAED;AACF;AACA;AACA;;;AACSsD,EAAAA,GAAG,CAAC9C,EAAD,EAAqB;AAC7B,UAAMC,IAAI,GAAG,KAAKX,IAAL,CAAUW,IAAvB;AACA,UAAMiD,UAAU,GAAG,KAAK5D,IAAL,CAAUW,IAAV,CAAekD,MAAlC;AAEAnD,IAAAA,EAAE,CAAC,IAAD,EAAOC,IAAP,CAAF;AAEApB,IAAAA,KAAK,CAAC,iDAAD,EAAoDqE,UAApD,CAAL;AACD;;AAEME,EAAAA,iBAAiB,CAACC,WAAD,EAAuC;AAC7D,UAAMC,aAAa,GAAG,KAAKrE,MAAL,CAAYsE,sBAAZ,CAAmCF,WAAnC,CAAtB;;AAEA,UAAMjB,WAAmB,GAAG,KAAKoB,oBAAL,CAA0BF,aAAa,GAAGA,aAAa,CAAChC,OAAjB,GAA2BmC,SAAlE,CAA5B;;AACA5E,IAAAA,KAAK,CAAC,yBAAD,EAA4BuD,WAA5B,CAAL;;AAEA,QAAIG,gBAAEmB,QAAF,CAAWtB,WAAX,MAA4B,KAAhC,EAAuC;AACrCvD,MAAAA,KAAK,CAAC,wCAAD,EAA2CwE,WAA3C,CAAL;AACA;AACD;;AAED,UAAMM,kBAA0B,GAAG9C,cAAKY,IAAL,CACjCZ,cAAKlB,OAAL,CAAakB,cAAKC,OAAL,CAAa,KAAK7B,MAAL,CAAY8B,SAAZ,IAAyB,EAAtC,CAAb,EAAwDqB,WAAxD,CADiC,EAEjCiB,WAFiC,CAAnC;;AAKAxE,IAAAA,KAAK,CAAC,yBAAD,EAA4B8E,kBAA5B,CAAL;AAEA,WAAO,IAAIC,gBAAJ,CAAgBD,kBAAhB,EAAoC,KAAKzE,MAAzC,CAAP;AACD;;AAEM2E,EAAAA,KAAK,GAAS;AACnB,SAAKrE,KAAL;AACD;;AAEOoD,EAAAA,OAAO,CAACF,IAAD,EAAeC,KAAf,EAA2C;AACxD,WAAOD,IAAI,GAAGA,IAAH,GAAUC,KAArB;AACD;;AAEOlC,EAAAA,8BAA8B,GAAW;AAC/C,UAAMD,QAAQ,GAAG,EAAjB,CAD+C,CAG/C;;AACA,QAAI,KAAKvB,MAAL,CAAYqC,OAAhB,EAAyB;AACvBd,MAAAA,QAAQ,CAAC,KAAKvB,MAAL,CAAYqC,OAAb,CAAR,GAAgC,IAAhC;AACD;;AAED,UAAM;AAAEwC,MAAAA;AAAF,QAAe,KAAK7E,MAA1B;;AAEA,QAAI6E,QAAJ,EAAc;AACZ,YAAMC,gBAAgB,GAAG7C,MAAM,CAACC,IAAP,CAAY2C,QAAQ,IAAI,EAAxB,CAAzB;AAEAC,MAAAA,gBAAgB,CAACC,GAAjB,CAAqBC,GAAG,IAAI;AAC1B,cAAM3C,OAAO,GAAGwC,QAAQ,CAACG,GAAD,CAAR,CAAc3C,OAA9B;;AACA,YAAIA,OAAJ,EAAa;AACXd,UAAAA,QAAQ,CAACc,OAAD,CAAR,GAAoB,KAApB;AACD;AACF,OALD;AAMD;;AAED,WAAOd,QAAP;AACD;AAED;AACF;AACA;AACA;;;AACUhB,EAAAA,KAAK,GAAiB;AAC5BX,IAAAA,KAAK,CAAC,uBAAD,CAAL;;AAEA,QAAI,KAAKQ,MAAT,EAAiB;AACf,WAAKH,MAAL,CAAY6D,KAAZ,CACE,8EAA8E,oBADhF;AAGA,aAAO,IAAImB,KAAJ,CACL,iFACE,gCAFG,CAAP;AAID,KAX2B,CAY5B;;;AACA,QAAI;AACF;AACA,YAAMC,UAAU,GAAGtD,cAAKC,OAAL,CAAa,KAAK3B,IAAlB,CAAnB;;AACAiF,sBAAOC,IAAP,CAAYF,UAAZ;;AACAtF,MAAAA,KAAK,CAAC,gCAAD,EAAmCsF,UAAnC,CAAL;AACD,KALD,CAKE,OAAOtC,GAAP,EAAY;AACZhD,MAAAA,KAAK,CAAC,8CAAD,EAAiDgD,GAAjD,CAAL;AACA,aAAO,IAAP;AACD;;AAED,QAAI;AACFF,kBAAG2C,aAAH,CAAiB,KAAKnF,IAAtB,EAA4BuB,IAAI,CAACC,SAAL,CAAe,KAAKrB,IAApB,CAA5B;;AACAT,MAAAA,KAAK,CAAC,oBAAD,CAAL;AAEA,aAAO,IAAP;AACD,KALD,CAKE,OAAOgD,GAAP,EAAY;AACZhD,MAAAA,KAAK,CAAC,gBAAD,EAAmBgD,GAAnB,CAAL;AAEA,aAAOA,GAAP;AACD;AACF;AAED;AACF;AACA;AACA;AACA;AACA;;;AACU2B,EAAAA,oBAAoB,CAAClC,OAAD,EAAiC;AAC3D,UAAMiD,mBAAmB,GAAG,KAAKtF,MAAL,GAAc,KAAKA,MAAL,CAAYqC,OAA1B,GAAoCmC,SAAhE;;AACA,QAAIlB,gBAAEC,KAAF,CAAQ+B,mBAAR,CAAJ,EAAkC;AAChC,YAAM,IAAIL,KAAJ,CAAU,4CAAV,CAAN;AACD,KAFD,MAEO;AACL,UAAI3B,gBAAEC,KAAF,CAAQlB,OAAR,MAAqB,KAArB,IAA8BiB,gBAAEmB,QAAF,CAAWpC,OAAX,CAAlC,EAAuD;AACrD,eAAOT,cAAKY,IAAL,CAAU8C,mBAAV,EAAyCjD,OAAzC,CAAP;AACD;;AAED,aAAOiD,mBAAP;AACD;AACF;AAED;AACF;AACA;AACA;AACA;AACA;;;AACUnF,EAAAA,iBAAiB,CAACH,MAAD,EAAyB;AAChD,UAAMuF,aAAqB,GAAG,KAAKC,UAAL,CAAgB9F,kBAAhB,EAAoCM,MAApC,CAA9B;;AACA,QAAI;AACF0C,kBAAG+C,UAAH,CAAcF,aAAd,EAA6B7C,YAAGgD,SAAH,CAAaC,IAA1C,EADE,CAEF;;;AACAC,MAAAA,OAAO,CAACC,WAAR,CAAoB,2BAApB,EAAiD;AAC/CC,QAAAA,IAAI,EAAE,WADyC;AAE/CC,QAAAA,MAAM,EAAG,oCAAmCrG,kBAAmB,OAAMC,OAAQ;AAF9B,OAAjD;AAIA,aAAO4F,aAAP;AACD,KARD,CAQE,OAAO3C,GAAP,EAAY;AACZ,UAAIA,GAAG,CAACkD,IAAJ,KAAaE,mBAAjB,EAA6B;AAC3B,eAAO,KAAKR,UAAL,CAAgB7F,OAAhB,EAAyBK,MAAzB,CAAP;AACD;;AAED,YAAM4C,GAAN;AACD;AACF;AAED;AACF;AACA;AACA;AACA;;;AACUtC,EAAAA,mBAAmB,GAAiB;AAC1C,UAAMU,IAAiB,GAAG,EAA1B;AACA,UAAMiF,aAAa,GAAG;AAAEjF,MAAAA,IAAF;AAAQL,MAAAA,MAAM,EAAE;AAAhB,KAAtB;;AAEA,QAAI;AACF,aAAO,mCAAoB,KAAKT,IAAzB,EAA+B,KAAKD,MAApC,CAAP;AACD,KAFD,CAEE,OAAO2C,GAAP,EAAY;AACZ;AACA;AACA,UAAIA,GAAG,CAACkD,IAAJ,KAAaE,mBAAjB,EAA6B;AAC3B,aAAK5F,MAAL,GAAc,IAAd;AACA,aAAKH,MAAL,CAAY6D,KAAZ,CACE,+EADF,EAEG,cAAa,KAAK5D,IAAK,QAAO0C,GAAG,CAACsD,OAAQ,EAF7C;AAID;;AAED,aAAOD,aAAP;AACD;AACF;;AApUoE;;eAuUxDpG,a","sourcesContent":["import fs from 'fs';\nimport Path from 'path';\n\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport async from 'async';\nimport mkdirp from 'mkdirp';\nimport { Callback, Config, IPackageStorage, IPluginStorage, LocalStorage, Logger, StorageList } from '@verdaccio/types';\nimport { getInternalError } from '@verdaccio/commons-api';\n\nimport LocalDriver, { noSuchFile } from './local-fs';\nimport { loadPrivatePackages } from './pkg-utils';\nimport TokenActions from './token';\n\nconst DEPRECATED_DB_NAME = '.sinopia-db.json';\nconst DB_NAME = '.verdaccio-db.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage');\n\nclass LocalDatabase extends TokenActions implements IPluginStorage<{}> {\n public path: string;\n public logger: Logger;\n public data: LocalStorage;\n public config: Config;\n public locked: boolean;\n\n public constructor(config: Config, logger: Logger) {\n super(config);\n this.config = config;\n this.path = this._buildStoragePath(config);\n this.logger = logger;\n this.locked = false;\n this.data = this._fetchLocalPackages();\n this._sync();\n }\n\n public getSecret(): Promise<string> {\n return Promise.resolve(this.data.secret);\n }\n\n public setSecret(secret: string): Promise<Error | null> {\n return new Promise((resolve): void => {\n this.data.secret = secret;\n\n resolve(this._sync());\n });\n }\n\n public add(name: string, cb: Callback): void {\n if (this.data.list.indexOf(name) === -1) {\n this.data.list.push(name);\n\n debug('the private package %o has been added', name);\n cb(this._sync());\n } else {\n debug('the private package %o was not added', name);\n cb(null);\n }\n }\n\n public search(onPackage: Callback, onEnd: Callback, validateName: (name: string) => boolean): void {\n const storages = this._getCustomPackageLocalStorages();\n debug(`search custom local packages: %o`, JSON.stringify(storages));\n const base = Path.dirname(this.config.self_path);\n const self = this;\n const storageKeys = Object.keys(storages);\n debug(`search base: %o keys: %o`, base, storageKeys);\n\n async.eachSeries(\n storageKeys,\n function(storage, cb) {\n const position = storageKeys.indexOf(storage);\n const base2 = Path.join(position !== 0 ? storageKeys[0] : '');\n const storagePath: string = Path.resolve(base, base2, storage);\n debug('search path: %o : %o', storagePath, storage);\n fs.readdir(storagePath, (err, files) => {\n if (err) {\n return cb(err);\n }\n\n async.eachSeries(\n files,\n function(file, cb) {\n debug('local-storage: [search] search file path: %o', file);\n if (storageKeys.includes(file)) {\n return cb();\n }\n\n if (file.match(/^@/)) {\n // scoped\n const fileLocation = Path.resolve(base, storage, file);\n debug('search scoped file location: %o', fileLocation);\n fs.readdir(fileLocation, function(err, files) {\n if (err) {\n return cb(err);\n }\n\n async.eachSeries(\n files,\n (file2, cb) => {\n if (validateName(file2)) {\n const packagePath = Path.resolve(base, storage, file, file2);\n\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return cb(err);\n }\n const item = {\n name: `${file}/${file2}`,\n path: packagePath,\n time: stats.mtime.getTime(),\n };\n onPackage(item, cb);\n });\n } else {\n cb();\n }\n },\n cb\n );\n });\n } else if (validateName(file)) {\n const base2 = Path.join(position !== 0 ? storageKeys[0] : '');\n const packagePath = Path.resolve(base, base2, storage, file);\n debug('search file location: %o', packagePath);\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return cb(err);\n }\n onPackage(\n {\n name: file,\n path: packagePath,\n time: self.getTime(stats.mtime.getTime(), stats.mtime),\n },\n cb\n );\n });\n } else {\n cb();\n }\n },\n cb\n );\n });\n },\n // @ts-ignore\n onEnd\n );\n }\n\n public remove(name: string, cb: Callback): void {\n this.get((err, data) => {\n if (err) {\n cb(getInternalError('error remove private package'));\n this.logger.error({ err }, '[local-storage/remove]: remove the private package has failed @{err}');\n debug('error on remove package %o', name);\n }\n\n const pkgName = data.indexOf(name);\n if (pkgName !== -1) {\n this.data.list.splice(pkgName, 1);\n\n debug('remove package %o has been removed', name);\n }\n\n cb(this._sync());\n });\n }\n\n /**\n * Return all database elements.\n * @return {Array}\n */\n public get(cb: Callback): void {\n const list = this.data.list;\n const totalItems = this.data.list.length;\n\n cb(null, list);\n\n debug('get full list of packages (%o) has been fetched', totalItems);\n }\n\n public getPackageStorage(packageName: string): IPackageStorage {\n const packageAccess = this.config.getMatchedPackagesSpec(packageName);\n\n const packagePath: string = this._getLocalStoragePath(packageAccess ? packageAccess.storage : undefined);\n debug('storage path selected: ', packagePath);\n\n if (_.isString(packagePath) === false) {\n debug('the package %o has no storage defined ', packageName);\n return;\n }\n\n const packageStoragePath: string = Path.join(\n Path.resolve(Path.dirname(this.config.self_path || ''), packagePath),\n packageName\n );\n\n debug('storage absolute path: ', packageStoragePath);\n\n return new LocalDriver(packageStoragePath, this.logger);\n }\n\n public clean(): void {\n this._sync();\n }\n\n private getTime(time: number, mtime: Date): number | Date {\n return time ? time : mtime;\n }\n\n private _getCustomPackageLocalStorages(): object {\n const storages = {};\n\n // add custom storage if exist\n if (this.config.storage) {\n storages[this.config.storage] = true;\n }\n\n const { packages } = this.config;\n\n if (packages) {\n const listPackagesConf = Object.keys(packages || {});\n\n listPackagesConf.map(pkg => {\n const storage = packages[pkg].storage;\n if (storage) {\n storages[storage] = false;\n }\n });\n }\n\n return storages;\n }\n\n /**\n * Syncronize {create} database whether does not exist.\n * @return {Error|*}\n */\n private _sync(): Error | null {\n debug('sync database started');\n\n if (this.locked) {\n this.logger.error(\n 'Database is locked, please check error message printed during startup to ' + 'prevent data loss.'\n );\n return new Error(\n 'Verdaccio database is locked, please contact your administrator to checkout ' +\n 'logs during verdaccio startup.'\n );\n }\n // Uses sync to prevent ugly race condition\n try {\n // https://www.npmjs.com/package/mkdirp#mkdirpsyncdir-opts\n const folderName = Path.dirname(this.path);\n mkdirp.sync(folderName);\n debug('sync folder %o created succeed', folderName);\n } catch (err) {\n debug('sync create folder has failed with error: %o', err);\n return null;\n }\n\n try {\n fs.writeFileSync(this.path, JSON.stringify(this.data));\n debug('sync write succeed');\n\n return null;\n } catch (err) {\n debug('sync failed %o', err);\n\n return err;\n }\n }\n\n /**\n * Verify the right local storage location.\n * @param {String} path\n * @return {String}\n * @private\n */\n private _getLocalStoragePath(storage: string | void): string {\n const globalConfigStorage = this.config ? this.config.storage : undefined;\n if (_.isNil(globalConfigStorage)) {\n throw new Error('global storage is required for this plugin');\n } else {\n if (_.isNil(storage) === false && _.isString(storage)) {\n return Path.join(globalConfigStorage as string, storage as string);\n }\n\n return globalConfigStorage as string;\n }\n }\n\n /**\n * Build the local database path.\n * @param {Object} config\n * @return {string|String|*}\n * @private\n */\n private _buildStoragePath(config: Config): string {\n const sinopiadbPath: string = this._dbGenPath(DEPRECATED_DB_NAME, config);\n try {\n fs.accessSync(sinopiadbPath, fs.constants.F_OK);\n // @ts-ignore\n process.emitWarning('Database name deprecated!', {\n code: 'VERCODE01',\n detail: `Please rename database name from ${DEPRECATED_DB_NAME} to ${DB_NAME}`,\n });\n return sinopiadbPath;\n } catch (err) {\n if (err.code === noSuchFile) {\n return this._dbGenPath(DB_NAME, config);\n }\n\n throw err;\n }\n }\n\n /**\n * Fetch local packages.\n * @private\n * @return {Object}\n */\n private _fetchLocalPackages(): LocalStorage {\n const list: StorageList = [];\n const emptyDatabase = { list, secret: '' };\n\n try {\n return loadPrivatePackages(this.path, this.logger);\n } catch (err) {\n // readFileSync is platform specific, macOS, Linux and Windows thrown an error\n // Only recreate if file not found to prevent data loss\n if (err.code !== noSuchFile) {\n this.locked = true;\n this.logger.error(\n 'Failed to read package database file, please check the error printed below:\\n',\n `File Path: ${this.path}\\n\\n ${err.message}`\n );\n }\n\n return emptyDatabase;\n }\n }\n}\n\nexport default LocalDatabase;\n"],"file":"local-database.js"}
package/lib/local-fs.js CHANGED
@@ -23,8 +23,7 @@ var _commonsApi = require("@verdaccio/commons-api");
23
23
 
24
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
25
 
26
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
27
-
26
+ /* eslint-disable no-undef */
28
27
  const fileExist = 'EEXISTS';
29
28
  exports.fileExist = fileExist;
30
29
  const noSuchFile = 'ENOENT';
@@ -77,10 +76,6 @@ const renameTmp = function (src, dst, _cb) {
77
76
 
78
77
  class LocalFS {
79
78
  constructor(path, logger) {
80
- _defineProperty(this, "path", void 0);
81
-
82
- _defineProperty(this, "logger", void 0);
83
-
84
79
  this.path = path;
85
80
  this.logger = logger;
86
81
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/local-fs.ts"],"names":["fileExist","noSuchFile","resourceNotAvailable","pkgFileName","debug","fSError","message","code","err","tempFile","str","String","Math","random","substr","renameTmp","src","dst","_cb","cb","fs","unlink","process","platform","rename","tmp","LocalFS","constructor","path","logger","updatePackage","name","updateHandler","onWrite","transformPackage","onEnd","_lockAndReadJSON","json","locked","self","unLockCallback","lockError","_args","arguments","_unlockJSON","apply","_","isNil","deletePackage","packageName","callback","_getStorage","removePackage","rmdir","createPackage","value","_createFile","_convertToString","savePackage","_writeFile","readPackage","_readStorageFile","then","res","data","JSON","parse","toString","writeTarball","uploadStream","UploadTarball","_ended","on","pathName","access","fileNotFound","exists","emit","temporalName","join","replace","file","createWriteStream","removeTempFile","opened","pipe","done","onend","end","abort","readTarball","readTarballStream","ReadTarball","readStream","createReadStream","fd","fstat","stats","size","close","contents","open","Promise","resolve","reject","readFile","stringify","fileName","storagePath","dest","createTempFile","tempFilePath","writeFile","dirname","catch","lock"],"mappings":"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","sourcesContent":["/* eslint-disable no-undef */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport mkdirp from 'mkdirp';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport { unlockFile, readFile } from '@verdaccio/file-locking';\nimport { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/types';\nimport { getCode, getInternalError, getNotFound, VerdaccioError } from '@verdaccio/commons-api';\n\nexport const fileExist = 'EEXISTS';\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const pkgFileName = 'package.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:fs');\n\nexport const fSError = function(message: string, code = 409): VerdaccioError {\n const err: VerdaccioError = getCode(code, message);\n // FIXME: we should return http-status codes here instead, future improvement\n // @ts-ignore\n err.code = message;\n\n return err;\n};\n\nconst tempFile = function(str): string {\n return `${str}.tmp${String(Math.random()).substr(2)}`;\n};\n\nconst renameTmp = function(src, dst, _cb): void {\n const cb = (err): void => {\n if (err) {\n fs.unlink(src, () => {});\n }\n _cb(err);\n };\n\n if (process.platform !== 'win32') {\n return fs.rename(src, dst, cb);\n }\n\n // windows can't remove opened file,\n // but it seem to be able to rename it\n const tmp = tempFile(dst);\n fs.rename(dst, tmp, function(err) {\n fs.rename(src, dst, cb);\n if (!err) {\n fs.unlink(tmp, () => {});\n }\n });\n};\n\nexport type ILocalFSPackageManager = ILocalPackageManager & { path: string };\n\nexport default class LocalFS implements ILocalFSPackageManager {\n public path: string;\n public logger: Logger;\n\n public constructor(path: string, logger: Logger) {\n this.path = path;\n this.logger = logger;\n }\n\n /**\n * This function allows to update the package thread-safely\n Algorithm:\n 1. lock package.json for writing\n 2. read package.json\n 3. updateFn(pkg, cb), and wait for cb\n 4. write package.json.tmp\n 5. move package.json.tmp package.json\n 6. callback(err?)\n * @param {*} name\n * @param {*} updateHandler\n * @param {*} onWrite\n * @param {*} transformPackage\n * @param {*} onEnd\n */\n public updatePackage(\n name: string,\n updateHandler: Callback,\n onWrite: Callback,\n transformPackage: Function,\n onEnd: Callback\n ): void {\n this._lockAndReadJSON(pkgFileName, (err, json) => {\n let locked = false;\n const self = this;\n // callback that cleans up lock first\n const unLockCallback = function(lockError: Error): void {\n // eslint-disable-next-line prefer-rest-params\n const _args = arguments;\n\n if (locked) {\n self._unlockJSON(pkgFileName, () => {\n // ignore any error from the unlock\n if (lockError !== null) {\n debug('lock file: %o has failed with error %o', name, lockError);\n }\n\n onEnd.apply(lockError, _args);\n });\n } else {\n debug('file: %o has been updated', name);\n onEnd(..._args);\n }\n };\n\n if (!err) {\n locked = true;\n debug('file: %o has been locked', name);\n }\n\n if (_.isNil(err) === false) {\n if (err.code === resourceNotAvailable) {\n return unLockCallback(getInternalError('resource temporarily unavailable'));\n } else if (err.code === noSuchFile) {\n return unLockCallback(getNotFound());\n } else {\n return unLockCallback(err);\n }\n }\n\n updateHandler(json, err => {\n if (err) {\n return unLockCallback(err);\n }\n\n onWrite(name, transformPackage(json), unLockCallback);\n });\n });\n }\n\n public deletePackage(packageName: string, callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('delete a package %o', packageName);\n\n return fs.unlink(this._getStorage(packageName), callback);\n }\n\n public removePackage(callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('remove a package %o', this.path);\n\n fs.rmdir(this._getStorage('.'), callback);\n }\n\n public createPackage(name: string, value: Package, cb: Callback): void {\n debug('create a package %o', name);\n\n this._createFile(this._getStorage(pkgFileName), this._convertToString(value), cb);\n }\n\n public savePackage(name: string, value: Package, cb: Callback): void {\n debug('save a package %o', name);\n\n this._writeFile(this._getStorage(pkgFileName), this._convertToString(value), cb);\n }\n\n public readPackage(name: string, cb: Callback): void {\n debug('read a package %o', name);\n\n this._readStorageFile(this._getStorage(pkgFileName)).then(\n res => {\n try {\n const data: any = JSON.parse(res.toString('utf8'));\n\n debug('read storage file %o has succeed', name);\n cb(null, data);\n } catch (err) {\n debug('parse storage file %o has failed with error %o', name, err);\n cb(err);\n }\n },\n err => {\n debug('read storage file %o has failed with error %o', name, err);\n\n return cb(err);\n }\n );\n }\n\n public writeTarball(name: string): IUploadTarball {\n const uploadStream = new UploadTarball({});\n debug('write a tarball for a package %o', name);\n\n let _ended = 0;\n uploadStream.on('end', function() {\n _ended = 1;\n });\n\n const pathName: string = this._getStorage(name);\n\n fs.access(pathName, fileNotFound => {\n const exists = !fileNotFound;\n if (exists) {\n uploadStream.emit('error', fSError(fileExist));\n } else {\n const temporalName = path.join(this.path, `${name}.tmp-${String(Math.random()).replace(/^0\\./, '')}`);\n debug('write a temporal name %o', temporalName);\n const file = fs.createWriteStream(temporalName);\n const removeTempFile = (): void => fs.unlink(temporalName, () => {});\n let opened = false;\n uploadStream.pipe(file);\n\n uploadStream.done = function(): void {\n const onend = function(): void {\n file.on('close', function() {\n renameTmp(temporalName, pathName, function(err) {\n if (err) {\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n });\n });\n file.end();\n };\n if (_ended) {\n onend();\n } else {\n uploadStream.on('end', onend);\n }\n };\n\n uploadStream.abort = function(): void {\n if (opened) {\n opened = false;\n file.on('close', function() {\n removeTempFile();\n });\n } else {\n // if the file does not recieve any byte never is opened and has to be removed anyway.\n removeTempFile();\n }\n file.end();\n };\n\n file.on('open', function() {\n opened = true;\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n file.on('error', function(err) {\n uploadStream.emit('error', err);\n });\n }\n });\n\n return uploadStream;\n }\n\n public readTarball(name: string): ReadTarball {\n const pathName: string = this._getStorage(name);\n debug('read a a tarball %o on path %o', name, pathName);\n\n const readTarballStream = new ReadTarball({});\n\n const readStream = fs.createReadStream(pathName);\n\n readStream.on('error', function(err) {\n debug('error on read a tarball %o with error %o', name, err);\n readTarballStream.emit('error', err);\n });\n\n readStream.on('open', function(fd) {\n fs.fstat(fd, function(err, stats) {\n if (_.isNil(err) === false) {\n debug('error on read a tarball %o with error %o', name, err);\n return readTarballStream.emit('error', err);\n }\n readTarballStream.emit('content-length', stats.size);\n readTarballStream.emit('open');\n debug('open on read a tarball %o', name);\n readStream.pipe(readTarballStream);\n });\n });\n\n readTarballStream.abort = function(): void {\n debug('abort on read a tarball %o', name);\n readStream.close();\n };\n\n return readTarballStream;\n }\n\n private _createFile(name: string, contents: any, callback: Function): void {\n debug(' create a new file: %o', name);\n\n fs.open(name, 'wx', err => {\n if (err) {\n // native EEXIST used here to check exception on fs.open\n if (err.code === 'EEXIST') {\n debug('file %o cannot be created, it already exists: %o', name);\n return callback(fSError(fileExist));\n }\n }\n\n this._writeFile(name, contents, callback);\n });\n }\n\n private _readStorageFile(name: string): Promise<any> {\n return new Promise((resolve, reject): void => {\n debug('reading the file: %o', name);\n\n fs.readFile(name, (err, data) => {\n if (err) {\n debug('error reading the file: %o with error %o', name, err);\n reject(err);\n } else {\n debug('read file %o succeed', name);\n\n resolve(data);\n }\n });\n });\n }\n\n private _convertToString(value: Package): string {\n return JSON.stringify(value, null, '\\t');\n }\n\n private _getStorage(fileName = ''): string {\n const storagePath: string = path.join(this.path, fileName);\n\n return storagePath;\n }\n\n private _writeFile(dest: string, data: string, cb: Callback): void {\n const createTempFile = (cb): void => {\n const tempFilePath = tempFile(dest);\n\n fs.writeFile(tempFilePath, data, err => {\n if (err) {\n debug('error on write the file: %o', dest);\n return cb(err);\n }\n\n debug('creating a new file:: %o', dest);\n renameTmp(tempFilePath, dest, cb);\n });\n };\n\n createTempFile(err => {\n if (err && err.code === noSuchFile) {\n mkdirp(path.dirname(dest))\n .then(() => {\n createTempFile(cb);\n })\n .catch(err => {\n return cb(err);\n });\n } else {\n cb(err);\n }\n });\n }\n\n private _lockAndReadJSON(name: string, cb: Function): void {\n const fileName: string = this._getStorage(name);\n\n readFile(\n fileName,\n {\n lock: true,\n parse: true,\n },\n (err, res) => {\n if (err) {\n debug('error on lock and read json for file: %o', name);\n\n return cb(err);\n }\n debug('lock and read json for file: %o', name);\n\n return cb(null, res);\n }\n );\n }\n\n private _unlockJSON(name: string, cb: Function): void {\n unlockFile(this._getStorage(name), cb);\n }\n}\n"],"file":"local-fs.js"}
1
+ {"version":3,"sources":["../src/local-fs.ts"],"names":["fileExist","noSuchFile","resourceNotAvailable","pkgFileName","debug","fSError","message","code","err","tempFile","str","String","Math","random","substr","renameTmp","src","dst","_cb","cb","fs","unlink","process","platform","rename","tmp","LocalFS","constructor","path","logger","updatePackage","name","updateHandler","onWrite","transformPackage","onEnd","_lockAndReadJSON","json","locked","self","unLockCallback","lockError","_args","arguments","_unlockJSON","apply","_","isNil","deletePackage","packageName","callback","_getStorage","removePackage","rmdir","createPackage","value","_createFile","_convertToString","savePackage","_writeFile","readPackage","_readStorageFile","then","res","data","JSON","parse","toString","writeTarball","uploadStream","UploadTarball","_ended","on","pathName","access","fileNotFound","exists","emit","temporalName","join","replace","file","createWriteStream","removeTempFile","opened","pipe","done","onend","end","abort","readTarball","readTarballStream","ReadTarball","readStream","createReadStream","fd","fstat","stats","size","close","contents","open","Promise","resolve","reject","readFile","stringify","fileName","storagePath","dest","createTempFile","tempFilePath","writeFile","dirname","catch","lock"],"mappings":"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","sourcesContent":["/* eslint-disable no-undef */\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport mkdirp from 'mkdirp';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport { unlockFile, readFile } from '@verdaccio/file-locking';\nimport { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/types';\nimport { getCode, getInternalError, getNotFound, VerdaccioError } from '@verdaccio/commons-api';\n\nexport const fileExist = 'EEXISTS';\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const pkgFileName = 'package.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:fs');\n\nexport const fSError = function(message: string, code = 409): VerdaccioError {\n const err: VerdaccioError = getCode(code, message);\n // FIXME: we should return http-status codes here instead, future improvement\n // @ts-ignore\n err.code = message;\n\n return err;\n};\n\nconst tempFile = function(str): string {\n return `${str}.tmp${String(Math.random()).substr(2)}`;\n};\n\nconst renameTmp = function(src, dst, _cb): void {\n const cb = (err): void => {\n if (err) {\n fs.unlink(src, () => {});\n }\n _cb(err);\n };\n\n if (process.platform !== 'win32') {\n return fs.rename(src, dst, cb);\n }\n\n // windows can't remove opened file,\n // but it seem to be able to rename it\n const tmp = tempFile(dst);\n fs.rename(dst, tmp, function(err) {\n fs.rename(src, dst, cb);\n if (!err) {\n fs.unlink(tmp, () => {});\n }\n });\n};\n\nexport type ILocalFSPackageManager = ILocalPackageManager & { path: string };\n\nexport default class LocalFS implements ILocalFSPackageManager {\n public path: string;\n public logger: Logger;\n\n public constructor(path: string, logger: Logger) {\n this.path = path;\n this.logger = logger;\n }\n\n /**\n * This function allows to update the package thread-safely\n Algorithm:\n 1. lock package.json for writing\n 2. read package.json\n 3. updateFn(pkg, cb), and wait for cb\n 4. write package.json.tmp\n 5. move package.json.tmp package.json\n 6. callback(err?)\n * @param {*} name\n * @param {*} updateHandler\n * @param {*} onWrite\n * @param {*} transformPackage\n * @param {*} onEnd\n */\n public updatePackage(\n name: string,\n updateHandler: Callback,\n onWrite: Callback,\n transformPackage: Function,\n onEnd: Callback\n ): void {\n this._lockAndReadJSON(pkgFileName, (err, json) => {\n let locked = false;\n const self = this;\n // callback that cleans up lock first\n const unLockCallback = function(lockError: Error): void {\n // eslint-disable-next-line prefer-rest-params\n const _args = arguments;\n\n if (locked) {\n self._unlockJSON(pkgFileName, () => {\n // ignore any error from the unlock\n if (lockError !== null) {\n debug('lock file: %o has failed with error %o', name, lockError);\n }\n\n onEnd.apply(lockError, _args);\n });\n } else {\n debug('file: %o has been updated', name);\n onEnd(..._args);\n }\n };\n\n if (!err) {\n locked = true;\n debug('file: %o has been locked', name);\n }\n\n if (_.isNil(err) === false) {\n if (err.code === resourceNotAvailable) {\n return unLockCallback(getInternalError('resource temporarily unavailable'));\n } else if (err.code === noSuchFile) {\n return unLockCallback(getNotFound());\n } else {\n return unLockCallback(err);\n }\n }\n\n updateHandler(json, err => {\n if (err) {\n return unLockCallback(err);\n }\n\n onWrite(name, transformPackage(json), unLockCallback);\n });\n });\n }\n\n public deletePackage(packageName: string, callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('delete a package %o', packageName);\n\n return fs.unlink(this._getStorage(packageName), callback);\n }\n\n public removePackage(callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('remove a package %o', this.path);\n\n fs.rmdir(this._getStorage('.'), callback);\n }\n\n public createPackage(name: string, value: Package, cb: Callback): void {\n debug('create a package %o', name);\n\n this._createFile(this._getStorage(pkgFileName), this._convertToString(value), cb);\n }\n\n public savePackage(name: string, value: Package, cb: Callback): void {\n debug('save a package %o', name);\n\n this._writeFile(this._getStorage(pkgFileName), this._convertToString(value), cb);\n }\n\n public readPackage(name: string, cb: Callback): void {\n debug('read a package %o', name);\n\n this._readStorageFile(this._getStorage(pkgFileName)).then(\n res => {\n try {\n const data: any = JSON.parse(res.toString('utf8'));\n\n debug('read storage file %o has succeed', name);\n cb(null, data);\n } catch (err) {\n debug('parse storage file %o has failed with error %o', name, err);\n cb(err);\n }\n },\n err => {\n debug('read storage file %o has failed with error %o', name, err);\n\n return cb(err);\n }\n );\n }\n\n public writeTarball(name: string): IUploadTarball {\n const uploadStream = new UploadTarball({});\n debug('write a tarball for a package %o', name);\n\n let _ended = 0;\n uploadStream.on('end', function() {\n _ended = 1;\n });\n\n const pathName: string = this._getStorage(name);\n\n fs.access(pathName, fileNotFound => {\n const exists = !fileNotFound;\n if (exists) {\n uploadStream.emit('error', fSError(fileExist));\n } else {\n const temporalName = path.join(this.path, `${name}.tmp-${String(Math.random()).replace(/^0\\./, '')}`);\n debug('write a temporal name %o', temporalName);\n const file = fs.createWriteStream(temporalName);\n const removeTempFile = (): void => fs.unlink(temporalName, () => {});\n let opened = false;\n uploadStream.pipe(file);\n\n uploadStream.done = function(): void {\n const onend = function(): void {\n file.on('close', function() {\n renameTmp(temporalName, pathName, function(err) {\n if (err) {\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n });\n });\n file.end();\n };\n if (_ended) {\n onend();\n } else {\n uploadStream.on('end', onend);\n }\n };\n\n uploadStream.abort = function(): void {\n if (opened) {\n opened = false;\n file.on('close', function() {\n removeTempFile();\n });\n } else {\n // if the file does not recieve any byte never is opened and has to be removed anyway.\n removeTempFile();\n }\n file.end();\n };\n\n file.on('open', function() {\n opened = true;\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n file.on('error', function(err) {\n uploadStream.emit('error', err);\n });\n }\n });\n\n return uploadStream;\n }\n\n public readTarball(name: string): ReadTarball {\n const pathName: string = this._getStorage(name);\n debug('read a a tarball %o on path %o', name, pathName);\n\n const readTarballStream = new ReadTarball({});\n\n const readStream = fs.createReadStream(pathName);\n\n readStream.on('error', function(err) {\n debug('error on read a tarball %o with error %o', name, err);\n readTarballStream.emit('error', err);\n });\n\n readStream.on('open', function(fd) {\n fs.fstat(fd, function(err, stats) {\n if (_.isNil(err) === false) {\n debug('error on read a tarball %o with error %o', name, err);\n return readTarballStream.emit('error', err);\n }\n readTarballStream.emit('content-length', stats.size);\n readTarballStream.emit('open');\n debug('open on read a tarball %o', name);\n readStream.pipe(readTarballStream);\n });\n });\n\n readTarballStream.abort = function(): void {\n debug('abort on read a tarball %o', name);\n readStream.close();\n };\n\n return readTarballStream;\n }\n\n private _createFile(name: string, contents: any, callback: Function): void {\n debug(' create a new file: %o', name);\n\n fs.open(name, 'wx', err => {\n if (err) {\n // native EEXIST used here to check exception on fs.open\n if (err.code === 'EEXIST') {\n debug('file %o cannot be created, it already exists: %o', name);\n return callback(fSError(fileExist));\n }\n }\n\n this._writeFile(name, contents, callback);\n });\n }\n\n private _readStorageFile(name: string): Promise<any> {\n return new Promise((resolve, reject): void => {\n debug('reading the file: %o', name);\n\n fs.readFile(name, (err, data) => {\n if (err) {\n debug('error reading the file: %o with error %o', name, err);\n reject(err);\n } else {\n debug('read file %o succeed', name);\n\n resolve(data);\n }\n });\n });\n }\n\n private _convertToString(value: Package): string {\n return JSON.stringify(value, null, '\\t');\n }\n\n private _getStorage(fileName = ''): string {\n const storagePath: string = path.join(this.path, fileName);\n\n return storagePath;\n }\n\n private _writeFile(dest: string, data: string, cb: Callback): void {\n const createTempFile = (cb): void => {\n const tempFilePath = tempFile(dest);\n\n fs.writeFile(tempFilePath, data, err => {\n if (err) {\n debug('error on write the file: %o', dest);\n return cb(err);\n }\n\n debug('creating a new file:: %o', dest);\n renameTmp(tempFilePath, dest, cb);\n });\n };\n\n createTempFile(err => {\n if (err && err.code === noSuchFile) {\n mkdirp(path.dirname(dest))\n .then(() => {\n createTempFile(cb);\n })\n .catch(err => {\n return cb(err);\n });\n } else {\n cb(err);\n }\n });\n }\n\n private _lockAndReadJSON(name: string, cb: Function): void {\n const fileName: string = this._getStorage(name);\n\n readFile(\n fileName,\n {\n lock: true,\n parse: true,\n },\n (err, res) => {\n if (err) {\n debug('error on lock and read json for file: %o', name);\n\n return cb(err);\n }\n debug('lock and read json for file: %o', name);\n\n return cb(null, res);\n }\n );\n }\n\n private _unlockJSON(name: string, cb: Function): void {\n unlockFile(this._getStorage(name), cb);\n }\n}\n"],"file":"local-fs.js"}
package/lib/token.js CHANGED
@@ -19,17 +19,11 @@ var _debug = _interopRequireDefault(require("debug"));
19
19
 
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
21
 
22
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
-
24
22
  const debug = (0, _debug.default)('verdaccio:plugin:local-storage:token');
25
23
  const TOKEN_DB_NAME = '.token-db.json';
26
24
 
27
25
  class TokenActions {
28
26
  constructor(config) {
29
- _defineProperty(this, "config", void 0);
30
-
31
- _defineProperty(this, "tokenDb", void 0);
32
-
33
27
  this.config = config;
34
28
  this.tokenDb = null;
35
29
  }
package/lib/token.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/token.ts"],"names":["debug","TOKEN_DB_NAME","TokenActions","constructor","config","tokenDb","_dbGenPath","dbName","Path","join","resolve","dirname","config_path","storage","getTokenDb","adapter","process","env","NODE_ENV","FileMemory","pathDb","FileAsync","saveToken","token","key","db","userData","get","user","value","_","isNil","set","write","push","getState","deleteToken","tokenKey","userTokens","Error","length","remainingTokens","filter","readTokens","tokens"],"mappings":"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","sourcesContent":["import Path from 'path';\n\nimport _ from 'lodash';\nimport low from 'lowdb';\nimport FileAsync from 'lowdb/adapters/FileAsync';\nimport FileMemory from 'lowdb/adapters/Memory';\nimport buildDebug from 'debug';\nimport { ITokenActions, Config, Token, TokenFilter } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:token');\n\nconst TOKEN_DB_NAME = '.token-db.json';\n\nexport default class TokenActions implements ITokenActions {\n public config: Config;\n public tokenDb: low.LowdbAsync<any> | null;\n\n public constructor(config: Config) {\n this.config = config;\n this.tokenDb = null;\n }\n\n public _dbGenPath(dbName: string, config: Config): string {\n return Path.join(Path.resolve(Path.dirname(config.config_path || ''), config.storage as string, dbName));\n }\n\n private async getTokenDb(): Promise<low.LowdbAsync<any>> {\n if (!this.tokenDb) {\n debug('token database is not defined');\n let adapter;\n if (process.env.NODE_ENV === 'test') {\n debug('token memory adapter');\n adapter = new FileMemory('');\n } else {\n debug('token async adapter');\n const pathDb = this._dbGenPath(TOKEN_DB_NAME, this.config);\n adapter = new FileAsync(pathDb);\n }\n debug('token bd generated');\n this.tokenDb = await low(adapter);\n }\n\n return this.tokenDb;\n }\n\n public async saveToken(token: Token): Promise<void> {\n debug('token key %o', token.key);\n const db = await this.getTokenDb();\n const userData = await db.get(token.user).value();\n debug('user data %o', userData);\n if (_.isNil(userData)) {\n await db.set(token.user, [token]).write();\n debug('token user %o new database', token.user);\n } else {\n // types does not match with valid implementation\n // @ts-ignore\n await db\n .get(token.user)\n // @ts-ignore\n .push(token)\n .write();\n }\n debug('data %o', await db.getState());\n debug('token saved %o', token.user);\n }\n\n public async deleteToken(user: string, tokenKey: string): Promise<void> {\n const db = await this.getTokenDb();\n const userTokens = await db.get(user).value();\n if (_.isNil(userTokens)) {\n throw new Error('user not found');\n }\n debug('tokens %o - %o', userTokens, userTokens.length);\n const remainingTokens = userTokens.filter(({ key }) => {\n debug('key %o', key);\n return key !== tokenKey;\n });\n await db.set(user, remainingTokens).write();\n debug('removed tokens key %o', tokenKey);\n }\n\n public async readTokens(filter: TokenFilter): Promise<Token[]> {\n const { user } = filter;\n debug('read tokens with %o', user);\n const db = await this.getTokenDb();\n const tokens = await db.get(user).value();\n return tokens || [];\n }\n}\n"],"file":"token.js"}
1
+ {"version":3,"sources":["../src/token.ts"],"names":["debug","TOKEN_DB_NAME","TokenActions","constructor","config","tokenDb","_dbGenPath","dbName","Path","join","resolve","dirname","config_path","storage","getTokenDb","adapter","process","env","NODE_ENV","FileMemory","pathDb","FileAsync","saveToken","token","key","db","userData","get","user","value","_","isNil","set","write","push","getState","deleteToken","tokenKey","userTokens","Error","length","remainingTokens","filter","readTokens","tokens"],"mappings":"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","sourcesContent":["import Path from 'path';\n\nimport _ from 'lodash';\nimport low from 'lowdb';\nimport FileAsync from 'lowdb/adapters/FileAsync';\nimport FileMemory from 'lowdb/adapters/Memory';\nimport buildDebug from 'debug';\nimport { ITokenActions, Config, Token, TokenFilter } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:token');\n\nconst TOKEN_DB_NAME = '.token-db.json';\n\nexport default class TokenActions implements ITokenActions {\n public config: Config;\n public tokenDb: low.LowdbAsync<any> | null;\n\n public constructor(config: Config) {\n this.config = config;\n this.tokenDb = null;\n }\n\n public _dbGenPath(dbName: string, config: Config): string {\n return Path.join(Path.resolve(Path.dirname(config.config_path || ''), config.storage as string, dbName));\n }\n\n private async getTokenDb(): Promise<low.LowdbAsync<any>> {\n if (!this.tokenDb) {\n debug('token database is not defined');\n let adapter;\n if (process.env.NODE_ENV === 'test') {\n debug('token memory adapter');\n adapter = new FileMemory('');\n } else {\n debug('token async adapter');\n const pathDb = this._dbGenPath(TOKEN_DB_NAME, this.config);\n adapter = new FileAsync(pathDb);\n }\n debug('token bd generated');\n this.tokenDb = await low(adapter);\n }\n\n return this.tokenDb;\n }\n\n public async saveToken(token: Token): Promise<void> {\n debug('token key %o', token.key);\n const db = await this.getTokenDb();\n const userData = await db.get(token.user).value();\n debug('user data %o', userData);\n if (_.isNil(userData)) {\n await db.set(token.user, [token]).write();\n debug('token user %o new database', token.user);\n } else {\n // types does not match with valid implementation\n // @ts-ignore\n await db\n .get(token.user)\n // @ts-ignore\n .push(token)\n .write();\n }\n debug('data %o', await db.getState());\n debug('token saved %o', token.user);\n }\n\n public async deleteToken(user: string, tokenKey: string): Promise<void> {\n const db = await this.getTokenDb();\n const userTokens = await db.get(user).value();\n if (_.isNil(userTokens)) {\n throw new Error('user not found');\n }\n debug('tokens %o - %o', userTokens, userTokens.length);\n const remainingTokens = userTokens.filter(({ key }) => {\n debug('key %o', key);\n return key !== tokenKey;\n });\n await db.set(user, remainingTokens).write();\n debug('removed tokens key %o', tokenKey);\n }\n\n public async readTokens(filter: TokenFilter): Promise<Token[]> {\n const { user } = filter;\n debug('read tokens with %o', user);\n const db = await this.getTokenDb();\n const tokens = await db.get(user).value();\n return tokens || [];\n }\n}\n"],"file":"token.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/local-storage",
3
- "version": "10.1.1",
3
+ "version": "10.2.0",
4
4
  "description": "Local storage implementation",
5
5
  "keywords": [
6
6
  "plugin",
@@ -31,9 +31,9 @@
31
31
  "node": ">=8"
32
32
  },
33
33
  "dependencies": {
34
- "@verdaccio/commons-api": "10.1.0",
35
- "@verdaccio/file-locking": "10.1.0",
36
- "@verdaccio/streams": "10.1.0",
34
+ "@verdaccio/commons-api": "10.2.0",
35
+ "@verdaccio/file-locking": "10.2.0",
36
+ "@verdaccio/streams": "10.2.0",
37
37
  "async": "3.2.3",
38
38
  "debug": "4.3.3",
39
39
  "lodash": "4.17.21",
@@ -43,7 +43,7 @@
43
43
  "devDependencies": {
44
44
  "@types/minimatch": "^3.0.3",
45
45
  "@types/node": "^14.0.0",
46
- "@verdaccio/types": "10.2.2",
46
+ "@verdaccio/types": "10.3.0",
47
47
  "minimatch": "^3.0.4",
48
48
  "rmdir-sync": "^1.0.1"
49
49
  },