@verdaccio/local-storage 10.0.7 → 11.0.0-6-next.9
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/CHANGELOG.md +522 -0
- package/README.md +4 -6
- package/build/dir-utils.d.ts +34 -0
- package/build/dir-utils.js +126 -0
- package/build/dir-utils.js.map +1 -0
- package/build/fs.d.ts +10 -0
- package/build/fs.js +34 -0
- package/build/fs.js.map +1 -0
- package/{lib → build}/index.d.ts +0 -0
- package/{lib → build}/index.js +0 -0
- package/{lib → build}/index.js.map +0 -0
- package/build/local-database.d.ts +40 -0
- package/build/local-database.js +366 -0
- package/build/local-database.js.map +1 -0
- package/{lib → build}/local-fs.d.ts +4 -5
- package/{lib → build}/local-fs.js +54 -42
- package/build/local-fs.js.map +1 -0
- package/{lib → build}/pkg-utils.d.ts +1 -1
- package/{lib → build}/pkg-utils.js +9 -7
- package/build/pkg-utils.js.map +1 -0
- package/{lib → build}/token.d.ts +0 -1
- package/{lib → build}/token.js +4 -11
- package/build/token.js.map +1 -0
- package/{lib → build}/utils.d.ts +2 -0
- package/{lib → build}/utils.js +5 -1
- package/build/utils.js.map +1 -0
- package/package.json +72 -62
- package/lib/local-database.d.ts +0 -50
- package/lib/local-database.js +0 -377
- package/lib/local-database.js.map +0 -1
- package/lib/local-fs.js.map +0 -1
- package/lib/pkg-utils.js.map +0 -1
- package/lib/token.js.map +0 -1
- package/lib/utils.js.map +0 -1
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { ReadTarball } from '@verdaccio/streams';
|
|
3
2
|
import { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/types';
|
|
4
|
-
import { VerdaccioError } from '@verdaccio/
|
|
3
|
+
import { VerdaccioError } from '@verdaccio/core';
|
|
5
4
|
export declare const fileExist = "EEXISTS";
|
|
6
5
|
export declare const noSuchFile = "ENOENT";
|
|
7
6
|
export declare const resourceNotAvailable = "EAGAIN";
|
|
8
|
-
export declare const
|
|
7
|
+
export declare const packageJSONFileName = "package.json";
|
|
9
8
|
export declare const fSError: (message: string, code?: number) => VerdaccioError;
|
|
10
9
|
export declare type ILocalFSPackageManager = ILocalPackageManager & {
|
|
11
10
|
path: string;
|
|
@@ -30,8 +29,8 @@ export default class LocalFS implements ILocalFSPackageManager {
|
|
|
30
29
|
* @param {*} onEnd
|
|
31
30
|
*/
|
|
32
31
|
updatePackage(name: string, updateHandler: Callback, onWrite: Callback, transformPackage: Function, onEnd: Callback): void;
|
|
33
|
-
deletePackage(packageName: string
|
|
34
|
-
removePackage(
|
|
32
|
+
deletePackage(packageName: string): Promise<void>;
|
|
33
|
+
removePackage(): Promise<void>;
|
|
35
34
|
createPackage(name: string, value: Package, cb: Callback): void;
|
|
36
35
|
savePackage(name: string, value: Package, cb: Callback): void;
|
|
37
36
|
readPackage(name: string, cb: Callback): void;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = exports.fSError = exports.
|
|
6
|
+
exports.default = exports.fSError = exports.packageJSONFileName = exports.resourceNotAvailable = exports.noSuchFile = exports.fileExist = void 0;
|
|
7
7
|
|
|
8
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
9
|
|
|
@@ -13,13 +13,13 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
13
13
|
|
|
14
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
15
|
|
|
16
|
-
var _mkdirp = _interopRequireDefault(require("mkdirp"));
|
|
17
|
-
|
|
18
16
|
var _streams = require("@verdaccio/streams");
|
|
19
17
|
|
|
20
18
|
var _fileLocking = require("@verdaccio/file-locking");
|
|
21
19
|
|
|
22
|
-
var
|
|
20
|
+
var _core = require("@verdaccio/core");
|
|
21
|
+
|
|
22
|
+
var _fs2 = require("./fs");
|
|
23
23
|
|
|
24
24
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
25
|
|
|
@@ -31,14 +31,15 @@ const noSuchFile = 'ENOENT';
|
|
|
31
31
|
exports.noSuchFile = noSuchFile;
|
|
32
32
|
const resourceNotAvailable = 'EAGAIN';
|
|
33
33
|
exports.resourceNotAvailable = resourceNotAvailable;
|
|
34
|
-
const
|
|
35
|
-
exports.
|
|
36
|
-
const debug = (0, _debug.default)('verdaccio:plugin:local-storage:fs');
|
|
34
|
+
const packageJSONFileName = 'package.json';
|
|
35
|
+
exports.packageJSONFileName = packageJSONFileName;
|
|
36
|
+
const debug = (0, _debug.default)('verdaccio:plugin:local-storage:local-fs');
|
|
37
37
|
|
|
38
38
|
const fSError = function (message, code = 409) {
|
|
39
|
-
const err =
|
|
39
|
+
const err = _core.errorUtils.getCode(code, message); // FIXME: we should return http-status codes here instead, future improvement
|
|
40
40
|
// @ts-ignore
|
|
41
41
|
|
|
42
|
+
|
|
42
43
|
err.code = message;
|
|
43
44
|
return err;
|
|
44
45
|
};
|
|
@@ -102,7 +103,7 @@ class LocalFS {
|
|
|
102
103
|
|
|
103
104
|
|
|
104
105
|
updatePackage(name, updateHandler, onWrite, transformPackage, onEnd) {
|
|
105
|
-
this._lockAndReadJSON(
|
|
106
|
+
this._lockAndReadJSON(packageJSONFileName, (err, json) => {
|
|
106
107
|
let locked = false;
|
|
107
108
|
const self = this; // callback that cleans up lock first
|
|
108
109
|
|
|
@@ -111,7 +112,9 @@ class LocalFS {
|
|
|
111
112
|
const _args = arguments;
|
|
112
113
|
|
|
113
114
|
if (locked) {
|
|
114
|
-
|
|
115
|
+
debug('unlock %s', packageJSONFileName);
|
|
116
|
+
|
|
117
|
+
self._unlockJSON(packageJSONFileName, () => {
|
|
115
118
|
// ignore any error from the unlock
|
|
116
119
|
if (lockError !== null) {
|
|
117
120
|
debug('lock file: %o has failed with error %o', name, lockError);
|
|
@@ -132,9 +135,9 @@ class LocalFS {
|
|
|
132
135
|
|
|
133
136
|
if (_lodash.default.isNil(err) === false) {
|
|
134
137
|
if (err.code === resourceNotAvailable) {
|
|
135
|
-
return unLockCallback(
|
|
138
|
+
return unLockCallback(_core.errorUtils.getInternalError('resource temporarily unavailable'));
|
|
136
139
|
} else if (err.code === noSuchFile) {
|
|
137
|
-
return unLockCallback(
|
|
140
|
+
return unLockCallback(_core.errorUtils.getNotFound());
|
|
138
141
|
} else {
|
|
139
142
|
return unLockCallback(err);
|
|
140
143
|
}
|
|
@@ -150,43 +153,48 @@ class LocalFS {
|
|
|
150
153
|
});
|
|
151
154
|
}
|
|
152
155
|
|
|
153
|
-
deletePackage(packageName
|
|
154
|
-
debug('delete a package %o', packageName);
|
|
155
|
-
return
|
|
156
|
+
async deletePackage(packageName) {
|
|
157
|
+
debug('delete a file/package %o', packageName);
|
|
158
|
+
return await (0, _fs2.unlinkPromise)(this._getStorage(packageName));
|
|
156
159
|
}
|
|
157
160
|
|
|
158
|
-
removePackage(
|
|
159
|
-
debug('remove a package %o', this.path);
|
|
160
|
-
|
|
161
|
-
_fs.default.rmdir(this._getStorage('.'), callback);
|
|
161
|
+
async removePackage() {
|
|
162
|
+
debug('remove a package folder %o', this.path);
|
|
163
|
+
await (0, _fs2.rmdirPromise)(this._getStorage('.'));
|
|
162
164
|
}
|
|
163
165
|
|
|
164
166
|
createPackage(name, value, cb) {
|
|
165
167
|
debug('create a package %o', name);
|
|
166
168
|
|
|
167
|
-
this._createFile(this._getStorage(
|
|
169
|
+
this._createFile(this._getStorage(packageJSONFileName), this._convertToString(value), cb);
|
|
168
170
|
}
|
|
169
171
|
|
|
170
172
|
savePackage(name, value, cb) {
|
|
171
173
|
debug('save a package %o', name);
|
|
172
174
|
|
|
173
|
-
this._writeFile(this._getStorage(
|
|
175
|
+
this._writeFile(this._getStorage(packageJSONFileName), this._convertToString(value), cb);
|
|
174
176
|
}
|
|
175
177
|
|
|
176
178
|
readPackage(name, cb) {
|
|
177
179
|
debug('read a package %o', name);
|
|
178
180
|
|
|
179
|
-
this._readStorageFile(this._getStorage(
|
|
181
|
+
this._readStorageFile(this._getStorage(packageJSONFileName)).then(res => {
|
|
180
182
|
try {
|
|
181
183
|
const data = JSON.parse(res.toString('utf8'));
|
|
182
184
|
debug('read storage file %o has succeed', name);
|
|
183
185
|
cb(null, data);
|
|
184
186
|
} catch (err) {
|
|
185
|
-
debug('parse
|
|
186
|
-
|
|
187
|
+
debug('parse error');
|
|
188
|
+
this.logger.error({
|
|
189
|
+
err,
|
|
190
|
+
name
|
|
191
|
+
}, 'error @{err.message} on parse @{name}');
|
|
192
|
+
throw err;
|
|
187
193
|
}
|
|
188
|
-
}
|
|
189
|
-
|
|
194
|
+
}).catch(err => {
|
|
195
|
+
this.logger.error({
|
|
196
|
+
err
|
|
197
|
+
}, 'error on read storage file @{err.message}');
|
|
190
198
|
return cb(err);
|
|
191
199
|
});
|
|
192
200
|
}
|
|
@@ -317,20 +325,16 @@ class LocalFS {
|
|
|
317
325
|
});
|
|
318
326
|
}
|
|
319
327
|
|
|
320
|
-
_readStorageFile(name) {
|
|
321
|
-
|
|
322
|
-
debug('reading the file: %o', name);
|
|
328
|
+
async _readStorageFile(name) {
|
|
329
|
+
debug('reading the file: %o', name);
|
|
323
330
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
});
|
|
331
|
+
try {
|
|
332
|
+
debug('reading the file: %o', name);
|
|
333
|
+
return await (0, _fs2.readFilePromise)(name);
|
|
334
|
+
} catch (err) {
|
|
335
|
+
debug('error reading the file: %o with error %o', name, err.message);
|
|
336
|
+
throw err;
|
|
337
|
+
}
|
|
334
338
|
}
|
|
335
339
|
|
|
336
340
|
_convertToString(value) {
|
|
@@ -360,10 +364,14 @@ class LocalFS {
|
|
|
360
364
|
|
|
361
365
|
createTempFile(err => {
|
|
362
366
|
if (err && err.code === noSuchFile) {
|
|
363
|
-
|
|
367
|
+
_fs.default.mkdir(_path.default.dirname(dest), {
|
|
368
|
+
recursive: true
|
|
369
|
+
}, function (err) {
|
|
370
|
+
if (err) {
|
|
371
|
+
return cb(err);
|
|
372
|
+
}
|
|
373
|
+
|
|
364
374
|
createTempFile(cb);
|
|
365
|
-
}).catch(err => {
|
|
366
|
-
return cb(err);
|
|
367
375
|
});
|
|
368
376
|
} else {
|
|
369
377
|
cb(err);
|
|
@@ -374,11 +382,15 @@ class LocalFS {
|
|
|
374
382
|
_lockAndReadJSON(name, cb) {
|
|
375
383
|
const fileName = this._getStorage(name);
|
|
376
384
|
|
|
385
|
+
debug('lock and read a file %o', fileName);
|
|
377
386
|
(0, _fileLocking.readFile)(fileName, {
|
|
378
387
|
lock: true,
|
|
379
388
|
parse: true
|
|
380
389
|
}, (err, res) => {
|
|
381
390
|
if (err) {
|
|
391
|
+
this.logger.error({
|
|
392
|
+
err
|
|
393
|
+
}, 'error on lock file @{err.message}');
|
|
382
394
|
debug('error on lock and read json for file: %o', name);
|
|
383
395
|
return cb(err);
|
|
384
396
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/local-fs.ts"],"names":["fileExist","noSuchFile","resourceNotAvailable","packageJSONFileName","debug","fSError","message","code","err","errorUtils","getCode","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","getInternalError","getNotFound","deletePackage","packageName","_getStorage","removePackage","createPackage","value","_createFile","_convertToString","savePackage","_writeFile","readPackage","_readStorageFile","then","res","data","JSON","parse","toString","error","catch","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","callback","open","stringify","fileName","storagePath","dest","createTempFile","tempFilePath","writeFile","mkdir","dirname","recursive","lock"],"mappings":"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","sourcesContent":["/* eslint-disable no-undef */\n\nimport fs from 'fs';\nimport path from 'path';\nimport buildDebug from 'debug';\n\nimport _ from 'lodash';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport { unlockFile, readFile } from '@verdaccio/file-locking';\nimport { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/types';\nimport { VerdaccioError, errorUtils } from '@verdaccio/core';\nimport { unlinkPromise, rmdirPromise, readFilePromise } from './fs';\n\nexport const fileExist = 'EEXISTS';\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const packageJSONFileName = 'package.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:local-fs');\n\nexport const fSError = function (message: string, code = 409): VerdaccioError {\n const err: VerdaccioError = errorUtils.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(packageJSONFileName, (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 debug('unlock %s', packageJSONFileName);\n self._unlockJSON(packageJSONFileName, () => {\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(errorUtils.getInternalError('resource temporarily unavailable'));\n } else if (err.code === noSuchFile) {\n return unLockCallback(errorUtils.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 async deletePackage(packageName: string): Promise<void> {\n debug('delete a file/package %o', packageName);\n\n return await unlinkPromise(this._getStorage(packageName));\n }\n\n public async removePackage(): Promise<void> {\n debug('remove a package folder %o', this.path);\n\n await rmdirPromise(this._getStorage('.'));\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(packageJSONFileName), 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(packageJSONFileName), 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(packageJSONFileName))\n .then((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: any) {\n debug('parse error');\n this.logger.error({ err, name }, 'error @{err.message} on parse @{name}');\n throw err;\n }\n })\n .catch((err) => {\n this.logger.error({ err }, 'error on read storage file @{err.message}');\n return cb(err);\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(\n this.path,\n `${name}.tmp-${String(Math.random()).replace(/^0\\./, '')}`\n );\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 async _readStorageFile(name: string): Promise<any> {\n debug('reading the file: %o', name);\n try {\n debug('reading the file: %o', name);\n return await readFilePromise(name);\n } catch (err: any) {\n debug('error reading the file: %o with error %o', name, err.message);\n throw err;\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 fs.mkdir(path.dirname(dest), { recursive: true }, function (err) {\n if (err) {\n return cb(err);\n }\n createTempFile(cb);\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 debug('lock and read a file %o', fileName);\n readFile(\n fileName,\n {\n lock: true,\n parse: true,\n },\n (err, res) => {\n if (err) {\n this.logger.error({ err }, 'error on lock file @{err.message}');\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,2 +1,2 @@
|
|
|
1
1
|
import { LocalStorage, Logger } from '@verdaccio/types';
|
|
2
|
-
export declare function loadPrivatePackages(path: string, logger: Logger): LocalStorage
|
|
2
|
+
export declare function loadPrivatePackages(path: string, logger: Logger): Promise<LocalStorage>;
|
|
@@ -5,23 +5,22 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.loadPrivatePackages = loadPrivatePackages;
|
|
7
7
|
|
|
8
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
-
|
|
10
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
9
|
|
|
10
|
+
var _fs = require("./fs");
|
|
11
|
+
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
|
|
14
|
-
function loadPrivatePackages(path, logger) {
|
|
14
|
+
async function loadPrivatePackages(path, logger) {
|
|
15
15
|
const list = [];
|
|
16
16
|
const emptyDatabase = {
|
|
17
17
|
list,
|
|
18
18
|
secret: ''
|
|
19
19
|
};
|
|
20
|
-
|
|
21
|
-
const data = _fs.default.readFileSync(path, 'utf8');
|
|
20
|
+
const data = await (0, _fs.readFilePromise)(path);
|
|
22
21
|
|
|
23
22
|
if (_lodash.default.isNil(data)) {
|
|
24
|
-
//
|
|
23
|
+
// readFilePromise is platform specific, FreeBSD might return null
|
|
25
24
|
return emptyDatabase;
|
|
26
25
|
}
|
|
27
26
|
|
|
@@ -30,7 +29,10 @@ function loadPrivatePackages(path, logger) {
|
|
|
30
29
|
try {
|
|
31
30
|
db = JSON.parse(data);
|
|
32
31
|
} catch (err) {
|
|
33
|
-
logger.error(
|
|
32
|
+
logger.error({
|
|
33
|
+
err,
|
|
34
|
+
path
|
|
35
|
+
}, `Package database file corrupted (invalid JSON) @{err.message}, please check the error printed below.File Path: @{path}`);
|
|
34
36
|
throw Error('Package database file corrupted (invalid JSON)');
|
|
35
37
|
}
|
|
36
38
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pkg-utils.ts"],"names":["loadPrivatePackages","path","logger","list","emptyDatabase","secret","data","_","isNil","db","JSON","parse","err","error","Error","isEmpty"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAEO,eAAeA,mBAAf,CAAmCC,IAAnC,EAAiDC,MAAjD,EAAwF;AAC7F,QAAMC,IAAiB,GAAG,EAA1B;AACA,QAAMC,aAAa,GAAG;AAAED,IAAAA,IAAF;AAAQE,IAAAA,MAAM,EAAE;AAAhB,GAAtB;AACA,QAAMC,IAAI,GAAG,MAAM,yBAAgBL,IAAhB,CAAnB;;AACA,MAAIM,gBAAEC,KAAF,CAAQF,IAAR,CAAJ,EAAmB;AACjB;AACA,WAAOF,aAAP;AACD;;AAED,MAAIK,EAAJ;;AACA,MAAI;AACFA,IAAAA,EAAE,GAAGC,IAAI,CAACC,KAAL,CAAWL,IAAX,CAAL;AACD,GAFD,CAEE,OAAOM,GAAP,EAAiB;AACjBV,IAAAA,MAAM,CAACW,KAAP,CACE;AACED,MAAAA,GADF;AAEEX,MAAAA;AAFF,KADF,EAKG,wHALH;AAOA,UAAMa,KAAK,CAAC,gDAAD,CAAX;AACD;;AAED,MAAIP,gBAAEQ,OAAF,CAAUN,EAAV,CAAJ,EAAmB;AACjB,WAAOL,aAAP;AACD;;AAED,SAAOK,EAAP;AACD","sourcesContent":["import _ from 'lodash';\nimport { LocalStorage, StorageList, Logger } from '@verdaccio/types';\nimport { readFilePromise } from './fs';\n\nexport async function loadPrivatePackages(path: string, logger: Logger): Promise<LocalStorage> {\n const list: StorageList = [];\n const emptyDatabase = { list, secret: '' };\n const data = await readFilePromise(path);\n if (_.isNil(data)) {\n // readFilePromise is platform specific, FreeBSD might return null\n return emptyDatabase;\n }\n\n let db;\n try {\n db = JSON.parse(data);\n } catch (err: any) {\n logger.error(\n {\n err,\n path,\n },\n `Package database file corrupted (invalid JSON) @{err.message}, please check the error printed below.File Path: @{path}`\n );\n throw Error('Package database file corrupted (invalid JSON)');\n }\n\n if (_.isEmpty(db)) {\n return emptyDatabase;\n }\n\n return db;\n}\n"],"file":"pkg-utils.js"}
|
package/{lib → build}/token.d.ts
RENAMED
|
@@ -4,7 +4,6 @@ export default class TokenActions implements ITokenActions {
|
|
|
4
4
|
config: Config;
|
|
5
5
|
tokenDb: low.LowdbAsync<any> | null;
|
|
6
6
|
constructor(config: Config);
|
|
7
|
-
_dbGenPath(dbName: string, config: Config): string;
|
|
8
7
|
private getTokenDb;
|
|
9
8
|
saveToken(token: Token): Promise<void>;
|
|
10
9
|
deleteToken(user: string, tokenKey: string): Promise<void>;
|
package/{lib → build}/token.js
RENAMED
|
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
|
|
10
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
9
|
|
|
12
10
|
var _lowdb = _interopRequireDefault(require("lowdb"));
|
|
@@ -17,6 +15,8 @@ var _Memory = _interopRequireDefault(require("lowdb/adapters/Memory"));
|
|
|
17
15
|
|
|
18
16
|
var _debug = _interopRequireDefault(require("debug"));
|
|
19
17
|
|
|
18
|
+
var _utils = require("./utils");
|
|
19
|
+
|
|
20
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
21
|
|
|
22
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; }
|
|
@@ -34,10 +34,6 @@ class TokenActions {
|
|
|
34
34
|
this.tokenDb = null;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
_dbGenPath(dbName, config) {
|
|
38
|
-
return _path.default.join(_path.default.resolve(_path.default.dirname(config.config_path || ''), config.storage, dbName));
|
|
39
|
-
}
|
|
40
|
-
|
|
41
37
|
async getTokenDb() {
|
|
42
38
|
if (!this.tokenDb) {
|
|
43
39
|
debug('token database is not defined');
|
|
@@ -48,9 +44,7 @@ class TokenActions {
|
|
|
48
44
|
adapter = new _Memory.default('');
|
|
49
45
|
} else {
|
|
50
46
|
debug('token async adapter');
|
|
51
|
-
|
|
52
|
-
const pathDb = this._dbGenPath(TOKEN_DB_NAME, this.config);
|
|
53
|
-
|
|
47
|
+
const pathDb = (0, _utils._dbGenPath)(TOKEN_DB_NAME, this.config);
|
|
54
48
|
adapter = new _FileAsync.default(pathDb);
|
|
55
49
|
}
|
|
56
50
|
|
|
@@ -73,8 +67,7 @@ class TokenActions {
|
|
|
73
67
|
} else {
|
|
74
68
|
// types does not match with valid implementation
|
|
75
69
|
// @ts-ignore
|
|
76
|
-
await db.get(token.user)
|
|
77
|
-
.push(token).write();
|
|
70
|
+
await db.get(token.user).push(token).write();
|
|
78
71
|
}
|
|
79
72
|
|
|
80
73
|
debug('data %o', await db.getState());
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/token.ts"],"names":["debug","TOKEN_DB_NAME","TokenActions","constructor","config","tokenDb","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 _ from 'lodash';\nimport low from 'lowdb';\nimport FileAsync from 'lowdb/adapters/FileAsync';\nimport FileMemory from 'lowdb/adapters/Memory';\nimport buildDebug from 'debug';\n\nimport { ITokenActions, Config, Token, TokenFilter } from '@verdaccio/types';\nimport { _dbGenPath } from './utils';\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 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 = _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.get(token.user).push(token).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/{lib → build}/utils.d.ts
RENAMED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import fs from 'fs';
|
|
3
|
+
import { Config } from '@verdaccio/types';
|
|
3
4
|
export declare function getFileStats(packagePath: string): Promise<fs.Stats>;
|
|
4
5
|
export declare function readDirectory(packagePath: string): Promise<string[]>;
|
|
5
6
|
export declare function findPackages(storagePath: string, validationHandler: Function): Promise<{
|
|
6
7
|
name: string;
|
|
7
8
|
path: string;
|
|
8
9
|
}[]>;
|
|
10
|
+
export declare function _dbGenPath(dbName: string, config: Pick<Config, 'config_path' | 'storage'>): string;
|
package/{lib → build}/utils.js
RENAMED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getFileStats = getFileStats;
|
|
7
7
|
exports.readDirectory = readDirectory;
|
|
8
8
|
exports.findPackages = findPackages;
|
|
9
|
+
exports._dbGenPath = _dbGenPath;
|
|
9
10
|
|
|
10
11
|
var _fs = _interopRequireDefault(require("fs"));
|
|
11
12
|
|
|
@@ -92,5 +93,8 @@ async function findPackages(storagePath, validationHandler) {
|
|
|
92
93
|
resolve(listPackages);
|
|
93
94
|
});
|
|
94
95
|
}
|
|
95
|
-
|
|
96
|
+
|
|
97
|
+
function _dbGenPath(dbName, config) {
|
|
98
|
+
return _path.default.join(_path.default.resolve(_path.default.dirname(config.config_path || ''), config.storage, dbName));
|
|
99
|
+
}
|
|
96
100
|
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts"],"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","_dbGenPath","dbName","config","join","dirname","config_path","storage"],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport _ from 'lodash';\nimport { Config } from '@verdaccio/types';\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: any) {\n reject(error);\n }\n\n resolve(listPackages);\n });\n}\n\nexport function _dbGenPath(\n dbName: string,\n config: Pick<Config, 'config_path' | 'storage'>\n): string {\n return path.join(\n path.resolve(path.dirname(config.config_path || ''), config.storage as string, dbName)\n );\n}\n"],"file":"utils.js"}
|
package/package.json
CHANGED
|
@@ -1,63 +1,73 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
2
|
+
"name": "@verdaccio/local-storage",
|
|
3
|
+
"version": "11.0.0-6-next.9",
|
|
4
|
+
"description": "Local storage implementation",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"private",
|
|
7
|
+
"package",
|
|
8
|
+
"repository",
|
|
9
|
+
"registry",
|
|
10
|
+
"enterprise",
|
|
11
|
+
"modules",
|
|
12
|
+
"proxy",
|
|
13
|
+
"server",
|
|
14
|
+
"verdaccio"
|
|
15
|
+
],
|
|
16
|
+
"author": "Juan Picado <juanpicado19@gmail.com>",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"homepage": "https://verdaccio.org",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "https",
|
|
21
|
+
"url": "https://github.com/verdaccio/verdaccio",
|
|
22
|
+
"directory": "packages/core/local-storage"
|
|
23
|
+
},
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/verdaccio/verdaccio/issues"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"main": "./build/index.js",
|
|
31
|
+
"types": "./build/index.d.ts",
|
|
32
|
+
"files": [
|
|
33
|
+
"build/"
|
|
34
|
+
],
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=14",
|
|
37
|
+
"npm": ">=7"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@verdaccio/core": "6.0.0-6-next.2",
|
|
41
|
+
"@verdaccio/file-locking": "11.0.0-6-next.4",
|
|
42
|
+
"@verdaccio/streams": "11.0.0-6-next.5",
|
|
43
|
+
"async": "3.2.1",
|
|
44
|
+
"core-js": "3.17.2",
|
|
45
|
+
"debug": "4.3.2",
|
|
46
|
+
"globby": "11.0.1",
|
|
47
|
+
"lockfile": "1.0.4",
|
|
48
|
+
"lodash": "4.17.21",
|
|
49
|
+
"lowdb": "1.0.0",
|
|
50
|
+
"lru-cache": "6.0.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/minimatch": "3.0.5",
|
|
54
|
+
"@verdaccio/types": "11.0.0-6-next.9",
|
|
55
|
+
"@verdaccio/config": "6.0.0-6-next.9",
|
|
56
|
+
"@verdaccio/utils": "6.0.0-6-next.7",
|
|
57
|
+
"minimatch": "3.0.4",
|
|
58
|
+
"tmp-promise": "3.0.2"
|
|
59
|
+
},
|
|
60
|
+
"funding": {
|
|
61
|
+
"type": "opencollective",
|
|
62
|
+
"url": "https://opencollective.com/verdaccio"
|
|
63
|
+
},
|
|
64
|
+
"scripts": {
|
|
65
|
+
"clean": "rimraf ./build",
|
|
66
|
+
"test": "cross-env NODE_ENV=test BABEL_ENV=test jest",
|
|
67
|
+
"type-check": "tsc --noEmit -p tsconfig.build.json",
|
|
68
|
+
"build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
|
|
69
|
+
"build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
|
|
70
|
+
"watch": "pnpm build:js -- --watch",
|
|
71
|
+
"build": "pnpm run build:js && pnpm run build:types"
|
|
72
|
+
}
|
|
73
|
+
}
|