@verdaccio/store 7.0.0-next.6 → 8.0.0-next-8.0

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +340 -0
  2. package/README.md +24 -57
  3. package/build/index.d.ts +0 -1
  4. package/build/index.js +0 -12
  5. package/build/index.js.map +1 -1
  6. package/build/lib/star-utils.js.map +1 -1
  7. package/build/lib/storage-utils.d.ts +3 -0
  8. package/build/lib/storage-utils.js +35 -2
  9. package/build/lib/storage-utils.js.map +1 -1
  10. package/build/lib/versions-utils.d.ts +14 -0
  11. package/build/lib/versions-utils.js +52 -1
  12. package/build/lib/versions-utils.js.map +1 -1
  13. package/build/local-storage.js +3 -3
  14. package/build/local-storage.js.map +1 -1
  15. package/build/storage.d.ts +14 -15
  16. package/build/storage.js +198 -161
  17. package/build/storage.js.map +1 -1
  18. package/build/type.d.ts +5 -0
  19. package/build/type.js.map +1 -1
  20. package/jest.config.js +2 -2
  21. package/package.json +17 -16
  22. package/src/index.ts +0 -1
  23. package/src/lib/storage-utils.ts +40 -2
  24. package/src/lib/versions-utils.ts +50 -1
  25. package/src/local-storage.ts +3 -2
  26. package/src/storage.ts +228 -149
  27. package/src/type.ts +6 -0
  28. package/test/fixtures/config/publishWithOwnerAndCheck.yaml +18 -0
  29. package/test/fixtures/config/publishWithOwnerDefault.yaml +15 -0
  30. package/test/fixtures/config/syncDoubleUplinksMetadata.yaml +2 -18
  31. package/test/search.spec.ts +28 -7
  32. package/test/storage-utils.spec.ts +1 -0
  33. package/test/storage.spec.ts +466 -80
  34. package/test/versions.spec.ts +58 -1
  35. package/build/lib/TransFormResults.d.ts +0 -15
  36. package/build/lib/TransFormResults.js +0 -51
  37. package/build/lib/TransFormResults.js.map +0 -1
  38. package/build/lib/search-utils.d.ts +0 -4
  39. package/build/lib/search-utils.js +0 -50
  40. package/build/lib/search-utils.js.map +0 -1
  41. package/build/lib/uplink-util.d.ts +0 -10
  42. package/build/lib/uplink-util.js +0 -43
  43. package/build/lib/uplink-util.js.map +0 -1
  44. package/src/lib/TransFormResults.ts +0 -42
  45. package/src/lib/search-utils.ts +0 -50
  46. package/src/lib/uplink-util.ts +0 -42
  47. /package/test/fixtures/config/{getTarballNext-getupstream.yaml → getTarball-getupstream.yaml} +0 -0
@@ -1,6 +1,11 @@
1
1
  import assert from 'assert';
2
2
 
3
- import { getVersion, sortVersionsAndFilterInvalid, tagVersion } from '../src/index';
3
+ import {
4
+ getVersion,
5
+ removeLowerVersions,
6
+ sortVersionsAndFilterInvalid,
7
+ tagVersion,
8
+ } from '../src/index';
4
9
 
5
10
  describe('versions-utils', () => {
6
11
  const dist = (version) => ({
@@ -36,12 +41,16 @@ describe('versions-utils', () => {
36
41
  });
37
42
 
38
43
  test('should return nothing on get invalid versions', () => {
44
+ // @ts-ignore
39
45
  expect(getVersion({ ...metadata } as any, undefined)).toBeUndefined();
46
+ // @ts-ignore
40
47
  expect(getVersion({ ...metadata } as any, null)).toBeUndefined();
48
+ // @ts-ignore
41
49
  expect(getVersion({ ...metadata } as any, 8)).toBeUndefined();
42
50
  });
43
51
 
44
52
  test('should handle no versions', () => {
53
+ // @ts-ignore
45
54
  expect(getVersion(undefined, undefined)).toBeUndefined();
46
55
  });
47
56
  });
@@ -55,6 +64,7 @@ describe('versions-utils', () => {
55
64
  ]);
56
65
  });
