@verdaccio/local-storage 10.3.1 → 10.3.3

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.
package/lib/token.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","names":["debug","buildDebug","TOKEN_DB_NAME","TokenActions","constructor","config","tokenDb","_dbGenPath","dbName","Path","join","resolve","dirname","self_path","storage","getTokenDb","adapter","process","env","NODE_ENV","FileMemory","pathDb","FileAsync","low","saveToken","token","key","db","userData","get","user","value","_","isNil","set","write","push","getState","deleteToken","tokenKey","userTokens","Error","length","remainingTokens","filter","readTokens","tokens"],"sources":["../src/token.ts"],"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(\n Path.resolve(Path.dirname(config.self_path || ''), config.storage as string, dbName)\n );\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"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;;;AAGA,MAAMA,KAAK,GAAG,IAAAC,cAAA,EAAW,sCAAX,CAAd;AAEA,MAAMC,aAAa,GAAG,gBAAtB;;AAEe,MAAMC,YAAN,CAA4C;EAIlDC,WAAW,CAACC,MAAD,EAAiB;IAAA;;IAAA;;IACjC,KAAKA,MAAL,GAAcA,MAAd;IACA,KAAKC,OAAL,GAAe,IAAf;EACD;;EAEMC,UAAU,CAACC,MAAD,EAAiBH,MAAjB,EAAyC;IACxD,OAAOI,aAAA,CAAKC,IAAL,CACLD,aAAA,CAAKE,OAAL,CAAaF,aAAA,CAAKG,OAAL,CAAaP,MAAM,CAACQ,SAAP,IAAoB,EAAjC,CAAb,EAAmDR,MAAM,CAACS,OAA1D,EAA6EN,MAA7E,CADK,CAAP;EAGD;;EAEuB,MAAVO,UAAU,GAAiC;IACvD,IAAI,CAAC,KAAKT,OAAV,EAAmB;MACjBN,KAAK,CAAC,+BAAD,CAAL;MACA,IAAIgB,OAAJ;;MACA,IAAIC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,MAA7B,EAAqC;QACnCnB,KAAK,CAAC,sBAAD,CAAL;QACAgB,OAAO,GAAG,IAAII,eAAJ,CAAe,EAAf,CAAV;MACD,CAHD,MAGO;QACLpB,KAAK,CAAC,qBAAD,CAAL;;QACA,MAAMqB,MAAM,GAAG,KAAKd,UAAL,CAAgBL,aAAhB,EAA+B,KAAKG,MAApC,CAAf;;QACAW,OAAO,GAAG,IAAIM,kBAAJ,CAAcD,MAAd,CAAV;MACD;;MACDrB,KAAK,CAAC,oBAAD,CAAL;MACA,KAAKM,OAAL,GAAe,MAAM,IAAAiB,cAAA,EAAIP,OAAJ,CAArB;IACD;;IAED,OAAO,KAAKV,OAAZ;EACD;;EAEqB,MAATkB,SAAS,CAACC,KAAD,EAA8B;IAClDzB,KAAK,CAAC,cAAD,EAAiByB,KAAK,CAACC,GAAvB,CAAL;IACA,MAAMC,EAAE,GAAG,MAAM,KAAKZ,UAAL,EAAjB;IACA,MAAMa,QAAQ,GAAG,MAAMD,EAAE,CAACE,GAAH,CAAOJ,KAAK,CAACK,IAAb,EAAmBC,KAAnB,EAAvB;IACA/B,KAAK,CAAC,cAAD,EAAiB4B,QAAjB,CAAL;;IACA,IAAII,eAAA,CAAEC,KAAF,CAAQL,QAAR,CAAJ,EAAuB;MACrB,MAAMD,EAAE,CAACO,GAAH,CAAOT,KAAK,CAACK,IAAb,EAAmB,CAACL,KAAD,CAAnB,EAA4BU,KAA5B,EAAN;MACAnC,KAAK,CAAC,4BAAD,EAA+ByB,KAAK,CAACK,IAArC,CAAL;IACD,CAHD,MAGO;MACL;MACA;MACA,MAAMH,EAAE,CACLE,GADG,CACCJ,KAAK,CAACK,IADP,EAEJ;MAFI,CAGHM,IAHG,CAGEX,KAHF,EAIHU,KAJG,EAAN;IAKD;;IACDnC,KAAK,CAAC,SAAD,EAAY,MAAM2B,EAAE,CAACU,QAAH,EAAlB,CAAL;IACArC,KAAK,CAAC,gBAAD,EAAmByB,KAAK,CAACK,IAAzB,CAAL;EACD;;EAEuB,MAAXQ,WAAW,CAACR,IAAD,EAAeS,QAAf,EAAgD;IACtE,MAAMZ,EAAE,GAAG,MAAM,KAAKZ,UAAL,EAAjB;IACA,MAAMyB,UAAU,GAAG,MAAMb,EAAE,CAACE,GAAH,CAAOC,IAAP,EAAaC,KAAb,EAAzB;;IACA,IAAIC,eAAA,CAAEC,KAAF,CAAQO,UAAR,CAAJ,EAAyB;MACvB,MAAM,IAAIC,KAAJ,CAAU,gBAAV,CAAN;IACD;;IACDzC,KAAK,CAAC,gBAAD,EAAmBwC,UAAnB,EAA+BA,UAAU,CAACE,MAA1C,CAAL;IACA,MAAMC,eAAe,GAAGH,UAAU,CAACI,MAAX,CAAkB,CAAC;MAAElB;IAAF,CAAD,KAAa;MACrD1B,KAAK,CAAC,QAAD,EAAW0B,GAAX,CAAL;MACA,OAAOA,GAAG,KAAKa,QAAf;IACD,CAHuB,CAAxB;IAIA,MAAMZ,EAAE,CAACO,GAAH,CAAOJ,IAAP,EAAaa,eAAb,EAA8BR,KAA9B,EAAN;IACAnC,KAAK,CAAC,uBAAD,EAA0BuC,QAA1B,CAAL;EACD;;EAEsB,MAAVM,UAAU,CAACD,MAAD,EAAwC;IAC7D,MAAM;MAAEd;IAAF,IAAWc,MAAjB;IACA5C,KAAK,CAAC,qBAAD,EAAwB8B,IAAxB,CAAL;IACA,MAAMH,EAAE,GAAG,MAAM,KAAKZ,UAAL,EAAjB;IACA,MAAM+B,MAAM,GAAG,MAAMnB,EAAE,CAACE,GAAH,CAAOC,IAAP,EAAaC,KAAb,EAArB;IACA,OAAOe,MAAM,IAAI,EAAjB;EACD;;AA5EwD"}
1
+ {"version":3,"file":"token.js","names":["_path","_interopRequireDefault","require","_lodash","_lowdb","_FileAsync","_Memory","_debug","obj","__esModule","default","debug","buildDebug","TOKEN_DB_NAME","TokenActions","constructor","config","tokenDb","_dbGenPath","dbName","Path","join","resolve","dirname","self_path","storage","getTokenDb","adapter","process","env","NODE_ENV","FileMemory","pathDb","FileAsync","low","saveToken","token","key","db","userData","get","user","value","_","isNil","set","write","push","getState","deleteToken","tokenKey","userTokens","Error","length","remainingTokens","filter","readTokens","tokens","exports"],"sources":["../src/token.ts"],"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/legacy-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(\n Path.resolve(Path.dirname(config.self_path || ''), config.storage as string, dbName)\n );\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"],"mappings":"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"}
package/lib/utils.js CHANGED
@@ -6,67 +6,52 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.findPackages = findPackages;
7
7
  exports.getFileStats = getFileStats;
