@verdaccio/search 9.0.0-next-9.3 → 9.0.0-next-9.5
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/_virtual/_rolldown/runtime.js +23 -0
- package/build/index.js +7 -25
- package/build/index.mjs +3 -0
- package/build/search-utils.d.ts +1 -1
- package/build/search-utils.js +12 -17
- package/build/search-utils.js.map +1 -1
- package/build/search-utils.mjs +14 -0
- package/build/search-utils.mjs.map +1 -0
- package/build/search.d.ts +3 -3
- package/build/search.js +76 -192
- package/build/search.js.map +1 -1
- package/build/search.mjs +75 -0
- package/build/search.mjs.map +1 -0
- package/package.json +23 -12
- package/build/index.js.map +0 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.__toESM = __toESM;
|
package/build/index.js
CHANGED
|
@@ -1,26 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
value: true
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
5
4
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return _search.Search;
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
var _search = require("./search");
|
|
14
|
-
var _searchUtils = require("./search-utils");
|
|
15
|
-
Object.keys(_searchUtils).forEach(function (key) {
|
|
16
|
-
if (key === "default" || key === "__esModule") return;
|
|
17
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
18
|
-
if (key in exports && exports[key] === _searchUtils[key]) return;
|
|
19
|
-
Object.defineProperty(exports, key, {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function get() {
|
|
22
|
-
return _searchUtils[key];
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
//# sourceMappingURL=index.js.map
|
|
5
|
+
const require_search_utils = require("./search-utils.js");
|
|
6
|
+
const require_search = require("./search.js");
|
|
7
|
+
exports.default = require_search.Search;
|
|
8
|
+
exports.removeDuplicates = require_search_utils.removeDuplicates;
|
package/build/index.mjs
ADDED
package/build/search-utils.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { searchUtils } from '@verdaccio/core';
|
|
2
2
|
export declare function removeDuplicates(results: searchUtils.SearchPackageItem[]): searchUtils.SearchPackageItem[];
|
package/build/search-utils.js
CHANGED
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.removeDuplicates = removeDuplicates;
|
|
7
|
-
var _lodash = require("lodash");
|
|
1
|
+
require("./_virtual/_rolldown/runtime.js");
|
|
2
|
+
let lodash = require("lodash");
|
|
3
|
+
//#region src/search-utils.ts
|
|
8
4
|
function removeDuplicates(results) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
pkgNames.push(pkg === null || pkg === void 0 || (_pkg$package2 = pkg["package"]) === null || _pkg$package2 === void 0 ? void 0 : _pkg$package2.name);
|
|
17
|
-
return true;
|
|
18
|
-
});
|
|
5
|
+
const pkgNames = [];
|
|
6
|
+
return (0, lodash.orderBy)(results, ["verdaccioPrivate", "asc"]).filter((pkg) => {
|
|
7
|
+
if (pkgNames.includes(pkg?.package?.name)) return false;
|
|
8
|
+
pkgNames.push(pkg?.package?.name);
|
|
9
|
+
return true;
|
|
10
|
+
});
|
|
19
11
|
}
|
|
12
|
+
//#endregion
|
|
13
|
+
exports.removeDuplicates = removeDuplicates;
|
|
14
|
+
|
|
20
15
|
//# sourceMappingURL=search-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-utils.js","names":[
|
|
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,OAAA,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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { orderBy } from "lodash";
|
|
2
|
+
//#region src/search-utils.ts
|
|
3
|
+
function removeDuplicates(results) {
|
|
4
|
+
const pkgNames = [];
|
|
5
|
+
return orderBy(results, ["verdaccioPrivate", "asc"]).filter((pkg) => {
|
|
6
|
+
if (pkgNames.includes(pkg?.package?.name)) return false;
|
|
7
|
+
pkgNames.push(pkg?.package?.name);
|
|
8
|
+
return true;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { removeDuplicates };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=search-utils.mjs.map
|
|
@@ -0,0 +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"}
|
package/build/search.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { searchUtils } from '@verdaccio/core';
|
|
2
|
+
import { ProxyInstanceList, ProxySearchParams } from '@verdaccio/proxy';
|
|
3
|
+
import { Config, Logger } from '@verdaccio/types';
|
|
4
4
|
declare class Search {
|
|
5
5
|
readonly uplinks: ProxyInstanceList;
|
|
6
6
|
readonly logger: Logger;
|
package/build/search.js
CHANGED
|
@@ -1,194 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_search_utils = require("./search-utils.js");
|
|
3
|
+
let debug = require("debug");
|
|
4
|
+
debug = require_runtime.__toESM(debug);
|
|
5
|
+
let lodash = require("lodash");
|
|
6
|
+
lodash = require_runtime.__toESM(lodash);
|
|
7
|
+
let node_stream = require("node:stream");
|
|
8
|
+
let _verdaccio_proxy = require("@verdaccio/proxy");
|
|
9
|
+
//#region src/search.ts
|
|
10
|
+
var debug$1 = (0, debug.default)("verdaccio:search");
|
|
11
|
+
var Search = class {
|
|
12
|
+
uplinks;
|
|
13
|
+
logger;
|
|
14
|
+
constructor(config, logger) {
|
|
15
|
+
this.logger = logger.child({ module: "proxy" });
|
|
16
|
+
this.uplinks = (0, _verdaccio_proxy.setupUpLinks)(config, this.logger);
|
|
17
|
+
}
|
|
18
|
+
getProxyList() {
|
|
19
|
+
return Object.keys(this.uplinks);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Handle search on packages and proxies.
|
|
23
|
+
* Iterate all proxies configured and search in all endpoints in v2 and pipe all responses
|
|
24
|
+
* to a stream, once the proxies request has finished search in local storage for all packages
|
|
25
|
+
* (privated and cached).
|
|
26
|
+
*/
|
|
27
|
+
async search(options) {
|
|
28
|
+
const results = [];
|
|
29
|
+
const upLinkList = this.getProxyList();
|
|
30
|
+
const streamPassThrough = new node_stream.PassThrough({ objectMode: true });
|
|
31
|
+
debug$1("uplinks found %s", upLinkList.length);
|
|
32
|
+
const searchUplinksStreams = upLinkList.map((uplinkName) => {
|
|
33
|
+
const uplink = this.uplinks[uplinkName];
|
|
34
|
+
if (!uplink) this.logger.error({ uplinkName }, "uplink @uplinkName not found");
|
|
35
|
+
return this.consumeSearchStream(uplinkName, uplink, options, streamPassThrough);
|
|
36
|
+
});
|
|
37
|
+
try {
|
|
38
|
+
debug$1("searching on %s uplinks...", searchUplinksStreams?.length);
|
|
39
|
+
await Promise.allSettled([...searchUplinksStreams]);
|
|
40
|
+
streamPassThrough.end();
|
|
41
|
+
for await (const chunk of streamPassThrough) if (lodash.default.isArray(chunk)) chunk.filter((pkgItem) => {
|
|
42
|
+
debug$1(`streaming remote pkg name ${pkgItem?.package?.name}`);
|
|
43
|
+
return true;
|
|
44
|
+
}).forEach((pkgItem) => {
|
|
45
|
+
return results.push({
|
|
46
|
+
...pkgItem,
|
|
47
|
+
verdaccioPkgCached: false,
|
|
48
|
+
verdaccioPrivate: false
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
debug$1("searching all uplinks done");
|
|
52
|
+
} catch (err) {
|
|
53
|
+
this.logger.error({ err: err?.message }, " error on uplinks search @{err}");
|
|
54
|
+
throw err;
|
|
55
|
+
}
|
|
56
|
+
return require_search_utils.removeDuplicates(results);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Consume the upstream and pipe it to a transformable stream.
|
|
60
|
+
*/
|
|
61
|
+
consumeSearchStream(uplinkName, uplink, options, searchPassThrough) {
|
|
62
|
+
return uplink.search({ ...options }).then((bodyStream) => {
|
|
63
|
+
bodyStream.pipe(searchPassThrough, { end: false });
|
|
64
|
+
bodyStream.on("error", (err) => {
|
|
65
|
+
this.logger.error({
|
|
66
|
+
uplinkName,
|
|
67
|
+
err
|
|
68
|
+
}, "search error for uplink @{uplinkName}: @{err?.message}");
|
|
69
|
+
searchPassThrough.end();
|
|
70
|
+
});
|
|
71
|
+
return new Promise((resolve) => bodyStream.on("end", resolve));
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//#endregion
|
|
76
|
+
exports.Search = Search;
|
|
2
77
|
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.Search = void 0;
|
|
7
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
8
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
-
var _nodeStream = require("node:stream");
|
|
10
|
-
var _proxy = require("@verdaccio/proxy");
|
|
11
|
-
var _searchUtils = require("./search-utils");
|
|
12
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
13
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
14
|
-
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
15
|
-
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
16
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
19
|
-
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
20
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
21
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
22
|
-
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
23
|
-
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
24
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
25
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
26
|
-
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
27
|
-
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
28
|
-
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
29
|
-
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
30
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
31
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
32
|
-
function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
|
|
33
|
-
function AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, "return": function _return(r) { var n = this.s["return"]; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, "throw": function _throw(r) { var n = this.s["return"]; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); }
|
|
34
|
-
var debug = (0, _debug["default"])('verdaccio:search');
|
|
35
|
-
var Search = exports.Search = /*#__PURE__*/function () {
|
|
36
|
-
function Search(config, logger) {
|
|
37
|
-
_classCallCheck(this, Search);
|
|
38
|
-
this.logger = logger.child({
|
|
39
|
-
module: 'proxy'
|
|
40
|
-
});
|
|
41
|
-
this.uplinks = (0, _proxy.setupUpLinks)(config, this.logger);
|
|
42
|
-
}
|
|
43
|
-
return _createClass(Search, [{
|
|
44
|
-
key: "getProxyList",
|
|
45
|
-
value: function getProxyList() {
|
|
46
|
-
var uplinksList = Object.keys(this.uplinks);
|
|
47
|
-
return uplinksList;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Handle search on packages and proxies.
|
|
52
|
-
* Iterate all proxies configured and search in all endpoints in v2 and pipe all responses
|
|
53
|
-
* to a stream, once the proxies request has finished search in local storage for all packages
|
|
54
|
-
* (privated and cached).
|
|
55
|
-
*/
|
|
56
|
-
}, {
|
|
57
|
-
key: "search",
|
|
58
|
-
value: (function () {
|
|
59
|
-
var _search = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(options) {
|
|
60
|
-
var _this = this;
|
|
61
|
-
var results, upLinkList, streamPassThrough, searchUplinksStreams, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, chunk, _t, _t2;
|
|
62
|
-
return _regenerator().w(function (_context) {
|
|
63
|
-
while (1) switch (_context.p = _context.n) {
|
|
64
|
-
case 0:
|
|
65
|
-
results = [];
|
|
66
|
-
upLinkList = this.getProxyList(); // const transformResults = new TransFormResults({ objectMode: true });
|
|
67
|
-
streamPassThrough = new _nodeStream.PassThrough({
|
|
68
|
-
objectMode: true
|
|
69
|
-
});
|
|
70
|
-
debug('uplinks found %s', upLinkList.length);
|
|
71
|
-
searchUplinksStreams = upLinkList.map(function (uplinkName) {
|
|
72
|
-
var uplink = _this.uplinks[uplinkName];
|
|
73
|
-
if (!uplink) {
|
|
74
|
-
// this line should never happens
|
|
75
|
-
_this.logger.error({
|
|
76
|
-
uplinkName: uplinkName
|
|
77
|
-
}, 'uplink @uplinkName not found');
|
|
78
|
-
}
|
|
79
|
-
return _this.consumeSearchStream(uplinkName, uplink, options, streamPassThrough);
|
|
80
|
-
});
|
|
81
|
-
_context.p = 1;
|
|
82
|
-
debug('searching on %s uplinks...', searchUplinksStreams === null || searchUplinksStreams === void 0 ? void 0 : searchUplinksStreams.length);
|
|
83
|
-
// only process those streams end successfully, if all request fails
|
|
84
|
-
// just include local storage results (if local fails then return 500)
|
|
85
|
-
_context.n = 2;
|
|
86
|
-
return Promise.allSettled(_toConsumableArray(searchUplinksStreams));
|
|
87
|
-
case 2:
|
|
88
|
-
streamPassThrough.end();
|
|
89
|
-
_iteratorAbruptCompletion = false;
|
|
90
|
-
_didIteratorError = false;
|
|
91
|
-
_context.p = 3;
|
|
92
|
-
_iterator = _asyncIterator(streamPassThrough);
|
|
93
|
-
case 4:
|
|
94
|
-
_context.n = 5;
|
|
95
|
-
return _iterator.next();
|
|
96
|
-
case 5:
|
|
97
|
-
if (!(_iteratorAbruptCompletion = !(_step = _context.v).done)) {
|
|
98
|
-
_context.n = 7;
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
chunk = _step.value;
|
|
102
|
-
if (_lodash["default"].isArray(chunk)) {
|
|
103
|
-
chunk.filter(function (pkgItem) {
|
|
104
|
-
var _pkgItem$package;
|
|
105
|
-
debug("streaming remote pkg name ".concat(pkgItem === null || pkgItem === void 0 || (_pkgItem$package = pkgItem["package"]) === null || _pkgItem$package === void 0 ? void 0 : _pkgItem$package.name));
|
|
106
|
-
return true;
|
|
107
|
-
}).forEach(function (pkgItem) {
|
|
108
|
-
// @ts-ignore
|
|
109
|
-
return results.push(_objectSpread(_objectSpread({}, pkgItem), {}, {
|
|
110
|
-
verdaccioPkgCached: false,
|
|
111
|
-
verdaccioPrivate: false
|
|
112
|
-
}));
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
case 6:
|
|
116
|
-
_iteratorAbruptCompletion = false;
|
|
117
|
-
_context.n = 4;
|
|
118
|
-
break;
|
|
119
|
-
case 7:
|
|
120
|
-
_context.n = 9;
|
|
121
|
-
break;
|
|
122
|
-
case 8:
|
|
123
|
-
_context.p = 8;
|
|
124
|
-
_t = _context.v;
|
|
125
|
-
_didIteratorError = true;
|
|
126
|
-
_iteratorError = _t;
|
|
127
|
-
case 9:
|
|
128
|
-
_context.p = 9;
|
|
129
|
-
_context.p = 10;
|
|
130
|
-
if (!(_iteratorAbruptCompletion && _iterator["return"] != null)) {
|
|
131
|
-
_context.n = 11;
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
_context.n = 11;
|
|
135
|
-
return _iterator["return"]();
|
|
136
|
-
case 11:
|
|
137
|
-
_context.p = 11;
|
|
138
|
-
if (!_didIteratorError) {
|
|
139
|
-
_context.n = 12;
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
throw _iteratorError;
|
|
143
|
-
case 12:
|
|
144
|
-
return _context.f(11);
|
|
145
|
-
case 13:
|
|
146
|
-
return _context.f(9);
|
|
147
|
-
case 14:
|
|
148
|
-
debug('searching all uplinks done');
|
|
149
|
-
_context.n = 16;
|
|
150
|
-
break;
|
|
151
|
-
case 15:
|
|
152
|
-
_context.p = 15;
|
|
153
|
-
_t2 = _context.v;
|
|
154
|
-
this.logger.error({
|
|
155
|
-
err: _t2 === null || _t2 === void 0 ? void 0 : _t2.message
|
|
156
|
-
}, ' error on uplinks search @{err}');
|
|
157
|
-
throw _t2;
|
|
158
|
-
case 16:
|
|
159
|
-
return _context.a(2, (0, _searchUtils.removeDuplicates)(results));
|
|
160
|
-
}
|
|
161
|
-
}, _callee, this, [[10,, 11, 13], [3, 8, 9, 14], [1, 15]]);
|
|
162
|
-
}));
|
|
163
|
-
function search(_x) {
|
|
164
|
-
return _search.apply(this, arguments);
|
|
165
|
-
}
|
|
166
|
-
return search;
|
|
167
|
-
}()
|
|
168
|
-
/**
|
|
169
|
-
* Consume the upstream and pipe it to a transformable stream.
|
|
170
|
-
*/
|
|
171
|
-
)
|
|
172
|
-
}, {
|
|
173
|
-
key: "consumeSearchStream",
|
|
174
|
-
value: function consumeSearchStream(uplinkName, uplink, options, searchPassThrough) {
|
|
175
|
-
var _this2 = this;
|
|
176
|
-
return uplink.search(_objectSpread({}, options)).then(function (bodyStream) {
|
|
177
|
-
bodyStream.pipe(searchPassThrough, {
|
|
178
|
-
end: false
|
|
179
|
-
});
|
|
180
|
-
bodyStream.on('error', function (err) {
|
|
181
|
-
_this2.logger.error({
|
|
182
|
-
uplinkName: uplinkName,
|
|
183
|
-
err: err
|
|
184
|
-
}, 'search error for uplink @{uplinkName}: @{err?.message}');
|
|
185
|
-
searchPassThrough.end();
|
|
186
|
-
});
|
|
187
|
-
return new Promise(function (resolve) {
|
|
188
|
-
return bodyStream.on('end', resolve);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
}]);
|
|
193
|
-
}();
|
|
194
78
|
//# sourceMappingURL=search.js.map
|
package/build/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","names":["_debug","_interopRequireDefault","require","_lodash","_nodeStream","_proxy","_searchUtils","e","__esModule","_typeof","o","Symbol","iterator","constructor","prototype","_regenerator","t","r","n","toStringTag","i","c","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","toString","slice","name","Array","from","test","isArray","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","_next","_throw","_classCallCheck","_defineProperties","key","_createClass","_toPrimitive","toPrimitive","String","Number","_asyncIterator","asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","reject","s","next","_return","debug","buildDebug","Search","exports","config","logger","child","module","uplinks","setupUpLinks","getProxyList","uplinksList","_search","_callee","options","_this","results","upLinkList","streamPassThrough","searchUplinksStreams","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_step","chunk","_t","_t2","_context","PassThrough","objectMode","map","uplinkName","uplink","error","consumeSearchStream","allSettled","end","_","pkgItem","_pkgItem$package","concat","verdaccioPkgCached","verdaccioPrivate","err","message","removeDuplicates","search","_x","searchPassThrough","_this2","bodyStream","pipe","on"],"sources":["../src/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\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 (_.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":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"search.js","names":[],"sources":["../src/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\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 (_.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":";;;;;;;;;AAWA,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,OAAA,QAAE,QAAQ,MAAM,CACjB,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
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { removeDuplicates } from "./search-utils.mjs";
|
|
2
|
+
import buildDebug from "debug";
|
|
3
|
+
import _ from "lodash";
|
|
4
|
+
import { PassThrough } from "node:stream";
|
|
5
|
+
import { setupUpLinks } from "@verdaccio/proxy";
|
|
6
|
+
//#region src/search.ts
|
|
7
|
+
var debug = buildDebug("verdaccio:search");
|
|
8
|
+
var Search = class {
|
|
9
|
+
uplinks;
|
|
10
|
+
logger;
|
|
11
|
+
constructor(config, logger) {
|
|
12
|
+
this.logger = logger.child({ module: "proxy" });
|
|
13
|
+
this.uplinks = setupUpLinks(config, this.logger);
|
|
14
|
+
}
|
|
15
|
+
getProxyList() {
|
|
16
|
+
return Object.keys(this.uplinks);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handle search on packages and proxies.
|
|
20
|
+
* Iterate all proxies configured and search in all endpoints in v2 and pipe all responses
|
|
21
|
+
* to a stream, once the proxies request has finished search in local storage for all packages
|
|
22
|
+
* (privated and cached).
|
|
23
|
+
*/
|
|
24
|
+
async search(options) {
|
|
25
|
+
const results = [];
|
|
26
|
+
const upLinkList = this.getProxyList();
|
|
27
|
+
const streamPassThrough = new PassThrough({ objectMode: true });
|
|
28
|
+
debug("uplinks found %s", upLinkList.length);
|
|
29
|
+
const searchUplinksStreams = upLinkList.map((uplinkName) => {
|
|
30
|
+
const uplink = this.uplinks[uplinkName];
|
|
31
|
+
if (!uplink) this.logger.error({ uplinkName }, "uplink @uplinkName not found");
|
|
32
|
+
return this.consumeSearchStream(uplinkName, uplink, options, streamPassThrough);
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
debug("searching on %s uplinks...", searchUplinksStreams?.length);
|
|
36
|
+
await Promise.allSettled([...searchUplinksStreams]);
|
|
37
|
+
streamPassThrough.end();
|
|
38
|
+
for await (const chunk of streamPassThrough) if (_.isArray(chunk)) chunk.filter((pkgItem) => {
|
|
39
|
+
debug(`streaming remote pkg name ${pkgItem?.package?.name}`);
|
|
40
|
+
return true;
|
|
41
|
+
}).forEach((pkgItem) => {
|
|
42
|
+
return results.push({
|
|
43
|
+
...pkgItem,
|
|
44
|
+
verdaccioPkgCached: false,
|
|
45
|
+
verdaccioPrivate: false
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
debug("searching all uplinks done");
|
|
49
|
+
} catch (err) {
|
|
50
|
+
this.logger.error({ err: err?.message }, " error on uplinks search @{err}");
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
return removeDuplicates(results);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Consume the upstream and pipe it to a transformable stream.
|
|
57
|
+
*/
|
|
58
|
+
consumeSearchStream(uplinkName, uplink, options, searchPassThrough) {
|
|
59
|
+
return uplink.search({ ...options }).then((bodyStream) => {
|
|
60
|
+
bodyStream.pipe(searchPassThrough, { end: false });
|
|
61
|
+
bodyStream.on("error", (err) => {
|
|
62
|
+
this.logger.error({
|
|
63
|
+
uplinkName,
|
|
64
|
+
err
|
|
65
|
+
}, "search error for uplink @{uplinkName}: @{err?.message}");
|
|
66
|
+
searchPassThrough.end();
|
|
67
|
+
});
|
|
68
|
+
return new Promise((resolve) => bodyStream.on("end", resolve));
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
//#endregion
|
|
73
|
+
export { Search };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=search.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.mjs","names":[],"sources":["../src/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\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 (_.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":";;;;;;AAWA,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,EAAE,QAAQ,MAAM,CACjB,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.5",
|
|
4
4
|
"description": "Verdaccio Search Proxy",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -33,29 +33,40 @@
|
|
|
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.5",
|
|
37
|
+
"@verdaccio/core": "9.0.0-next-9.5",
|
|
38
|
+
"@verdaccio/logger": "9.0.0-next-9.5",
|
|
39
|
+
"@verdaccio/proxy": "9.0.0-next-9.5",
|
|
40
40
|
"debug": "4.4.3",
|
|
41
41
|
"lodash": "4.17.23"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@verdaccio/types": "14.0.0-next-9.
|
|
44
|
+
"@verdaccio/types": "14.0.0-next-9.2",
|
|
45
45
|
"nock": "13.5.6",
|
|
46
|
-
"vitest": "
|
|
46
|
+
"vitest": "4.1.0"
|
|
47
47
|
},
|
|
48
48
|
"funding": {
|
|
49
49
|
"type": "opencollective",
|
|
50
50
|
"url": "https://opencollective.com/verdaccio"
|
|
51
51
|
},
|
|
52
|
+
"module": "./build/index.mjs",
|
|
53
|
+
"exports": {
|
|
54
|
+
".": {
|
|
55
|
+
"import": {
|
|
56
|
+
"types": "./build/index.d.ts",
|
|
57
|
+
"default": "./build/index.mjs"
|
|
58
|
+
},
|
|
59
|
+
"require": {
|
|
60
|
+
"types": "./build/index.d.ts",
|
|
61
|
+
"default": "./build/index.js"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"./build/*": "./build/*"
|
|
65
|
+
},
|
|
52
66
|
"scripts": {
|
|
53
67
|
"clean": "rimraf ./build",
|
|
54
68
|
"test": "vitest run",
|
|
55
|
-
"
|
|
56
|
-
"build
|
|
57
|
-
"build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
|
|
58
|
-
"watch": "pnpm build:js -- --watch",
|
|
59
|
-
"build": "pnpm run build:js && pnpm run build:types"
|
|
69
|
+
"watch": "vite build --watch",
|
|
70
|
+
"build": "vite build"
|
|
60
71
|
}
|
|
61
72
|
}
|
package/build/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_search","require","_searchUtils","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["../src/index.ts"],"sourcesContent":["export { Search as default } from './search';\nexport * from './search-utils';\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,YAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,YAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAZ,YAAA,CAAAI,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|