57
66
  test('should sort versions and filter out invalid', () => {
67
+ // @ts-ignore
58
68
  expect(sortVersionsAndFilterInvalid(['1.0.0', '5.0.0', '2.0.0', '', null])).toEqual([
59
69
  '1.0.0',
60
70
  '2.0.0',
@@ -106,4 +116,51 @@ describe('versions-utils', () => {
106
116
  });
107
117
  });
108
118
  });
119
+
120
+ describe('removeLowerVersions', () => {
121
+ it('should remove lower semantic versions', () => {
122
+ const inputArray = [
123
+ { package: { name: 'object1', version: '1.0.0' } },
124
+ { package: { name: 'object1', version: '2.0.0' } }, // Duplicate name 'object1'
125
+ { package: { name: 'object2', version: '2.0.0' } }, // Duplicate name 'object2'
126
+ { package: { name: 'object2', version: '2.0.0' } },
127
+ { package: { name: 'object3', version: '3.0.0' } },
128
+ { package: { name: 'object4', version: '1.0.0' } },
129
+ ];
130
+
131
+ const expectedOutput = [
132
+ { package: { name: 'object1', version: '2.0.0' } },
133
+ { package: { name: 'object2', version: '2.0.0' } },
134
+ { package: { name: 'object3', version: '3.0.0' } },
135
+ { package: { name: 'object4', version: '1.0.0' } },
136
+ ];
137
+
138
+ // @ts-expect-error
139
+ const result = removeLowerVersions(inputArray);
140
+ expect(result).toEqual(expectedOutput);
141
+ });
142
+
143
+ it('should remove lower semantic versions 2', () => {
144
+ const inputArray = [
145
+ { package: { name: 'object1', version: '1.0.0' } },
146
+ { package: { name: 'object1', version: '2.0.0' } }, // Duplicate name 'object1'
147
+ { package: { name: 'object2', version: '2.0.3' } }, // Duplicate name 'object2'
148
+ { package: { name: 'object2', version: '2.0.0' } },
149
+ { package: { name: 'object3', version: '3.0.0' } },
150
+ { package: { name: 'object4', version: '1.0.0' } },
151
+ ];
152
+
153
+ const expectedOutput = [
154
+ { package: { name: 'object1', version: '2.0.0' } },
155
+ { package: { name: 'object2', version: '2.0.3' } },
156
+ { package: { name: 'object3', version: '3.0.0' } },
157
+ { package: { name: 'object4', version: '1.0.0' } },
158
+ ];
159
+
160
+ // @ts-expect-error
161
+ const result = removeLowerVersions(inputArray);
162
+
163
+ expect(result).toEqual(expectedOutput);
164
+ });
165
+ });
109
166
  });
