@verdaccio/local-storage 10.0.0-next.1 → 10.0.7
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/index.js +1 -1
- package/lib/index.js.map +1 -0
- package/lib/local-database.d.ts +4 -28
- package/lib/local-database.js +43 -159
- package/lib/local-database.js.map +1 -0
- package/lib/local-fs.d.ts +1 -1
- package/lib/local-fs.js +36 -72
- package/lib/local-fs.js.map +1 -0
- package/lib/pkg-utils.js +2 -2
- package/lib/pkg-utils.js.map +1 -0
- package/lib/token.d.ts +12 -0
- package/lib/token.js +116 -0
- package/lib/token.js.map +1 -0
- package/lib/utils.js +1 -1
- package/lib/utils.js.map +1 -0
- package/package.json +20 -23
- package/CHANGELOG.md +0 -437
package/lib/index.js
CHANGED
|
@@ -17,4 +17,4 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
17
17
|
|
|
18
18
|
var _default = _localDatabase.default;
|
|
19
19
|
exports.default = _default;
|
|
20
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["LocalDatabase"],"mappings":";;;;;;;;;;;;;AAAA;;;;eAIeA,sB","sourcesContent":["import LocalDatabase from './local-database';\n\nexport { LocalDatabase };\n\nexport default LocalDatabase;\n"],"file":"index.js"}
|
package/lib/local-database.d.ts
CHANGED
|
@@ -1,33 +1,16 @@
|
|
|
1
|
-
import { Callback, Config, IPackageStorage, IPluginStorage, LocalStorage, Logger
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
declare class LocalDatabase implements IPluginStorage<{}> {
|
|
1
|
+
import { Callback, Config, IPackageStorage, IPluginStorage, LocalStorage, Logger } from '@verdaccio/types';
|
|
2
|
+
import TokenActions from './token';
|
|
3
|
+
declare class LocalDatabase extends TokenActions implements IPluginStorage<{}> {
|
|
6
4
|
path: string;
|
|
7
5
|
logger: Logger;
|
|
8
6
|
data: LocalStorage;
|
|
9
7
|
config: Config;
|
|
10
8
|
locked: boolean;
|
|
11
|
-
tokenDb: any;
|
|
12
|
-
/**
|
|
13
|
-
* Load an parse the local json database.
|
|
14
|
-
* @param {*} path the database path
|
|
15
|
-
*/
|
|
16
9
|
constructor(config: Config, logger: Logger);
|
|
17
10
|
getSecret(): Promise<string>;
|
|
18
11
|
setSecret(secret: string): Promise<Error | null>;
|
|
19
|
-
/**
|
|
20
|
-
* Add a new element.
|
|
21
|
-
* @param {*} name
|
|
22
|
-
* @return {Error|*}
|
|
23
|
-
*/
|
|
24
12
|
add(name: string, cb: Callback): void;
|
|
25
13
|
search(onPackage: Callback, onEnd: Callback, validateName: (name: string) => boolean): void;
|
|
26
|
-
/**
|
|
27
|
-
* Remove an element from the database.
|
|
28
|
-
* @param {*} name
|
|
29
|
-
* @return {Error|*}
|
|
30
|
-
*/
|
|
31
14
|
remove(name: string, cb: Callback): void;
|
|
32
15
|
/**
|
|
33
16
|
* Return all database elements.
|
|
@@ -36,10 +19,7 @@ declare class LocalDatabase implements IPluginStorage<{}> {
|
|
|
36
19
|
get(cb: Callback): void;
|
|
37
20
|
getPackageStorage(packageName: string): IPackageStorage;
|
|
38
21
|
clean(): void;
|
|
39
|
-
|
|
40
|
-
deleteToken(user: string, tokenKey: string): Promise<void>;
|
|
41
|
-
readTokens(filter: TokenFilter): Promise<Token[]>;
|
|
42
|
-
private _getTime;
|
|
22
|
+
private getTime;
|
|
43
23
|
private _getCustomPackageLocalStorages;
|
|
44
24
|
/**
|
|
45
25
|
* Syncronize {create} database whether does not exist.
|
|
@@ -60,15 +40,11 @@ declare class LocalDatabase implements IPluginStorage<{}> {
|
|
|
60
40
|
* @private
|
|
61
41
|
*/
|
|
62
42
|
private _buildStoragePath;
|
|
63
|
-
private _dbGenPath;
|
|
64
43
|
/**
|
|
65
44
|
* Fetch local packages.
|
|
66
45
|
* @private
|
|
67
46
|
* @return {Object}
|
|
68
47
|
*/
|
|
69
48
|
private _fetchLocalPackages;
|
|
70
|
-
private getTokenDb;
|
|
71
|
-
private _getTokenKey;
|
|
72
|
-
private _compoundTokenKey;
|
|
73
49
|
}
|
|
74
50
|
export default LocalDatabase;
|
package/lib/local-database.js
CHANGED
|
@@ -9,20 +9,22 @@ var _fs = _interopRequireDefault(require("fs"));
|
|
|
9
9
|
|
|
10
10
|
var _path = _interopRequireDefault(require("path"));
|
|
11
11
|
|
|
12
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
13
|
+
|
|
12
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
15
|
|
|
14
16
|
var _async = _interopRequireDefault(require("async"));
|
|
15
17
|
|
|
16
18
|
var _mkdirp = _interopRequireDefault(require("mkdirp"));
|
|
17
19
|
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
var _lib = require("@verdaccio/commons-api/lib");
|
|
20
|
+
var _commonsApi = require("@verdaccio/commons-api");
|
|
21
21
|
|
|
22
22
|
var _localFs = _interopRequireWildcard(require("./local-fs"));
|
|
23
23
|
|
|
24
24
|
var _pkgUtils = require("./pkg-utils");
|
|
25
25
|
|
|
26
|
+
var _token = _interopRequireDefault(require("./token"));
|
|
27
|
+
|
|
26
28
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
27
29
|
|
|
28
30
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -33,17 +35,12 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
33
35
|
|
|
34
36
|
const DEPRECATED_DB_NAME = '.sinopia-db.json';
|
|
35
37
|
const DB_NAME = '.verdaccio-db.json';
|
|
36
|
-
const
|
|
38
|
+
const debug = (0, _debug.default)('verdaccio:plugin:local-storage');
|
|
37
39
|
|
|
38
|
-
|
|
39
|
-
* Handle local database.
|
|
40
|
-
*/
|
|
41
|
-
class LocalDatabase {
|
|
42
|
-
/**
|
|
43
|
-
* Load an parse the local json database.
|
|
44
|
-
* @param {*} path the database path
|
|
45
|
-
*/
|
|
40
|
+
class LocalDatabase extends _token.default {
|
|
46
41
|
constructor(config, logger) {
|
|
42
|
+
super(config);
|
|
43
|
+
|
|
47
44
|
_defineProperty(this, "path", void 0);
|
|
48
45
|
|
|
49
46
|
_defineProperty(this, "logger", void 0);
|
|
@@ -54,16 +51,11 @@ class LocalDatabase {
|
|
|
54
51
|
|
|
55
52
|
_defineProperty(this, "locked", void 0);
|
|
56
53
|
|
|
57
|
-
_defineProperty(this, "tokenDb", void 0);
|
|
58
|
-
|
|
59
54
|
this.config = config;
|
|
60
55
|
this.path = this._buildStoragePath(config);
|
|
61
56
|
this.logger = logger;
|
|
62
57
|
this.locked = false;
|
|
63
58
|
this.data = this._fetchLocalPackages();
|
|
64
|
-
this.logger.trace({
|
|
65
|
-
config: this.config
|
|
66
|
-
}, '[local-storage]: configuration: @{config}');
|
|
67
59
|
|
|
68
60
|
this._sync();
|
|
69
61
|
}
|
|
@@ -78,21 +70,14 @@ class LocalDatabase {
|
|
|
78
70
|
resolve(this._sync());
|
|
79
71
|
});
|
|
80
72
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Add a new element.
|
|
83
|
-
* @param {*} name
|
|
84
|
-
* @return {Error|*}
|
|
85
|
-
*/
|
|
86
|
-
|
|
87
73
|
|
|
88
74
|
add(name, cb) {
|
|
89
75
|
if (this.data.list.indexOf(name) === -1) {
|
|
90
76
|
this.data.list.push(name);
|
|
91
|
-
|
|
92
|
-
name
|
|
93
|
-
}, '[local-storage]: the private package @{name} has been added');
|
|
77
|
+
debug('the private package %o has been added', name);
|
|
94
78
|
cb(this._sync());
|
|
95
79
|
} else {
|
|
80
|
+
debug('the private package %o was not added', name);
|
|
96
81
|
cb(null);
|
|
97
82
|
}
|
|
98
83
|
}
|
|
@@ -100,13 +85,13 @@ class LocalDatabase {
|
|
|
100
85
|
search(onPackage, onEnd, validateName) {
|
|
101
86
|
const storages = this._getCustomPackageLocalStorages();
|
|
102
87
|
|
|
103
|
-
|
|
88
|
+
debug(`search custom local packages: %o`, JSON.stringify(storages));
|
|
104
89
|
|
|
105
90
|
const base = _path.default.dirname(this.config.self_path);
|
|
106
91
|
|
|
107
92
|
const self = this;
|
|
108
93
|
const storageKeys = Object.keys(storages);
|
|
109
|
-
|
|
94
|
+
debug(`search base: %o keys: %o`, base, storageKeys);
|
|
110
95
|
|
|
111
96
|
_async.default.eachSeries(storageKeys, function (storage, cb) {
|
|
112
97
|
const position = storageKeys.indexOf(storage);
|
|
@@ -115,10 +100,7 @@ class LocalDatabase {
|
|
|
115
100
|
|
|
116
101
|
const storagePath = _path.default.resolve(base, base2, storage);
|
|
117
102
|
|
|
118
|
-
|
|
119
|
-
storagePath,
|
|
120
|
-
storage
|
|
121
|
-
}, 'local-storage: [search] search path: @{storagePath} : @{storage}');
|
|
103
|
+
debug('search path: %o : %o', storagePath, storage);
|
|
122
104
|
|
|
123
105
|
_fs.default.readdir(storagePath, (err, files) => {
|
|
124
106
|
if (err) {
|
|
@@ -126,9 +108,7 @@ class LocalDatabase {
|
|
|
126
108
|
}
|
|
127
109
|
|
|
128
110
|
_async.default.eachSeries(files, function (file, cb) {
|
|
129
|
-
|
|
130
|
-
file
|
|
131
|
-
}, 'local-storage: [search] search file path: @{file}');
|
|
111
|
+
debug('local-storage: [search] search file path: %o', file);
|
|
132
112
|
|
|
133
113
|
if (storageKeys.includes(file)) {
|
|
134
114
|
return cb();
|
|
@@ -138,9 +118,7 @@ class LocalDatabase {
|
|
|
138
118
|
// scoped
|
|
139
119
|
const fileLocation = _path.default.resolve(base, storage, file);
|
|
140
120
|
|
|
141
|
-
|
|
142
|
-
fileLocation
|
|
143
|
-
}, 'local-storage: [search] search scoped file location: @{fileLocation}');
|
|
121
|
+
debug('search scoped file location: %o', fileLocation);
|
|
144
122
|
|
|
145
123
|
_fs.default.readdir(fileLocation, function (err, files) {
|
|
146
124
|
if (err) {
|
|
@@ -173,9 +151,7 @@ class LocalDatabase {
|
|
|
173
151
|
|
|
174
152
|
const packagePath = _path.default.resolve(base, base2, storage, file);
|
|
175
153
|
|
|
176
|
-
|
|
177
|
-
packagePath
|
|
178
|
-
}, 'local-storage: [search] search file location: @{packagePath}');
|
|
154
|
+
debug('search file location: %o', packagePath);
|
|
179
155
|
|
|
180
156
|
_fs.default.stat(packagePath, (err, stats) => {
|
|
181
157
|
if (_lodash.default.isNil(err) === false) {
|
|
@@ -185,7 +161,7 @@ class LocalDatabase {
|
|
|
185
161
|
onPackage({
|
|
186
162
|
name: file,
|
|
187
163
|
path: packagePath,
|
|
188
|
-
time: self.
|
|
164
|
+
time: self.getTime(stats.mtime.getTime(), stats.mtime)
|
|
189
165
|
}, cb);
|
|
190
166
|
});
|
|
191
167
|
} else {
|
|
@@ -193,31 +169,25 @@ class LocalDatabase {
|
|
|
193
169
|
}
|
|
194
170
|
}, cb);
|
|
195
171
|
});
|
|
196
|
-
},
|
|
172
|
+
}, // @ts-ignore
|
|
173
|
+
onEnd);
|
|
197
174
|
}
|
|
198
|
-
/**
|
|
199
|
-
* Remove an element from the database.
|
|
200
|
-
* @param {*} name
|
|
201
|
-
* @return {Error|*}
|
|
202
|
-
*/
|
|
203
|
-
|
|
204
175
|
|
|
205
176
|
remove(name, cb) {
|
|
206
177
|
this.get((err, data) => {
|
|
207
178
|
if (err) {
|
|
208
|
-
cb((0,
|
|
179
|
+
cb((0, _commonsApi.getInternalError)('error remove private package'));
|
|
209
180
|
this.logger.error({
|
|
210
181
|
err
|
|
211
182
|
}, '[local-storage/remove]: remove the private package has failed @{err}');
|
|
183
|
+
debug('error on remove package %o', name);
|
|
212
184
|
}
|
|
213
185
|
|
|
214
186
|
const pkgName = data.indexOf(name);
|
|
215
187
|
|
|
216
188
|
if (pkgName !== -1) {
|
|
217
189
|
this.data.list.splice(pkgName, 1);
|
|
218
|
-
|
|
219
|
-
name
|
|
220
|
-
}, 'local-storage: [remove] package @{name} has been removed');
|
|
190
|
+
debug('remove package %o has been removed', name);
|
|
221
191
|
}
|
|
222
192
|
|
|
223
193
|
cb(this._sync());
|
|
@@ -233,9 +203,7 @@ class LocalDatabase {
|
|
|
233
203
|
const list = this.data.list;
|
|
234
204
|
const totalItems = this.data.list.length;
|
|
235
205
|
cb(null, list);
|
|
236
|
-
|
|
237
|
-
totalItems
|
|
238
|
-
}, 'local-storage: [get] full list of packages (@{totalItems}) has been fetched');
|
|
206
|
+
debug('get full list of packages (%o) has been fetched', totalItems);
|
|
239
207
|
}
|
|
240
208
|
|
|
241
209
|
getPackageStorage(packageName) {
|
|
@@ -243,22 +211,16 @@ class LocalDatabase {
|
|
|
243
211
|
|
|
244
212
|
const packagePath = this._getLocalStoragePath(packageAccess ? packageAccess.storage : undefined);
|
|
245
213
|
|
|
246
|
-
|
|
247
|
-
packagePath
|
|
248
|
-
}, '[local-storage/getPackageStorage]: storage selected: @{packagePath}');
|
|
214
|
+
debug('storage path selected: ', packagePath);
|
|
249
215
|
|
|
250
216
|
if (_lodash.default.isString(packagePath) === false) {
|
|
251
|
-
|
|
252
|
-
name: packageName
|
|
253
|
-
}, 'this package has no storage defined: @{name}');
|
|
217
|
+
debug('the package %o has no storage defined ', packageName);
|
|
254
218
|
return;
|
|
255
219
|
}
|
|
256
220
|
|
|
257
221
|
const packageStoragePath = _path.default.join(_path.default.resolve(_path.default.dirname(this.config.self_path || ''), packagePath), packageName);
|
|
258
222
|
|
|
259
|
-
|
|
260
|
-
packageStoragePath
|
|
261
|
-
}, '[local-storage/getPackageStorage]: storage path: @{packageStoragePath}');
|
|
223
|
+
debug('storage absolute path: ', packageStoragePath);
|
|
262
224
|
return new _localFs.default(packageStoragePath, this.logger);
|
|
263
225
|
}
|
|
264
226
|
|
|
@@ -266,56 +228,7 @@ class LocalDatabase {
|
|
|
266
228
|
this._sync();
|
|
267
229
|
}
|
|
268
230
|
|
|
269
|
-
|
|
270
|
-
const key = this._getTokenKey(token);
|
|
271
|
-
|
|
272
|
-
const db = this.getTokenDb();
|
|
273
|
-
return new Promise((resolve, reject) => {
|
|
274
|
-
db.put(key, token, err => {
|
|
275
|
-
if (err) {
|
|
276
|
-
reject(err);
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
resolve();
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
deleteToken(user, tokenKey) {
|
|
286
|
-
const key = this._compoundTokenKey(user, tokenKey);
|
|
287
|
-
|
|
288
|
-
const db = this.getTokenDb();
|
|
289
|
-
return new Promise((resolve, reject) => {
|
|
290
|
-
db.del(key, err => {
|
|
291
|
-
if (err) {
|
|
292
|
-
reject(err);
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
resolve();
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
readTokens(filter) {
|
|
302
|
-
return new Promise((resolve, reject) => {
|
|
303
|
-
const tokens = [];
|
|
304
|
-
const key = filter.user + ':';
|
|
305
|
-
const db = this.getTokenDb();
|
|
306
|
-
const stream = db.createReadStream({
|
|
307
|
-
gte: key,
|
|
308
|
-
lte: String.fromCharCode(key.charCodeAt(0) + 1)
|
|
309
|
-
});
|
|
310
|
-
stream.on('data', data => {
|
|
311
|
-
tokens.push(data.value);
|
|
312
|
-
});
|
|
313
|
-
stream.once('end', () => resolve(tokens));
|
|
314
|
-
stream.once('error', err => reject(err));
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
_getTime(time, mtime) {
|
|
231
|
+
getTime(time, mtime) {
|
|
319
232
|
return time ? time : mtime;
|
|
320
233
|
}
|
|
321
234
|
|
|
@@ -350,11 +263,11 @@ class LocalDatabase {
|
|
|
350
263
|
|
|
351
264
|
|
|
352
265
|
_sync() {
|
|
353
|
-
|
|
266
|
+
debug('sync database started');
|
|
354
267
|
|
|
355
268
|
if (this.locked) {
|
|
356
|
-
this.logger.error('Database is locked, please check error message printed during startup to prevent data loss.');
|
|
357
|
-
return new Error('Verdaccio database is locked, please contact your administrator to checkout logs during verdaccio startup.');
|
|
269
|
+
this.logger.error('Database is locked, please check error message printed during startup to ' + 'prevent data loss.');
|
|
270
|
+
return new Error('Verdaccio database is locked, please contact your administrator to checkout ' + 'logs during verdaccio startup.');
|
|
358
271
|
} // Uses sync to prevent ugly race condition
|
|
359
272
|
|
|
360
273
|
|
|
@@ -364,26 +277,19 @@ class LocalDatabase {
|
|
|
364
277
|
|
|
365
278
|
_mkdirp.default.sync(folderName);
|
|
366
279
|
|
|
367
|
-
|
|
368
|
-
folderName
|
|
369
|
-
}, '[local-storage/_sync]: folder @{folderName} created succeed');
|
|
280
|
+
debug('sync folder %o created succeed', folderName);
|
|
370
281
|
} catch (err) {
|
|
371
|
-
|
|
372
|
-
this.logger.debug({
|
|
373
|
-
err
|
|
374
|
-
}, '[local-storage/_sync/mkdirp.sync]: sync failed @{err}');
|
|
282
|
+
debug('sync create folder has failed with error: %o', err);
|
|
375
283
|
return null;
|
|
376
284
|
}
|
|
377
285
|
|
|
378
286
|
try {
|
|
379
287
|
_fs.default.writeFileSync(this.path, JSON.stringify(this.data));
|
|
380
288
|
|
|
381
|
-
|
|
289
|
+
debug('sync write succeed');
|
|
382
290
|
return null;
|
|
383
291
|
} catch (err) {
|
|
384
|
-
|
|
385
|
-
err
|
|
386
|
-
}, '[local-storage/_sync/writeFileSync]: sync failed @{err}');
|
|
292
|
+
debug('sync failed %o', err);
|
|
387
293
|
return err;
|
|
388
294
|
}
|
|
389
295
|
}
|
|
@@ -420,8 +326,13 @@ class LocalDatabase {
|
|
|
420
326
|
const sinopiadbPath = this._dbGenPath(DEPRECATED_DB_NAME, config);
|
|
421
327
|
|
|
422
328
|
try {
|
|
423
|
-
_fs.default.accessSync(sinopiadbPath, _fs.default.constants.F_OK);
|
|
329
|
+
_fs.default.accessSync(sinopiadbPath, _fs.default.constants.F_OK); // @ts-ignore
|
|
330
|
+
|
|
424
331
|
|
|
332
|
+
process.emitWarning('Database name deprecated!', {
|
|
333
|
+
code: 'VERCODE01',
|
|
334
|
+
detail: `Please rename database name from ${DEPRECATED_DB_NAME} to ${DB_NAME}`
|
|
335
|
+
});
|
|
425
336
|
return sinopiadbPath;
|
|
426
337
|
} catch (err) {
|
|
427
338
|
if (err.code === _localFs.noSuchFile) {
|
|
@@ -431,10 +342,6 @@ class LocalDatabase {
|
|
|
431
342
|
throw err;
|
|
432
343
|
}
|
|
433
344
|
}
|
|
434
|
-
|
|
435
|
-
_dbGenPath(dbName, config) {
|
|
436
|
-
return _path.default.join(_path.default.resolve(_path.default.dirname(config.self_path || ''), config.storage, dbName));
|
|
437
|
-
}
|
|
438
345
|
/**
|
|
439
346
|
* Fetch local packages.
|
|
440
347
|
* @private
|
|
@@ -450,8 +357,7 @@ class LocalDatabase {
|
|
|
450
357
|
};
|
|
451
358
|
|
|
452
359
|
try {
|
|
453
|
-
|
|
454
|
-
return db;
|
|
360
|
+
return (0, _pkgUtils.loadPrivatePackages)(this.path, this.logger);
|
|
455
361
|
} catch (err) {
|
|
456
362
|
// readFileSync is platform specific, macOS, Linux and Windows thrown an error
|
|
457
363
|
// Only recreate if file not found to prevent data loss
|
|
@@ -464,30 +370,8 @@ class LocalDatabase {
|
|
|
464
370
|
}
|
|
465
371
|
}
|
|
466
372
|
|
|
467
|
-
getTokenDb() {
|
|
468
|
-
if (!this.tokenDb) {
|
|
469
|
-
this.tokenDb = (0, _level.default)(this._dbGenPath(TOKEN_DB_NAME, this.config), {
|
|
470
|
-
valueEncoding: 'json'
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
return this.tokenDb;
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
_getTokenKey(token) {
|
|
478
|
-
const {
|
|
479
|
-
user,
|
|
480
|
-
key
|
|
481
|
-
} = token;
|
|
482
|
-
return this._compoundTokenKey(user, key);
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
_compoundTokenKey(user, key) {
|
|
486
|
-
return `${user}:${key}`;
|
|
487
|
-
}
|
|
488
|
-
|
|
489
373
|
}
|
|
490
374
|
|
|
491
375
|
var _default = LocalDatabase;
|
|
492
376
|
exports.default = _default;
|
|
493
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2NhbC1kYXRhYmFzZS50cyJdLCJuYW1lcyI6WyJERVBSRUNBVEVEX0RCX05BTUUiLCJEQl9OQU1FIiwiVE9LRU5fREJfTkFNRSIsIkxvY2FsRGF0YWJhc2UiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsInBhdGgiLCJfYnVpbGRTdG9yYWdlUGF0aCIsImxvY2tlZCIsImRhdGEiLCJfZmV0Y2hMb2NhbFBhY2thZ2VzIiwidHJhY2UiLCJfc3luYyIsImdldFNlY3JldCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VjcmV0Iiwic2V0U2VjcmV0IiwiYWRkIiwibmFtZSIsImNiIiwibGlzdCIsImluZGV4T2YiLCJwdXNoIiwiZGVidWciLCJzZWFyY2giLCJvblBhY2thZ2UiLCJvbkVuZCIsInZhbGlkYXRlTmFtZSIsInN0b3JhZ2VzIiwiX2dldEN1c3RvbVBhY2thZ2VMb2NhbFN0b3JhZ2VzIiwiSlNPTiIsInN0cmluZ2lmeSIsImJhc2UiLCJQYXRoIiwiZGlybmFtZSIsInNlbGZfcGF0aCIsInNlbGYiLCJzdG9yYWdlS2V5cyIsIk9iamVjdCIsImtleXMiLCJhc3luYyIsImVhY2hTZXJpZXMiLCJzdG9yYWdlIiwicG9zaXRpb24iLCJiYXNlMiIsImpvaW4iLCJzdG9yYWdlUGF0aCIsImZzIiwicmVhZGRpciIsImVyciIsImZpbGVzIiwiZmlsZSIsImluY2x1ZGVzIiwibWF0Y2giLCJmaWxlTG9jYXRpb24iLCJmaWxlMiIsInBhY2thZ2VQYXRoIiwic3RhdCIsInN0YXRzIiwiXyIsImlzTmlsIiwiaXRlbSIsInRpbWUiLCJtdGltZSIsImdldFRpbWUiLCJfZ2V0VGltZSIsInJlbW92ZSIsImdldCIsImVycm9yIiwicGtnTmFtZSIsInNwbGljZSIsInRvdGFsSXRlbXMiLCJsZW5ndGgiLCJnZXRQYWNrYWdlU3RvcmFnZSIsInBhY2thZ2VOYW1lIiwicGFja2FnZUFjY2VzcyIsImdldE1hdGNoZWRQYWNrYWdlc1NwZWMiLCJfZ2V0TG9jYWxTdG9yYWdlUGF0aCIsInVuZGVmaW5lZCIsImlzU3RyaW5nIiwicGFja2FnZVN0b3JhZ2VQYXRoIiwiTG9jYWxEcml2ZXIiLCJjbGVhbiIsInNhdmVUb2tlbiIsInRva2VuIiwia2V5IiwiX2dldFRva2VuS2V5IiwiZGIiLCJnZXRUb2tlbkRiIiwicmVqZWN0IiwicHV0IiwiZGVsZXRlVG9rZW4iLCJ1c2VyIiwidG9rZW5LZXkiLCJfY29tcG91bmRUb2tlbktleSIsImRlbCIsInJlYWRUb2tlbnMiLCJmaWx0ZXIiLCJ0b2tlbnMiLCJzdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwiZ3RlIiwibHRlIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsIm9uIiwidmFsdWUiLCJvbmNlIiwicGFja2FnZXMiLCJsaXN0UGFja2FnZXNDb25mIiwibWFwIiwicGtnIiwiRXJyb3IiLCJmb2xkZXJOYW1lIiwibWtkaXJwIiwic3luYyIsIndyaXRlRmlsZVN5bmMiLCJnbG9iYWxDb25maWdTdG9yYWdlIiwic2lub3BpYWRiUGF0aCIsIl9kYkdlblBhdGgiLCJhY2Nlc3NTeW5jIiwiY29uc3RhbnRzIiwiRl9PSyIsImNvZGUiLCJub1N1Y2hGaWxlIiwiZGJOYW1lIiwiZW1wdHlEYXRhYmFzZSIsIm1lc3NhZ2UiLCJ0b2tlbkRiIiwidmFsdWVFbmNvZGluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQVlBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7Ozs7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsa0JBQTNCO0FBQ0EsTUFBTUMsT0FBTyxHQUFHLG9CQUFoQjtBQUNBLE1BQU1DLGFBQWEsR0FBRyxXQUF0Qjs7QUFZQTs7O0FBR0EsTUFBTUMsYUFBTixDQUFrRDtBQVFoRDs7OztBQUlPQyxFQUFBQSxXQUFQLENBQW1CQyxNQUFuQixFQUFtQ0MsTUFBbkMsRUFBbUQ7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFDakQsU0FB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QUtULFVBQUwsQ0FBZ0J4SCxhQUFoQixFQUErQixLQUFLRyxNQUFwQyxDQUFOLEVBQW1EO0FBQ2hFK0gsUUFBQUEsYUFBYSxFQUFFO0FBRGlELE9BQW5ELENBQWY7QUFHRDs7QUFFRCxXQUFPLEtBQUtELE9BQVo7QUFDRDs7QUFFTzNDLEVBQUFBLFlBQVIsQ0FBcUJGLEtBQXJCLEVBQTJDO0FBQ3pDLFVBQU07QUFBRVEsTUFBQUEsSUFBRjtBQUFRUCxNQUFBQTtBQUFSLFFBQWdCRCxLQUF0QjtBQUNBLFdBQU8sS0FBS1UsaUJBQUwsQ0FBdUJGLElBQXZCLEVBQTZCUCxHQUE3QixDQUFQO0FBQ0Q7O0FBRU9TLEVBQUFBLGlCQUFSLENBQTBCRixJQUExQixFQUF3Q1AsR0FBeEMsRUFBNkQ7QUFDM0QsV0FBUSxHQUFFTyxJQUFLLElBQUdQLEdBQUksRUFBdEI7QUFDRDs7QUF6WitDOztlQTRabkNwRixhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBQYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGFzeW5jIGZyb20gJ2FzeW5jJztcbmltcG9ydCBta2RpcnAgZnJvbSAnbWtkaXJwJztcbmltcG9ydCB7XG4gIENhbGxiYWNrLFxuICBDb25maWcsXG4gIElQYWNrYWdlU3RvcmFnZSxcbiAgSVBsdWdpblN0b3JhZ2UsXG4gIExvY2FsU3RvcmFnZSxcbiAgTG9nZ2VyLFxuICBTdG9yYWdlTGlzdCxcbiAgVG9rZW4sXG4gIFRva2VuRmlsdGVyLFxufSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCBsZXZlbCBmcm9tICdsZXZlbCc7XG5pbXBvcnQgeyBnZXRJbnRlcm5hbEVycm9yIH0gZnJvbSAnQHZlcmRhY2Npby9jb21tb25zLWFwaS9saWInO1xuXG5pbXBvcnQgTG9jYWxEcml2ZXIsIHsgbm9TdWNoRmlsZSB9IGZyb20gJy4vbG9jYWwtZnMnO1xuaW1wb3J0IHsgbG9hZFByaXZhdGVQYWNrYWdlcyB9IGZyb20gJy4vcGtnLXV0aWxzJztcblxuY29uc3QgREVQUkVDQVRFRF9EQl9OQU1FID0gJy5zaW5vcGlhLWRiLmpzb24nO1xuY29uc3QgREJfTkFNRSA9ICcudmVyZGFjY2lvLWRiLmpzb24nO1xuY29uc3QgVE9LRU5fREJfTkFNRSA9ICcudG9rZW4tZGInO1xuXG5pbnRlcmZhY2UgTGV2ZWwge1xuICBwdXQoa2V5OiBzdHJpbmcsIHRva2VuLCBmbj86IEZ1bmN0aW9uKTogdm9pZDtcblxuICBnZXQoa2V5OiBzdHJpbmcsIGZuPzogRnVuY3Rpb24pOiB2b2lkO1xuXG4gIGRlbChrZXk6IHN0cmluZywgZm4/OiBGdW5jdGlvbik6IHZvaWQ7XG5cbiAgY3JlYXRlUmVhZFN0cmVhbShvcHRpb25zPzogb2JqZWN0KTogc3RyZWFtLlJlYWRhYmxlO1xufVxuXG4vKipcbiAqIEhhbmRsZSBsb2NhbCBkYXRhYmFzZS5cbiAqL1xuY2xhc3MgTG9jYWxEYXRhYmFzZSBpbXBsZW1lbnRzIElQbHVnaW5TdG9yYWdlPHt9PiB7XG4gIHB1YmxpYyBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIGRhdGE6IExvY2FsU3RvcmFnZTtcbiAgcHVibGljIGNvbmZpZzogQ29uZmlnO1xuICBwdWJsaWMgbG9ja2VkOiBib29sZWFuO1xuICBwdWJsaWMgdG9rZW5EYjtcblxuICAvKipcbiAgICogTG9hZCBhbiBwYXJzZSB0aGUgbG9jYWwganNvbiBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHsqfSBwYXRoIHRoZSBkYXRhYmFzZSBwYXRoXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcsIGxvZ2dlcjogTG9nZ2VyKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5wYXRoID0gdGhpcy5fYnVpbGRTdG9yYWdlUGF0aChjb25maWcpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMubG9ja2VkID0gZmFsc2U7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5fZmV0Y2hMb2NhbFBhY2thZ2VzKCk7XG5cbiAgICB0aGlzLmxvZ2dlci50cmFjZSh7IGNvbmZpZzogdGhpcy5jb25maWcgfSwgJ1tsb2NhbC1zdG9yYWdlXTogY29uZmlndXJhdGlvbjogQHtjb25maWd9Jyk7XG5cbiAgICB0aGlzLl9zeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VjcmV0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmRhdGEuc2VjcmV0KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWNyZXQoc2VjcmV0OiBzdHJpbmcpOiBQcm9taXNlPEVycm9yIHwgbnVsbD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5kYXRhLnNlY3JldCA9IHNlY3JldDtcblxuICAgICAgcmVzb2x2ZSh0aGlzLl9zeW5jKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBlbGVtZW50LlxuICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICogQHJldHVybiB7RXJyb3J8Kn1cbiAgICovXG4gIHB1YmxpYyBhZGQobmFtZTogc3RyaW5nLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmxpc3QuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZGF0YS5saXN0LnB1c2gobmFtZSk7XG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKHsgbmFtZSB9LCAnW2xvY2FsLXN0b3JhZ2VdOiB0aGUgcHJpdmF0ZSBwYWNrYWdlIEB7bmFtZX0gaGFzIGJlZW4gYWRkZWQnKTtcbiAgICAgIGNiKHRoaXMuX3N5bmMoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2gob25QYWNrYWdlOiBDYWxsYmFjaywgb25FbmQ6IENhbGxiYWNrLCB2YWxpZGF0ZU5hbWU6IChuYW1lOiBzdHJpbmcpID0+IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMuX2dldEN1c3RvbVBhY2thZ2VMb2NhbFN0b3JhZ2VzKCk7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoYGxvY2FsLXN0b3JhZ2U6IFtzZWFyY2hdOiAke0pTT04uc3RyaW5naWZ5KHN0b3JhZ2VzKX1gKTtcbiAgICBjb25zdCBiYXNlID0gUGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnLnNlbGZfcGF0aCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgc3RvcmFnZUtleXMgPSBPYmplY3Qua2V5cyhzdG9yYWdlcyk7XG4gICAgdGhpcy5sb2dnZXIudHJhY2UoYGxvY2FsLXN0b3JhZ2U6IFtzZWFyY2hdIGJhc2U6ICR7YmFzZX0ga2V5cyAke3N0b3JhZ2VLZXlzfWApO1xuXG4gICAgYXN5bmMuZWFjaFNlcmllcyhcbiAgICAgIHN0b3JhZ2VLZXlzLFxuICAgICAgZnVuY3Rpb24gKHN0b3JhZ2UsIGNiKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gc3RvcmFnZUtleXMuaW5kZXhPZihzdG9yYWdlKTtcbiAgICAgICAgY29uc3QgYmFzZTIgPSBQYXRoLmpvaW4ocG9zaXRpb24gIT09IDAgPyBzdG9yYWdlS2V5c1swXSA6ICcnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZVBhdGg6IHN0cmluZyA9IFBhdGgucmVzb2x2ZShiYXNlLCBiYXNlMiwgc3RvcmFnZSk7XG4gICAgICAgIHNlbGYubG9nZ2VyLnRyYWNlKHsgc3RvcmFnZVBhdGgsIHN0b3JhZ2UgfSwgJ2xvY2FsLXN0b3JhZ2U6IFtzZWFyY2hdIHNlYXJjaCBwYXRoOiBAe3N0b3JhZ2VQYXRofSA6IEB7c3RvcmFnZX0nKTtcbiAgICAgICAgZnMucmVhZGRpcihzdG9yYWdlUGF0aCwgKGVyciwgZmlsZXMpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhc3luYy5lYWNoU2VyaWVzKFxuICAgICAgICAgICAgZmlsZXMsXG4gICAgICAgICAgICBmdW5jdGlvbiAoZmlsZSwgY2IpIHtcbiAgICAgICAgICAgICAgc2VsZi5sb2dnZXIudHJhY2UoeyBmaWxlIH0sICdsb2NhbC1zdG9yYWdlOiBbc2VhcmNoXSBzZWFyY2ggZmlsZSBwYXRoOiBAe2ZpbGV9Jyk7XG4gICAgICAgICAgICAgIGlmIChzdG9yYWdlS2V5cy5pbmNsdWRlcyhmaWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGZpbGUubWF0Y2goL15ALykpIHtcbiAgICAgICAgICAgICAgICAvLyBzY29wZWRcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlTG9jYXRpb24gPSBQYXRoLnJlc29sdmUoYmFzZSwgc3RvcmFnZSwgZmlsZSk7XG4gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIudHJhY2UoXG4gICAgICAgICAgICAgICAgICB7IGZpbGVMb2NhdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgJ2xvY2FsLXN0b3JhZ2U6IFtzZWFyY2hdIHNlYXJjaCBzY29wZWQgZmlsZSBsb2NhdGlvbjogQHtmaWxlTG9jYXRpb259J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZnMucmVhZGRpcihmaWxlTG9jYXRpb24sIGZ1bmN0aW9uIChlcnIsIGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBhc3luYy5lYWNoU2VyaWVzKFxuICAgICAgICAgICAgICAgICAgICBmaWxlcyxcbiAgICAgICAgICAgICAgICAgICAgKGZpbGUyLCBjYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZU5hbWUoZmlsZTIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWNrYWdlUGF0aCA9IFBhdGgucmVzb2x2ZShiYXNlLCBzdG9yYWdlLCBmaWxlLCBmaWxlMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLnN0YXQocGFja2FnZVBhdGgsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtmaWxlfS8ke2ZpbGUyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogcGFja2FnZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogc3RhdHMubXRpbWUuZ2V0VGltZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhY2thZ2UoaXRlbSwgY2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0ZU5hbWUoZmlsZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlMiA9IFBhdGguam9pbihwb3NpdGlvbiAhPT0gMCA/IHN0b3JhZ2VLZXlzWzBdIDogJycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gUGF0aC5yZXNvbHZlKGJhc2UsIGJhc2UyLCBzdG9yYWdlLCBmaWxlKTtcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci50cmFjZSh7IHBhY2thZ2VQYXRoIH0sICdsb2NhbC1zdG9yYWdlOiBbc2VhcmNoXSBzZWFyY2ggZmlsZSBsb2NhdGlvbjogQHtwYWNrYWdlUGF0aH0nKTtcbiAgICAgICAgICAgICAgICBmcy5zdGF0KHBhY2thZ2VQYXRoLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvblBhY2thZ2UoXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLFxuICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhY2thZ2VQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IHNlbGYuX2dldFRpbWUoc3RhdHMubXRpbWUuZ2V0VGltZSgpLCBzdGF0cy5tdGltZSksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYlxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uRW5kXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZWxlbWVudCBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHsqfSBuYW1lXG4gICAqIEByZXR1cm4ge0Vycm9yfCp9XG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKG5hbWU6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5nZXQoKGVyciwgZGF0YSkgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjYihnZXRJbnRlcm5hbEVycm9yKCdlcnJvciByZW1vdmUgcHJpdmF0ZSBwYWNrYWdlJykpO1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcih7IGVyciB9LCAnW2xvY2FsLXN0b3JhZ2UvcmVtb3ZlXTogcmVtb3ZlIHRoZSBwcml2YXRlIHBhY2thZ2UgaGFzIGZhaWxlZCBAe2Vycn0nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGtnTmFtZSA9IGRhdGEuaW5kZXhPZihuYW1lKTtcbiAgICAgIGlmIChwa2dOYW1lICE9PSAtMSkge1xuICAgICAgICB0aGlzLmRhdGEubGlzdC5zcGxpY2UocGtnTmFtZSwgMSk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoeyBuYW1lIH0sICdsb2NhbC1zdG9yYWdlOiBbcmVtb3ZlXSBwYWNrYWdlIEB7bmFtZX0gaGFzIGJlZW4gcmVtb3ZlZCcpO1xuICAgICAgfVxuXG4gICAgICBjYih0aGlzLl9zeW5jKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgZGF0YWJhc2UgZWxlbWVudHMuXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cbiAgcHVibGljIGdldChjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5kYXRhLmxpc3Q7XG4gICAgY29uc3QgdG90YWxJdGVtcyA9IHRoaXMuZGF0YS5saXN0Lmxlbmd0aDtcblxuICAgIGNiKG51bGwsIGxpc3QpO1xuXG4gICAgdGhpcy5sb2dnZXIudHJhY2UoeyB0b3RhbEl0ZW1zIH0sICdsb2NhbC1zdG9yYWdlOiBbZ2V0XSBmdWxsIGxpc3Qgb2YgcGFja2FnZXMgKEB7dG90YWxJdGVtc30pIGhhcyBiZWVuIGZldGNoZWQnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWNrYWdlU3RvcmFnZShwYWNrYWdlTmFtZTogc3RyaW5nKTogSVBhY2thZ2VTdG9yYWdlIHtcbiAgICBjb25zdCBwYWNrYWdlQWNjZXNzID0gdGhpcy5jb25maWcuZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyhwYWNrYWdlTmFtZSk7XG5cbiAgICBjb25zdCBwYWNrYWdlUGF0aDogc3RyaW5nID0gdGhpcy5fZ2V0TG9jYWxTdG9yYWdlUGF0aChwYWNrYWdlQWNjZXNzID8gcGFja2FnZUFjY2Vzcy5zdG9yYWdlIDogdW5kZWZpbmVkKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZSh7IHBhY2thZ2VQYXRoIH0sICdbbG9jYWwtc3RvcmFnZS9nZXRQYWNrYWdlU3RvcmFnZV06IHN0b3JhZ2Ugc2VsZWN0ZWQ6IEB7cGFja2FnZVBhdGh9Jyk7XG5cbiAgICBpZiAoXy5pc1N0cmluZyhwYWNrYWdlUGF0aCkgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1Zyh7IG5hbWU6IHBhY2thZ2VOYW1lIH0sICd0aGlzIHBhY2thZ2UgaGFzIG5vIHN0b3JhZ2UgZGVmaW5lZDogQHtuYW1lfScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VTdG9yYWdlUGF0aDogc3RyaW5nID0gUGF0aC5qb2luKFxuICAgICAgUGF0aC5yZXNvbHZlKFBhdGguZGlybmFtZSh0aGlzLmNvbmZpZy5zZWxmX3BhdGggfHwgJycpLCBwYWNrYWdlUGF0aCksXG4gICAgICBwYWNrYWdlTmFtZVxuICAgICk7XG5cbiAgICB0aGlzLmxvZ2dlci50cmFjZSh7IHBhY2thZ2VTdG9yYWdlUGF0aCB9LCAnW2xvY2FsLXN0b3JhZ2UvZ2V0UGFja2FnZVN0b3JhZ2VdOiBzdG9yYWdlIHBhdGg6IEB7cGFja2FnZVN0b3JhZ2VQYXRofScpO1xuXG4gICAgcmV0dXJuIG5ldyBMb2NhbERyaXZlcihwYWNrYWdlU3RvcmFnZVBhdGgsIHRoaXMubG9nZ2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVRva2VuKHRva2VuOiBUb2tlbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldFRva2VuS2V5KHRva2VuKTtcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0VG9rZW5EYigpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGRiLnB1dChrZXksIHRva2VuLCBlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVRva2VuKHVzZXI6IHN0cmluZywgdG9rZW5LZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuX2NvbXBvdW5kVG9rZW5LZXkodXNlciwgdG9rZW5LZXkpO1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXRUb2tlbkRiKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGRiLmRlbChrZXksIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZFRva2VucyhmaWx0ZXI6IFRva2VuRmlsdGVyKTogUHJvbWlzZTxUb2tlbltdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHRva2VuczogVG9rZW5bXSA9IFtdO1xuICAgICAgY29uc3Qga2V5ID0gZmlsdGVyLnVzZXIgKyAnOic7XG4gICAgICBjb25zdCBkYiA9IHRoaXMuZ2V0VG9rZW5EYigpO1xuICAgICAgY29uc3Qgc3RyZWFtID0gZGIuY3JlYXRlUmVhZFN0cmVhbSh7XG4gICAgICAgIGd0ZToga2V5LFxuICAgICAgICBsdGU6IFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5LmNoYXJDb2RlQXQoMCkgKyAxKSxcbiAgICAgIH0pO1xuXG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCBkYXRhID0+IHtcbiAgICAgICAgdG9rZW5zLnB1c2goZGF0YS52YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgc3RyZWFtLm9uY2UoJ2VuZCcsICgpID0+IHJlc29sdmUodG9rZW5zKSk7XG5cbiAgICAgIHN0cmVhbS5vbmNlKCdlcnJvcicsIGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRUaW1lKHRpbWU6IG51bWJlciwgbXRpbWU6IERhdGUpOiBudW1iZXIgfCBEYXRlIHtcbiAgICByZXR1cm4gdGltZSA/IHRpbWUgOiBtdGltZTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEN1c3RvbVBhY2thZ2VMb2NhbFN0b3JhZ2VzKCk6IG9iamVjdCB7XG4gICAgY29uc3Qgc3RvcmFnZXMgPSB7fTtcblxuICAgIC8vIGFkZCBjdXN0b20gc3RvcmFnZSBpZiBleGlzdFxuICAgIGlmICh0aGlzLmNvbmZpZy5zdG9yYWdlKSB7XG4gICAgICBzdG9yYWdlc1t0aGlzLmNvbmZpZy5zdG9yYWdlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwYWNrYWdlcyB9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAocGFja2FnZXMpIHtcbiAgICAgIGNvbnN0IGxpc3RQYWNrYWdlc0NvbmYgPSBPYmplY3Qua2V5cyhwYWNrYWdlcyB8fCB7fSk7XG5cbiAgICAgIGxpc3RQYWNrYWdlc0NvbmYubWFwKHBrZyA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBwYWNrYWdlc1twa2ddLnN0b3JhZ2U7XG4gICAgICAgIGlmIChzdG9yYWdlKSB7XG4gICAgICAgICAgc3RvcmFnZXNbc3RvcmFnZV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3JhZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNyb25pemUge2NyZWF0ZX0gZGF0YWJhc2Ugd2hldGhlciBkb2VzIG5vdCBleGlzdC5cbiAgICogQHJldHVybiB7RXJyb3J8Kn1cbiAgICovXG4gIHByaXZhdGUgX3N5bmMoKTogRXJyb3IgfCBudWxsIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnW2xvY2FsLXN0b3JhZ2UvX3N5bmNdOiBpbml0IHN5bmMgZGF0YWJhc2UnKTtcblxuICAgIGlmICh0aGlzLmxvY2tlZCkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0RhdGFiYXNlIGlzIGxvY2tlZCwgcGxlYXNlIGNoZWNrIGVycm9yIG1lc3NhZ2UgcHJpbnRlZCBkdXJpbmcgc3RhcnR1cCB0byBwcmV2ZW50IGRhdGEgbG9zcy4nKTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICdWZXJkYWNjaW8gZGF0YWJhc2UgaXMgbG9ja2VkLCBwbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IgdG8gY2hlY2tvdXQgbG9ncyBkdXJpbmcgdmVyZGFjY2lvIHN0YXJ0dXAuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gVXNlcyBzeW5jIHRvIHByZXZlbnQgdWdseSByYWNlIGNvbmRpdGlvblxuICAgIHRyeSB7XG4gICAgICAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ta2RpcnAjbWtkaXJwc3luY2Rpci1vcHRzXG4gICAgICBjb25zdCBmb2xkZXJOYW1lID0gUGF0aC5kaXJuYW1lKHRoaXMucGF0aCk7XG4gICAgICBta2RpcnAuc3luYyhmb2xkZXJOYW1lKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKHsgZm9sZGVyTmFtZSB9LCAnW2xvY2FsLXN0b3JhZ2UvX3N5bmNdOiBmb2xkZXIgQHtmb2xkZXJOYW1lfSBjcmVhdGVkIHN1Y2NlZWQnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHBlcmhhcHMgYSBsb2dnZXIgaW5zdGFuY2U/XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1Zyh7IGVyciB9LCAnW2xvY2FsLXN0b3JhZ2UvX3N5bmMvbWtkaXJwLnN5bmNdOiBzeW5jIGZhaWxlZCBAe2Vycn0nKTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5wYXRoLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdbbG9jYWwtc3RvcmFnZS9fc3luYy93cml0ZUZpbGVTeW5jXTogc3luYyB3cml0ZSBzdWNjZWVkJyk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoeyBlcnIgfSwgJ1tsb2NhbC1zdG9yYWdlL19zeW5jL3dyaXRlRmlsZVN5bmNdOiBzeW5jIGZhaWxlZCBAe2Vycn0nKTtcblxuICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoZSByaWdodCBsb2NhbCBzdG9yYWdlIGxvY2F0aW9uLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9nZXRMb2NhbFN0b3JhZ2VQYXRoKHN0b3JhZ2U6IHN0cmluZyB8IHZvaWQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZ1N0b3JhZ2UgPSB0aGlzLmNvbmZpZyA/IHRoaXMuY29uZmlnLnN0b3JhZ2UgOiB1bmRlZmluZWQ7XG4gICAgaWYgKF8uaXNOaWwoZ2xvYmFsQ29uZmlnU3RvcmFnZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZ2xvYmFsIHN0b3JhZ2UgaXMgcmVxdWlyZWQgZm9yIHRoaXMgcGx1Z2luJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzTmlsKHN0b3JhZ2UpID09PSBmYWxzZSAmJiBfLmlzU3RyaW5nKHN0b3JhZ2UpKSB7XG4gICAgICAgIHJldHVybiBQYXRoLmpvaW4oZ2xvYmFsQ29uZmlnU3RvcmFnZSBhcyBzdHJpbmcsIHN0b3JhZ2UgYXMgc3RyaW5nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdsb2JhbENvbmZpZ1N0b3JhZ2UgYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgbG9jYWwgZGF0YWJhc2UgcGF0aC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd8U3RyaW5nfCp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9idWlsZFN0b3JhZ2VQYXRoKGNvbmZpZzogQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBzaW5vcGlhZGJQYXRoOiBzdHJpbmcgPSB0aGlzLl9kYkdlblBhdGgoREVQUkVDQVRFRF9EQl9OQU1FLCBjb25maWcpO1xuICAgIHRyeSB7XG4gICAgICBmcy5hY2Nlc3NTeW5jKHNpbm9waWFkYlBhdGgsIGZzLmNvbnN0YW50cy5GX09LKTtcbiAgICAgIHJldHVybiBzaW5vcGlhZGJQYXRoO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSBub1N1Y2hGaWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYkdlblBhdGgoREJfTkFNRSwgY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2RiR2VuUGF0aChkYk5hbWU6IHN0cmluZywgY29uZmlnOiBDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiBQYXRoLmpvaW4oUGF0aC5yZXNvbHZlKFBhdGguZGlybmFtZShjb25maWcuc2VsZl9wYXRoIHx8ICcnKSwgY29uZmlnLnN0b3JhZ2UgYXMgc3RyaW5nLCBkYk5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBsb2NhbCBwYWNrYWdlcy5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgcHJpdmF0ZSBfZmV0Y2hMb2NhbFBhY2thZ2VzKCk6IExvY2FsU3RvcmFnZSB7XG4gICAgY29uc3QgbGlzdDogU3RvcmFnZUxpc3QgPSBbXTtcbiAgICBjb25zdCBlbXB0eURhdGFiYXNlID0geyBsaXN0LCBzZWNyZXQ6ICcnIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGIgPSBsb2FkUHJpdmF0ZVBhY2thZ2VzKHRoaXMucGF0aCwgdGhpcy5sb2dnZXIpO1xuXG4gICAgICByZXR1cm4gZGI7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyByZWFkRmlsZVN5bmMgaXMgcGxhdGZvcm0gc3BlY2lmaWMsIG1hY09TLCBMaW51eCBhbmQgV2luZG93cyB0aHJvd24gYW4gZXJyb3JcbiAgICAgIC8vIE9ubHkgcmVjcmVhdGUgaWYgZmlsZSBub3QgZm91bmQgdG8gcHJldmVudCBkYXRhIGxvc3NcbiAgICAgIGlmIChlcnIuY29kZSAhPT0gbm9TdWNoRmlsZSkge1xuICAgICAgICB0aGlzLmxvY2tlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICdGYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGRhdGFiYXNlIGZpbGUsIHBsZWFzZSBjaGVjayB0aGUgZXJyb3IgcHJpbnRlZCBiZWxvdzpcXG4nLFxuICAgICAgICAgIGBGaWxlIFBhdGg6ICR7dGhpcy5wYXRofVxcblxcbiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVtcHR5RGF0YWJhc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb2tlbkRiKCk6IExldmVsIHtcbiAgICBpZiAoIXRoaXMudG9rZW5EYikge1xuICAgICAgdGhpcy50b2tlbkRiID0gbGV2ZWwodGhpcy5fZGJHZW5QYXRoKFRPS0VOX0RCX05BTUUsIHRoaXMuY29uZmlnKSwge1xuICAgICAgICB2YWx1ZUVuY29kaW5nOiAnanNvbicsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50b2tlbkRiO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VG9rZW5LZXkodG9rZW46IFRva2VuKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IHVzZXIsIGtleSB9ID0gdG9rZW47XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvdW5kVG9rZW5LZXkodXNlciwga2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXBvdW5kVG9rZW5LZXkodXNlcjogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3VzZXJ9OiR7a2V5fWA7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9jYWxEYXRhYmFzZTtcbiJdfQ==
|
|
377
|
+
//# sourceMappingURL=local-database.js.map
|
|
@@ -0,0 +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":";;;;;;;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;;AADiD;;AAAA;;AAAA;;AAAA;;AAAA;;AAEjD,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.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { ReadTarball } from '@verdaccio/streams';
|
|
3
3
|
import { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/types';
|
|
4
|
-
import { VerdaccioError } from '@verdaccio/commons-api
|
|
4
|
+
import { VerdaccioError } from '@verdaccio/commons-api';
|
|
5
5
|
export declare const fileExist = "EEXISTS";
|
|
6
6
|
export declare const noSuchFile = "ENOENT";
|
|
7
7
|
export declare const resourceNotAvailable = "EAGAIN";
|