@verdaccio/store 6.0.0-6-next.14 → 6.0.0-6-next.18
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 +90 -0
- package/build/local-storage.d.ts +6 -2
- package/build/local-storage.js +41 -15
- package/build/local-storage.js.map +1 -1
- package/build/search.d.ts +2 -2
- package/build/search.js +10 -21
- package/build/search.js.map +1 -1
- package/build/storage-utils.d.ts +1 -2
- package/build/storage-utils.js +10 -28
- package/build/storage-utils.js.map +1 -1
- package/build/storage.d.ts +6 -4
- package/build/storage.js +120 -29
- package/build/storage.js.map +1 -1
- package/build/type.d.ts +15 -1
- package/build/uplink-util.d.ts +1 -1
- package/build/uplink-util.js.map +1 -1
- package/package.json +21 -17
- package/src/local-storage.ts +55 -24
- package/src/search.ts +8 -7
- package/src/storage-utils.ts +6 -26
- package/src/storage.ts +137 -26
- package/src/type.ts +18 -1
- package/src/uplink-util.ts +2 -3
- package/test/local-storage.spec.ts +5 -4
- package/test/search.spec.ts +5 -4
- package/test/storage-utils.spec.ts +3 -2
- package/test/storage.spec.ts +245 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,95 @@
|
|
|
1
1
|
# @verdaccio/store
|
|
2
2
|
|
|
3
|
+
## 6.0.0-6-next.18
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [730b5d8c]
|
|
8
|
+
- @verdaccio/logger@6.0.0-6-next.9
|
|
9
|
+
- @verdaccio/loaders@6.0.0-6-next.9
|
|
10
|
+
- @verdaccio/proxy@6.0.0-6-next.17
|
|
11
|
+
|
|
12
|
+
## 6.0.0-6-next.17
|
|
13
|
+
|
|
14
|
+
### Major Changes
|
|
15
|
+
|
|
16
|
+
- a828271d: refactor: download manifest endpoint and integrate fastify
|
|
17
|
+
|
|
18
|
+
Much simpler API for fetching a package
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
const manifest = await storage.getPackageNext({
|
|
22
|
+
name,
|
|
23
|
+
uplinksLook: true,
|
|
24
|
+
req,
|
|
25
|
+
version: queryVersion,
|
|
26
|
+
requestOptions,
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
> not perfect, the `req` still is being passed to the proxy (this has to be refactored at proxy package) and then removed from here, in proxy we pass the request instance to the `request` library.
|
|
31
|
+
|
|
32
|
+
### Details
|
|
33
|
+
|
|
34
|
+
- `async/await` sugar for getPackage()
|
|
35
|
+
- Improve and reuse code between current implementation and new fastify endpoint (add scaffolding for request manifest)
|
|
36
|
+
- Improve performance
|
|
37
|
+
- Add new tests
|
|
38
|
+
|
|
39
|
+
### Breaking changes
|
|
40
|
+
|
|
41
|
+
All storage plugins will stop to work since the storage uses `getPackageNext` method which is Promise based, I won't replace this now because will force me to update all plugins, I'll follow up in another PR. Currently will throw http 500
|
|
42
|
+
|
|
43
|
+
### Minor Changes
|
|
44
|
+
|
|
45
|
+
- b13a3fef: refactor: improve versions and dist-tag filters
|
|
46
|
+
|
|
47
|
+
### Patch Changes
|
|
48
|
+
|
|
49
|
+
- Updated dependencies [a828271d]
|
|
50
|
+
- Updated dependencies [24b9be02]
|
|
51
|
+
- Updated dependencies [e75c0a3b]
|
|
52
|
+
- Updated dependencies [b13a3fef]
|
|
53
|
+
- @verdaccio/tarball@11.0.0-6-next.11
|
|
54
|
+
- @verdaccio/local-storage@11.0.0-6-next.11
|
|
55
|
+
- @verdaccio/utils@6.0.0-6-next.10
|
|
56
|
+
- @verdaccio/core@6.0.0-6-next.4
|
|
57
|
+
- @verdaccio/logger@6.0.0-6-next.8
|
|
58
|
+
- @verdaccio/proxy@6.0.0-6-next.16
|
|
59
|
+
- @verdaccio/config@6.0.0-6-next.12
|
|
60
|
+
- @verdaccio/loaders@6.0.0-6-next.8
|
|
61
|
+
- @verdaccio/streams@11.0.0-6-next.5
|
|
62
|
+
|
|
63
|
+
## 6.0.0-6-next.16
|
|
64
|
+
|
|
65
|
+
### Minor Changes
|
|
66
|
+
|
|
67
|
+
- f86c31ed: feat: migrate web sidebar endpoint to fastify
|
|
68
|
+
|
|
69
|
+
reuse utils methods between packages
|
|
70
|
+
|
|
71
|
+
### Patch Changes
|
|
72
|
+
|
|
73
|
+
- Updated dependencies [f86c31ed]
|
|
74
|
+
- @verdaccio/utils@6.0.0-6-next.9
|
|
75
|
+
- @verdaccio/config@6.0.0-6-next.11
|
|
76
|
+
- @verdaccio/local-storage@11.0.0-6-next.10
|
|
77
|
+
- @verdaccio/proxy@6.0.0-6-next.15
|
|
78
|
+
- @verdaccio/loaders@6.0.0-6-next.7
|
|
79
|
+
|
|
80
|
+
## 6.0.0-6-next.15
|
|
81
|
+
|
|
82
|
+
### Patch Changes
|
|
83
|
+
|
|
84
|
+
- Updated dependencies [6c1eb021]
|
|
85
|
+
- @verdaccio/core@6.0.0-6-next.3
|
|
86
|
+
- @verdaccio/logger@6.0.0-6-next.7
|
|
87
|
+
- @verdaccio/config@6.0.0-6-next.10
|
|
88
|
+
- @verdaccio/loaders@6.0.0-6-next.7
|
|
89
|
+
- @verdaccio/local-storage@11.0.0-6-next.10
|
|
90
|
+
- @verdaccio/proxy@6.0.0-6-next.14
|
|
91
|
+
- @verdaccio/utils@6.0.0-6-next.8
|
|
92
|
+
|
|
3
93
|
## 6.0.0-6-next.14
|
|
4
94
|
|
|
5
95
|
### Major Changes
|
package/build/local-storage.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { PassThrough } from 'stream';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { pluginUtils, searchUtils } from '@verdaccio/core';
|
|
4
|
+
import { Callback, CallbackAction, Config, IReadTarball, IUploadTarball, Logger, MergeTags, Package, StringValue, Token, TokenFilter, Version } from '@verdaccio/types';
|
|
5
5
|
export declare type IPluginStorage = pluginUtils.IPluginStorage<Config>;
|
|
6
6
|
export declare function normalizeSearchPackage(pkg: Package, searchItem: searchUtils.SearchItem): searchUtils.SearchPackageBody;
|
|
7
7
|
export declare const PROTO_NAME = "__proto__";
|
|
@@ -88,11 +88,13 @@ declare class LocalStorage {
|
|
|
88
88
|
* @return {ReadTarball}
|
|
89
89
|
*/
|
|
90
90
|
private _streamSuccessReadTarBall;
|
|
91
|
+
getPackageMetadataNext(name: string): Promise<Package>;
|
|
91
92
|
/**
|
|
92
93
|
* Retrieve a package by name.
|
|
93
94
|
* @param {*} name
|
|
94
95
|
* @param {*} callback
|
|
95
96
|
* @return {Function}
|
|
97
|
+
* @deprecated
|
|
96
98
|
*/
|
|
97
99
|
getPackageMetadata(name: string, callback?: Callback): void;
|
|
98
100
|
search(searchStream: PassThrough, query: searchUtils.SearchQuery): Promise<void>;
|
|
@@ -106,8 +108,10 @@ declare class LocalStorage {
|
|
|
106
108
|
* Read a json file from storage.
|
|
107
109
|
* @param {Object} storage
|
|
108
110
|
* @param {Function} callback
|
|
111
|
+
* @deprecated
|
|
109
112
|
*/
|
|
110
113
|
private _readPackage;
|
|
114
|
+
private _readPackageNext;
|
|
111
115
|
/**
|
|
112
116
|
* Retrieve either a previous created local package or a boilerplate.
|
|
113
117
|
* @param {*} pkgName
|
package/build/local-storage.js
CHANGED
|
@@ -3,18 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.PROTO_NAME = exports.LocalStorage = void 0;
|
|
6
7
|
exports.normalizeSearchPackage = normalizeSearchPackage;
|
|
7
|
-
exports.LocalStorage = exports.PROTO_NAME = void 0;
|
|
8
8
|
|
|
9
9
|
var _assert = _interopRequireDefault(require("assert"));
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
12
12
|
|
|
13
13
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
14
14
|
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
var _utils = require("@verdaccio/utils");
|
|
15
|
+
var _url = _interopRequireDefault(require("url"));
|
|
18
16
|
|
|
19
17
|
var _core = require("@verdaccio/core");
|
|
20
18
|
|
|
@@ -24,12 +22,12 @@ var _localStorage = _interopRequireDefault(require("@verdaccio/local-storage"));
|
|
|
24
22
|
|
|
25
23
|
var _streams = require("@verdaccio/streams");
|
|
26
24
|
|
|
25
|
+
var _utils = require("@verdaccio/utils");
|
|
26
|
+
|
|
27
27
|
var _storageUtils = require("./storage-utils");
|
|
28
28
|
|
|
29
29
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
30
30
|
|
|
31
|
-
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; }
|
|
32
|
-
|
|
33
31
|
const debug = (0, _debug.default)('verdaccio:storage:local');
|
|
34
32
|
|
|
35
33
|
function normalizeSearchPackage(pkg, searchItem) {
|
|
@@ -73,12 +71,6 @@ exports.PROTO_NAME = PROTO_NAME;
|
|
|
73
71
|
|
|
74
72
|
class LocalStorage {
|
|
75
73
|
constructor(config, logger) {
|
|
76
|
-
_defineProperty(this, "config", void 0);
|
|
77
|
-
|
|
78
|
-
_defineProperty(this, "storagePlugin", void 0);
|
|
79
|
-
|
|
80
|
-
_defineProperty(this, "logger", void 0);
|
|
81
|
-
|
|
82
74
|
debug('local storage created');
|
|
83
75
|
this.logger = logger.child({
|
|
84
76
|
sub: 'fs'
|
|
@@ -217,7 +209,7 @@ class LocalStorage {
|
|
|
217
209
|
|
|
218
210
|
version = (0, _storageUtils.cleanUpReadme)(version);
|
|
219
211
|
debug('clean up readme for %o', versionId);
|
|
220
|
-
version.contributors = (0,
|
|
212
|
+
version.contributors = (0, _utils.normalizeContributors)(version.contributors);
|
|
221
213
|
change = true;
|
|
222
214
|
packageLocalJson.versions[versionId] = version;
|
|
223
215
|
|
|
@@ -299,7 +291,7 @@ class LocalStorage {
|
|
|
299
291
|
debug('%s` readme mutated', name); // TODO: lodash remove
|
|
300
292
|
|
|
301
293
|
metadata = (0, _storageUtils.cleanUpReadme)(metadata);
|
|
302
|
-
metadata.contributors = (0,
|
|
294
|
+
metadata.contributors = (0, _utils.normalizeContributors)(metadata.contributors);
|
|
303
295
|
debug('%s` contributors normalized', name);
|
|
304
296
|
const hasVersion = data.versions[version] != null;
|
|
305
297
|
|
|
@@ -676,11 +668,26 @@ class LocalStorage {
|
|
|
676
668
|
});
|
|
677
669
|
return stream;
|
|
678
670
|
}
|
|
671
|
+
|
|
672
|
+
async getPackageMetadataNext(name) {
|
|
673
|
+
const storage = this._getLocalStorage(name);
|
|
674
|
+
|
|
675
|
+
debug('get package metadata for %o', name);
|
|
676
|
+
|
|
677
|
+
if (typeof storage === 'undefined') {
|
|
678
|
+
// TODO: this might be a better an error to throw
|
|
679
|
+
// if storage is not there cannot be 404.
|
|
680
|
+
throw _core.errorUtils.getNotFound();
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
return await this._readPackageNext(name, storage);
|
|
684
|
+
}
|
|
679
685
|
/**
|
|
680
686
|
* Retrieve a package by name.
|
|
681
687
|
* @param {*} name
|
|
682
688
|
* @param {*} callback
|
|
683
689
|
* @return {Function}
|
|
690
|
+
* @deprecated
|
|
684
691
|
*/
|
|
685
692
|
|
|
686
693
|
|
|
@@ -776,6 +783,7 @@ class LocalStorage {
|
|
|
776
783
|
* Read a json file from storage.
|
|
777
784
|
* @param {Object} storage
|
|
778
785
|
* @param {Function} callback
|
|
786
|
+
* @deprecated
|
|
779
787
|
*/
|
|
780
788
|
|
|
781
789
|
|
|
@@ -793,6 +801,24 @@ class LocalStorage {
|
|
|
793
801
|
callback(err, (0, _storageUtils.normalizePackage)(result));
|
|
794
802
|
});
|
|
795
803
|
}
|
|
804
|
+
|
|
805
|
+
async _readPackageNext(name, storage) {
|
|
806
|
+
try {
|
|
807
|
+
const result = await storage.readPackageNext(name);
|
|
808
|
+
return (0, _storageUtils.normalizePackage)(result);
|
|
809
|
+
} catch (err) {
|
|
810
|
+
if (err.code === _storageUtils.STORAGE.NO_SUCH_FILE_ERROR || err.code === _core.HTTP_STATUS.NOT_FOUND) {
|
|
811
|
+
debug('package %s not found', name);
|
|
812
|
+
throw _core.errorUtils.getNotFound();
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
this.logger.error({
|
|
816
|
+
err: err,
|
|
817
|
+
file: _storageUtils.STORAGE.PACKAGE_FILE_NAME
|
|
818
|
+
}, `error reading @{file}: @{!err.message}`);
|
|
819
|
+
throw _core.errorUtils.getInternalError();
|
|
820
|
+
}
|
|
821
|
+
}
|
|
796
822
|
/**
|
|
797
823
|
* Retrieve either a previous created local package or a boilerplate.
|
|
798
824
|
* @param {*} pkgName
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/local-storage.ts"],"names":["debug","normalizeSearchPackage","pkg","searchItem","latest","pkgUtils","getLatest","version","versions","result","name","scope","description","keywords","date","time","author","publisher","maintainers","links","npm","homepage","repository","bugs","package","scoped","PROTO_NAME","LocalStorage","constructor","config","logger","child","sub","storagePlugin","init","_loadStorage","warn","addPackage","callback","storage","_getLocalStorage","_","isNil","errorUtils","getNotFound","createPackage","err","isNull","code","STORAGE","FILE_EXIST_ERROR","HTTP_STATUS","CONFLICT","message","getConflict","removePackage","Promise","resolve","reject","readPackage","data","NO_SUCH_FILE_ERROR","NOT_FOUND","remove","attachments","Object","keys","_attachments","length","attachment","deletePackage","PACKAGE_FILE_NAME","error","getBadData","updateVersions","packageInfo","_readCreatePackage","packageLocalJson","change","readme","versionId","contributors","dist","tarball","urlObject","UrlNode","parse","filename","pathname","replace","_distfiles","hash","url","sha","shasum","upLink","Symbol","for","_updateUplinkToRemoteProtocol","tag","DIST_TAGS","up","_uplinks","prototype","hasOwnProperty","call","need_change","etag","fetched","isEqual","_writePackage","addVersion","metadata","_updatePackage","cb","hasVersion","validatioUtils","isObject","isString","errorMessage","getBadRequest","currentDate","Date","toISOString","created","add","mergeTags","pkgName","tags","API_ERROR","VERSION_NOT_EXIST","changePackage","incomingPkg","revision","localData","incomingVersion","info","file","incomingDeprecated","deprecated","modified","USERS","removeTarball","validateName","then","catch","getInternalError","addTarball","shaOneHash","uploadStream","UploadTarball","_transform","abort","done","args","update","appliedData","apply","process","nextTick","emit","getForbidden","writeStream","writeTarball","on","getPackageMetadata","_err","updater","digest","pipe","getTarball","_createFailureStreamResponse","_streamSuccessReadTarBall","stream","ReadTarball","readTarballStream","readTarball","e404","content","_readPackage","search","searchStream","query","t","text","q","quality","p","popularity","m","maintenance","s","size","getMetadata","searchPackage","searchPackageItem","score","flags","searchScore","end","items","item","write","getPackageStorage","_internalError","_createNewPackage","updateHandler","updatePackage","bind","normalizePackage","json","savePackage","_setDefaultRevision","_rev","DEFAULT_REVISION","_debug","upLinkKey","tarballUrl","uplinkUrl","uplinks","host","protocol","registry","format","getSecret","secretKey","setSecret","checkSecretKey","Storage","_loadStorePlugin","LocalDatabase","plugin_params","plugins","store","plugin","head","saveToken","token","isFunction","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport UrlNode from 'url';\nimport { PassThrough } from 'stream';\nimport _ from 'lodash';\nimport buildDebug from 'debug';\n\nimport { isObject, getLatestVersion } from '@verdaccio/utils';\nimport { errorUtils, searchUtils, pluginUtils, pkgUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, SUPPORT_ERRORS, USERS } from '@verdaccio/core';\nimport { createTarballHash } from '@verdaccio/utils';\nimport { loadPlugin } from '@verdaccio/loaders';\nimport LocalDatabase from '@verdaccio/local-storage';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport {\n Token,\n TokenFilter,\n Package,\n Config,\n IUploadTarball,\n IReadTarball,\n MergeTags,\n Version,\n DistFile,\n Callback,\n Logger,\n IPackageStorage,\n Author,\n CallbackAction,\n StringValue,\n StorageUpdateCallback,\n} from '@verdaccio/types';\nimport { VerdaccioError } from '@verdaccio/core';\n\nimport {\n generatePackageTemplate,\n normalizePackage,\n generateRevision,\n getLatestReadme,\n cleanUpReadme,\n normalizeContributors,\n STORAGE,\n tagVersion,\n} from './storage-utils';\n\nconst debug = buildDebug('verdaccio:storage:local');\n\nexport type IPluginStorage = pluginUtils.IPluginStorage<Config>;\n\nexport function normalizeSearchPackage(\n pkg: Package,\n searchItem: searchUtils.SearchItem\n): searchUtils.SearchPackageBody {\n const latest = pkgUtils.getLatest(pkg);\n const version: Version = pkg.versions[latest];\n const result: searchUtils.SearchPackageBody = {\n name: version.name,\n scope: '',\n description: version.description,\n version: latest,\n keywords: version.keywords,\n date: pkg.time[latest],\n // FIXME: type\n author: version.author as any,\n // FIXME: not possible fill this out from a private package\n publisher: {},\n // FIXME: type\n maintainers: version.maintainers as any,\n links: {\n npm: '',\n homepage: version.homepage,\n repository: version.repository,\n bugs: version.bugs,\n },\n };\n\n if (typeof searchItem.package.scoped === 'string') {\n result.scope = searchItem.package.scoped;\n }\n\n return result;\n}\n\nexport const PROTO_NAME = '__proto__';\n\n/**\n * Implements Storage interface (same for storage.js, local-storage.js, up-storage.js).\n */\nclass LocalStorage {\n public config: Config;\n public storagePlugin: IPluginStorage;\n public logger: Logger;\n\n public constructor(config: Config, logger: Logger) {\n debug('local storage created');\n this.logger = logger.child({ sub: 'fs' });\n this.config = config;\n // @ts-expect-error\n this.storagePlugin = null;\n }\n\n public async init() {\n if (this.storagePlugin === null) {\n this.storagePlugin = this._loadStorage(this.config, this.logger);\n debug('storage plugin init');\n await this.storagePlugin.init();\n debug('storage plugin initialized');\n } else {\n this.logger.warn('storage plugin has been already initialized');\n }\n return;\n }\n\n public addPackage(name: string, pkg: Package, callback: Callback): void {\n debug(`creating a package for`, name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n debug(`storage is missing for %o package cannot be added`, name);\n return callback(errorUtils.getNotFound('this package cannot be added'));\n }\n\n storage.createPackage(name, generatePackageTemplate(name), (err) => {\n if (\n _.isNull(err) === false &&\n (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)\n ) {\n debug(`error on creating a package for %o with error %o`, name, err.message);\n return callback(errorUtils.getConflict());\n }\n\n const latest = getLatestVersion(pkg);\n if (_.isNil(latest) === false && pkg.versions[latest]) {\n debug('latest version found %o for %o', latest, name);\n return callback(null, pkg.versions[latest]);\n }\n\n debug('no latest version found for %o', name);\n return callback();\n });\n }\n\n /**\n * Remove package with all it contents.\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove package %s', name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n throw errorUtils.getNotFound();\n }\n\n return new Promise((resolve, reject) => {\n storage.readPackage(name, async (err, data: Package): Promise<void> => {\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug(`error on not found %o with error %o`, name, err.message);\n return reject(errorUtils.getNotFound());\n }\n return reject(err);\n }\n\n data = normalizePackage(data);\n\n try {\n await this.storagePlugin.remove(name);\n // remove each attachment\n const attachments = Object.keys(data._attachments);\n debug('attachments to remove %s', attachments?.length);\n for (let attachment of attachments) {\n debug('remove attachment %s', attachment);\n await storage.deletePackage(attachment);\n }\n // remove package.json\n debug('remove package.json');\n await storage.deletePackage(STORAGE.PACKAGE_FILE_NAME);\n // remove folder\n debug('remove package folder');\n await storage.removePackage();\n resolve();\n } catch (err: any) {\n this.logger.error({ err }, 'removed package has failed @{err.message}');\n throw errorUtils.getBadData(err.message);\n }\n });\n });\n }\n\n /**\n * Synchronize remote package info with the local one\n * @param {*} name\n * @param {*} packageInfo\n * @param {*} callback\n */\n public updateVersions(name: string, packageInfo: Package, callback: Callback): void {\n debug(`updating versions for package %o`, name);\n this._readCreatePackage(name, (err, packageLocalJson): void => {\n if (err) {\n return callback(err);\n }\n\n let change = false;\n // updating readme\n packageLocalJson.readme = getLatestReadme(packageInfo);\n if (packageInfo.readme !== packageLocalJson.readme) {\n change = true;\n }\n\n debug('update versions');\n for (const versionId in packageInfo.versions) {\n if (_.isNil(packageLocalJson.versions[versionId])) {\n let version = packageInfo.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\n version = cleanUpReadme(version);\n debug('clean up readme for %o', versionId);\n version.contributors = normalizeContributors(version.contributors as Author[]);\n\n change = true;\n packageLocalJson.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const urlObject: any = UrlNode.parse(version.dist.tarball);\n const filename = urlObject.pathname.replace(/^.*\\//, '');\n\n // we do NOT overwrite any existing records\n if (_.isNil(packageLocalJson._distfiles[filename])) {\n const hash: DistFile = (packageLocalJson._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n\n if (_.isNil(upLink) === false) {\n this._updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n }\n }\n\n debug('update dist-tags');\n for (const tag in packageInfo[DIST_TAGS]) {\n if (\n !packageLocalJson[DIST_TAGS][tag] ||\n packageLocalJson[DIST_TAGS][tag] !== packageInfo[DIST_TAGS][tag]\n ) {\n change = true;\n packageLocalJson[DIST_TAGS][tag] = packageInfo[DIST_TAGS][tag];\n }\n }\n\n for (const up in packageInfo._uplinks) {\n if (Object.prototype.hasOwnProperty.call(packageInfo._uplinks, up)) {\n const need_change =\n !isObject(packageLocalJson._uplinks[up]) ||\n packageInfo._uplinks[up].etag !== packageLocalJson._uplinks[up].etag ||\n packageInfo._uplinks[up].fetched !== packageLocalJson._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n packageLocalJson._uplinks[up] = packageInfo._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in packageInfo && !_.isEqual(packageLocalJson.time, packageInfo.time)) {\n packageLocalJson.time = packageInfo.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n this._writePackage(name, packageLocalJson, function (err): void {\n callback(err, packageLocalJson);\n });\n } else {\n callback(null, packageLocalJson);\n }\n });\n }\n\n /**\n * Add a new version to a previous local package.\n * @param {*} name\n * @param {*} version\n * @param {*} metadata\n * @param {*} tag\n * @param {*} callback\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: Callback\n ): void {\n debug(`add version %s package for %s`, version, name);\n this._updatePackage(\n name,\n async (data, cb: Callback): Promise<void> => {\n debug('%s package is being updated', name);\n // keep only one readme per package\n data.readme = metadata.readme;\n debug('%s` readme mutated', name);\n // TODO: lodash remove\n metadata = cleanUpReadme(metadata);\n metadata.contributors = normalizeContributors(metadata.contributors as Author[]);\n debug('%s` contributors normalized', name);\n const hasVersion = data.versions[version] != null;\n if (hasVersion) {\n debug('%s version %s already exists', name, version);\n return cb(errorUtils.getConflict());\n }\n\n // if uploaded tarball has a different shasum, it's very likely that we\n // have some kind of error\n if (validatioUtils.isObject(metadata.dist) && _.isString(metadata.dist.tarball)) {\n const tarball = metadata.dist.tarball.replace(/.*\\//, '');\n\n if (validatioUtils.isObject(data._attachments[tarball])) {\n if (\n _.isNil(data._attachments[tarball].shasum) === false &&\n _.isNil(metadata.dist.shasum) === false\n ) {\n if (data._attachments[tarball].shasum != metadata.dist.shasum) {\n const errorMessage =\n `shasum error, ` +\n `${data._attachments[tarball].shasum} != ${metadata.dist.shasum}`;\n return cb(errorUtils.getBadRequest(errorMessage));\n }\n }\n\n const currentDate = new Date().toISOString();\n\n // some old storage do not have this field #740\n if (_.isNil(data.time)) {\n data.time = {};\n }\n\n data.time['modified'] = currentDate;\n\n if ('created' in data.time === false) {\n data.time.created = currentDate;\n }\n\n data.time[version] = currentDate;\n data._attachments[tarball].version = version;\n }\n }\n\n data.versions[version] = metadata;\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.storagePlugin.add(name);\n cb();\n } catch (err: any) {\n cb(errorUtils.getBadData(err.message));\n }\n },\n callback\n );\n }\n\n /**\n * Merge a new list of tags for a local packages with the existing one.\n * @param {*} pkgName\n * @param {*} tags\n * @param {*} callback\n */\n public mergeTags(pkgName: string, tags: MergeTags, callback: Callback): void {\n debug(`merge tags for`, pkgName);\n this._updatePackage(\n pkgName,\n (data, cb): void => {\n /* eslint guard-for-in: 0 */\n for (const tag in tags) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete data[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(data.versions[tags[tag]])) {\n return cb(errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST));\n }\n const version: string = tags[tag];\n tagVersion(data, version, tag);\n }\n cb(null);\n },\n callback\n );\n }\n\n /**\n * Update the package metadata, tags and attachments (tarballs).\n * Note: Currently supports unpublishing and deprecation.\n * @param {*} name\n * @param {*} incomingPkg\n * @param {*} revision\n * @param {*} callback\n * @return {Function}\n */\n public changePackage(\n name: string,\n incomingPkg: Package,\n revision: string | void,\n callback: Callback\n ): void {\n debug(`change package tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(incomingPkg.versions) ||\n !validatioUtils.isObject(incomingPkg[DIST_TAGS])\n ) {\n debug(`change package bad data for %o`, name);\n return callback(errorUtils.getBadData());\n }\n\n debug(`change package udapting package for %o`, name);\n this._updatePackage(\n name,\n (localData: Package, cb: CallbackAction): void => {\n for (const version in localData.versions) {\n const incomingVersion = incomingPkg.versions[version];\n if (_.isNil(incomingVersion)) {\n this.logger.info({ name: name, version: version }, 'unpublishing @{name}@@{version}');\n\n // FIXME: I prefer return a new object rather mutate the metadata\n delete localData.versions[version];\n delete localData.time![version];\n\n for (const file in localData._attachments) {\n if (localData._attachments[file].version === version) {\n delete localData._attachments[file].version;\n }\n }\n } else if (Object.prototype.hasOwnProperty.call(incomingVersion, 'deprecated')) {\n const incomingDeprecated = incomingVersion.deprecated;\n if (incomingDeprecated != localData.versions[version].deprecated) {\n if (!incomingDeprecated) {\n this.logger.info(\n { name: name, version: version },\n 'undeprecating @{name}@@{version}'\n );\n delete localData.versions[version].deprecated;\n } else {\n this.logger.info(\n { name: name, version: version },\n 'deprecating @{name}@@{version}'\n );\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = incomingPkg[USERS];\n localData[DIST_TAGS] = incomingPkg[DIST_TAGS];\n cb(null);\n },\n function (err): void {\n if (err) {\n return callback(err);\n }\n callback();\n }\n );\n }\n /**\n * Remove a tarball.\n * @param {*} name\n * @param {*} filename\n * @param {*} revision\n * @param {*} callback\n */\n public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n this._updatePackage(\n name,\n (data, cb): void => {\n if (data._attachments[filename]) {\n // TODO: avoid using delete\n delete data._attachments[filename];\n cb(null);\n } else {\n cb(errorUtils.getNotFound('no such file available'));\n }\n },\n (err: VerdaccioError) => {\n if (err) {\n this.logger.error({ err }, 'remove tarball error @{err.message}');\n return callback(err);\n }\n const storage = this._getLocalStorage(name);\n\n if (storage) {\n debug('removing %s from storage', filename);\n storage\n .deletePackage(filename)\n .then((): void => {\n debug('package %s removed', filename);\n return callback(null);\n })\n .catch((err) => {\n this.logger.error({ err }, 'error removing %s from storage');\n return callback(null);\n });\n } else {\n callback(errorUtils.getInternalError());\n }\n }\n );\n }\n\n /**\n * Add a tarball.\n * @param {String} name\n * @param {String} filename\n * @return {Stream}\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug(`add a tarball for %o`, name);\n assert(validatioUtils.validateName(filename));\n\n let length = 0;\n const shaOneHash = createTarballHash();\n const uploadStream: IUploadTarball = new UploadTarball({});\n const _transform = uploadStream._transform;\n const storage = this._getLocalStorage(name);\n\n uploadStream.abort = function (): void {};\n uploadStream.done = function (): void {};\n\n uploadStream._transform = function (data, ...args): void {\n shaOneHash.update(data);\n // measure the length for validation reasons\n length += data.length;\n const appliedData = [data, ...args];\n // FIXME: not sure about this approach, tsc complains\n // @ts-ignore\n _transform.apply(uploadStream, appliedData);\n };\n\n if (name === PROTO_NAME) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getForbidden());\n });\n return uploadStream;\n }\n\n // FIXME: this condition will never met, storage is always defined\n if (!storage) {\n process.nextTick((): void => {\n uploadStream.emit('error', \"can't upload this package\");\n });\n return uploadStream;\n }\n\n const writeStream: IUploadTarball = storage.writeTarball(filename);\n\n writeStream.on('error', (err) => {\n // @ts-ignore\n if (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT) {\n uploadStream.emit('error', errorUtils.getConflict());\n uploadStream.abort();\n // @ts-ignore\n } else if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n // check if package exists to throw an appropriate message\n this.getPackageMetadata(name, function (_err: VerdaccioError): void {\n if (_err) {\n uploadStream.emit('error', _err);\n } else {\n uploadStream.emit('error', err);\n }\n });\n } else {\n uploadStream.emit('error', err);\n }\n });\n\n writeStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n writeStream.on('success', (): void => {\n this._updatePackage(\n name,\n function updater(data, cb): void {\n // FUTURE: move this to tarballUtils\n data._attachments[filename] = {\n shasum: shaOneHash.digest('hex'),\n };\n cb(null);\n },\n function (err): void {\n if (err) {\n // FIXME: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n }\n );\n });\n\n uploadStream.abort = function (): void {\n writeStream.abort();\n };\n\n uploadStream.done = function (): void {\n if (!length) {\n uploadStream.emit('error', errorUtils.getBadData('refusing to accept zero-length file'));\n writeStream.abort();\n } else {\n writeStream.done();\n }\n };\n\n uploadStream.pipe(writeStream);\n\n return uploadStream;\n }\n\n /**\n * Get a tarball.\n * @param {*} name\n * @param {*} filename\n * @return {ReadTarball}\n */\n public getTarball(name: string, filename: string): IReadTarball {\n assert(validatioUtils.validateName(filename));\n\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n return this._createFailureStreamResponse();\n }\n\n return this._streamSuccessReadTarBall(storage, filename);\n }\n\n /**\n * Return a stream that emits a read failure.\n * @private\n * @return {ReadTarball}\n */\n private _createFailureStreamResponse(): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound('no such file available'));\n });\n return stream;\n }\n\n /**\n * Return a stream that emits the tarball data\n * @param {Object} storage\n * @param {String} filename\n * @private\n * @return {ReadTarball}\n */\n private _streamSuccessReadTarBall(storage: any, filename: string): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n const readTarballStream = storage.readTarball(filename);\n const e404 = errorUtils.getNotFound;\n\n stream.abort = function (): void {\n if (_.isNil(readTarballStream) === false) {\n readTarballStream.abort();\n }\n };\n\n readTarballStream.on('error', function (err) {\n // @ts-ignore\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n stream.emit('error', e404('no such file available'));\n } else {\n stream.emit('error', err);\n }\n });\n\n readTarballStream.on('content-length', function (content): void {\n stream.emit('content-length', content);\n });\n\n readTarballStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n stream.emit('open');\n readTarballStream.pipe(stream);\n });\n\n return stream;\n }\n\n /**\n * Retrieve a package by name.\n * @param {*} name\n * @param {*} callback\n * @return {Function}\n */\n public getPackageMetadata(name: string, callback: Callback = (): void => {}): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n return callback(errorUtils.getNotFound());\n }\n\n this._readPackage(name, storage, callback);\n }\n\n public async search(searchStream: PassThrough, query: searchUtils.SearchQuery): Promise<void> {\n debug('search on each package');\n this.logger.info(\n { t: query.text, q: query.quality, p: query.popularity, m: query.maintenance, s: query.size },\n 'search by text @{t}| maintenance @{m}| quality @{q}| popularity @{p}'\n );\n const getMetadata = (searchItem: searchUtils.SearchItem) => {\n return new Promise((resolve, reject) => {\n this.getPackageMetadata(\n searchItem?.package?.name,\n (err: VerdaccioError, pkg: Package): void => {\n if (err) {\n this.logger.error(\n { err, pkgName: searchItem?.package?.name },\n 'error on load package @{pkgName} metaadata @{err.message}'\n );\n reject(err);\n }\n\n const searchPackage = normalizeSearchPackage(pkg, searchItem);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n debug('push to stream %o', searchItem?.package?.name);\n resolve(searchPackageItem);\n }\n );\n });\n };\n\n if (typeof this.storagePlugin.search === 'undefined') {\n this.logger.info('plugin search not implemented yet');\n searchStream.end();\n } else {\n debug('search on each package by plugin');\n const items = await this.storagePlugin.search(query);\n try {\n for (const item of items) {\n const metadata = await getMetadata(item);\n searchStream.write(metadata);\n }\n debug('search local stream end');\n searchStream.end();\n } catch (err) {\n this.logger.error({ err, query }, 'error on search by plugin @{err.message}');\n searchStream.emit('error', err);\n }\n }\n }\n\n /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private _getLocalStorage(pkgName: string): IPackageStorage {\n debug('get local storage for %o', pkgName);\n return this.storagePlugin.getPackageStorage(pkgName);\n }\n\n /**\n * Read a json file from storage.\n * @param {Object} storage\n * @param {Function} callback\n */\n private _readPackage(name: string, storage: any, callback: Callback): void {\n storage.readPackage(name, (err, result): void => {\n if (err) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n return callback(errorUtils.getNotFound());\n }\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n\n callback(err, normalizePackage(result));\n });\n }\n\n /**\n * Retrieve either a previous created local package or a boilerplate.\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private _readCreatePackage(pkgName: string, callback: Callback): void {\n const storage: any = this._getLocalStorage(pkgName);\n if (_.isNil(storage)) {\n this._createNewPackage(pkgName, callback);\n return;\n }\n\n storage.readPackage(pkgName, (err, data): void => {\n // TODO: race condition\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n data = generatePackageTemplate(pkgName);\n } else {\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n }\n\n callback(null, normalizePackage(data));\n });\n }\n\n private _createNewPackage(name: string, callback: Callback): Callback {\n return callback(null, normalizePackage(generatePackageTemplate(name)));\n }\n\n /**\n * Handle internal error\n * @param {*} err\n * @param {*} file\n * @param {*} message\n * @return {Object} Error instance\n */\n private _internalError(err: string, file: string, message: string): VerdaccioError {\n this.logger.error({ err: err, file: file }, `${message} @{file}: @{!err.message}`);\n\n return errorUtils.getInternalError();\n }\n\n /**\n * @param {*} name package name\n * @param {*} updateHandler function(package, cb) - update function\n * @param {*} callback callback that gets invoked after it's all updated\n * @return {Function}\n */\n private _updatePackage(\n name: string,\n updateHandler: StorageUpdateCallback,\n callback: Callback\n ): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (!storage) {\n return callback(errorUtils.getNotFound());\n }\n\n storage.updatePackage(\n name,\n updateHandler,\n this._writePackage.bind(this),\n normalizePackage,\n callback\n );\n }\n\n /**\n * Update the revision (_rev) string for a package.\n * @param {*} name\n * @param {*} json\n * @param {*} callback\n * @return {Function}\n */\n private _writePackage(name: string, json: Package, callback: Callback): void {\n const storage: any = this._getLocalStorage(name);\n if (_.isNil(storage)) {\n return callback();\n }\n storage.savePackage(name, this._setDefaultRevision(json), callback);\n }\n\n private _setDefaultRevision(json: Package): Package {\n // calculate revision from couch db\n if (_.isString(json._rev) === false) {\n json._rev = STORAGE.DEFAULT_REVISION;\n }\n\n // this is intended in debug mode we do not want modify the store revision\n if (_.isNil(this.config._debug)) {\n json._rev = generateRevision(json._rev);\n }\n\n return json;\n }\n\n // private _deleteAttachments(storage: any, attachments: string[], callback: Callback): void {\n // debug('deleting %o attachments total %o', attachments?.length);\n // const unlinkNext = function (cb): void {\n // if (_.isEmpty(attachments)) {\n // return cb();\n // }\n\n // const attachment = attachments.shift();\n // storage.deletePackage(attachment, function (): void {\n // unlinkNext(cb);\n // });\n // };\n\n // unlinkNext(function (): void {\n // // try to unlink the directory, but ignore errors because it can fail\n // storage.removePackage(function (err): void {\n // callback(err);\n // });\n // });\n // }\n\n /**\n * Ensure the dist file remains as the same protocol\n * @param {Object} hash metadata\n * @param {String} upLinkKey registry key\n * @private\n */\n private _updateUplinkToRemoteProtocol(hash: DistFile, upLinkKey: string): void {\n // if we got this information from a known registry,\n // use the same protocol for the tarball\n //\n // see https://github.com/rlidwka/sinopia/issues/166\n const tarballUrl: any = UrlNode.parse(hash.url);\n const uplinkUrl: any = UrlNode.parse(this.config.uplinks[upLinkKey].url);\n\n if (uplinkUrl.host === tarballUrl.host) {\n tarballUrl.protocol = uplinkUrl.protocol;\n hash.registry = upLinkKey;\n hash.url = UrlNode.format(tarballUrl);\n }\n }\n\n public async getSecret(config: Config): Promise<void> {\n const secretKey = await this.storagePlugin.getSecret();\n\n return this.storagePlugin.setSecret(config.checkSecretKey(secretKey));\n }\n\n private _loadStorage(config: Config, logger: Logger): IPluginStorage {\n const Storage = this._loadStorePlugin();\n\n if (_.isNil(Storage)) {\n assert(this.config.storage, 'CONFIG: storage path not defined');\n return new LocalDatabase(this.config, logger);\n }\n return Storage as IPluginStorage;\n }\n\n private _loadStorePlugin(): IPluginStorage | void {\n const plugin_params = {\n config: this.config,\n logger: this.logger,\n };\n\n const plugins: IPluginStorage[] = loadPlugin<IPluginStorage>(\n this.config,\n this.config.store,\n plugin_params,\n (plugin): IPluginStorage => {\n return plugin.getPackageStorage;\n }\n );\n\n return _.head(plugins);\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.storagePlugin.saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.storagePlugin.deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.storagePlugin.readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.readTokens(filter);\n }\n}\n\nexport { LocalStorage };\n"],"file":"local-storage.js"}
|
|
1
|
+
{"version":3,"sources":["../src/local-storage.ts"],"names":["debug","normalizeSearchPackage","pkg","searchItem","latest","pkgUtils","getLatest","version","versions","result","name","scope","description","keywords","date","time","author","publisher","maintainers","links","npm","homepage","repository","bugs","package","scoped","PROTO_NAME","LocalStorage","constructor","config","logger","child","sub","storagePlugin","init","_loadStorage","warn","addPackage","callback","storage","_getLocalStorage","_","isNil","errorUtils","getNotFound","createPackage","err","isNull","code","STORAGE","FILE_EXIST_ERROR","HTTP_STATUS","CONFLICT","message","getConflict","removePackage","Promise","resolve","reject","readPackage","data","NO_SUCH_FILE_ERROR","NOT_FOUND","remove","attachments","Object","keys","_attachments","length","attachment","deletePackage","PACKAGE_FILE_NAME","error","getBadData","updateVersions","packageInfo","_readCreatePackage","packageLocalJson","change","readme","versionId","contributors","dist","tarball","urlObject","UrlNode","parse","filename","pathname","replace","_distfiles","hash","url","sha","shasum","upLink","Symbol","for","_updateUplinkToRemoteProtocol","tag","DIST_TAGS","up","_uplinks","prototype","hasOwnProperty","call","need_change","etag","fetched","isEqual","_writePackage","addVersion","metadata","_updatePackage","cb","hasVersion","validatioUtils","isObject","isString","errorMessage","getBadRequest","currentDate","Date","toISOString","created","add","mergeTags","pkgName","tags","API_ERROR","VERSION_NOT_EXIST","changePackage","incomingPkg","revision","localData","incomingVersion","info","file","incomingDeprecated","deprecated","modified","USERS","removeTarball","validateName","then","catch","getInternalError","addTarball","shaOneHash","uploadStream","UploadTarball","_transform","abort","done","args","update","appliedData","apply","process","nextTick","emit","getForbidden","writeStream","writeTarball","on","getPackageMetadata","_err","updater","digest","pipe","getTarball","_createFailureStreamResponse","_streamSuccessReadTarBall","stream","ReadTarball","readTarballStream","readTarball","e404","content","getPackageMetadataNext","_readPackageNext","_readPackage","search","searchStream","query","t","text","q","quality","p","popularity","m","maintenance","s","size","getMetadata","searchPackage","searchPackageItem","score","flags","searchScore","end","items","item","write","getPackageStorage","_internalError","readPackageNext","_createNewPackage","updateHandler","updatePackage","bind","normalizePackage","json","savePackage","_setDefaultRevision","_rev","DEFAULT_REVISION","_debug","upLinkKey","tarballUrl","uplinkUrl","uplinks","host","protocol","registry","format","getSecret","secretKey","setSecret","checkSecretKey","Storage","_loadStorePlugin","LocalDatabase","plugin_params","plugins","store","plugin","head","saveToken","token","isFunction","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport { PassThrough } from 'stream';\nimport UrlNode from 'url';\n\nimport { errorUtils, pkgUtils, pluginUtils, searchUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, SUPPORT_ERRORS, USERS } from '@verdaccio/core';\nimport { VerdaccioError } from '@verdaccio/core';\nimport { loadPlugin } from '@verdaccio/loaders';\nimport LocalDatabase from '@verdaccio/local-storage';\nimport { ReadTarball, UploadTarball } from '@verdaccio/streams';\nimport {\n Author,\n Callback,\n CallbackAction,\n Config,\n DistFile,\n IPackageStorage,\n IReadTarball,\n IUploadTarball,\n Logger,\n MergeTags,\n Package,\n StorageUpdateCallback,\n StringValue,\n Token,\n TokenFilter,\n Version,\n} from '@verdaccio/types';\nimport { getLatestVersion, isObject } from '@verdaccio/utils';\nimport { createTarballHash, normalizeContributors } from '@verdaccio/utils';\n\nimport {\n STORAGE,\n cleanUpReadme,\n generatePackageTemplate,\n generateRevision,\n getLatestReadme,\n normalizePackage,\n tagVersion,\n} from './storage-utils';\n\nconst debug = buildDebug('verdaccio:storage:local');\n\nexport type IPluginStorage = pluginUtils.IPluginStorage<Config>;\n\nexport function normalizeSearchPackage(\n pkg: Package,\n searchItem: searchUtils.SearchItem\n): searchUtils.SearchPackageBody {\n const latest = pkgUtils.getLatest(pkg);\n const version: Version = pkg.versions[latest];\n const result: searchUtils.SearchPackageBody = {\n name: version.name,\n scope: '',\n description: version.description,\n version: latest,\n keywords: version.keywords,\n date: pkg.time[latest],\n // FIXME: type\n author: version.author as any,\n // FIXME: not possible fill this out from a private package\n publisher: {},\n // FIXME: type\n maintainers: version.maintainers as any,\n links: {\n npm: '',\n homepage: version.homepage,\n repository: version.repository,\n bugs: version.bugs,\n },\n };\n\n if (typeof searchItem.package.scoped === 'string') {\n result.scope = searchItem.package.scoped;\n }\n\n return result;\n}\n\nexport const PROTO_NAME = '__proto__';\n\n/**\n * Implements Storage interface (same for storage.js, local-storage.js, up-storage.js).\n */\nclass LocalStorage {\n public config: Config;\n public storagePlugin: IPluginStorage;\n public logger: Logger;\n\n public constructor(config: Config, logger: Logger) {\n debug('local storage created');\n this.logger = logger.child({ sub: 'fs' });\n this.config = config;\n // @ts-expect-error\n this.storagePlugin = null;\n }\n\n public async init() {\n if (this.storagePlugin === null) {\n this.storagePlugin = this._loadStorage(this.config, this.logger);\n debug('storage plugin init');\n await this.storagePlugin.init();\n debug('storage plugin initialized');\n } else {\n this.logger.warn('storage plugin has been already initialized');\n }\n return;\n }\n\n public addPackage(name: string, pkg: Package, callback: Callback): void {\n debug(`creating a package for`, name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n debug(`storage is missing for %o package cannot be added`, name);\n return callback(errorUtils.getNotFound('this package cannot be added'));\n }\n\n storage.createPackage(name, generatePackageTemplate(name), (err) => {\n if (\n _.isNull(err) === false &&\n (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)\n ) {\n debug(`error on creating a package for %o with error %o`, name, err.message);\n return callback(errorUtils.getConflict());\n }\n\n const latest = getLatestVersion(pkg);\n if (_.isNil(latest) === false && pkg.versions[latest]) {\n debug('latest version found %o for %o', latest, name);\n return callback(null, pkg.versions[latest]);\n }\n\n debug('no latest version found for %o', name);\n return callback();\n });\n }\n\n /**\n * Remove package with all it contents.\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove package %s', name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n throw errorUtils.getNotFound();\n }\n\n return new Promise((resolve, reject) => {\n storage.readPackage(name, async (err, data: Package): Promise<void> => {\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug(`error on not found %o with error %o`, name, err.message);\n return reject(errorUtils.getNotFound());\n }\n return reject(err);\n }\n\n data = normalizePackage(data);\n\n try {\n await this.storagePlugin.remove(name);\n // remove each attachment\n const attachments = Object.keys(data._attachments);\n debug('attachments to remove %s', attachments?.length);\n for (let attachment of attachments) {\n debug('remove attachment %s', attachment);\n await storage.deletePackage(attachment);\n }\n // remove package.json\n debug('remove package.json');\n await storage.deletePackage(STORAGE.PACKAGE_FILE_NAME);\n // remove folder\n debug('remove package folder');\n await storage.removePackage();\n resolve();\n } catch (err: any) {\n this.logger.error({ err }, 'removed package has failed @{err.message}');\n throw errorUtils.getBadData(err.message);\n }\n });\n });\n }\n\n /**\n * Synchronize remote package info with the local one\n * @param {*} name\n * @param {*} packageInfo\n * @param {*} callback\n */\n public updateVersions(name: string, packageInfo: Package, callback: Callback): void {\n debug(`updating versions for package %o`, name);\n this._readCreatePackage(name, (err, packageLocalJson): void => {\n if (err) {\n return callback(err);\n }\n\n let change = false;\n // updating readme\n packageLocalJson.readme = getLatestReadme(packageInfo);\n if (packageInfo.readme !== packageLocalJson.readme) {\n change = true;\n }\n\n debug('update versions');\n for (const versionId in packageInfo.versions) {\n if (_.isNil(packageLocalJson.versions[versionId])) {\n let version = packageInfo.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\n version = cleanUpReadme(version);\n debug('clean up readme for %o', versionId);\n version.contributors = normalizeContributors(version.contributors as Author[]);\n\n change = true;\n packageLocalJson.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const urlObject: any = UrlNode.parse(version.dist.tarball);\n const filename = urlObject.pathname.replace(/^.*\\//, '');\n\n // we do NOT overwrite any existing records\n if (_.isNil(packageLocalJson._distfiles[filename])) {\n const hash: DistFile = (packageLocalJson._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n\n if (_.isNil(upLink) === false) {\n this._updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n }\n }\n\n debug('update dist-tags');\n for (const tag in packageInfo[DIST_TAGS]) {\n if (\n !packageLocalJson[DIST_TAGS][tag] ||\n packageLocalJson[DIST_TAGS][tag] !== packageInfo[DIST_TAGS][tag]\n ) {\n change = true;\n packageLocalJson[DIST_TAGS][tag] = packageInfo[DIST_TAGS][tag];\n }\n }\n\n for (const up in packageInfo._uplinks) {\n if (Object.prototype.hasOwnProperty.call(packageInfo._uplinks, up)) {\n const need_change =\n !isObject(packageLocalJson._uplinks[up]) ||\n packageInfo._uplinks[up].etag !== packageLocalJson._uplinks[up].etag ||\n packageInfo._uplinks[up].fetched !== packageLocalJson._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n packageLocalJson._uplinks[up] = packageInfo._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in packageInfo && !_.isEqual(packageLocalJson.time, packageInfo.time)) {\n packageLocalJson.time = packageInfo.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n this._writePackage(name, packageLocalJson, function (err): void {\n callback(err, packageLocalJson);\n });\n } else {\n callback(null, packageLocalJson);\n }\n });\n }\n\n /**\n * Add a new version to a previous local package.\n * @param {*} name\n * @param {*} version\n * @param {*} metadata\n * @param {*} tag\n * @param {*} callback\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: Callback\n ): void {\n debug(`add version %s package for %s`, version, name);\n this._updatePackage(\n name,\n async (data, cb: Callback): Promise<void> => {\n debug('%s package is being updated', name);\n // keep only one readme per package\n data.readme = metadata.readme;\n debug('%s` readme mutated', name);\n // TODO: lodash remove\n metadata = cleanUpReadme(metadata);\n metadata.contributors = normalizeContributors(metadata.contributors as Author[]);\n debug('%s` contributors normalized', name);\n const hasVersion = data.versions[version] != null;\n if (hasVersion) {\n debug('%s version %s already exists', name, version);\n return cb(errorUtils.getConflict());\n }\n\n // if uploaded tarball has a different shasum, it's very likely that we\n // have some kind of error\n if (validatioUtils.isObject(metadata.dist) && _.isString(metadata.dist.tarball)) {\n const tarball = metadata.dist.tarball.replace(/.*\\//, '');\n\n if (validatioUtils.isObject(data._attachments[tarball])) {\n if (\n _.isNil(data._attachments[tarball].shasum) === false &&\n _.isNil(metadata.dist.shasum) === false\n ) {\n if (data._attachments[tarball].shasum != metadata.dist.shasum) {\n const errorMessage =\n `shasum error, ` +\n `${data._attachments[tarball].shasum} != ${metadata.dist.shasum}`;\n return cb(errorUtils.getBadRequest(errorMessage));\n }\n }\n\n const currentDate = new Date().toISOString();\n\n // some old storage do not have this field #740\n if (_.isNil(data.time)) {\n data.time = {};\n }\n\n data.time['modified'] = currentDate;\n\n if ('created' in data.time === false) {\n data.time.created = currentDate;\n }\n\n data.time[version] = currentDate;\n data._attachments[tarball].version = version;\n }\n }\n\n data.versions[version] = metadata;\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.storagePlugin.add(name);\n cb();\n } catch (err: any) {\n cb(errorUtils.getBadData(err.message));\n }\n },\n callback\n );\n }\n\n /**\n * Merge a new list of tags for a local packages with the existing one.\n * @param {*} pkgName\n * @param {*} tags\n * @param {*} callback\n */\n public mergeTags(pkgName: string, tags: MergeTags, callback: Callback): void {\n debug(`merge tags for`, pkgName);\n this._updatePackage(\n pkgName,\n (data, cb): void => {\n /* eslint guard-for-in: 0 */\n for (const tag in tags) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete data[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(data.versions[tags[tag]])) {\n return cb(errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST));\n }\n const version: string = tags[tag];\n tagVersion(data, version, tag);\n }\n cb(null);\n },\n callback\n );\n }\n\n /**\n * Update the package metadata, tags and attachments (tarballs).\n * Note: Currently supports unpublishing and deprecation.\n * @param {*} name\n * @param {*} incomingPkg\n * @param {*} revision\n * @param {*} callback\n * @return {Function}\n */\n public changePackage(\n name: string,\n incomingPkg: Package,\n revision: string | void,\n callback: Callback\n ): void {\n debug(`change package tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(incomingPkg.versions) ||\n !validatioUtils.isObject(incomingPkg[DIST_TAGS])\n ) {\n debug(`change package bad data for %o`, name);\n return callback(errorUtils.getBadData());\n }\n\n debug(`change package udapting package for %o`, name);\n this._updatePackage(\n name,\n (localData: Package, cb: CallbackAction): void => {\n for (const version in localData.versions) {\n const incomingVersion = incomingPkg.versions[version];\n if (_.isNil(incomingVersion)) {\n this.logger.info({ name: name, version: version }, 'unpublishing @{name}@@{version}');\n\n // FIXME: I prefer return a new object rather mutate the metadata\n delete localData.versions[version];\n delete localData.time![version];\n\n for (const file in localData._attachments) {\n if (localData._attachments[file].version === version) {\n delete localData._attachments[file].version;\n }\n }\n } else if (Object.prototype.hasOwnProperty.call(incomingVersion, 'deprecated')) {\n const incomingDeprecated = incomingVersion.deprecated;\n if (incomingDeprecated != localData.versions[version].deprecated) {\n if (!incomingDeprecated) {\n this.logger.info(\n { name: name, version: version },\n 'undeprecating @{name}@@{version}'\n );\n delete localData.versions[version].deprecated;\n } else {\n this.logger.info(\n { name: name, version: version },\n 'deprecating @{name}@@{version}'\n );\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = incomingPkg[USERS];\n localData[DIST_TAGS] = incomingPkg[DIST_TAGS];\n cb(null);\n },\n function (err): void {\n if (err) {\n return callback(err);\n }\n callback();\n }\n );\n }\n /**\n * Remove a tarball.\n * @param {*} name\n * @param {*} filename\n * @param {*} revision\n * @param {*} callback\n */\n public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n this._updatePackage(\n name,\n (data, cb): void => {\n if (data._attachments[filename]) {\n // TODO: avoid using delete\n delete data._attachments[filename];\n cb(null);\n } else {\n cb(errorUtils.getNotFound('no such file available'));\n }\n },\n (err: VerdaccioError) => {\n if (err) {\n this.logger.error({ err }, 'remove tarball error @{err.message}');\n return callback(err);\n }\n const storage = this._getLocalStorage(name);\n\n if (storage) {\n debug('removing %s from storage', filename);\n storage\n .deletePackage(filename)\n .then((): void => {\n debug('package %s removed', filename);\n return callback(null);\n })\n .catch((err) => {\n this.logger.error({ err }, 'error removing %s from storage');\n return callback(null);\n });\n } else {\n callback(errorUtils.getInternalError());\n }\n }\n );\n }\n\n /**\n * Add a tarball.\n * @param {String} name\n * @param {String} filename\n * @return {Stream}\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug(`add a tarball for %o`, name);\n assert(validatioUtils.validateName(filename));\n\n let length = 0;\n const shaOneHash = createTarballHash();\n const uploadStream: IUploadTarball = new UploadTarball({});\n const _transform = uploadStream._transform;\n const storage = this._getLocalStorage(name);\n\n uploadStream.abort = function (): void {};\n uploadStream.done = function (): void {};\n\n uploadStream._transform = function (data, ...args): void {\n shaOneHash.update(data);\n // measure the length for validation reasons\n length += data.length;\n const appliedData = [data, ...args];\n // FIXME: not sure about this approach, tsc complains\n // @ts-ignore\n _transform.apply(uploadStream, appliedData);\n };\n\n if (name === PROTO_NAME) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getForbidden());\n });\n return uploadStream;\n }\n\n // FIXME: this condition will never met, storage is always defined\n if (!storage) {\n process.nextTick((): void => {\n uploadStream.emit('error', \"can't upload this package\");\n });\n return uploadStream;\n }\n\n const writeStream: IUploadTarball = storage.writeTarball(filename);\n\n writeStream.on('error', (err) => {\n // @ts-ignore\n if (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT) {\n uploadStream.emit('error', errorUtils.getConflict());\n uploadStream.abort();\n // @ts-ignore\n } else if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n // check if package exists to throw an appropriate message\n this.getPackageMetadata(name, function (_err: VerdaccioError): void {\n if (_err) {\n uploadStream.emit('error', _err);\n } else {\n uploadStream.emit('error', err);\n }\n });\n } else {\n uploadStream.emit('error', err);\n }\n });\n\n writeStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n writeStream.on('success', (): void => {\n this._updatePackage(\n name,\n function updater(data, cb): void {\n // FUTURE: move this to tarballUtils\n data._attachments[filename] = {\n shasum: shaOneHash.digest('hex'),\n };\n cb(null);\n },\n function (err): void {\n if (err) {\n // FIXME: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n }\n );\n });\n\n uploadStream.abort = function (): void {\n writeStream.abort();\n };\n\n uploadStream.done = function (): void {\n if (!length) {\n uploadStream.emit('error', errorUtils.getBadData('refusing to accept zero-length file'));\n writeStream.abort();\n } else {\n writeStream.done();\n }\n };\n\n uploadStream.pipe(writeStream);\n\n return uploadStream;\n }\n\n /**\n * Get a tarball.\n * @param {*} name\n * @param {*} filename\n * @return {ReadTarball}\n */\n public getTarball(name: string, filename: string): IReadTarball {\n assert(validatioUtils.validateName(filename));\n\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n return this._createFailureStreamResponse();\n }\n\n return this._streamSuccessReadTarBall(storage, filename);\n }\n\n /**\n * Return a stream that emits a read failure.\n * @private\n * @return {ReadTarball}\n */\n private _createFailureStreamResponse(): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound('no such file available'));\n });\n return stream;\n }\n\n /**\n * Return a stream that emits the tarball data\n * @param {Object} storage\n * @param {String} filename\n * @private\n * @return {ReadTarball}\n */\n private _streamSuccessReadTarBall(storage: any, filename: string): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n const readTarballStream = storage.readTarball(filename);\n const e404 = errorUtils.getNotFound;\n\n stream.abort = function (): void {\n if (_.isNil(readTarballStream) === false) {\n readTarballStream.abort();\n }\n };\n\n readTarballStream.on('error', function (err) {\n // @ts-ignore\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n stream.emit('error', e404('no such file available'));\n } else {\n stream.emit('error', err);\n }\n });\n\n readTarballStream.on('content-length', function (content): void {\n stream.emit('content-length', content);\n });\n\n readTarballStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n stream.emit('open');\n readTarballStream.pipe(stream);\n });\n\n return stream;\n }\n\n public async getPackageMetadataNext(name: string): Promise<Package> {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n // TODO: this might be a better an error to throw\n // if storage is not there cannot be 404.\n throw errorUtils.getNotFound();\n }\n\n return await this._readPackageNext(name, storage);\n }\n\n /**\n * Retrieve a package by name.\n * @param {*} name\n * @param {*} callback\n * @return {Function}\n * @deprecated\n */\n public getPackageMetadata(name: string, callback: Callback = (): void => {}): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n return callback(errorUtils.getNotFound());\n }\n\n this._readPackage(name, storage, callback);\n }\n\n public async search(searchStream: PassThrough, query: searchUtils.SearchQuery): Promise<void> {\n debug('search on each package');\n this.logger.info(\n { t: query.text, q: query.quality, p: query.popularity, m: query.maintenance, s: query.size },\n 'search by text @{t}| maintenance @{m}| quality @{q}| popularity @{p}'\n );\n const getMetadata = (searchItem: searchUtils.SearchItem) => {\n return new Promise((resolve, reject) => {\n this.getPackageMetadata(\n searchItem?.package?.name,\n (err: VerdaccioError, pkg: Package): void => {\n if (err) {\n this.logger.error(\n { err, pkgName: searchItem?.package?.name },\n 'error on load package @{pkgName} metaadata @{err.message}'\n );\n reject(err);\n }\n\n const searchPackage = normalizeSearchPackage(pkg, searchItem);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n debug('push to stream %o', searchItem?.package?.name);\n resolve(searchPackageItem);\n }\n );\n });\n };\n\n if (typeof this.storagePlugin.search === 'undefined') {\n this.logger.info('plugin search not implemented yet');\n searchStream.end();\n } else {\n debug('search on each package by plugin');\n const items = await this.storagePlugin.search(query);\n try {\n for (const item of items) {\n const metadata = await getMetadata(item);\n searchStream.write(metadata);\n }\n debug('search local stream end');\n searchStream.end();\n } catch (err) {\n this.logger.error({ err, query }, 'error on search by plugin @{err.message}');\n searchStream.emit('error', err);\n }\n }\n }\n\n /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private _getLocalStorage(pkgName: string): IPackageStorage {\n debug('get local storage for %o', pkgName);\n return this.storagePlugin.getPackageStorage(pkgName);\n }\n\n /**\n * Read a json file from storage.\n * @param {Object} storage\n * @param {Function} callback\n * @deprecated\n */\n private _readPackage(name: string, storage: any, callback: Callback): void {\n storage.readPackage(name, (err, result): void => {\n if (err) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n return callback(errorUtils.getNotFound());\n }\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n\n callback(err, normalizePackage(result));\n });\n }\n\n private async _readPackageNext(name: string, storage: any): Promise<Package> {\n try {\n const result: Package = await storage.readPackageNext(name);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n throw errorUtils.getNotFound();\n }\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `error reading @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n\n /**\n * Retrieve either a previous created local package or a boilerplate.\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private _readCreatePackage(pkgName: string, callback: Callback): void {\n const storage: any = this._getLocalStorage(pkgName);\n if (_.isNil(storage)) {\n this._createNewPackage(pkgName, callback);\n return;\n }\n\n storage.readPackage(pkgName, (err, data): void => {\n // TODO: race condition\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n data = generatePackageTemplate(pkgName);\n } else {\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n }\n\n callback(null, normalizePackage(data));\n });\n }\n\n private _createNewPackage(name: string, callback: Callback): Callback {\n return callback(null, normalizePackage(generatePackageTemplate(name)));\n }\n\n /**\n * Handle internal error\n * @param {*} err\n * @param {*} file\n * @param {*} message\n * @return {Object} Error instance\n */\n private _internalError(err: string, file: string, message: string): VerdaccioError {\n this.logger.error({ err: err, file: file }, `${message} @{file}: @{!err.message}`);\n\n return errorUtils.getInternalError();\n }\n\n /**\n * @param {*} name package name\n * @param {*} updateHandler function(package, cb) - update function\n * @param {*} callback callback that gets invoked after it's all updated\n * @return {Function}\n */\n private _updatePackage(\n name: string,\n updateHandler: StorageUpdateCallback,\n callback: Callback\n ): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (!storage) {\n return callback(errorUtils.getNotFound());\n }\n\n storage.updatePackage(\n name,\n updateHandler,\n this._writePackage.bind(this),\n normalizePackage,\n callback\n );\n }\n\n /**\n * Update the revision (_rev) string for a package.\n * @param {*} name\n * @param {*} json\n * @param {*} callback\n * @return {Function}\n */\n private _writePackage(name: string, json: Package, callback: Callback): void {\n const storage: any = this._getLocalStorage(name);\n if (_.isNil(storage)) {\n return callback();\n }\n storage.savePackage(name, this._setDefaultRevision(json), callback);\n }\n\n private _setDefaultRevision(json: Package): Package {\n // calculate revision from couch db\n if (_.isString(json._rev) === false) {\n json._rev = STORAGE.DEFAULT_REVISION;\n }\n\n // this is intended in debug mode we do not want modify the store revision\n if (_.isNil(this.config._debug)) {\n json._rev = generateRevision(json._rev);\n }\n\n return json;\n }\n\n // private _deleteAttachments(storage: any, attachments: string[], callback: Callback): void {\n // debug('deleting %o attachments total %o', attachments?.length);\n // const unlinkNext = function (cb): void {\n // if (_.isEmpty(attachments)) {\n // return cb();\n // }\n\n // const attachment = attachments.shift();\n // storage.deletePackage(attachment, function (): void {\n // unlinkNext(cb);\n // });\n // };\n\n // unlinkNext(function (): void {\n // // try to unlink the directory, but ignore errors because it can fail\n // storage.removePackage(function (err): void {\n // callback(err);\n // });\n // });\n // }\n\n /**\n * Ensure the dist file remains as the same protocol\n * @param {Object} hash metadata\n * @param {String} upLinkKey registry key\n * @private\n */\n private _updateUplinkToRemoteProtocol(hash: DistFile, upLinkKey: string): void {\n // if we got this information from a known registry,\n // use the same protocol for the tarball\n //\n // see https://github.com/rlidwka/sinopia/issues/166\n const tarballUrl: any = UrlNode.parse(hash.url);\n const uplinkUrl: any = UrlNode.parse(this.config.uplinks[upLinkKey].url);\n\n if (uplinkUrl.host === tarballUrl.host) {\n tarballUrl.protocol = uplinkUrl.protocol;\n hash.registry = upLinkKey;\n hash.url = UrlNode.format(tarballUrl);\n }\n }\n\n public async getSecret(config: Config): Promise<void> {\n const secretKey = await this.storagePlugin.getSecret();\n\n return this.storagePlugin.setSecret(config.checkSecretKey(secretKey));\n }\n\n private _loadStorage(config: Config, logger: Logger): IPluginStorage {\n const Storage = this._loadStorePlugin();\n\n if (_.isNil(Storage)) {\n assert(this.config.storage, 'CONFIG: storage path not defined');\n return new LocalDatabase(this.config, logger);\n }\n return Storage as IPluginStorage;\n }\n\n private _loadStorePlugin(): IPluginStorage | void {\n const plugin_params = {\n config: this.config,\n logger: this.logger,\n };\n\n const plugins: IPluginStorage[] = loadPlugin<IPluginStorage>(\n this.config,\n this.config.store,\n plugin_params,\n (plugin): IPluginStorage => {\n return plugin.getPackageStorage;\n }\n );\n\n return _.head(plugins);\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.storagePlugin.saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.storagePlugin.deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.storagePlugin.readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.readTokens(filter);\n }\n}\n\nexport { LocalStorage };\n"],"file":"local-storage.js"}
|
package/build/search.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import lunrMutable from 'lunr-mutable-indexes';
|
|
2
|
-
import { Version } from '@verdaccio/types';
|
|
3
|
-
import { ProxyList, ProxySearchParams } from '@verdaccio/proxy';
|
|
4
2
|
import { searchUtils } from '@verdaccio/core';
|
|
3
|
+
import { ProxyList, ProxySearchParams } from '@verdaccio/proxy';
|
|
4
|
+
import { Version } from '@verdaccio/types';
|
|
5
5
|
import { LocalStorage } from './local-storage';
|
|
6
6
|
import { Storage } from './storage';
|
|
7
7
|
export interface ISearchResult {
|