@verdaccio/store 6.0.0-6-next.21 → 6.0.0-6-next.24
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 +92 -0
- package/build/index.d.ts +5 -4
- package/build/index.js +31 -15
- package/build/index.js.map +1 -1
- package/build/lib/TransFormResults.d.ts +15 -0
- package/build/lib/TransFormResults.js +61 -0
- package/build/lib/TransFormResults.js.map +1 -0
- package/build/lib/search-utils.d.ts +4 -0
- package/build/lib/search-utils.js +59 -0
- package/build/lib/search-utils.js.map +1 -0
- package/build/lib/star-utils.d.ts +14 -0
- package/build/{star-utils.js → lib/star-utils.js} +16 -2
- package/build/lib/star-utils.js.map +1 -0
- package/build/lib/storage-utils.d.ts +82 -0
- package/build/{storage-utils.js → lib/storage-utils.js} +173 -60
- package/build/lib/storage-utils.js.map +1 -0
- package/build/lib/uplink-util.d.ts +10 -0
- package/build/lib/uplink-util.js +49 -0
- package/build/lib/uplink-util.js.map +1 -0
- package/build/lib/versions-utils.d.ts +28 -0
- package/build/lib/versions-utils.js +104 -0
- package/build/lib/versions-utils.js.map +1 -0
- package/build/local-storage.d.ts +3 -165
- package/build/local-storage.js +6 -1166
- package/build/local-storage.js.map +1 -1
- package/build/storage.d.ts +242 -86
- package/build/storage.js +1681 -548
- package/build/storage.js.map +1 -1
- package/build/type.d.ts +42 -19
- package/build/type.js.map +1 -1
- package/jest.config.js +8 -2
- package/package.json +71 -71
- package/src/index.ts +5 -4
- package/src/lib/TransFormResults.ts +42 -0
- package/src/lib/search-utils.ts +50 -0
- package/src/{star-utils.ts → lib/star-utils.ts} +16 -5
- package/src/lib/storage-utils.ts +362 -0
- package/src/lib/uplink-util.ts +41 -0
- package/src/lib/versions-utils.ts +87 -0
- package/src/local-storage.ts +7 -1217
- package/src/storage.ts +1683 -635
- package/src/type.ts +47 -21
- package/test/fixtures/config/getTarballNext-getupstream.yaml +17 -0
- package/test/fixtures/config/syncDoubleUplinksMetadata.yaml +25 -0
- package/test/fixtures/config/syncNoUplinksMetadata.yaml +17 -0
- package/test/fixtures/config/syncSingleUplinksMetadata.yaml +21 -0
- package/test/fixtures/config/updateManifest-1.yaml +16 -0
- package/test/fixtures/manifests/foo-npmjs.json +253 -0
- package/test/fixtures/manifests/foo-verdaccio.json +253 -0
- package/test/fixtures/tarball.tgz +0 -0
- package/test/helpers.ts +22 -0
- package/test/local-store.__disabled__.ts +553 -0
- package/test/search.spec.ts +4 -5
- package/test/star.spec.ts +31 -0
- package/test/storage-utils.spec.ts +129 -42
- package/test/storage.spec.ts +943 -33
- package/test/versions.spec.ts +109 -0
- package/tsconfig.json +6 -3
- package/build/search.d.ts +0 -35
- package/build/search.js +0 -198
- package/build/search.js.map +0 -1
- package/build/star-utils.d.ts +0 -9
- package/build/star-utils.js.map +0 -1
- package/build/storage-utils.d.ts +0 -39
- package/build/storage-utils.js.map +0 -1
- package/build/uplink-util.d.ts +0 -7
- package/build/uplink-util.js +0 -38
- package/build/uplink-util.js.map +0 -1
- package/src/search.ts +0 -175
- package/src/storage-utils.ts +0 -263
- package/src/uplink-util.ts +0 -32
- package/test/local-storage.spec.ts +0 -583
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
2
|
+
|
|
3
|
+
import { getVersion, sortVersionsAndFilterInvalid, tagVersion } from '../src/index';
|
|
4
|
+
|
|
5
|
+
describe('versions-utils', () => {
|
|
6
|
+
const dist = (version) => ({
|
|
7
|
+
tarball: `http://registry.org/npm_test/-/npm_test-${version}.tgz`,
|
|
8
|
+
shasum: `sha1-${version}`,
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
describe('getVersion', () => {
|
|
12
|
+
const metadata = {
|
|
13
|
+
'1.0.0': { dist: dist('1.0.0') },
|
|
14
|
+
'1.0.1': { dist: dist('1.0.1') },
|
|
15
|
+
'0.2.1-1': { dist: dist('0.2.1-1') },
|
|
16
|
+
'0.2.1-alpha': { dist: dist('0.2.1-alpha') },
|
|
17
|
+
'0.2.1-alpha.0': { dist: dist('0.2.1-alpha.0') },
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
test('should get the right version', () => {
|
|
21
|
+
expect(getVersion({ ...metadata } as any, '1.0.0')).toEqual({ dist: dist('1.0.0') });
|
|
22
|
+
expect(getVersion({ ...metadata } as any, 'v1.0.0')).toEqual({ dist: dist('1.0.0') });
|
|
23
|
+
expect(getVersion({ ...metadata } as any, 'v0.2.1-1')).toEqual({ dist: dist('0.2.1-1') });
|
|
24
|
+
expect(getVersion({ ...metadata } as any, '0.2.1-alpha')).toEqual({
|
|
25
|
+
dist: dist('0.2.1-alpha'),
|
|
26
|
+
});
|
|
27
|
+
expect(getVersion({ ...metadata } as any, '0.2.1-alpha.0')).toEqual({
|
|
28
|
+
dist: dist('0.2.1-alpha.0'),
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('should return nothing on get non existing version', () => {
|
|
33
|
+
expect(getVersion({ ...metadata } as any, '0')).toBeUndefined();
|
|
34
|
+
expect(getVersion({ ...metadata } as any, '2.0.0')).toBeUndefined();
|
|
35
|
+
expect(getVersion({ ...metadata } as any, 'v2.0.0')).toBeUndefined();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('should return nothing on get invalid versions', () => {
|
|
39
|
+
expect(getVersion({ ...metadata } as any, undefined)).toBeUndefined();
|
|
40
|
+
expect(getVersion({ ...metadata } as any, null)).toBeUndefined();
|
|
41
|
+
expect(getVersion({ ...metadata } as any, 8)).toBeUndefined();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test('should handle no versions', () => {
|
|
45
|
+
expect(getVersion(undefined, undefined)).toBeUndefined();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('sortVersionsAndFilterInvalid', () => {
|
|
50
|
+
test('should sort versions', () => {
|
|
51
|
+
expect(sortVersionsAndFilterInvalid(['1.0.0', '5.0.0', '2.0.0'])).toEqual([
|
|
52
|
+
'1.0.0',
|
|
53
|
+
'2.0.0',
|
|
54
|
+
'5.0.0',
|
|
55
|
+
]);
|
|
56
|
+
});
|
|
57
|
+
test('should sort versions and filter out invalid', () => {
|
|
58
|
+
expect(sortVersionsAndFilterInvalid(['1.0.0', '5.0.0', '2.0.0', '', null])).toEqual([
|
|
59
|
+
'1.0.0',
|
|
60
|
+
'2.0.0',
|
|
61
|
+
'5.0.0',
|
|
62
|
+
]);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
describe('tagVersion', () => {
|
|
67
|
+
test('add new one', () => {
|
|
68
|
+
let pkg = {
|
|
69
|
+
versions: {},
|
|
70
|
+
'dist-tags': {},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
assert(tagVersion(pkg, '1.1.1', 'foo', {}));
|
|
75
|
+
assert.deepEqual(pkg, {
|
|
76
|
+
versions: {},
|
|
77
|
+
'dist-tags': { foo: '1.1.1' },
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('add (compat)', () => {
|
|
82
|
+
const x = {
|
|
83
|
+
versions: {},
|
|
84
|
+
'dist-tags': { foo: '1.1.0' },
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// @ts-ignore
|
|
88
|
+
assert(tagVersion(x, '1.1.1', 'foo'));
|
|
89
|
+
assert.deepEqual(x, {
|
|
90
|
+
versions: {},
|
|
91
|
+
'dist-tags': { foo: '1.1.1' },
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test('add fresh tag', () => {
|
|
96
|
+
let x = {
|
|
97
|
+
versions: {},
|
|
98
|
+
'dist-tags': { foo: '1.1.0' },
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// @ts-ignore
|
|
102
|
+
assert(tagVersion(x, '1.1.1', 'foo'));
|
|
103
|
+
assert.deepEqual(x, {
|
|
104
|
+
versions: {},
|
|
105
|
+
'dist-tags': { foo: '1.1.1' },
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
});
|
package/tsconfig.json
CHANGED
|
@@ -11,17 +11,20 @@
|
|
|
11
11
|
"path": "../config"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
"path": "../
|
|
14
|
+
"path": "../plugins/local-storage"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
|
-
"path": "../core/
|
|
17
|
+
"path": "../core/streams"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
"path": "../core/
|
|
20
|
+
"path": "../core/url"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"path": "../core/core"
|
|
24
24
|
},
|
|
25
|
+
{
|
|
26
|
+
"path": "../hooks"
|
|
27
|
+
},
|
|
25
28
|
{
|
|
26
29
|
"path": "../loaders"
|
|
27
30
|
},
|
package/build/search.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { searchUtils } from '@verdaccio/core';
|
|
2
|
-
import { ProxyList, ProxySearchParams } from '@verdaccio/proxy';
|
|
3
|
-
import { Version } from '@verdaccio/types';
|
|
4
|
-
import { LocalStorage } from './local-storage';
|
|
5
|
-
import { Storage } from './storage';
|
|
6
|
-
export interface ISearchResult {
|
|
7
|
-
ref: string;
|
|
8
|
-
score: number;
|
|
9
|
-
}
|
|
10
|
-
export interface IWebSearch {
|
|
11
|
-
storage: Storage;
|
|
12
|
-
query(query: string): ISearchResult[];
|
|
13
|
-
add(pkg: Version): void;
|
|
14
|
-
remove(name: string): void;
|
|
15
|
-
reindex(): void;
|
|
16
|
-
configureStorage(storage: Storage): void;
|
|
17
|
-
}
|
|
18
|
-
export declare function removeDuplicates(results: searchUtils.SearchPackageItem[]): searchUtils.SearchPackageItem[];
|
|
19
|
-
export declare class SearchManager {
|
|
20
|
-
readonly uplinks: ProxyList;
|
|
21
|
-
readonly localStorage: LocalStorage;
|
|
22
|
-
constructor(uplinks: ProxyList, storage: LocalStorage);
|
|
23
|
-
get proxyList(): string[];
|
|
24
|
-
/**
|
|
25
|
-
* Handle search on packages and proxies.
|
|
26
|
-
* Iterate all proxies configured and search in all endpoints in v2 and pipe all responses
|
|
27
|
-
* to a stream, once the proxies request has finished search in local storage for all packages
|
|
28
|
-
* (privated and cached).
|
|
29
|
-
*/
|
|
30
|
-
search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]>;
|
|
31
|
-
/**
|
|
32
|
-
* Consume the upstream and pipe it to a transformable stream.
|
|
33
|
-
*/
|
|
34
|
-
private consumeSearchStream;
|
|
35
|
-
}
|
package/build/search.js
DELETED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.SearchManager = void 0;
|
|
7
|
-
exports.removeDuplicates = removeDuplicates;
|
|
8
|
-
|
|
9
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
10
|
-
|
|
11
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
12
|
-
|
|
13
|
-
var _stream = require("stream");
|
|
14
|
-
|
|
15
|
-
var _core = require("@verdaccio/core");
|
|
16
|
-
|
|
17
|
-
var _logger = require("@verdaccio/logger");
|
|
18
|
-
|
|
19
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
|
-
|
|
21
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
22
|
-
// eslint-disable no-invalid-this
|
|
23
|
-
const debug = (0, _debug.default)('verdaccio:storage:search');
|
|
24
|
-
|
|
25
|
-
function removeDuplicates(results) {
|
|
26
|
-
const pkgNames = [];
|
|
27
|
-
|
|
28
|
-
const orderByResults = _lodash.default.orderBy(results, ['verdaccioPrivate', 'asc']);
|
|
29
|
-
|
|
30
|
-
return orderByResults.filter(pkg => {
|
|
31
|
-
var _pkg$package, _pkg$package2;
|
|
32
|
-
|
|
33
|
-
if (pkgNames.includes(pkg === null || pkg === void 0 ? void 0 : (_pkg$package = pkg.package) === null || _pkg$package === void 0 ? void 0 : _pkg$package.name)) {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
pkgNames.push(pkg === null || pkg === void 0 ? void 0 : (_pkg$package2 = pkg.package) === null || _pkg$package2 === void 0 ? void 0 : _pkg$package2.name);
|
|
38
|
-
return true;
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
class TransFormResults extends _stream.Transform {
|
|
43
|
-
constructor(options) {
|
|
44
|
-
super(options);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Transform either array of packages or a single package into a stream of packages.
|
|
48
|
-
* From uplinks the chunks are array but from local packages are objects.
|
|
49
|
-
* @param {string} chunk
|
|
50
|
-
* @param {string} encoding
|
|
51
|
-
* @param {function} done
|
|
52
|
-
* @returns {void}
|
|
53
|
-
* @override
|
|
54
|
-
*/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
_transform(chunk, _encoding, callback) {
|
|
58
|
-
if (_lodash.default.isArray(chunk)) {
|
|
59
|
-
// from remotes we should expect chunks as arrays
|
|
60
|
-
chunk.filter(pkgItem => {
|
|
61
|
-
var _pkgItem$package;
|
|
62
|
-
|
|
63
|
-
debug(`streaming remote pkg name ${pkgItem === null || pkgItem === void 0 ? void 0 : (_pkgItem$package = pkgItem.package) === null || _pkgItem$package === void 0 ? void 0 : _pkgItem$package.name}`);
|
|
64
|
-
return true;
|
|
65
|
-
}).forEach(pkgItem => {
|
|
66
|
-
this.push({ ...pkgItem,
|
|
67
|
-
verdaccioPkgCached: false,
|
|
68
|
-
verdaccioPrivate: false
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
return callback();
|
|
72
|
-
} else {
|
|
73
|
-
var _chunk$package;
|
|
74
|
-
|
|
75
|
-
// local we expect objects
|
|
76
|
-
debug(`streaming local pkg name ${chunk === null || chunk === void 0 ? void 0 : (_chunk$package = chunk.package) === null || _chunk$package === void 0 ? void 0 : _chunk$package.name}`);
|
|
77
|
-
this.push(chunk);
|
|
78
|
-
return callback();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
class SearchManager {
|
|
85
|
-
constructor(uplinks, storage) {
|
|
86
|
-
this.uplinks = uplinks;
|
|
87
|
-
this.localStorage = storage;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
get proxyList() {
|
|
91
|
-
const uplinksList = Object.keys(this.uplinks);
|
|
92
|
-
return uplinksList;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Handle search on packages and proxies.
|
|
96
|
-
* Iterate all proxies configured and search in all endpoints in v2 and pipe all responses
|
|
97
|
-
* to a stream, once the proxies request has finished search in local storage for all packages
|
|
98
|
-
* (privated and cached).
|
|
99
|
-
*/
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
async search(options) {
|
|
103
|
-
const transformResults = new TransFormResults({
|
|
104
|
-
objectMode: true
|
|
105
|
-
});
|
|
106
|
-
const streamPassThrough = new _stream.PassThrough({
|
|
107
|
-
objectMode: true
|
|
108
|
-
});
|
|
109
|
-
const upLinkList = this.proxyList;
|
|
110
|
-
const searchUplinksStreams = upLinkList.map(uplinkId => {
|
|
111
|
-
const uplink = this.uplinks[uplinkId];
|
|
112
|
-
|
|
113
|
-
if (!uplink) {
|
|
114
|
-
// this should never tecnically happens
|
|
115
|
-
_logger.logger.fatal({
|
|
116
|
-
uplinkId
|
|
117
|
-
}, 'uplink @upLinkId not found');
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return this.consumeSearchStream(uplinkId, uplink, options, streamPassThrough);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
try {
|
|
124
|
-
debug('search uplinks'); // we only process those streams end successfully, if all fails
|
|
125
|
-
// we just include local storage
|
|
126
|
-
|
|
127
|
-
await Promise.allSettled([...searchUplinksStreams]);
|
|
128
|
-
debug('search uplinks done');
|
|
129
|
-
} catch (err) {
|
|
130
|
-
_logger.logger.error({
|
|
131
|
-
err: err === null || err === void 0 ? void 0 : err.message
|
|
132
|
-
}, ' error on uplinks search @{err}');
|
|
133
|
-
|
|
134
|
-
streamPassThrough.emit('error', err);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
debug('search local');
|
|
138
|
-
|
|
139
|
-
try {
|
|
140
|
-
await this.localStorage.search(streamPassThrough, options.query);
|
|
141
|
-
} catch (err) {
|
|
142
|
-
_logger.logger.error({
|
|
143
|
-
err: err === null || err === void 0 ? void 0 : err.message
|
|
144
|
-
}, ' error on local search @{err}');
|
|
145
|
-
|
|
146
|
-
streamPassThrough.emit('error', err);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const data = [];
|
|
150
|
-
const outPutStream = new _stream.PassThrough({
|
|
151
|
-
objectMode: true
|
|
152
|
-
});
|
|
153
|
-
(0, _stream.pipeline)(streamPassThrough, transformResults, outPutStream, err => {
|
|
154
|
-
if (err) {
|
|
155
|
-
throw _core.errorUtils.getInternalError(err ? err.message : 'unknown error');
|
|
156
|
-
} else {
|
|
157
|
-
debug('pipeline succeeded');
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
outPutStream.on('data', chunk => {
|
|
161
|
-
data.push(chunk);
|
|
162
|
-
});
|
|
163
|
-
return new Promise(resolve => {
|
|
164
|
-
outPutStream.on('finish', async () => {
|
|
165
|
-
const searchFinalResults = removeDuplicates(data);
|
|
166
|
-
debug('search stream total results: %o', searchFinalResults.length);
|
|
167
|
-
return resolve(searchFinalResults);
|
|
168
|
-
});
|
|
169
|
-
debug('search done');
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Consume the upstream and pipe it to a transformable stream.
|
|
174
|
-
*/
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
consumeSearchStream(uplinkId, uplink, options, searchPassThrough) {
|
|
178
|
-
return uplink.search({ ...options
|
|
179
|
-
}).then(bodyStream => {
|
|
180
|
-
bodyStream.pipe(searchPassThrough, {
|
|
181
|
-
end: false
|
|
182
|
-
});
|
|
183
|
-
bodyStream.on('error', err => {
|
|
184
|
-
_logger.logger.error({
|
|
185
|
-
uplinkId,
|
|
186
|
-
err: err
|
|
187
|
-
}, 'search error for uplink @{uplinkId}: @{err?.message}');
|
|
188
|
-
|
|
189
|
-
searchPassThrough.end();
|
|
190
|
-
});
|
|
191
|
-
return new Promise(resolve => bodyStream.on('end', resolve));
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
exports.SearchManager = SearchManager;
|
|
198
|
-
//# sourceMappingURL=search.js.map
|
package/build/search.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/search.ts"],"names":["debug","removeDuplicates","results","pkgNames","orderByResults","_","orderBy","filter","pkg","includes","package","name","push","TransFormResults","Transform","constructor","options","_transform","chunk","_encoding","callback","isArray","pkgItem","forEach","verdaccioPkgCached","verdaccioPrivate","SearchManager","uplinks","storage","localStorage","proxyList","uplinksList","Object","keys","search","transformResults","objectMode","streamPassThrough","PassThrough","upLinkList","searchUplinksStreams","map","uplinkId","uplink","logger","fatal","consumeSearchStream","Promise","allSettled","err","error","message","emit","query","data","outPutStream","errorUtils","getInternalError","on","resolve","searchFinalResults","length","searchPassThrough","then","bodyStream","pipe","end"],"mappings":";;;;;;;;AAEA;;AACA;;AACA;;AAGA;;AACA;;;;AARA;AACA;AAcA,MAAMA,KAAK,GAAG,oBAAW,0BAAX,CAAd;;AAgBO,SAASC,gBAAT,CAA0BC,OAA1B,EAAoE;AACzE,QAAMC,QAAe,GAAG,EAAxB;;AACA,QAAMC,cAAc,GAAGC,gBAAEC,OAAF,CAAUJ,OAAV,EAAmB,CAAC,kBAAD,EAAqB,KAArB,CAAnB,CAAvB;;AACA,SAAOE,cAAc,CAACG,MAAf,CAAuBC,GAAD,IAAS;AAAA;;AACpC,QAAIL,QAAQ,CAACM,QAAT,CAAkBD,GAAlB,aAAkBA,GAAlB,uCAAkBA,GAAG,CAAEE,OAAvB,iDAAkB,aAAcC,IAAhC,CAAJ,EAA2C;AACzC,aAAO,KAAP;AACD;;AACDR,IAAAA,QAAQ,CAACS,IAAT,CAAcJ,GAAd,aAAcA,GAAd,wCAAcA,GAAG,CAAEE,OAAnB,kDAAc,cAAcC,IAA5B;AACA,WAAO,IAAP;AACD,GANM,CAAP;AAOD;;AAED,MAAME,gBAAN,SAA+BC,iBAA/B,CAAyC;AAChCC,EAAAA,WAAW,CAACC,OAAD,EAAU;AAC1B,UAAMA,OAAN;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACSC,EAAAA,UAAU,CAACC,KAAD,EAAQC,SAAR,EAAmBC,QAAnB,EAA6B;AAC5C,QAAIf,gBAAEgB,OAAF,CAAUH,KAAV,CAAJ,EAAsB;AACpB;AACCA,MAAAA,KAAD,CACGX,MADH,CACWe,OAAD,IAAa;AAAA;;AACnBtB,QAAAA,KAAK,CAAE,6BAA4BsB,OAA7B,aAA6BA,OAA7B,2CAA6BA,OAAO,CAAEZ,OAAtC,qDAA6B,iBAAkBC,IAAK,EAArD,CAAL;AACA,eAAO,IAAP;AACD,OAJH,EAKGY,OALH,CAKYD,OAAD,IAAa;AACpB,aAAKV,IAAL,CAAU,EAAE,GAAGU,OAAL;AAAcE,UAAAA,kBAAkB,EAAE,KAAlC;AAAyCC,UAAAA,gBAAgB,EAAE;AAA3D,SAAV;AACD,OAPH;AAQA,aAAOL,QAAQ,EAAf;AACD,KAXD,MAWO;AAAA;;AACL;AACApB,MAAAA,KAAK,CAAE,4BAA2BkB,KAA5B,aAA4BA,KAA5B,yCAA4BA,KAAK,CAAER,OAAnC,mDAA4B,eAAgBC,IAAK,EAAlD,CAAL;AACA,WAAKC,IAAL,CAAUM,KAAV;AACA,aAAOE,QAAQ,EAAf;AACD;AACF;;AAhCsC;;AAmClC,MAAMM,aAAN,CAAoB;AAGzBX,EAAAA,WAAW,CAACY,OAAD,EAAqBC,OAArB,EAA4C;AACrD,SAAKD,OAAL,GAAeA,OAAf;AACA,SAAKE,YAAL,GAAoBD,OAApB;AACD;;AAEmB,MAATE,SAAS,GAAG;AACrB,UAAMC,WAAW,GAAGC,MAAM,CAACC,IAAP,CAAY,KAAKN,OAAjB,CAApB;AAEA,WAAOI,WAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACqB,QAANG,MAAM,CAAClB,OAAD,EAAuE;AACxF,UAAMmB,gBAAgB,GAAG,IAAItB,gBAAJ,CAAqB;AAAEuB,MAAAA,UAAU,EAAE;AAAd,KAArB,CAAzB;AACA,UAAMC,iBAAiB,GAAG,IAAIC,mBAAJ,CAAgB;AAAEF,MAAAA,UAAU,EAAE;AAAd,KAAhB,CAA1B;AACA,UAAMG,UAAU,GAAG,KAAKT,SAAxB;AAEA,UAAMU,oBAAoB,GAAGD,UAAU,CAACE,GAAX,CAAgBC,QAAD,IAAc;AACxD,YAAMC,MAAM,GAAG,KAAKhB,OAAL,CAAae,QAAb,CAAf;;AACA,UAAI,CAACC,MAAL,EAAa;AACX;AACAC,uBAAOC,KAAP,CAAa;AAAEH,UAAAA;AAAF,SAAb,EAA2B,4BAA3B;AACD;;AACD,aAAO,KAAKI,mBAAL,CAAyBJ,QAAzB,EAAmCC,MAAnC,EAA2C3B,OAA3C,EAAoDqB,iBAApD,CAAP;AACD,KAP4B,CAA7B;;AASA,QAAI;AACFrC,MAAAA,KAAK,CAAC,gBAAD,CAAL,CADE,CAEF;AACA;;AACA,YAAM+C,OAAO,CAACC,UAAR,CAAmB,CAAC,GAAGR,oBAAJ,CAAnB,CAAN;AACAxC,MAAAA,KAAK,CAAC,qBAAD,CAAL;AACD,KAND,CAME,OAAOiD,GAAP,EAAiB;AACjBL,qBAAOM,KAAP,CAAa;AAAED,QAAAA,GAAG,EAAEA,GAAF,aAAEA,GAAF,uBAAEA,GAAG,CAAEE;AAAZ,OAAb,EAAoC,iCAApC;;AACAd,MAAAA,iBAAiB,CAACe,IAAlB,CAAuB,OAAvB,EAAgCH,GAAhC;AACD;;AACDjD,IAAAA,KAAK,CAAC,cAAD,CAAL;;AACA,QAAI;AACF,YAAM,KAAK6B,YAAL,CAAkBK,MAAlB,CAAyBG,iBAAzB,EAA4CrB,OAAO,CAACqC,KAApD,CAAN;AACD,KAFD,CAEE,OAAOJ,GAAP,EAAiB;AACjBL,qBAAOM,KAAP,CAAa;AAAED,QAAAA,GAAG,EAAEA,GAAF,aAAEA,GAAF,uBAAEA,GAAG,CAAEE;AAAZ,OAAb,EAAoC,+BAApC;;AACAd,MAAAA,iBAAiB,CAACe,IAAlB,CAAuB,OAAvB,EAAgCH,GAAhC;AACD;;AACD,UAAMK,IAAqC,GAAG,EAA9C;AACA,UAAMC,YAAY,GAAG,IAAIjB,mBAAJ,CAAgB;AAAEF,MAAAA,UAAU,EAAE;AAAd,KAAhB,CAArB;AACA,0BAASC,iBAAT,EAA4BF,gBAA5B,EAA8CoB,YAA9C,EAA6DN,GAAD,IAAS;AACnE,UAAIA,GAAJ,EAAS;AACP,cAAMO,iBAAWC,gBAAX,CAA4BR,GAAG,GAAGA,GAAG,CAACE,OAAP,GAAiB,eAAhD,CAAN;AACD,OAFD,MAEO;AACLnD,QAAAA,KAAK,CAAC,oBAAD,CAAL;AACD;AACF,KAND;AAQAuD,IAAAA,YAAY,CAACG,EAAb,CAAgB,MAAhB,EAAyBxC,KAAD,IAAW;AACjCoC,MAAAA,IAAI,CAAC1C,IAAL,CAAUM,KAAV;AACD,KAFD;AAIA,WAAO,IAAI6B,OAAJ,CAAaY,OAAD,IAAa;AAC9BJ,MAAAA,YAAY,CAACG,EAAb,CAAgB,QAAhB,EAA0B,YAAY;AACpC,cAAME,kBAAmD,GAAG3D,gBAAgB,CAACqD,IAAD,CAA5E;AACAtD,QAAAA,KAAK,CAAC,iCAAD,EAAoC4D,kBAAkB,CAACC,MAAvD,CAAL;AACA,eAAOF,OAAO,CAACC,kBAAD,CAAd;AACD,OAJD;AAKA5D,MAAAA,KAAK,CAAC,aAAD,CAAL;AACD,KAPM,CAAP;AAQD;AAED;AACF;AACA;;;AACU8C,EAAAA,mBAAmB,CACzBJ,QADyB,EAEzBC,MAFyB,EAGzB3B,OAHyB,EAIzB8C,iBAJyB,EAKX;AACd,WAAOnB,MAAM,CAACT,MAAP,CAAc,EAAE,GAAGlB;AAAL,KAAd,EAA8B+C,IAA9B,CAAoCC,UAAD,IAAgB;AACxDA,MAAAA,UAAU,CAACC,IAAX,CAAgBH,iBAAhB,EAAmC;AAAEI,QAAAA,GAAG,EAAE;AAAP,OAAnC;AACAF,MAAAA,UAAU,CAACN,EAAX,CAAc,OAAd,EAAwBT,GAAD,IAA+B;AACpDL,uBAAOM,KAAP,CACE;AAAER,UAAAA,QAAF;AAAYO,UAAAA,GAAG,EAAEA;AAAjB,SADF,EAEE,sDAFF;;AAIAa,QAAAA,iBAAiB,CAACI,GAAlB;AACD,OAND;AAOA,aAAO,IAAInB,OAAJ,CAAaY,OAAD,IAAaK,UAAU,CAACN,EAAX,CAAc,KAAd,EAAqBC,OAArB,CAAzB,CAAP;AACD,KAVM,CAAP;AAWD;;AA/FwB","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n// eslint-disable no-invalid-this\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport { PassThrough, Transform, pipeline } from 'stream';\n\nimport { VerdaccioError } from '@verdaccio/core';\nimport { errorUtils, searchUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { IProxy, ProxyList, ProxySearchParams } from '@verdaccio/proxy';\nimport { Version } from '@verdaccio/types';\n\nimport { LocalStorage } from './local-storage';\nimport { Storage } from './storage';\n\nconst debug = buildDebug('verdaccio:storage:search');\nexport interface ISearchResult {\n ref: string;\n score: number;\n}\n// @deprecated not longer used\nexport interface IWebSearch {\n storage: Storage;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n query(query: string): ISearchResult[];\n add(pkg: Version): void;\n remove(name: string): void;\n reindex(): void;\n configureStorage(storage: Storage): void;\n}\n\nexport function removeDuplicates(results: searchUtils.SearchPackageItem[]) {\n const pkgNames: any[] = [];\n const orderByResults = _.orderBy(results, ['verdaccioPrivate', 'asc']);\n return orderByResults.filter((pkg) => {\n if (pkgNames.includes(pkg?.package?.name)) {\n return false;\n }\n pkgNames.push(pkg?.package?.name);\n return true;\n });\n}\n\nclass TransFormResults extends Transform {\n public constructor(options) {\n super(options);\n }\n\n /**\n * Transform either array of packages or a single package into a stream of packages.\n * From uplinks the chunks are array but from local packages are objects.\n * @param {string} chunk\n * @param {string} encoding\n * @param {function} done\n * @returns {void}\n * @override\n */\n public _transform(chunk, _encoding, callback) {\n if (_.isArray(chunk)) {\n // from remotes we should expect chunks as arrays\n (chunk as searchUtils.SearchItem[])\n .filter((pkgItem) => {\n debug(`streaming remote pkg name ${pkgItem?.package?.name}`);\n return true;\n })\n .forEach((pkgItem) => {\n this.push({ ...pkgItem, verdaccioPkgCached: false, verdaccioPrivate: false });\n });\n return callback();\n } else {\n // local we expect objects\n debug(`streaming local pkg name ${chunk?.package?.name}`);\n this.push(chunk);\n return callback();\n }\n }\n}\n\nexport class SearchManager {\n public readonly uplinks: ProxyList;\n public readonly localStorage: LocalStorage;\n constructor(uplinks: ProxyList, storage: LocalStorage) {\n this.uplinks = uplinks;\n this.localStorage = storage;\n }\n\n public get proxyList() {\n const uplinksList = Object.keys(this.uplinks);\n\n return uplinksList;\n }\n\n /**\n * Handle search on packages and proxies.\n * Iterate all proxies configured and search in all endpoints in v2 and pipe all responses\n * to a stream, once the proxies request has finished search in local storage for all packages\n * (privated and cached).\n */\n public async search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]> {\n const transformResults = new TransFormResults({ objectMode: true });\n const streamPassThrough = new PassThrough({ objectMode: true });\n const upLinkList = this.proxyList;\n\n const searchUplinksStreams = upLinkList.map((uplinkId) => {\n const uplink = this.uplinks[uplinkId];\n if (!uplink) {\n // this should never tecnically happens\n logger.fatal({ uplinkId }, 'uplink @upLinkId not found');\n }\n return this.consumeSearchStream(uplinkId, uplink, options, streamPassThrough);\n });\n\n try {\n debug('search uplinks');\n // we only process those streams end successfully, if all fails\n // we just include local storage\n await Promise.allSettled([...searchUplinksStreams]);\n debug('search uplinks done');\n } catch (err: any) {\n logger.error({ err: err?.message }, ' error on uplinks search @{err}');\n streamPassThrough.emit('error', err);\n }\n debug('search local');\n try {\n await this.localStorage.search(streamPassThrough, options.query as searchUtils.SearchQuery);\n } catch (err: any) {\n logger.error({ err: err?.message }, ' error on local search @{err}');\n streamPassThrough.emit('error', err);\n }\n const data: searchUtils.SearchPackageItem[] = [];\n const outPutStream = new PassThrough({ objectMode: true });\n pipeline(streamPassThrough, transformResults, outPutStream, (err) => {\n if (err) {\n throw errorUtils.getInternalError(err ? err.message : 'unknown error');\n } else {\n debug('pipeline succeeded');\n }\n });\n\n outPutStream.on('data', (chunk) => {\n data.push(chunk);\n });\n\n return new Promise((resolve) => {\n outPutStream.on('finish', async () => {\n const searchFinalResults: searchUtils.SearchPackageItem[] = removeDuplicates(data);\n debug('search stream total results: %o', searchFinalResults.length);\n return resolve(searchFinalResults);\n });\n debug('search done');\n });\n }\n\n /**\n * Consume the upstream and pipe it to a transformable stream.\n */\n private consumeSearchStream(\n uplinkId: string,\n uplink: IProxy,\n options: ProxySearchParams,\n searchPassThrough: PassThrough\n ): Promise<any> {\n return uplink.search({ ...options }).then((bodyStream) => {\n bodyStream.pipe(searchPassThrough, { end: false });\n bodyStream.on('error', (err: VerdaccioError): void => {\n logger.error(\n { uplinkId, err: err },\n 'search error for uplink @{uplinkId}: @{err?.message}'\n );\n searchPassThrough.end();\n });\n return new Promise((resolve) => bodyStream.on('end', resolve));\n });\n }\n}\n"],"file":"search.js"}
|
package/build/star-utils.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Package } from '@verdaccio/types';
|
|
2
|
-
import { Users } from '.';
|
|
3
|
-
/**
|
|
4
|
-
* Check whether the package metadta has enough data to be published
|
|
5
|
-
* @param pkg metadata
|
|
6
|
-
*/
|
|
7
|
-
export declare function isPublishablePackage(pkg: Package): boolean;
|
|
8
|
-
export declare function isRelatedToDeprecation(pkgInfo: Package): boolean;
|
|
9
|
-
export declare function validateInputs(localUsers: Users, username: string, isStar: boolean): boolean;
|
package/build/star-utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/star-utils.ts"],"names":["isPublishablePackage","pkg","keys","Object","_","includes","isRelatedToDeprecation","pkgInfo","versions","version","prototype","hasOwnProperty","call","validateInputs","localUsers","username","isStar","isExistlocalUsers","isNil"],"mappings":";;;;;;;;;AAAA;;;;AAMA;AACA;AACA;AACA;AAEO,SAASA,oBAAT,CAA8BC,GAA9B,EAAqD;AAC1D,QAAMC,IAAc,GAAGC,MAAM,CAACD,IAAP,CAAYD,GAAZ,CAAvB;AAEA,SAAOG,gBAAEC,QAAF,CAAWH,IAAX,EAAiB,UAAjB,CAAP;AACD;;AAEM,SAASI,sBAAT,CAAgCC,OAAhC,EAA2D;AAChE,QAAM;AAAEC,IAAAA;AAAF,MAAeD,OAArB;;AACA,OAAK,MAAME,OAAX,IAAsBD,QAAtB,EAAgC;AAC9B,QAAIL,MAAM,CAACO,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCJ,QAAQ,CAACC,OAAD,CAA7C,EAAwD,YAAxD,CAAJ,EAA2E;AACzE,aAAO,IAAP;AACD;AACF;;AACD,SAAO,KAAP;AACD;;AAEM,SAASI,cAAT,CAAwBC,UAAxB,EAA2CC,QAA3C,EAA6DC,MAA7D,EAAuF;AAC5F,QAAMC,iBAAiB,GAAGb,gBAAEc,KAAF,CAAQJ,UAAU,CAACC,QAAD,CAAlB,MAAkC,KAA5D;;AACA,MAAIC,MAAM,IAAIC,iBAAV,IAA+BH,UAAU,CAACC,QAAD,CAA7C,EAAyD;AACvD,WAAO,IAAP;AACD,GAFD,MAEO,IAAI,CAACC,MAAD,IAAWC,iBAAf,EAAkC;AACvC,WAAO,KAAP;AACD,GAFM,MAEA,IAAI,CAACD,MAAD,IAAW,CAACC,iBAAhB,EAAmC;AACxC,WAAO,IAAP;AACD;;AACD,SAAO,KAAP;AACD","sourcesContent":["import _ from 'lodash';\n\nimport { Package } from '@verdaccio/types';\n\nimport { Users } from '.';\n\n/**\n * Check whether the package metadta has enough data to be published\n * @param pkg metadata\n */\n\nexport function isPublishablePackage(pkg: Package): boolean {\n const keys: string[] = Object.keys(pkg);\n\n return _.includes(keys, 'versions');\n}\n\nexport function isRelatedToDeprecation(pkgInfo: Package): boolean {\n const { versions } = pkgInfo;\n for (const version in versions) {\n if (Object.prototype.hasOwnProperty.call(versions[version], 'deprecated')) {\n return true;\n }\n }\n return false;\n}\n\nexport function validateInputs(localUsers: Users, username: string, isStar: boolean): boolean {\n const isExistlocalUsers = _.isNil(localUsers[username]) === false;\n if (isStar && isExistlocalUsers && localUsers[username]) {\n return true;\n } else if (!isStar && isExistlocalUsers) {\n return false;\n } else if (!isStar && !isExistlocalUsers) {\n return true;\n }\n return false;\n}\n"],"file":"star-utils.js"}
|
package/build/storage-utils.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { AttachMents, Package, StringValue, Version, Versions } from '@verdaccio/types';
|
|
2
|
-
import { LocalStorage } from './local-storage';
|
|
3
|
-
export declare const STORAGE: {
|
|
4
|
-
PACKAGE_FILE_NAME: string;
|
|
5
|
-
FILE_EXIST_ERROR: string;
|
|
6
|
-
NO_SUCH_FILE_ERROR: string;
|
|
7
|
-
DEFAULT_REVISION: string;
|
|
8
|
-
};
|
|
9
|
-
export declare function generatePackageTemplate(name: string): Package;
|
|
10
|
-
/**
|
|
11
|
-
* Normalize package properties, tags, revision id.
|
|
12
|
-
* @param {Object} pkg package reference.
|
|
13
|
-
*/
|
|
14
|
-
export declare function normalizePackage(pkg: Package): Package;
|
|
15
|
-
export declare function generateRevision(rev: string): string;
|
|
16
|
-
export declare function getLatestReadme(pkg: Package): string;
|
|
17
|
-
export declare function cleanUpReadme(version: any): Version;
|
|
18
|
-
export declare const WHITELIST: string[];
|
|
19
|
-
export declare function cleanUpLinksRef(result: Package, keepUpLinkData?: boolean): Package;
|
|
20
|
-
/**
|
|
21
|
-
* Check whether a package it is already a local package
|
|
22
|
-
* @param {*} name
|
|
23
|
-
* @param {*} localStorage
|
|
24
|
-
*/
|
|
25
|
-
export declare function checkPackageLocal(name: string, localStorage: LocalStorage): Promise<any>;
|
|
26
|
-
export declare function publishPackage(name: string, metadata: any, localStorage: LocalStorage): Promise<any>;
|
|
27
|
-
export declare function checkPackageRemote(name: string, isAllowPublishOffline: boolean, syncMetadata: Function): Promise<any>;
|
|
28
|
-
export declare function mergeUplinkTimeIntoLocal(localMetadata: Package, remoteMetadata: Package): any;
|
|
29
|
-
export declare function prepareSearchPackage(data: Package): any;
|
|
30
|
-
/**
|
|
31
|
-
* Create a tag for a package
|
|
32
|
-
* @param {*} data
|
|
33
|
-
* @param {*} version
|
|
34
|
-
* @param {*} tag
|
|
35
|
-
* @return {Boolean} whether a package has been tagged
|
|
36
|
-
*/
|
|
37
|
-
export declare function tagVersion(data: Package, version: string, tag: StringValue): boolean;
|
|
38
|
-
export declare function isDifferentThanOne(versions: Versions | AttachMents): boolean;
|
|
39
|
-
export declare function hasInvalidPublishBody(manifest: Pick<Package, '_attachments' | 'versions'>): boolean;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage-utils.ts"],"names":["STORAGE","PACKAGE_FILE_NAME","FILE_EXIST_ERROR","NO_SUCH_FILE_ERROR","DEFAULT_REVISION","generatePackageTemplate","name","versions","time","USERS","DIST_TAGS","_uplinks","_distfiles","_attachments","_rev","normalizePackage","pkg","pkgProperties","forEach","key","pkgProp","validatioUtils","isObject","_","isString","_id","generateRevision","rev","split","getLatestReadme","distTags","latestVersion","readme","trim","readmeDistTagsPriority","tag","version","cleanUpReadme","WHITELIST","cleanUpLinksRef","result","keepUpLinkData","propertyToKeep","push","i","indexOf","checkPackageLocal","localStorage","Promise","resolve","reject","getPackageMetadata","err","results","status","HTTP_STATUS","NOT_FOUND","errorUtils","getConflict","API_ERROR","PACKAGE_EXIST","publishPackage","metadata","addPackage","isNull","checkPackageRemote","isAllowPublishOffline","syncMetadata","packageJsonLocal","upLinksErrors","errorItem","length","getServiceUnavailable","UPLINK_OFFLINE_PUBLISH","mergeUplinkTimeIntoLocal","localMetadata","remoteMetadata","Object","assign","prepareSearchPackage","data","latest","pkgUtils","getLatest","description","maintainers","author","filter","Boolean","repository","readmeFilename","homepage","keywords","bugs","license","tagVersion","semver","parse","isDifferentThanOne","keys","hasInvalidPublishBody","manifest","res"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport semver from 'semver';\n\nimport { errorUtils, pkgUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, USERS } from '@verdaccio/core';\nimport { AttachMents, Package, StringValue, Version, Versions } from '@verdaccio/types';\nimport { generateRandomHexString, isNil, isObject, normalizeDistTags } from '@verdaccio/utils';\n\nimport { LocalStorage } from './local-storage';\n\nexport const STORAGE = {\n PACKAGE_FILE_NAME: 'package.json',\n FILE_EXIST_ERROR: 'EEXISTS',\n NO_SUCH_FILE_ERROR: 'ENOENT',\n DEFAULT_REVISION: '0-0000000000000000',\n};\n\nexport function generatePackageTemplate(name: string): Package {\n return {\n // standard things\n name,\n versions: {},\n time: {},\n [USERS]: {},\n [DIST_TAGS]: {},\n _uplinks: {},\n _distfiles: {},\n _attachments: {},\n _rev: '',\n };\n}\n\n/**\n * Normalize package properties, tags, revision id.\n * @param {Object} pkg package reference.\n */\nexport function normalizePackage(pkg: Package): Package {\n const pkgProperties = ['versions', 'dist-tags', '_distfiles', '_attachments', '_uplinks', 'time'];\n\n pkgProperties.forEach((key): void => {\n const pkgProp = pkg[key];\n\n if (isNil(pkgProp) || validatioUtils.isObject(pkgProp) === false) {\n pkg[key] = {};\n }\n });\n\n if (_.isString(pkg._rev) === false) {\n pkg._rev = STORAGE.DEFAULT_REVISION;\n }\n\n if (_.isString(pkg._id) === false) {\n pkg._id = pkg.name;\n }\n\n // normalize dist-tags\n return normalizeDistTags(pkg);\n}\n\nexport function generateRevision(rev: string): string {\n const _rev = rev.split('-');\n\n return (+_rev[0] || 0) + 1 + '-' + generateRandomHexString();\n}\n\nexport function getLatestReadme(pkg: Package): string {\n const versions = pkg['versions'] || {};\n const distTags = pkg[DIST_TAGS] || {};\n // FIXME: here is a bit tricky add the types\n const latestVersion: Version | any = distTags['latest'] ? versions[distTags['latest']] || {} : {};\n let readme = _.trim(pkg.readme || latestVersion.readme || '');\n if (readme) {\n return readme;\n }\n\n // In case of empty readme - trying to get ANY readme in the following order:\n // 'next','beta','alpha','test','dev','canary'\n const readmeDistTagsPriority = ['next', 'beta', 'alpha', 'test', 'dev', 'canary'];\n readmeDistTagsPriority.forEach(function (tag): string | void {\n if (readme) {\n return readme;\n }\n const version: Version | any = distTags[tag] ? versions[distTags[tag]] || {} : {};\n readme = _.trim(version.readme || readme);\n });\n return readme;\n}\n\n// FIXME: type any due this\nexport function cleanUpReadme(version: any): Version {\n if (isNil(version) === false) {\n delete version.readme;\n }\n\n return version;\n}\n\nexport const WHITELIST = [\n '_rev',\n 'name',\n 'versions',\n 'dist-tags',\n 'readme',\n 'time',\n '_id',\n 'users',\n];\n\nexport function cleanUpLinksRef(result: Package, keepUpLinkData?: boolean): Package {\n const propertyToKeep = [...WHITELIST];\n if (keepUpLinkData === true) {\n propertyToKeep.push('_uplinks');\n }\n\n for (const i in result) {\n if (propertyToKeep.indexOf(i) === -1) {\n // Remove sections like '_uplinks' from response\n delete result[i];\n }\n }\n\n return result;\n}\n\n/**\n * Check whether a package it is already a local package\n * @param {*} name\n * @param {*} localStorage\n */\nexport function checkPackageLocal(name: string, localStorage: LocalStorage): Promise<any> {\n return new Promise<void>((resolve, reject): void => {\n localStorage.getPackageMetadata(name, (err, results): void => {\n if (!isNil(err) && err.status !== HTTP_STATUS.NOT_FOUND) {\n return reject(err);\n }\n if (results) {\n return reject(errorUtils.getConflict(API_ERROR.PACKAGE_EXIST));\n }\n return resolve();\n });\n });\n}\n\nexport function publishPackage(\n name: string,\n metadata: any,\n localStorage: LocalStorage\n): Promise<any> {\n return new Promise<void>((resolve, reject): void => {\n localStorage.addPackage(name, metadata, (err): void => {\n if (!_.isNull(err)) {\n return reject(err);\n }\n return resolve();\n });\n });\n}\n\nexport function checkPackageRemote(\n name: string,\n isAllowPublishOffline: boolean,\n syncMetadata: Function\n): Promise<any> {\n return new Promise<void>((resolve, reject): void => {\n syncMetadata(name, null, {}, (err, packageJsonLocal, upLinksErrors): void => {\n // something weird\n if (err && err.status !== HTTP_STATUS.NOT_FOUND) {\n return reject(err);\n }\n\n // checking package exist already\n if (isNil(packageJsonLocal) === false) {\n return reject(errorUtils.getConflict(API_ERROR.PACKAGE_EXIST));\n }\n\n for (let errorItem = 0; errorItem < upLinksErrors.length; errorItem++) {\n // checking error\n // if uplink fails with a status other than 404, we report failure\n if (isNil(upLinksErrors[errorItem][0]) === false) {\n if (upLinksErrors[errorItem][0].status !== HTTP_STATUS.NOT_FOUND) {\n if (isAllowPublishOffline) {\n return resolve();\n }\n\n return reject(errorUtils.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE_PUBLISH));\n }\n }\n }\n\n return resolve();\n });\n });\n}\n\nexport function mergeUplinkTimeIntoLocal(localMetadata: Package, remoteMetadata: Package): any {\n if ('time' in remoteMetadata) {\n return Object.assign({}, localMetadata.time, remoteMetadata.time);\n }\n\n return localMetadata.time;\n}\n\nexport function prepareSearchPackage(data: Package): any {\n const latest = pkgUtils.getLatest(data);\n\n if (latest && data.versions[latest]) {\n const version: Version = data.versions[latest];\n const versions: any = { [latest]: 'latest' };\n const pkg: any = {\n name: version.name,\n description: version.description,\n [DIST_TAGS]: { latest },\n maintainers: version.maintainers || [version.author].filter(Boolean),\n author: version.author,\n repository: version.repository,\n readmeFilename: version.readmeFilename || '',\n homepage: version.homepage,\n keywords: version.keywords,\n bugs: version.bugs,\n license: version.license,\n // time: {\n // modified: time,\n // },\n versions,\n };\n\n return pkg;\n }\n}\n\n/**\n * Create a tag for a package\n * @param {*} data\n * @param {*} version\n * @param {*} tag\n * @return {Boolean} whether a package has been tagged\n */\nexport function tagVersion(data: Package, version: string, tag: StringValue): boolean {\n if (tag && data[DIST_TAGS][tag] !== version && semver.parse(version, true)) {\n // valid version - store\n data[DIST_TAGS][tag] = version;\n return true;\n }\n return false;\n}\n\nexport function isDifferentThanOne(versions: Versions | AttachMents): boolean {\n return Object.keys(versions).length !== 1;\n}\n\nexport function hasInvalidPublishBody(manifest: Pick<Package, '_attachments' | 'versions'>) {\n if (!manifest) {\n return false;\n }\n\n const { _attachments, versions } = manifest;\n const res =\n isObject(_attachments) === false ||\n isDifferentThanOne(_attachments) ||\n isObject(versions) === false ||\n isDifferentThanOne(versions);\n return res;\n}\n"],"file":"storage-utils.js"}
|
package/build/uplink-util.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IProxy, ProxyList } from '@verdaccio/proxy';
|
|
2
|
-
import { Config, Versions } from '@verdaccio/types';
|
|
3
|
-
/**
|
|
4
|
-
* Set up the Up Storage for each link.
|
|
5
|
-
*/
|
|
6
|
-
export declare function setupUpLinks(config: Config): ProxyList;
|
|
7
|
-
export declare function updateVersionsHiddenUpLink(versions: Versions, upLink: IProxy): void;
|
package/build/uplink-util.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.setupUpLinks = setupUpLinks;
|
|
7
|
-
exports.updateVersionsHiddenUpLink = updateVersionsHiddenUpLink;
|
|
8
|
-
|
|
9
|
-
var _proxy = require("@verdaccio/proxy");
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Set up the Up Storage for each link.
|
|
13
|
-
*/
|
|
14
|
-
function setupUpLinks(config) {
|
|
15
|
-
const uplinks = {};
|
|
16
|
-
|
|
17
|
-
for (const uplinkName in config.uplinks) {
|
|
18
|
-
if (Object.prototype.hasOwnProperty.call(config.uplinks, uplinkName)) {
|
|
19
|
-
// instance for each up-link definition
|
|
20
|
-
const proxy = new _proxy.ProxyStorage(config.uplinks[uplinkName], config);
|
|
21
|
-
proxy.upname = uplinkName;
|
|
22
|
-
uplinks[uplinkName] = proxy;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return uplinks;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function updateVersionsHiddenUpLink(versions, upLink) {
|
|
30
|
-
for (const i in versions) {
|
|
31
|
-
if (Object.prototype.hasOwnProperty.call(versions, i)) {
|
|
32
|
-
const version = versions[i]; // holds a "hidden" value to be used by the package storage.
|
|
33
|
-
|
|
34
|
-
version[Symbol.for('__verdaccio_uplink')] = upLink.upname;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=uplink-util.js.map
|
package/build/uplink-util.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/uplink-util.ts"],"names":["setupUpLinks","config","uplinks","uplinkName","Object","prototype","hasOwnProperty","call","proxy","ProxyStorage","upname","updateVersionsHiddenUpLink","versions","upLink","i","version","Symbol","for"],"mappings":";;;;;;;;AAAA;;AAGA;AACA;AACA;AACO,SAASA,YAAT,CAAsBC,MAAtB,EAAiD;AACtD,QAAMC,OAAkB,GAAG,EAA3B;;AAEA,OAAK,MAAMC,UAAX,IAAyBF,MAAM,CAACC,OAAhC,EAAyC;AACvC,QAAIE,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCN,MAAM,CAACC,OAA5C,EAAqDC,UAArD,CAAJ,EAAsE;AACpE;AACA,YAAMK,KAAa,GAAG,IAAIC,mBAAJ,CAAiBR,MAAM,CAACC,OAAP,CAAeC,UAAf,CAAjB,EAA6CF,MAA7C,CAAtB;AACAO,MAAAA,KAAK,CAACE,MAAN,GAAeP,UAAf;AAEAD,MAAAA,OAAO,CAACC,UAAD,CAAP,GAAsBK,KAAtB;AACD;AACF;;AAED,SAAON,OAAP;AACD;;AAEM,SAASS,0BAAT,CAAoCC,QAApC,EAAwDC,MAAxD,EAA8E;AACnF,OAAK,MAAMC,CAAX,IAAgBF,QAAhB,EAA0B;AACxB,QAAIR,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCK,QAArC,EAA+CE,CAA/C,CAAJ,EAAuD;AACrD,YAAMC,OAAO,GAAGH,QAAQ,CAACE,CAAD,CAAxB,CADqD,CAGrD;;AACAC,MAAAA,OAAO,CAACC,MAAM,CAACC,GAAP,CAAW,oBAAX,CAAD,CAAP,GAA4CJ,MAAM,CAACH,MAAnD;AACD;AACF;AACF","sourcesContent":["import { IProxy, ProxyList, ProxyStorage } from '@verdaccio/proxy';\nimport { Config, Versions } from '@verdaccio/types';\n\n/**\n * Set up the Up Storage for each link.\n */\nexport function setupUpLinks(config: Config): ProxyList {\n const uplinks: ProxyList = {};\n\n for (const uplinkName in config.uplinks) {\n if (Object.prototype.hasOwnProperty.call(config.uplinks, uplinkName)) {\n // instance for each up-link definition\n const proxy: IProxy = new ProxyStorage(config.uplinks[uplinkName], config);\n proxy.upname = uplinkName;\n\n uplinks[uplinkName] = proxy;\n }\n }\n\n return uplinks;\n}\n\nexport function updateVersionsHiddenUpLink(versions: Versions, upLink: IProxy): void {\n for (const i in versions) {\n if (Object.prototype.hasOwnProperty.call(versions, i)) {\n const version = versions[i];\n\n // holds a \"hidden\" value to be used by the package storage.\n version[Symbol.for('__verdaccio_uplink')] = upLink.upname;\n }\n }\n}\n"],"file":"uplink-util.js"}
|