@verdaccio/search 9.0.0-next-9.7 → 9.0.0-next-9.8
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/build/search-utils.js +2 -2
- package/build/search-utils.js.map +1 -1
- package/build/search-utils.mjs +1 -1
- package/build/search-utils.mjs.map +1 -1
- package/build/search.js +1 -3
- package/build/search.js.map +1 -1
- package/build/search.mjs +1 -2
- package/build/search.mjs.map +1 -1
- package/package.json +7 -6
package/build/search-utils.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
require("./_virtual/_rolldown/runtime.js");
|
|
2
|
-
let
|
|
2
|
+
let lodash_es = require("lodash-es");
|
|
3
3
|
//#region src/search-utils.ts
|
|
4
4
|
function removeDuplicates(results) {
|
|
5
5
|
const pkgNames = [];
|
|
6
|
-
return (0,
|
|
6
|
+
return (0, lodash_es.orderBy)(results, ["verdaccioPrivate", "asc"]).filter((pkg) => {
|
|
7
7
|
if (pkgNames.includes(pkg?.package?.name)) return false;
|
|
8
8
|
pkgNames.push(pkg?.package?.name);
|
|
9
9
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-utils.js","names":[],"sources":["../src/search-utils.ts"],"sourcesContent":["import { orderBy } from 'lodash';\n\nimport type { searchUtils } from '@verdaccio/core';\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"],"mappings":";;;AAIA,SAAgB,iBAAiB,SAA0C;CACzE,MAAM,WAAkB,EAAE;AAE1B,SAAA,GAAA,
|
|
1
|
+
{"version":3,"file":"search-utils.js","names":[],"sources":["../src/search-utils.ts"],"sourcesContent":["import { orderBy } from 'lodash-es';\n\nimport type { searchUtils } from '@verdaccio/core';\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"],"mappings":";;;AAIA,SAAgB,iBAAiB,SAA0C;CACzE,MAAM,WAAkB,EAAE;AAE1B,SAAA,GAAA,UAAA,SAD+B,SAAS,CAAC,oBAAoB,MAAM,CAAC,CAC9C,QAAQ,QAAQ;AACpC,MAAI,SAAS,SAAS,KAAK,SAAS,KAAK,CACvC,QAAO;AAET,WAAS,KAAK,KAAK,SAAS,KAAK;AACjC,SAAO;GACP"}
|
package/build/search-utils.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-utils.mjs","names":[],"sources":["../src/search-utils.ts"],"sourcesContent":["import { orderBy } from 'lodash';\n\nimport type { searchUtils } from '@verdaccio/core';\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"],"mappings":";;AAIA,SAAgB,iBAAiB,SAA0C;CACzE,MAAM,WAAkB,EAAE;AAE1B,QADuB,QAAQ,SAAS,CAAC,oBAAoB,MAAM,CAAC,CAC9C,QAAQ,QAAQ;AACpC,MAAI,SAAS,SAAS,KAAK,SAAS,KAAK,CACvC,QAAO;AAET,WAAS,KAAK,KAAK,SAAS,KAAK;AACjC,SAAO;GACP"}
|
|
1
|
+
{"version":3,"file":"search-utils.mjs","names":[],"sources":["../src/search-utils.ts"],"sourcesContent":["import { orderBy } from 'lodash-es';\n\nimport type { searchUtils } from '@verdaccio/core';\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"],"mappings":";;AAIA,SAAgB,iBAAiB,SAA0C;CACzE,MAAM,WAAkB,EAAE;AAE1B,QADuB,QAAQ,SAAS,CAAC,oBAAoB,MAAM,CAAC,CAC9C,QAAQ,QAAQ;AACpC,MAAI,SAAS,SAAS,KAAK,SAAS,KAAK,CACvC,QAAO;AAET,WAAS,KAAK,KAAK,SAAS,KAAK;AACjC,SAAO;GACP"}
|
package/build/search.js
CHANGED
|
@@ -2,8 +2,6 @@ const require_runtime = require("./_virtual/_rolldown/runtime.js");
|
|
|
2
2
|
const require_search_utils = require("./search-utils.js");
|
|
3
3
|
let debug = require("debug");
|
|
4
4
|
debug = require_runtime.__toESM(debug);
|
|
5
|
-
let lodash = require("lodash");
|
|
6
|
-
lodash = require_runtime.__toESM(lodash);
|
|
7
5
|
let node_stream = require("node:stream");
|
|
8
6
|
let _verdaccio_proxy = require("@verdaccio/proxy");
|
|
9
7
|
//#region src/search.ts
|
|
@@ -38,7 +36,7 @@ var Search = class {
|
|
|
38
36
|
debug$1("searching on %s uplinks...", searchUplinksStreams?.length);
|
|
39
37
|
await Promise.allSettled([...searchUplinksStreams]);
|
|
40
38
|
streamPassThrough.end();
|
|
41
|
-
for await (const chunk of streamPassThrough) if (
|
|
39
|
+
for await (const chunk of streamPassThrough) if (Array.isArray(chunk)) chunk.filter((pkgItem) => {
|
|
42
40
|
debug$1(`streaming remote pkg name ${pkgItem?.package?.name}`);
|
|
43
41
|
return true;
|
|
44
42
|
}).forEach((pkgItem) => {
|
package/build/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","names":[],"sources":["../src/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport
|
|
1
|
+
{"version":3,"file":"search.js","names":[],"sources":["../src/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { PassThrough } from 'node:stream';\n\nimport type { searchUtils } from '@verdaccio/core';\nimport type { IProxy, ProxyInstanceList, ProxySearchParams } from '@verdaccio/proxy';\nimport { setupUpLinks } from '@verdaccio/proxy';\nimport type { Config, Logger } from '@verdaccio/types';\n\nimport { removeDuplicates } from './search-utils';\n\nconst debug = buildDebug('verdaccio:search');\n\nclass Search {\n public readonly uplinks: ProxyInstanceList;\n public readonly logger: Logger;\n constructor(config: Config, logger: Logger) {\n this.logger = logger.child({ module: 'proxy' });\n this.uplinks = setupUpLinks(config, this.logger);\n }\n\n private getProxyList() {\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 results: searchUtils.SearchPackageItem[] = [];\n const upLinkList = this.getProxyList();\n // const transformResults = new TransFormResults({ objectMode: true });\n const streamPassThrough = new PassThrough({ objectMode: true });\n debug('uplinks found %s', upLinkList.length);\n const searchUplinksStreams = upLinkList.map((uplinkName: string) => {\n const uplink = this.uplinks[uplinkName];\n if (!uplink) {\n // this line should never happens\n this.logger.error({ uplinkName }, 'uplink @uplinkName not found');\n }\n return this.consumeSearchStream(uplinkName, uplink, options, streamPassThrough);\n });\n\n try {\n debug('searching on %s uplinks...', searchUplinksStreams?.length);\n // only process those streams end successfully, if all request fails\n // just include local storage results (if local fails then return 500)\n await Promise.allSettled([...searchUplinksStreams]);\n streamPassThrough.end();\n\n for await (const chunk of streamPassThrough) {\n if (Array.isArray(chunk)) {\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 // @ts-ignore\n return results.push({\n ...pkgItem,\n verdaccioPkgCached: false,\n verdaccioPrivate: false,\n });\n });\n }\n }\n debug('searching all uplinks done');\n } catch (err: any) {\n this.logger.error({ err: err?.message }, ' error on uplinks search @{err}');\n throw err;\n }\n\n return removeDuplicates(results);\n }\n\n /**\n * Consume the upstream and pipe it to a transformable stream.\n */\n private consumeSearchStream(\n uplinkName: 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: any): void => {\n this.logger.error(\n { uplinkName, err: err },\n 'search error for uplink @{uplinkName}: @{err?.message}'\n );\n searchPassThrough.end();\n });\n return new Promise((resolve) => bodyStream.on('end', resolve));\n });\n }\n}\n\nexport { Search };\n"],"mappings":";;;;;;;AAUA,IAAM,WAAA,GAAA,MAAA,SAAmB,mBAAmB;AAE5C,IAAM,SAAN,MAAa;CACX;CACA;CACA,YAAY,QAAgB,QAAgB;AAC1C,OAAK,SAAS,OAAO,MAAM,EAAE,QAAQ,SAAS,CAAC;AAC/C,OAAK,WAAA,GAAA,iBAAA,cAAuB,QAAQ,KAAK,OAAO;;CAGlD,eAAuB;AAGrB,SAFoB,OAAO,KAAK,KAAK,QAAQ;;;;;;;;CAW/C,MAAa,OAAO,SAAsE;EACxF,MAAM,UAA2C,EAAE;EACnD,MAAM,aAAa,KAAK,cAAc;EAEtC,MAAM,oBAAoB,IAAI,YAAA,YAAY,EAAE,YAAY,MAAM,CAAC;AAC/D,UAAM,oBAAoB,WAAW,OAAO;EAC5C,MAAM,uBAAuB,WAAW,KAAK,eAAuB;GAClE,MAAM,SAAS,KAAK,QAAQ;AAC5B,OAAI,CAAC,OAEH,MAAK,OAAO,MAAM,EAAE,YAAY,EAAE,+BAA+B;AAEnE,UAAO,KAAK,oBAAoB,YAAY,QAAQ,SAAS,kBAAkB;IAC/E;AAEF,MAAI;AACF,WAAM,8BAA8B,sBAAsB,OAAO;AAGjE,SAAM,QAAQ,WAAW,CAAC,GAAG,qBAAqB,CAAC;AACnD,qBAAkB,KAAK;AAEvB,cAAW,MAAM,SAAS,kBACxB,KAAI,MAAM,QAAQ,MAAM,CACrB,OACE,QAAQ,YAAY;AACnB,YAAM,6BAA6B,SAAS,SAAS,OAAO;AAC5D,WAAO;KACP,CACD,SAAS,YAAY;AAEpB,WAAO,QAAQ,KAAK;KAClB,GAAG;KACH,oBAAoB;KACpB,kBAAkB;KACnB,CAAC;KACF;AAGR,WAAM,6BAA6B;WAC5B,KAAU;AACjB,QAAK,OAAO,MAAM,EAAE,KAAK,KAAK,SAAS,EAAE,kCAAkC;AAC3E,SAAM;;AAGR,SAAO,qBAAA,iBAAiB,QAAQ;;;;;CAMlC,oBACE,YACA,QACA,SACA,mBACc;AACd,SAAO,OAAO,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,MAAM,eAAe;AACxD,cAAW,KAAK,mBAAmB,EAAE,KAAK,OAAO,CAAC;AAClD,cAAW,GAAG,UAAU,QAAmB;AACzC,SAAK,OAAO,MACV;KAAE;KAAiB;KAAK,EACxB,yDACD;AACD,sBAAkB,KAAK;KACvB;AACF,UAAO,IAAI,SAAS,YAAY,WAAW,GAAG,OAAO,QAAQ,CAAC;IAC9D"}
|
package/build/search.mjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { removeDuplicates } from "./search-utils.mjs";
|
|
2
2
|
import buildDebug from "debug";
|
|
3
|
-
import _ from "lodash";
|
|
4
3
|
import { PassThrough } from "node:stream";
|
|
5
4
|
import { setupUpLinks } from "@verdaccio/proxy";
|
|
6
5
|
//#region src/search.ts
|
|
@@ -35,7 +34,7 @@ var Search = class {
|
|
|
35
34
|
debug("searching on %s uplinks...", searchUplinksStreams?.length);
|
|
36
35
|
await Promise.allSettled([...searchUplinksStreams]);
|
|
37
36
|
streamPassThrough.end();
|
|
38
|
-
for await (const chunk of streamPassThrough) if (
|
|
37
|
+
for await (const chunk of streamPassThrough) if (Array.isArray(chunk)) chunk.filter((pkgItem) => {
|
|
39
38
|
debug(`streaming remote pkg name ${pkgItem?.package?.name}`);
|
|
40
39
|
return true;
|
|
41
40
|
}).forEach((pkgItem) => {
|
package/build/search.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.mjs","names":[],"sources":["../src/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport
|
|
1
|
+
{"version":3,"file":"search.mjs","names":[],"sources":["../src/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { PassThrough } from 'node:stream';\n\nimport type { searchUtils } from '@verdaccio/core';\nimport type { IProxy, ProxyInstanceList, ProxySearchParams } from '@verdaccio/proxy';\nimport { setupUpLinks } from '@verdaccio/proxy';\nimport type { Config, Logger } from '@verdaccio/types';\n\nimport { removeDuplicates } from './search-utils';\n\nconst debug = buildDebug('verdaccio:search');\n\nclass Search {\n public readonly uplinks: ProxyInstanceList;\n public readonly logger: Logger;\n constructor(config: Config, logger: Logger) {\n this.logger = logger.child({ module: 'proxy' });\n this.uplinks = setupUpLinks(config, this.logger);\n }\n\n private getProxyList() {\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 results: searchUtils.SearchPackageItem[] = [];\n const upLinkList = this.getProxyList();\n // const transformResults = new TransFormResults({ objectMode: true });\n const streamPassThrough = new PassThrough({ objectMode: true });\n debug('uplinks found %s', upLinkList.length);\n const searchUplinksStreams = upLinkList.map((uplinkName: string) => {\n const uplink = this.uplinks[uplinkName];\n if (!uplink) {\n // this line should never happens\n this.logger.error({ uplinkName }, 'uplink @uplinkName not found');\n }\n return this.consumeSearchStream(uplinkName, uplink, options, streamPassThrough);\n });\n\n try {\n debug('searching on %s uplinks...', searchUplinksStreams?.length);\n // only process those streams end successfully, if all request fails\n // just include local storage results (if local fails then return 500)\n await Promise.allSettled([...searchUplinksStreams]);\n streamPassThrough.end();\n\n for await (const chunk of streamPassThrough) {\n if (Array.isArray(chunk)) {\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 // @ts-ignore\n return results.push({\n ...pkgItem,\n verdaccioPkgCached: false,\n verdaccioPrivate: false,\n });\n });\n }\n }\n debug('searching all uplinks done');\n } catch (err: any) {\n this.logger.error({ err: err?.message }, ' error on uplinks search @{err}');\n throw err;\n }\n\n return removeDuplicates(results);\n }\n\n /**\n * Consume the upstream and pipe it to a transformable stream.\n */\n private consumeSearchStream(\n uplinkName: 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: any): void => {\n this.logger.error(\n { uplinkName, err: err },\n 'search error for uplink @{uplinkName}: @{err?.message}'\n );\n searchPassThrough.end();\n });\n return new Promise((resolve) => bodyStream.on('end', resolve));\n });\n }\n}\n\nexport { Search };\n"],"mappings":";;;;;AAUA,IAAM,QAAQ,WAAW,mBAAmB;AAE5C,IAAM,SAAN,MAAa;CACX;CACA;CACA,YAAY,QAAgB,QAAgB;AAC1C,OAAK,SAAS,OAAO,MAAM,EAAE,QAAQ,SAAS,CAAC;AAC/C,OAAK,UAAU,aAAa,QAAQ,KAAK,OAAO;;CAGlD,eAAuB;AAGrB,SAFoB,OAAO,KAAK,KAAK,QAAQ;;;;;;;;CAW/C,MAAa,OAAO,SAAsE;EACxF,MAAM,UAA2C,EAAE;EACnD,MAAM,aAAa,KAAK,cAAc;EAEtC,MAAM,oBAAoB,IAAI,YAAY,EAAE,YAAY,MAAM,CAAC;AAC/D,QAAM,oBAAoB,WAAW,OAAO;EAC5C,MAAM,uBAAuB,WAAW,KAAK,eAAuB;GAClE,MAAM,SAAS,KAAK,QAAQ;AAC5B,OAAI,CAAC,OAEH,MAAK,OAAO,MAAM,EAAE,YAAY,EAAE,+BAA+B;AAEnE,UAAO,KAAK,oBAAoB,YAAY,QAAQ,SAAS,kBAAkB;IAC/E;AAEF,MAAI;AACF,SAAM,8BAA8B,sBAAsB,OAAO;AAGjE,SAAM,QAAQ,WAAW,CAAC,GAAG,qBAAqB,CAAC;AACnD,qBAAkB,KAAK;AAEvB,cAAW,MAAM,SAAS,kBACxB,KAAI,MAAM,QAAQ,MAAM,CACrB,OACE,QAAQ,YAAY;AACnB,UAAM,6BAA6B,SAAS,SAAS,OAAO;AAC5D,WAAO;KACP,CACD,SAAS,YAAY;AAEpB,WAAO,QAAQ,KAAK;KAClB,GAAG;KACH,oBAAoB;KACpB,kBAAkB;KACnB,CAAC;KACF;AAGR,SAAM,6BAA6B;WAC5B,KAAU;AACjB,QAAK,OAAO,MAAM,EAAE,KAAK,KAAK,SAAS,EAAE,kCAAkC;AAC3E,SAAM;;AAGR,SAAO,iBAAiB,QAAQ;;;;;CAMlC,oBACE,YACA,QACA,SACA,mBACc;AACd,SAAO,OAAO,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,MAAM,eAAe;AACxD,cAAW,KAAK,mBAAmB,EAAE,KAAK,OAAO,CAAC;AAClD,cAAW,GAAG,UAAU,QAAmB;AACzC,SAAK,OAAO,MACV;KAAE;KAAiB;KAAK,EACxB,yDACD;AACD,sBAAkB,KAAK;KACvB;AACF,UAAO,IAAI,SAAS,YAAY,WAAW,GAAG,OAAO,QAAQ,CAAC;IAC9D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/search",
|
|
3
|
-
"version": "9.0.0-next-9.
|
|
3
|
+
"version": "9.0.0-next-9.8",
|
|
4
4
|
"description": "Verdaccio Search Proxy",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -33,15 +33,16 @@
|
|
|
33
33
|
"node": ">=24"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@verdaccio/config": "9.0.0-next-9.
|
|
37
|
-
"@verdaccio/core": "9.0.0-next-9.
|
|
38
|
-
"@verdaccio/logger": "9.0.0-next-9.
|
|
39
|
-
"@verdaccio/proxy": "9.0.0-next-9.
|
|
36
|
+
"@verdaccio/config": "9.0.0-next-9.8",
|
|
37
|
+
"@verdaccio/core": "9.0.0-next-9.8",
|
|
38
|
+
"@verdaccio/logger": "9.0.0-next-9.8",
|
|
39
|
+
"@verdaccio/proxy": "9.0.0-next-9.8",
|
|
40
40
|
"debug": "4.4.3",
|
|
41
|
-
"lodash": "4.17.23"
|
|
41
|
+
"lodash-es": "4.17.23"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@verdaccio/types": "14.0.0-next-9.4",
|
|
45
|
+
"@types/lodash-es": "4.17.12",
|
|
45
46
|
"nock": "13.5.6",
|
|
46
47
|
"vitest": "4.1.0"
|
|
47
48
|
},
|