8
8
  exports.readDirectory = readDirectory;
9
-
10
9
  var _fs = _interopRequireDefault(require("fs"));
11
-
12
10
  var _path = _interopRequireDefault(require("path"));
13
-
14
11
  var _lodash = _interopRequireDefault(require("lodash"));
15
-
16
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
13
  function getFileStats(packagePath) {
19
14
  return new Promise((resolve, reject) => {
20
15
  _fs.default.stat(packagePath, (err, stats) => {
21
16
  if (_lodash.default.isNil(err) === false) {
22
17
  return reject(err);
23
18
  }
24
-
25
19
  resolve(stats);
26
20
  });
27
21
  });
28
22
  }
29
-
30
23
  function readDirectory(packagePath) {
31
24
  return new Promise((resolve, reject) => {
32
25
  _fs.default.readdir(packagePath, (err, scopedPackages) => {
33
26
  if (_lodash.default.isNil(err) === false) {
34
27
  return reject(err);
35
28
  }
36
-
37
29
  resolve(scopedPackages);
38
30
  });
39
31
  });
40
32
  }
41
-
42
33
  function hasScope(file) {
43
34
  return file.match(/^@/) !== null;
44
35
  }
45
- /* eslint-disable no-async-promise-executor */
46
-
47
36
 
37
+ /* eslint-disable no-async-promise-executor */
48
38
  async function findPackages(storagePath, validationHandler) {
49
39
  const listPackages = [];
50
40
  return new Promise(async (resolve, reject) => {
51
41
  try {
52
42
  const scopePath = _path.default.resolve(storagePath);
53
-
54
43
  const storageDirs = await readDirectory(scopePath);
55
-
56
44
  for (const directory of storageDirs) {
57
45
  // we check whether has 2nd level
58
46
  if (hasScope(directory)) {
59
47
  // we read directory multiple
60
48
  const scopeDirectory = _path.default.resolve(storagePath, directory);
61
-
62
49
  const scopedPackages = await readDirectory(scopeDirectory);
63
-
64
50
  for (const scopedDirName of scopedPackages) {
65
51
  if (validationHandler(scopedDirName)) {
66
52
  // we build the complete scope path
67
- const scopePath = _path.default.resolve(storagePath, directory, scopedDirName); // list content of such directory
68
-
69
-
53
+ const scopePath = _path.default.resolve(storagePath, directory, scopedDirName);
54
+ // list content of such directory
70
55
  listPackages.push({
71
56
  name: `${directory}/${scopedDirName}`,
72
57
  path: scopePath
@@ -77,7 +62,6 @@ async function findPackages(storagePath, validationHandler) {
77
62
  // otherwise we read as single level
78
63
  if (validationHandler(directory)) {
79
64
  const scopePath = _path.default.resolve(storagePath, directory);
80
-
81
65
  listPackages.push({
82
66
  name: directory,
83
67
  path: scopePath
@@ -88,7 +72,6 @@ async function findPackages(storagePath, validationHandler) {
88
72
  } catch (error) {
89
73
  reject(error);
90
74
  }
91
-
92
75
  resolve(listPackages);
93
76
  });
94
77
  }
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["getFileStats","packagePath","Promise","resolve","reject","fs","stat","err","stats","_","isNil","readDirectory","readdir","scopedPackages","hasScope","file","match","findPackages","storagePath","validationHandler","listPackages","scopePath","path","storageDirs","directory","scopeDirectory","scopedDirName","push","name","error"],"sources":["../src/utils.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport _ from 'lodash';\n\nexport function getFileStats(packagePath: string): Promise<fs.Stats> {\n return new Promise((resolve, reject): void => {\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return reject(err);\n }\n resolve(stats);\n });\n });\n}\n\nexport function readDirectory(packagePath: string): Promise<string[]> {\n return new Promise((resolve, reject): void => {\n fs.readdir(packagePath, (err, scopedPackages) => {\n if (_.isNil(err) === false) {\n return reject(err);\n }\n\n resolve(scopedPackages);\n });\n });\n}\n\nfunction hasScope(file: string): boolean {\n return file.match(/^@/) !== null;\n}\n\n/* eslint-disable no-async-promise-executor */\nexport async function findPackages(\n storagePath: string,\n validationHandler: Function\n): Promise<{ name: string; path: string }[]> {\n const listPackages: { name: string; path: string }[] = [];\n return new Promise(async (resolve, reject) => {\n try {\n const scopePath = path.resolve(storagePath);\n const storageDirs = await readDirectory(scopePath);\n for (const directory of storageDirs) {\n // we check whether has 2nd level\n if (hasScope(directory)) {\n // we read directory multiple\n const scopeDirectory = path.resolve(storagePath, directory);\n const scopedPackages = await readDirectory(scopeDirectory);\n for (const scopedDirName of scopedPackages) {\n if (validationHandler(scopedDirName)) {\n // we build the complete scope path\n const scopePath = path.resolve(storagePath, directory, scopedDirName);\n // list content of such directory\n listPackages.push({\n name: `${directory}/${scopedDirName}`,\n path: scopePath,\n });\n }\n }\n } else {\n // otherwise we read as single level\n if (validationHandler(directory)) {\n const scopePath = path.resolve(storagePath, directory);\n listPackages.push({\n name: directory,\n path: scopePath,\n });\n }\n }\n }\n } catch (error) {\n reject(error);\n }\n\n resolve(listPackages);\n });\n}\n/* eslint-enable no-async-promise-executor */\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEA;;;;AAEO,SAASA,YAAT,CAAsBC,WAAtB,EAA8D;EACnE,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAA2B;IAC5CC,WAAA,CAAGC,IAAH,CAAQL,WAAR,EAAqB,CAACM,GAAD,EAAMC,KAAN,KAAgB;MACnC,IAAIC,eAAA,CAAEC,KAAF,CAAQH,GAAR,MAAiB,KAArB,EAA4B;QAC1B,OAAOH,MAAM,CAACG,GAAD,CAAb;MACD;;MACDJ,OAAO,CAACK,KAAD,CAAP;IACD,CALD;EAMD,CAPM,CAAP;AAQD;;AAEM,SAASG,aAAT,CAAuBV,WAAvB,EAA+D;EACpE,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAA2B;IAC5CC,WAAA,CAAGO,OAAH,CAAWX,WAAX,EAAwB,CAACM,GAAD,EAAMM,cAAN,KAAyB;MAC/C,IAAIJ,eAAA,CAAEC,KAAF,CAAQH,GAAR,MAAiB,KAArB,EAA4B;QAC1B,OAAOH,MAAM,CAACG,GAAD,CAAb;MACD;;MAEDJ,OAAO,CAACU,cAAD,CAAP;IACD,CAND;EAOD,CARM,CAAP;AASD;;AAED,SAASC,QAAT,CAAkBC,IAAlB,EAAyC;EACvC,OAAOA,IAAI,CAACC,KAAL,CAAW,IAAX,MAAqB,IAA5B;AACD;AAED;;;AACO,eAAeC,YAAf,CACLC,WADK,EAELC,iBAFK,EAGsC;EAC3C,MAAMC,YAA8C,GAAG,EAAvD;EACA,OAAO,IAAIlB,OAAJ,CAAY,OAAOC,OAAP,EAAgBC,MAAhB,KAA2B;IAC5C,IAAI;MACF,MAAMiB,SAAS,GAAGC,aAAA,CAAKnB,OAAL,CAAae,WAAb,CAAlB;;MACA,MAAMK,WAAW,GAAG,MAAMZ,aAAa,CAACU,SAAD,CAAvC;;MACA,KAAK,MAAMG,SAAX,IAAwBD,WAAxB,EAAqC;QACnC;QACA,IAAIT,QAAQ,CAACU,SAAD,CAAZ,EAAyB;UACvB;UACA,MAAMC,cAAc,GAAGH,aAAA,CAAKnB,OAAL,CAAae,WAAb,EAA0BM,SAA1B,CAAvB;;UACA,MAAMX,cAAc,GAAG,MAAMF,aAAa,CAACc,cAAD,CAA1C;;UACA,KAAK,MAAMC,aAAX,IAA4Bb,cAA5B,EAA4C;YAC1C,IAAIM,iBAAiB,CAACO,aAAD,CAArB,EAAsC;cACpC;cACA,MAAML,SAAS,GAAGC,aAAA,CAAKnB,OAAL,CAAae,WAAb,EAA0BM,SAA1B,EAAqCE,aAArC,CAAlB,CAFoC,CAGpC;;;cACAN,YAAY,CAACO,IAAb,CAAkB;gBAChBC,IAAI,EAAG,GAAEJ,SAAU,IAAGE,aAAc,EADpB;gBAEhBJ,IAAI,EAAED;cAFU,CAAlB;YAID;UACF;QACF,CAfD,MAeO;UACL;UACA,IAAIF,iBAAiB,CAACK,SAAD,CAArB,EAAkC;YAChC,MAAMH,SAAS,GAAGC,aAAA,CAAKnB,OAAL,CAAae,WAAb,EAA0BM,SAA1B,CAAlB;;YACAJ,YAAY,CAACO,IAAb,CAAkB;cAChBC,IAAI,EAAEJ,SADU;cAEhBF,IAAI,EAAED;YAFU,CAAlB;UAID;QACF;MACF;IACF,CA/BD,CA+BE,OAAOQ,KAAP,EAAc;MACdzB,MAAM,CAACyB,KAAD,CAAN;IACD;;IAED1B,OAAO,CAACiB,YAAD,CAAP;EACD,CArCM,CAAP;AAsCD;AACD"}
1
+ {"version":3,"file":"utils.js","names":["_fs","_interopRequireDefault","require","_path","_lodash","obj","__esModule","default","getFileStats","packagePath","Promise","resolve","reject","fs","stat","err","stats","_","isNil","readDirectory","readdir","scopedPackages","hasScope","file","match","findPackages","storagePath","validationHandler","listPackages","scopePath","path","storageDirs","directory","scopeDirectory","scopedDirName","push","name","error"],"sources":["../src/utils.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport _ from 'lodash';\n\nexport function getFileStats(packagePath: string): Promise<fs.Stats> {\n return new Promise((resolve, reject): void => {\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return reject(err);\n }\n resolve(stats);\n });\n });\n}\n\nexport function readDirectory(packagePath: string): Promise<string[]> {\n return new Promise((resolve, reject): void => {\n fs.readdir(packagePath, (err, scopedPackages) => {\n if (_.isNil(err) === false) {\n return reject(err);\n }\n\n resolve(scopedPackages);\n });\n });\n}\n\nfunction hasScope(file: string): boolean {\n return file.match(/^@/) !== null;\n}\n\n/* eslint-disable no-async-promise-executor */\nexport async function findPackages(\n storagePath: string,\n validationHandler: Function\n): Promise<{ name: string; path: string }[]> {\n const listPackages: { name: string; path: string }[] = [];\n return new Promise(async (resolve, reject) => {\n try {\n const scopePath = path.resolve(storagePath);\n const storageDirs = await readDirectory(scopePath);\n for (const directory of storageDirs) {\n // we check whether has 2nd level\n if (hasScope(directory)) {\n // we read directory multiple\n const scopeDirectory = path.resolve(storagePath, directory);\n const scopedPackages = await readDirectory(scopeDirectory);\n for (const scopedDirName of scopedPackages) {\n if (validationHandler(scopedDirName)) {\n // we build the complete scope path\n const scopePath = path.resolve(storagePath, directory, scopedDirName);\n // list content of such directory\n listPackages.push({\n name: `${directory}/${scopedDirName}`,\n path: scopePath,\n });\n }\n }\n } else {\n // otherwise we read as single level\n if (validationHandler(directory)) {\n const scopePath = path.resolve(storagePath, directory);\n listPackages.push({\n name: directory,\n path: scopePath,\n });\n }\n }\n }\n } catch (error) {\n reject(error);\n }\n\n resolve(listPackages);\n });\n}\n/* eslint-enable no-async-promise-executor */\n"],"mappings":";;;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAuB,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEhB,SAASG,YAAYA,CAACC,WAAmB,EAAqB;EACnE,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAW;IAC5CC,WAAE,CAACC,IAAI,CAACL,WAAW,EAAE,CAACM,GAAG,EAAEC,KAAK,KAAK;MACnC,IAAIC,eAAC,CAACC,KAAK,CAACH,GAAG,CAAC,KAAK,KAAK,EAAE;QAC1B,OAAOH,MAAM,CAACG,GAAG,CAAC;MACpB;MACAJ,OAAO,CAACK,KAAK,CAAC;IAChB,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;AAEO,SAASG,aAAaA,CAACV,WAAmB,EAAqB;EACpE,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAW;IAC5CC,WAAE,CAACO,OAAO,CAACX,WAAW,EAAE,CAACM,GAAG,EAAEM,cAAc,KAAK;MAC/C,IAAIJ,eAAC,CAACC,KAAK,CAACH,GAAG,CAAC,KAAK,KAAK,EAAE;QAC1B,OAAOH,MAAM,CAACG,GAAG,CAAC;MACpB;MAEAJ,OAAO,CAACU,cAAc,CAAC;IACzB,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;AAEA,SAASC,QAAQA,CAACC,IAAY,EAAW;EACvC,OAAOA,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI;AAClC;;AAEA;AACO,eAAeC,YAAYA,CAChCC,WAAmB,EACnBC,iBAA2B,EACgB;EAC3C,MAAMC,YAA8C,GAAG,EAAE;EACzD,OAAO,IAAIlB,OAAO,CAAC,OAAOC,OAAO,EAAEC,MAAM,KAAK;IAC5C,IAAI;MACF,MAAMiB,SAAS,GAAGC,aAAI,CAACnB,OAAO,CAACe,WAAW,CAAC;MAC3C,MAAMK,WAAW,GAAG,MAAMZ,aAAa,CAACU,SAAS,CAAC;MAClD,KAAK,MAAMG,SAAS,IAAID,WAAW,EAAE;QACnC;QACA,IAAIT,QAAQ,CAACU,SAAS,CAAC,EAAE;UACvB;UACA,MAAMC,cAAc,GAAGH,aAAI,CAACnB,OAAO,CAACe,WAAW,EAAEM,SAAS,CAAC;UAC3D,MAAMX,cAAc,GAAG,MAAMF,aAAa,CAACc,cAAc,CAAC;UAC1D,KAAK,MAAMC,aAAa,IAAIb,cAAc,EAAE;YAC1C,IAAIM,iBAAiB,CAACO,aAAa,CAAC,EAAE;cACpC;cACA,MAAML,SAAS,GAAGC,aAAI,CAACnB,OAAO,CAACe,WAAW,EAAEM,SAAS,EAAEE,aAAa,CAAC;cACrE;cACAN,YAAY,CAACO,IAAI,CAAC;gBAChBC,IAAI,EAAG,GAAEJ,SAAU,IAAGE,aAAc,EAAC;gBACrCJ,IAAI,EAAED;cACR,CAAC,CAAC;YACJ;UACF;QACF,CAAC,MAAM;UACL;UACA,IAAIF,iBAAiB,CAACK,SAAS,CAAC,EAAE;YAChC,MAAMH,SAAS,GAAGC,aAAI,CAACnB,OAAO,CAACe,WAAW,EAAEM,SAAS,CAAC;YACtDJ,YAAY,CAACO,IAAI,CAAC;cAChBC,IAAI,EAAEJ,SAAS;cACfF,IAAI,EAAED;YACR,CAAC,CAAC;UACJ;QACF;MACF;IACF,CAAC,CAAC,OAAOQ,KAAK,EAAE;MACdzB,MAAM,CAACyB,KAAK,CAAC;IACf;IAEA1B,OAAO,CAACiB,YAAY,CAAC;EACvB,CAAC,CAAC;AACJ;AACA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/local-storage",
3
- "version": "10.3.1",
3
+ "version": "10.3.3",
4
4
  "description": "Local storage implementation",
5
5
  "keywords": [
6
6
  "plugin",
@@ -32,8 +32,8 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@verdaccio/commons-api": "10.2.0",
35
- "@verdaccio/file-locking": "10.3.0",
36
- "@verdaccio/streams": "10.2.0",
35
+ "@verdaccio/file-locking": "10.3.1",
36
+ "@verdaccio/streams": "10.2.1",
37
37
  "async": "3.2.4",
38
38
  "debug": "4.3.4",
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.5.1",
46
+ "@verdaccio/legacy-types": "1.0.1",
47
47
  "minimatch": "^4.0.0",
48
48
  "rmdir-sync": "^1.0.1"
49
49
  },
@@ -57,8 +57,6 @@
57
57
  "type-check": "tsc --noEmit -p tsconfig.build.json",
58
58
  "build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
59
59
  "build:js": "babel src/ --out-dir lib/ --copy-files --extensions \".ts,.tsx\" --source-maps",
60
- "watch": "pnpm build:js -- --watch",
61
60
  "build": "pnpm run build:js && pnpm run build:types"
62
- },
63
- "readme": "# @verdaccio/local-storage\n\nšŸ“¦ File system storage plugin for verdaccio \n\n[![verdaccio (latest)](https://img.shields.io/npm/v/@verdaccio/local-storage/latest.svg)](https://www.npmjs.com/package/@verdaccio/local-storage)\n[![CircleCI](https://circleci.com/gh/verdaccio/local-storage/tree/master.svg?style=svg)](https://circleci.com/gh/verdaccio/local-storage/tree/master)\n[![Known Vulnerabilities](https://snyk.io/test/github/verdaccio/local-storage/badge.svg?targetFile=package.json)](https://snyk.io/test/github/verdaccio/local-storage?targetFile=package.json)\n[![codecov](https://codecov.io/gh/verdaccio/local-storage/branch/master/graph/badge.svg)](https://codecov.io/gh/verdaccio/local-storage)\n[![backers](https://opencollective.com/verdaccio/tiers/backer/badge.svg?label=Backer&color=brightgreen)](https://opencollective.com/verdaccio)\n[![discord](https://img.shields.io/discord/388674437219745793.svg)](http://chat.verdaccio.org/)\n![MIT](https://img.shields.io/github/license/mashape/apistatus.svg)\n[![node](https://img.shields.io/node/v/@verdaccio/local-storage/latest.svg)](https://www.npmjs.com/package/@verdaccio/local-storage)\n\n> This package is already built-in in verdaccio\n\n```\nnpm install @verdaccio/local-storage\n```\n\n### API\n\n### LocalDatabase\n\nThe main object that handle a JSON database the private packages.\n\n#### Constructor\n\n```\nnew LocalDatabase(config, logger);\n```\n\n* **config**: A verdaccio configuration instance.\n* **logger**: A logger instance\n\n### LocalFS\n\nA class that handle an package instance in the File System\n\n```\nnew LocalFS(packageStoragePath, logger);\n```\n\n\n\n## License\nVerdaccio is [MIT licensed](https://github.com/verdaccio/local-storage/blob/master/LICENSE).\n\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fverdaccio%2Flocal-storage.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fverdaccio%2Flocal-storage?ref=badge_large)\n"
61
+ }
64
62
  }