@@ -1,15 +0,0 @@
1
- /// <reference types="node" />
2
- import { Transform } from 'stream';
3
- export declare class TransFormResults extends Transform {
4
- constructor(options: any);
5
- /**
6
- * Transform either array of packages or a single package into a stream of packages.
7
- * From uplinks the chunks are array but from local packages are objects.
8
- * @param {string} chunk
9
- * @param {string} encoding
10
- * @param {function} done
11
- * @returns {void}
12
- * @override
13
- */
14
- _transform(chunk: any, _encoding: any, callback: any): any;
15
- }
@@ -1,51 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.TransFormResults = void 0;
7
- var _debug = _interopRequireDefault(require("debug"));
8
- var _lodash = _interopRequireDefault(require("lodash"));
9
- var _stream = require("stream");
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
- const debug = (0, _debug.default)('verdaccio:storage:search:transform');
12
- class TransFormResults extends _stream.Transform {
13
- constructor(options) {
14
- super(options);
15
- }
16
-
17
- /**
18
- * Transform either array of packages or a single package into a stream of packages.
19
- * From uplinks the chunks are array but from local packages are objects.
20
- * @param {string} chunk
21
- * @param {string} encoding
22
- * @param {function} done
23
- * @returns {void}
24
- * @override
25
- */
26
- _transform(chunk, _encoding, callback) {
27
- if (_lodash.default.isArray(chunk)) {
28
- // from remotes we should expect chunks as arrays
29
- chunk.filter(pkgItem => {
30
- var _pkgItem$package;
31
- 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}`);
32
- return true;
33
- }).forEach(pkgItem => {
34
- this.push({
35
- ...pkgItem,
36
- verdaccioPkgCached: false,
37
- verdaccioPrivate: false
38
- });
39
- });
40
- return callback();
41
- } else {
42
- var _chunk$package;
43
- // local we expect objects
44
- 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}`);
45
- this.push(chunk);
46
- return callback();
47
- }
48
- }
49
- }
50
- exports.TransFormResults = TransFormResults;
51
- //# sourceMappingURL=TransFormResults.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransFormResults.js","names":["_debug","_interopRequireDefault","require","_lodash","_stream","obj","__esModule","default","debug","buildDebug","TransFormResults","Transform","constructor","options","_transform","chunk","_encoding","callback","_","isArray","filter","pkgItem","_pkgItem$package","package","name","forEach","push","verdaccioPkgCached","verdaccioPrivate","_chunk$package","exports"],"sources":["../../src/lib/TransFormResults.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\nimport { Transform } from 'stream';\n\nimport { searchUtils } from '@verdaccio/core';\n\nconst debug = buildDebug('verdaccio:storage:search:transform');\n\nexport class 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"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAAmC,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAInC,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,oCAAoC,CAAC;AAEvD,MAAMC,gBAAgB,SAASC,iBAAS,CAAC;EACvCC,WAAWA,CAACC,OAAO,EAAE;IAC1B,KAAK,CAACA,OAAO,CAAC;EAChB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACSC,UAAUA,CAACC,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAE;IAC5C,IAAIC,eAAC,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;MACpB;MACCA,KAAK,CACHK,MAAM,CAAEC,OAAO,IAAK;QAAA,IAAAC,gBAAA;QACnBd,KAAK,CAAE,6BAA4Ba,OAAO,aAAPA,OAAO,wBAAAC,gBAAA,GAAPD,OAAO,CAAEE,OAAO,cAAAD,gBAAA,uBAAhBA,gBAAA,CAAkBE,IAAK,EAAC,CAAC;QAC5D,OAAO,IAAI;MACb,CAAC,CAAC,CACDC,OAAO,CAAEJ,OAAO,IAAK;QACpB,IAAI,CAACK,IAAI,CAAC;UAAE,GAAGL,OAAO;UAAEM,kBAAkB,EAAE,KAAK;UAAEC,gBAAgB,EAAE;QAAM,CAAC,CAAC;MAC/E,CAAC,CAAC;MACJ,OAAOX,QAAQ,CAAC,CAAC;IACnB,CAAC,MAAM;MAAA,IAAAY,cAAA;MACL;MACArB,KAAK,CAAE,4BAA2BO,KAAK,aAALA,KAAK,wBAAAc,cAAA,GAALd,KAAK,CAAEQ,OAAO,cAAAM,cAAA,uBAAdA,cAAA,CAAgBL,IAAK,EAAC,CAAC;MACzD,IAAI,CAACE,IAAI,CAACX,KAAK,CAAC;MAChB,OAAOE,QAAQ,CAAC,CAAC;IACnB;EACF;AACF;AAACa,OAAA,CAAApB,gBAAA,GAAAA,gBAAA"}
@@ -1,4 +0,0 @@
1
- import { searchUtils } from '@verdaccio/core';
2
- import { Manifest } from '@verdaccio/types';
3
- export declare function removeDuplicates(results: searchUtils.SearchPackageItem[]): searchUtils.SearchPackageItem[];
4
- export declare function mapManifestToSearchPackageBody(pkg: Manifest, searchItem: searchUtils.SearchItem): searchUtils.SearchPackageBody;
@@ -1,50 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.mapManifestToSearchPackageBody = mapManifestToSearchPackageBody;
7
- exports.removeDuplicates = removeDuplicates;
8
- var _lodash = require("lodash");
9
- var _core = require("@verdaccio/core");
10
- function removeDuplicates(results) {
11
- const pkgNames = [];
12
- const orderByResults = (0, _lodash.orderBy)(results, ['verdaccioPrivate', 'asc']);
13
- return orderByResults.filter(pkg => {
14
- var _pkg$package, _pkg$package2;
15
- if (pkgNames.includes(pkg === null || pkg === void 0 ? void 0 : (_pkg$package = pkg.package) === null || _pkg$package === void 0 ? void 0 : _pkg$package.name)) {
16
- return false;
17
- }
18
- pkgNames.push(pkg === null || pkg === void 0 ? void 0 : (_pkg$package2 = pkg.package) === null || _pkg$package2 === void 0 ? void 0 : _pkg$package2.name);
19
- return true;
20
- });
21
- }
22
- function mapManifestToSearchPackageBody(pkg, searchItem) {
23
- const latest = _core.pkgUtils.getLatest(pkg);
24
- const version = pkg.versions[latest];
25
- const result = {
26
- name: version.name,
27
- scope: '',
28
- description: version.description,
29
- version: latest,
30
- keywords: version.keywords,
31
- date: pkg.time[latest],
32
- // FIXME: type
33
- author: version.author,
34
- // FIXME: not possible fill this out from a private package
35
- publisher: {},
36
- // FIXME: type
37
- maintainers: version.maintainers,
38
- links: {
39
- npm: '',
40
- homepage: version.homepage,
41
- repository: version.repository,
42
- bugs: version.bugs
43
- }
44
- };
45
- if (typeof searchItem.package.scoped === 'string') {
46
- result.scope = searchItem.package.scoped;
47
- }
48
- return result;
49
- }
50
- //# sourceMappingURL=search-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-utils.js","names":["_lodash","require","_core","removeDuplicates","results","pkgNames","orderByResults","orderBy","filter","pkg","_pkg$package","_pkg$package2","includes","package","name","push","mapManifestToSearchPackageBody","searchItem","latest","pkgUtils","getLatest","version","versions","result","scope","description","keywords","date","time","author","publisher","maintainers","links","npm","homepage","repository","bugs","scoped"],"sources":["../../src/lib/search-utils.ts"],"sourcesContent":["import { orderBy } from 'lodash';\n\nimport { pkgUtils, searchUtils } from '@verdaccio/core';\nimport { Manifest, Version } from '@verdaccio/types';\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\nexport function mapManifestToSearchPackageBody(\n pkg: Manifest,\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"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AAGO,SAASE,gBAAgBA,CAACC,OAAwC,EAAE;EACzE,MAAMC,QAAe,GAAG,EAAE;EAC1B,MAAMC,cAAc,GAAG,IAAAC,eAAO,EAACH,OAAO,EAAE,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;EACpE,OAAOE,cAAc,CAACE,MAAM,CAAEC,GAAG,IAAK;IAAA,IAAAC,YAAA,EAAAC,aAAA;IACpC,IAAIN,QAAQ,CAACO,QAAQ,CAACH,GAAG,aAAHA,GAAG,wBAAAC,YAAA,GAAHD,GAAG,CAAEI,OAAO,cAAAH,YAAA,uBAAZA,YAAA,CAAcI,IAAI,CAAC,EAAE;MACzC,OAAO,KAAK;IACd;IACAT,QAAQ,CAACU,IAAI,CAACN,GAAG,aAAHA,GAAG,wBAAAE,aAAA,GAAHF,GAAG,CAAEI,OAAO,cAAAF,aAAA,uBAAZA,aAAA,CAAcG,IAAI,CAAC;IACjC,OAAO,IAAI;EACb,CAAC,CAAC;AACJ;AAEO,SAASE,8BAA8BA,CAC5CP,GAAa,EACbQ,UAAkC,EACH;EAC/B,MAAMC,MAAM,GAAGC,cAAQ,CAACC,SAAS,CAACX,GAAG,CAAC;EACtC,MAAMY,OAAgB,GAAGZ,GAAG,CAACa,QAAQ,CAACJ,MAAM,CAAC;EAC7C,MAAMK,MAAqC,GAAG;IAC5CT,IAAI,EAAEO,OAAO,CAACP,IAAI;IAClBU,KAAK,EAAE,EAAE;IACTC,WAAW,EAAEJ,OAAO,CAACI,WAAW;IAChCJ,OAAO,EAAEH,MAAM;IACfQ,QAAQ,EAAEL,OAAO,CAACK,QAAQ;IAC1BC,IAAI,EAAElB,GAAG,CAACmB,IAAI,CAACV,MAAM,CAAC;IACtB;IACAW,MAAM,EAAER,OAAO,CAACQ,MAAa;IAC7B;IACAC,SAAS,EAAE,CAAC,CAAC;IACb;IACAC,WAAW,EAAEV,OAAO,CAACU,WAAkB;IACvCC,KAAK,EAAE;MACLC,GAAG,EAAE,EAAE;MACPC,QAAQ,EAAEb,OAAO,CAACa,QAAQ;MAC1BC,UAAU,EAAEd,OAAO,CAACc,UAAU;MAC9BC,IAAI,EAAEf,OAAO,CAACe;IAChB;EACF,CAAC;EAED,IAAI,OAAOnB,UAAU,CAACJ,OAAO,CAACwB,MAAM,KAAK,QAAQ,EAAE;IACjDd,MAAM,CAACC,KAAK,GAAGP,UAAU,CAACJ,OAAO,CAACwB,MAAM;EAC1C;EAEA,OAAOd,MAAM;AACf"}
@@ -1,10 +0,0 @@
1
- import { IProxy } from '@verdaccio/proxy';
2
- import { Config, Manifest } from '@verdaccio/types';
3
- export interface ProxyInstanceList {
4
- [key: string]: IProxy;
5
- }
6
- /**
7
- * Set up the Up Storage for each link.
8
- */
9
- export declare function setupUpLinks(config: Config): ProxyInstanceList;
10
- export declare function updateVersionsHiddenUpLinkNext(manifest: Manifest, upLink: IProxy): Manifest;
@@ -1,43 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.setupUpLinks = setupUpLinks;
7
- exports.updateVersionsHiddenUpLinkNext = updateVersionsHiddenUpLinkNext;
8
- var _logger = require("@verdaccio/logger");
9
- var _proxy = require("@verdaccio/proxy");
10
- /**
11
- * Set up the Up Storage for each link.
12
- */
13
- function setupUpLinks(config) {
14
- const uplinks = {};
15
- for (const uplinkName in config.uplinks) {
16
- if (Object.prototype.hasOwnProperty.call(config.uplinks, uplinkName)) {
17
- // instance for each up-link definition
18
- const proxy = new _proxy.ProxyStorage(config.uplinks[uplinkName], config, _logger.logger);
19
- // TODO: review this can be inside ProxyStorage
20
- proxy.upname = uplinkName;
21
- uplinks[uplinkName] = proxy;
22
- }
23
- }
24
- return uplinks;
25
- }
26
- function updateVersionsHiddenUpLinkNext(manifest, upLink) {
27
- const {
28
- versions
29
- } = manifest;
30
- const versionsList = Object.keys(versions);
31
- if (versionsList.length === 0) {
32
- return manifest;
33
- }
34
- for (const version of versionsList) {
35
- // holds a "hidden" value to be used by the package storage.
36
- versions[version][Symbol.for('__verdaccio_uplink')] = upLink.upname;
37
- }
38
- return {
39
- ...manifest,
40
- versions: versions
41
- };
42
- }
43
- //# sourceMappingURL=uplink-util.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uplink-util.js","names":["_logger","require","_proxy","setupUpLinks","config","uplinks","uplinkName","Object","prototype","hasOwnProperty","call","proxy","ProxyStorage","logger","upname","updateVersionsHiddenUpLinkNext","manifest","upLink","versions","versionsList","keys","length","version","Symbol","for"],"sources":["../../src/lib/uplink-util.ts"],"sourcesContent":["import { logger } from '@verdaccio/logger';\nimport { IProxy, ProxyStorage } from '@verdaccio/proxy';\nimport { Config, Manifest } from '@verdaccio/types';\n\nexport interface ProxyInstanceList {\n [key: string]: IProxy;\n}\n\n/**\n * Set up the Up Storage for each link.\n */\nexport function setupUpLinks(config: Config): ProxyInstanceList {\n const uplinks: ProxyInstanceList = {};\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, logger);\n // TODO: review this can be inside ProxyStorage\n proxy.upname = uplinkName;\n\n uplinks[uplinkName] = proxy;\n }\n }\n\n return uplinks;\n}\n\nexport function updateVersionsHiddenUpLinkNext(manifest: Manifest, upLink: IProxy): Manifest {\n const { versions } = manifest;\n const versionsList = Object.keys(versions);\n if (versionsList.length === 0) {\n return manifest;\n }\n\n for (const version of versionsList) {\n // holds a \"hidden\" value to be used by the package storage.\n versions[version][Symbol.for('__verdaccio_uplink')] = upLink.upname;\n }\n\n return { ...manifest, versions: versions };\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAOA;AACA;AACA;AACO,SAASE,YAAYA,CAACC,MAAc,EAAqB;EAC9D,MAAMC,OAA0B,GAAG,CAAC,CAAC;EAErC,KAAK,MAAMC,UAAU,IAAIF,MAAM,CAACC,OAAO,EAAE;IACvC,IAAIE,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACN,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,EAAE;MACpE;MACA,MAAMK,KAAa,GAAG,IAAIC,mBAAY,CAACR,MAAM,CAACC,OAAO,CAACC,UAAU,CAAC,EAAEF,MAAM,EAAES,cAAM,CAAC;MAClF;MACAF,KAAK,CAACG,MAAM,GAAGR,UAAU;MAEzBD,OAAO,CAACC,UAAU,CAAC,GAAGK,KAAK;IAC7B;EACF;EAEA,OAAON,OAAO;AAChB;AAEO,SAASU,8BAA8BA,CAACC,QAAkB,EAAEC,MAAc,EAAY;EAC3F,MAAM;IAAEC;EAAS,CAAC,GAAGF,QAAQ;EAC7B,MAAMG,YAAY,GAAGZ,MAAM,CAACa,IAAI,CAACF,QAAQ,CAAC;EAC1C,IAAIC,YAAY,CAACE,MAAM,KAAK,CAAC,EAAE;IAC7B,OAAOL,QAAQ;EACjB;EAEA,KAAK,MAAMM,OAAO,IAAIH,YAAY,EAAE;IAClC;IACAD,QAAQ,CAACI,OAAO,CAAC,CAACC,MAAM,CAACC,GAAG,CAAC,oBAAoB,CAAC,CAAC,GAAGP,MAAM,CAACH,MAAM;EACrE;EAEA,OAAO;IAAE,GAAGE,QAAQ;IAAEE,QAAQ,EAAEA;EAAS,CAAC;AAC5C"}
@@ -1,42 +0,0 @@
1
- import buildDebug from 'debug';
2
- import _ from 'lodash';
3
- import { Transform } from 'stream';
4
-
5
- import { searchUtils } from '@verdaccio/core';
6
-
7
- const debug = buildDebug('verdaccio:storage:search:transform');
8
-
9
- export class TransFormResults extends Transform {
10
- public constructor(options) {
11
- super(options);
12
- }
13
-
14
- /**
15
- * Transform either array of packages or a single package into a stream of packages.
16
- * From uplinks the chunks are array but from local packages are objects.
17
- * @param {string} chunk
18
- * @param {string} encoding
19
- * @param {function} done
20
- * @returns {void}
21
- * @override
22
- */
23
- public _transform(chunk, _encoding, callback) {
24
- if (_.isArray(chunk)) {
25
- // from remotes we should expect chunks as arrays
26
- (chunk as searchUtils.SearchItem[])
27
- .filter((pkgItem) => {
28
- debug(`streaming remote pkg name ${pkgItem?.package?.name}`);
29
- return true;
30
- })
31
- .forEach((pkgItem) => {
32
- this.push({ ...pkgItem, verdaccioPkgCached: false, verdaccioPrivate: false });
33
- });
34
- return callback();
35
- } else {
36
- // local we expect objects
37
- debug(`streaming local pkg name ${chunk?.package?.name}`);
38
- this.push(chunk);
39
- return callback();
40
- }
41
- }
42
- }
@@ -1,50 +0,0 @@
1
- import { orderBy } from 'lodash';
2
-
3
- import { pkgUtils, searchUtils } from '@verdaccio/core';
4
- import { Manifest, Version } from '@verdaccio/types';
5
-
6
- export function removeDuplicates(results: searchUtils.SearchPackageItem[]) {
7
- const pkgNames: any[] = [];
8
- const orderByResults = orderBy(results, ['verdaccioPrivate', 'asc']);
9
- return orderByResults.filter((pkg) => {
10
- if (pkgNames.includes(pkg?.package?.name)) {
11
- return false;
12
- }
13
- pkgNames.push(pkg?.package?.name);
14
- return true;
15
- });
16
- }
17
-
18
- export function mapManifestToSearchPackageBody(
19
- pkg: Manifest,
20
- searchItem: searchUtils.SearchItem
21
- ): searchUtils.SearchPackageBody {
22
- const latest = pkgUtils.getLatest(pkg);
23
- const version: Version = pkg.versions[latest];
24
- const result: searchUtils.SearchPackageBody = {
25
- name: version.name,
26
- scope: '',
27
- description: version.description,
28
- version: latest,
29
- keywords: version.keywords,
30
- date: pkg.time[latest],
31
- // FIXME: type
32
- author: version.author as any,
33
- // FIXME: not possible fill this out from a private package
34
- publisher: {},
35
- // FIXME: type
36
- maintainers: version.maintainers as any,
37
- links: {
38
- npm: '',
39
- homepage: version.homepage,
40
- repository: version.repository,
41
- bugs: version.bugs,
42
- },
43
- };
44
-
45
- if (typeof searchItem.package.scoped === 'string') {
46
- result.scope = searchItem.package.scoped;
47
- }
48
-
49
- return result;
50
- }
@@ -1,42 +0,0 @@
1
- import { logger } from '@verdaccio/logger';
2
- import { IProxy, ProxyStorage } from '@verdaccio/proxy';
3
- import { Config, Manifest } from '@verdaccio/types';
4
-
5
- export interface ProxyInstanceList {
6
- [key: string]: IProxy;
7
- }
8
-
9
- /**
10
- * Set up the Up Storage for each link.
11
- */
12
- export function setupUpLinks(config: Config): ProxyInstanceList {
13
- const uplinks: ProxyInstanceList = {};
14
-
15
- for (const uplinkName in config.uplinks) {
16
- if (Object.prototype.hasOwnProperty.call(config.uplinks, uplinkName)) {
17
- // instance for each up-link definition
18
- const proxy: IProxy = new ProxyStorage(config.uplinks[uplinkName], config, logger);
19
- // TODO: review this can be inside ProxyStorage
20
- proxy.upname = uplinkName;
21
-
22
- uplinks[uplinkName] = proxy;
23
- }
24
- }
25
-
26
- return uplinks;
27
- }
28
-
29
- export function updateVersionsHiddenUpLinkNext(manifest: Manifest, upLink: IProxy): Manifest {
30
- const { versions } = manifest;
31
- const versionsList = Object.keys(versions);
32
- if (versionsList.length === 0) {
33
- return manifest;
34
- }
35
-
36
- for (const version of versionsList) {
37
- // holds a "hidden" value to be used by the package storage.
38
- versions[version][Symbol.for('__verdaccio_uplink')] = upLink.upname;
39
- }
40
-
41
- return { ...manifest, versions: versions };
42
- }