@verdaccio/web 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/_virtual/_rolldown/runtime.mjs +7 -0
- package/build/api/index.d.ts +1 -1
- package/build/api/index.js +26 -37
- package/build/api/index.js.map +1 -1
- package/build/api/index.mjs +27 -0
- package/build/api/index.mjs.map +1 -0
- package/build/api/package.d.ts +3 -3
- package/build/api/package.js +79 -200
- package/build/api/package.js.map +1 -1
- package/build/api/package.mjs +80 -0
- package/build/api/package.mjs.map +1 -0
- package/build/api/readme.d.ts +2 -2
- package/build/api/readme.js +64 -122
- package/build/api/readme.js.map +1 -1
- package/build/api/readme.mjs +67 -0
- package/build/api/readme.mjs.map +1 -0
- package/build/api/search.d.ts +2 -2
- package/build/api/search.js +57 -99
- package/build/api/search.js.map +1 -1
- package/build/api/search.mjs +59 -0
- package/build/api/search.mjs.map +1 -0
- package/build/api/sidebar.d.ts +3 -3
- package/build/api/sidebar.js +56 -109
- package/build/api/sidebar.js.map +1 -1
- package/build/api/sidebar.mjs +57 -0
- package/build/api/sidebar.mjs.map +1 -0
- package/build/api/user.d.ts +2 -2
- package/build/api/user.js +97 -212
- package/build/api/user.js.map +1 -1
- package/build/api/user.mjs +97 -0
- package/build/api/user.mjs.map +1 -0
- package/build/author-utils.d.ts +1 -1
- package/build/author-utils.js +109 -160
- package/build/author-utils.js.map +1 -1
- package/build/author-utils.mjs +117 -0
- package/build/author-utils.mjs.map +1 -0
- package/build/index.js +18 -47
- package/build/index.mjs +4 -0
- package/build/middleware.d.ts +1 -1
- package/build/middleware.js +49 -90
- package/build/middleware.js.map +1 -1
- package/build/middleware.mjs +48 -0
- package/build/middleware.mjs.map +1 -0
- package/build/web-utils.d.ts +2 -1
- package/build/web-utils.js +31 -31
- package/build/web-utils.js.map +1 -1
- package/build/web-utils.mjs +34 -0
- package/build/web-utils.mjs.map +1 -0
- package/package.json +30 -19
- package/build/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.mjs","names":[],"sources":["../../src/api/package.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { createAnonymousRemoteUser } from '@verdaccio/config';\nimport { logger } from '@verdaccio/logger';\nimport {\n $NextFunctionVer,\n $RequestExtend,\n $ResponseExtend,\n WebUrls,\n getRequestOptions,\n} from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport { getLocalRegistryTarballUri } from '@verdaccio/tarball';\nimport type { Config, RemoteUser, Version } from '@verdaccio/types';\n\nimport { formatAuthor, generateGravatarUrl } from '../author-utils';\nimport { hasLogin, sortByName, sortByTime } from '../web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nconst getField = (field = 'name') => {\n return field === 'name' || field === 'time' ? field : 'name';\n};\n\nconst getOrder = (order = 'asc') => {\n return order === 'asc';\n};\n\nconst debug = buildDebug('verdaccio:web:api:package');\n\nfunction addPackageWebApi(storage: Storage, auth: Auth, config: Config): Router {\n const isLoginEnabled = hasLogin(config);\n debug('is login enabled: %o', isLoginEnabled);\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n const anonymousRemoteUser: RemoteUser = createAnonymousRemoteUser();\n\n debug('initialized package web api');\n const checkAllow = (name: string, remoteUser: RemoteUser): Promise<boolean> =>\n new Promise((resolve, reject): void => {\n const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;\n try {\n auth.allow_access({ packageName: name }, remoteUserAccess, (err, allowed): void => {\n if (err) {\n resolve(false);\n }\n return resolve(allowed as boolean);\n });\n } catch (err: any) {\n reject(err);\n }\n });\n\n async function processPackages(packages: Version[] = [], req): Promise<Version[]> {\n const permissions: Version[] = [];\n const packagesToProcess = packages.slice();\n debug('process packages %o', packagesToProcess);\n const requestOptions = getRequestOptions(req);\n for (const pkg of packagesToProcess) {\n const pkgCopy = { ...pkg };\n pkgCopy.author = formatAuthor(pkg.author);\n try {\n if (await checkAllow(pkg.name, req.remote_user)) {\n if (config.web) {\n // @ts-ignore\n pkgCopy.author.avatar = generateGravatarUrl(pkgCopy.author.email, config.web.gravatar);\n }\n // convert any remote dist to a local reference\n // eg: if the dist points to npmjs, switch to localhost:4873/prefix/etc.tar.gz\n if (!_.isNil(pkgCopy.dist) && !_.isNull(pkgCopy.dist.tarball)) {\n pkgCopy.dist.tarball = getLocalRegistryTarballUri(\n pkgCopy.dist.tarball,\n pkg.name,\n requestOptions,\n config?.url_prefix\n );\n }\n permissions.push(pkgCopy);\n }\n } catch (err: any) {\n debug('process packages error %o', err);\n logger.error(\n { name: pkg.name, error: err },\n 'permission process for @{name} has failed: @{error}'\n );\n throw err;\n }\n }\n\n debug('allowed %o packages', permissions.length);\n return permissions;\n }\n\n // Get list of all visible package\n pkgRouter.get(\n WebUrls.packages_all,\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('hit package web api %o');\n\n try {\n const localPackages: Version[] = await storage.getLocalDatabase();\n\n const field = getField(config?.web?.sort_field);\n const order = getOrder(config?.web?.sort_packages);\n debug('order by %o %o', field, order);\n const pkgs = await processPackages(localPackages, req);\n if (field === 'name') next(sortByName(pkgs, order));\n else next(sortByTime(pkgs, order));\n } catch (error: any) {\n next(error);\n }\n }\n );\n\n return pkgRouter;\n}\n\nexport default addPackageWebApi;\n"],"mappings":";;;;;;;;;;AAuBA,IAAM,YAAY,QAAQ,WAAW;AACnC,QAAO,UAAU,UAAU,UAAU,SAAS,QAAQ;;AAGxD,IAAM,YAAY,QAAQ,UAAU;AAClC,QAAO,UAAU;;AAGnB,IAAM,QAAQ,WAAW,4BAA4B;AAErD,SAAS,iBAAiB,SAAkB,MAAY,QAAwB;CAC9E,MAAM,iBAAiB,SAAS,OAAO;AACvC,OAAM,wBAAwB,eAAe;CAC7C,MAAM,YAAY,QAAQ;CAC1B,MAAM,sBAAkC,2BAA2B;AAEnE,OAAM,8BAA8B;CACpC,MAAM,cAAc,MAAc,eAChC,IAAI,SAAS,SAAS,WAAiB;EACrC,MAAM,mBAAmB,CAAC,iBAAiB,sBAAsB;AACjE,MAAI;AACF,QAAK,aAAa,EAAE,aAAa,MAAM,EAAE,mBAAmB,KAAK,YAAkB;AACjF,QAAI,IACF,SAAQ,MAAM;AAEhB,WAAO,QAAQ,QAAmB;KAClC;WACK,KAAU;AACjB,UAAO,IAAI;;GAEb;CAEJ,eAAe,gBAAgB,WAAsB,EAAE,EAAE,KAAyB;EAChF,MAAM,cAAyB,EAAE;EACjC,MAAM,oBAAoB,SAAS,OAAO;AAC1C,QAAM,uBAAuB,kBAAkB;EAC/C,MAAM,iBAAiB,kBAAkB,IAAI;AAC7C,OAAK,MAAM,OAAO,mBAAmB;GACnC,MAAM,UAAU,EAAE,GAAG,KAAK;AAC1B,WAAQ,SAAS,aAAa,IAAI,OAAO;AACzC,OAAI;AACF,QAAI,MAAM,WAAW,IAAI,MAAM,IAAI,YAAY,EAAE;AAC/C,SAAI,OAAO,IAET,SAAQ,OAAO,SAAS,oBAAoB,QAAQ,OAAO,OAAO,OAAO,IAAI,SAAS;AAIxF,SAAI,CAAC,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAC3D,SAAQ,KAAK,UAAU,2BACrB,QAAQ,KAAK,SACb,IAAI,MACJ,gBACA,QAAQ,WACT;AAEH,iBAAY,KAAK,QAAQ;;YAEpB,KAAU;AACjB,UAAM,6BAA6B,IAAI;AACvC,WAAO,MACL;KAAE,MAAM,IAAI;KAAM,OAAO;KAAK,EAC9B,sDACD;AACD,UAAM;;;AAIV,QAAM,uBAAuB,YAAY,OAAO;AAChD,SAAO;;AAIT,WAAU,IACR,QAAQ,cACR,eACE,KACA,KACA,MACe;AACf,QAAM,yBAAyB;AAE/B,MAAI;GACF,MAAM,gBAA2B,MAAM,QAAQ,kBAAkB;GAEjE,MAAM,QAAQ,SAAS,QAAQ,KAAK,WAAW;GAC/C,MAAM,QAAQ,SAAS,QAAQ,KAAK,cAAc;AAClD,SAAM,kBAAkB,OAAO,MAAM;GACrC,MAAM,OAAO,MAAM,gBAAgB,eAAe,IAAI;AACtD,OAAI,UAAU,OAAQ,MAAK,WAAW,MAAM,MAAM,CAAC;OAC9C,MAAK,WAAW,MAAM,MAAM,CAAC;WAC3B,OAAY;AACnB,QAAK,MAAM;;GAGhB;AAED,QAAO"}
|
package/build/api/readme.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
-
import
|
|
2
|
+
import { Auth } from '@verdaccio/auth';
|
|
3
3
|
import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';
|
|
4
|
-
import
|
|
4
|
+
import { Storage } from '@verdaccio/store';
|
|
5
5
|
export { $RequestExtend, $ResponseExtend, $NextFunctionVer };
|
|
6
6
|
export declare const NOT_README_FOUND = "ERROR: No README data found!";
|
|
7
7
|
declare function addReadmeWebApi(storage: Storage, auth: Auth): Router;
|
package/build/api/readme.js
CHANGED
|
@@ -1,127 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, "$ResponseExtend", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function get() {
|
|
21
|
-
return _middleware.$ResponseExtend;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
exports["default"] = exports.NOT_README_FOUND = void 0;
|
|
25
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
26
|
-
var _express = require("express");
|
|
27
|
-
var _core = require("@verdaccio/core");
|
|
28
|
-
var _logger = require("@verdaccio/logger");
|
|
29
|
-
var _middleware = require("@verdaccio/middleware");
|
|
30
|
-
var _webUtils = require("../web-utils");
|
|
31
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
32
|
-
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 }; })(); }
|
|
33
|
-
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); }
|
|
34
|
-
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); }
|
|
35
|
-
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); }); }; }
|
|
36
|
-
// Was required by other packages
|
|
37
|
-
|
|
38
|
-
var NOT_README_FOUND = exports.NOT_README_FOUND = 'ERROR: No README data found!';
|
|
39
|
-
var debug = (0, _debug["default"])('verdaccio:web:api:readme');
|
|
40
|
-
var getReadme = function getReadme(readme) {
|
|
41
|
-
if (typeof readme === 'string' && readme.length === 0) {
|
|
42
|
-
return NOT_README_FOUND;
|
|
43
|
-
}
|
|
44
|
-
if (typeof readme !== 'string') {
|
|
45
|
-
return NOT_README_FOUND;
|
|
46
|
-
} else {
|
|
47
|
-
return readme;
|
|
48
|
-
}
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_web_utils = require("../web-utils.js");
|
|
3
|
+
let express = require("express");
|
|
4
|
+
let _verdaccio_core = require("@verdaccio/core");
|
|
5
|
+
let _verdaccio_logger = require("@verdaccio/logger");
|
|
6
|
+
let _verdaccio_middleware = require("@verdaccio/middleware");
|
|
7
|
+
let debug = require("debug");
|
|
8
|
+
debug = require_runtime.__toESM(debug);
|
|
9
|
+
//#region src/api/readme.ts
|
|
10
|
+
var NOT_README_FOUND = "ERROR: No README data found!";
|
|
11
|
+
var debug$1 = (0, debug.default)("verdaccio:web:api:readme");
|
|
12
|
+
var getReadme = (readme) => {
|
|
13
|
+
if (typeof readme === "string" && readme.length === 0) return NOT_README_FOUND;
|
|
14
|
+
if (typeof readme !== "string") return NOT_README_FOUND;
|
|
15
|
+
else return readme;
|
|
49
16
|
};
|
|
50
|
-
var getReadmeFromManifest =
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return readme;
|
|
17
|
+
var getReadmeFromManifest = (manifest, v) => {
|
|
18
|
+
let id;
|
|
19
|
+
let readme;
|
|
20
|
+
if (typeof v === "string" && require_web_utils.isVersionValid(manifest, v)) {
|
|
21
|
+
id = "version";
|
|
22
|
+
readme = manifest.versions[v].readme;
|
|
23
|
+
}
|
|
24
|
+
if (!readme && require_web_utils.isVersionValid(manifest, manifest[_verdaccio_core.DIST_TAGS]?.latest)) {
|
|
25
|
+
id = "latest";
|
|
26
|
+
readme = manifest.versions[manifest[_verdaccio_core.DIST_TAGS].latest].readme;
|
|
27
|
+
}
|
|
28
|
+
if (!readme && manifest.readme) {
|
|
29
|
+
id = "root";
|
|
30
|
+
readme = manifest.readme;
|
|
31
|
+
}
|
|
32
|
+
debug$1("readme: %o %o", v, id);
|
|
33
|
+
return readme;
|
|
68
34
|
};
|
|
69
35
|
function addReadmeWebApi(storage, auth) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
requestOptions: requestOptions
|
|
100
|
-
});
|
|
101
|
-
case 2:
|
|
102
|
-
manifest = _context.v;
|
|
103
|
-
debug('readme pkg %o', manifest === null || manifest === void 0 ? void 0 : manifest.name);
|
|
104
|
-
res.set(_core.HEADER_TYPE.CONTENT_TYPE, _core.HEADERS.TEXT_PLAIN_UTF8);
|
|
105
|
-
// TODO: sanitize query
|
|
106
|
-
v = req.query.v;
|
|
107
|
-
readme = getReadmeFromManifest(manifest, v);
|
|
108
|
-
next(getReadme(readme));
|
|
109
|
-
_context.n = 4;
|
|
110
|
-
break;
|
|
111
|
-
case 3:
|
|
112
|
-
_context.p = 3;
|
|
113
|
-
_t = _context.v;
|
|
114
|
-
next(_t);
|
|
115
|
-
case 4:
|
|
116
|
-
return _context.a(2);
|
|
117
|
-
}
|
|
118
|
-
}, _callee, null, [[1, 3]]);
|
|
119
|
-
}));
|
|
120
|
-
return function (_x, _x2, _x3) {
|
|
121
|
-
return _ref.apply(this, arguments);
|
|
122
|
-
};
|
|
123
|
-
}());
|
|
124
|
-
return pkgRouter;
|
|
36
|
+
debug$1("initialized readme web api");
|
|
37
|
+
const can = (0, _verdaccio_middleware.allow)(auth, {
|
|
38
|
+
beforeAll: (a, b) => _verdaccio_logger.logger.trace(a, b),
|
|
39
|
+
afterAll: (a, b) => _verdaccio_logger.logger.trace(a, b)
|
|
40
|
+
});
|
|
41
|
+
const pkgRouter = (0, express.Router)();
|
|
42
|
+
pkgRouter.get([_verdaccio_middleware.WebUrls.readme_package_scoped_version, _verdaccio_middleware.WebUrls.readme_package_version], can("access"), async function(req, res, next) {
|
|
43
|
+
debug$1("readme hit");
|
|
44
|
+
const rawScope = req.params.scope;
|
|
45
|
+
const scope = rawScope ? rawScope.slice(1) : null;
|
|
46
|
+
const name = scope ? require_web_utils.addScope(scope, req.params.package) : req.params.package;
|
|
47
|
+
debug$1("readme name %o", name);
|
|
48
|
+
const requestOptions = (0, _verdaccio_middleware.getRequestOptions)(req);
|
|
49
|
+
try {
|
|
50
|
+
const manifest = await storage.getPackageByOptions({
|
|
51
|
+
name,
|
|
52
|
+
uplinksLook: true,
|
|
53
|
+
abbreviated: false,
|
|
54
|
+
requestOptions
|
|
55
|
+
});
|
|
56
|
+
debug$1("readme pkg %o", manifest?.name);
|
|
57
|
+
res.set(_verdaccio_core.HEADER_TYPE.CONTENT_TYPE, _verdaccio_core.HEADERS.TEXT_PLAIN_UTF8);
|
|
58
|
+
const { v } = req.query;
|
|
59
|
+
next(getReadme(getReadmeFromManifest(manifest, v)));
|
|
60
|
+
} catch (err) {
|
|
61
|
+
next(err);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return pkgRouter;
|
|
125
65
|
}
|
|
126
|
-
|
|
66
|
+
//#endregion
|
|
67
|
+
exports.default = addReadmeWebApi;
|
|
68
|
+
|
|
127
69
|
//# sourceMappingURL=readme.js.map
|
package/build/api/readme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.js","names":["_debug","_interopRequireDefault","require","_express","_core","_logger","_middleware","_webUtils","e","__esModule","_regenerator","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","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","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","NOT_README_FOUND","exports","debug","buildDebug","getReadme","readme","getReadmeFromManifest","manifest","_manifest$DIST_TAGS","id","isVersionValid","versions","DIST_TAGS","latest","addReadmeWebApi","storage","auth","can","allow","beforeAll","b","logger","trace","afterAll","pkgRouter","Router","get","WebUrls","readme_package_scoped_version","readme_package_version","_ref","_callee","req","res","next","rawScope","scope","name","requestOptions","_t","_context","params","slice","addScope","getRequestOptions","getPackageByOptions","uplinksLook","abbreviated","set","HEADER_TYPE","CONTENT_TYPE","HEADERS","TEXT_PLAIN_UTF8","query","_x","_x2","_x3","_default"],"sources":["../../src/api/readme.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { DIST_TAGS, HEADERS, HEADER_TYPE } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport {\n $NextFunctionVer,\n $RequestExtend,\n $ResponseExtend,\n WebUrls,\n allow,\n getRequestOptions,\n} from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Manifest } from '@verdaccio/types';\n\nimport { addScope, isVersionValid } from '../web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\n\nconst debug = buildDebug('verdaccio:web:api:readme');\n\nconst getReadme = (readme) => {\n if (typeof readme === 'string' && readme.length === 0) {\n return NOT_README_FOUND;\n }\n if (typeof readme !== 'string') {\n return NOT_README_FOUND;\n } else {\n return readme;\n }\n};\n\nconst getReadmeFromManifest = (manifest: Manifest, v?: any): string | undefined => {\n let id;\n let readme;\n if (typeof v === 'string' && isVersionValid(manifest, v)) {\n id = 'version';\n readme = manifest.versions[v].readme;\n }\n if (!readme && isVersionValid(manifest, manifest[DIST_TAGS]?.latest)) {\n id = 'latest';\n readme = manifest.versions[manifest[DIST_TAGS].latest].readme;\n }\n if (!readme && manifest.readme) {\n id = 'root';\n readme = manifest.readme;\n }\n debug('readme: %o %o', v, id);\n return readme;\n};\n\nfunction addReadmeWebApi(storage: Storage, auth: Auth): Router {\n debug('initialized readme web api');\n const can = allow(auth, {\n beforeAll: (a, b) => logger.trace(a, b),\n afterAll: (a, b) => logger.trace(a, b),\n });\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n\n pkgRouter.get(\n [WebUrls.readme_package_scoped_version, WebUrls.readme_package_version],\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('readme hit');\n const rawScope = req.params.scope; // May include '@'\n const scope = rawScope ? rawScope.slice(1) : null; // Remove '@' if present\n const name = scope ? addScope(scope, req.params.package) : req.params.package;\n debug('readme name %o', name);\n const requestOptions = getRequestOptions(req);\n try {\n const manifest = (await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n abbreviated: false,\n requestOptions,\n })) as Manifest;\n debug('readme pkg %o', manifest?.name);\n res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);\n // TODO: sanitize query\n const { v } = req.query;\n const readme = getReadmeFromManifest(manifest, v);\n next(getReadme(readme));\n } catch (err) {\n next(err);\n }\n }\n );\n return pkgRouter;\n}\n\nexport default addReadmeWebApi;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"readme.js","names":[],"sources":["../../src/api/readme.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { DIST_TAGS, HEADERS, HEADER_TYPE } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport {\n $NextFunctionVer,\n $RequestExtend,\n $ResponseExtend,\n WebUrls,\n allow,\n getRequestOptions,\n} from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Manifest } from '@verdaccio/types';\n\nimport { addScope, isVersionValid } from '../web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\n\nconst debug = buildDebug('verdaccio:web:api:readme');\n\nconst getReadme = (readme) => {\n if (typeof readme === 'string' && readme.length === 0) {\n return NOT_README_FOUND;\n }\n if (typeof readme !== 'string') {\n return NOT_README_FOUND;\n } else {\n return readme;\n }\n};\n\nconst getReadmeFromManifest = (manifest: Manifest, v?: any): string | undefined => {\n let id;\n let readme;\n if (typeof v === 'string' && isVersionValid(manifest, v)) {\n id = 'version';\n readme = manifest.versions[v].readme;\n }\n if (!readme && isVersionValid(manifest, manifest[DIST_TAGS]?.latest)) {\n id = 'latest';\n readme = manifest.versions[manifest[DIST_TAGS].latest].readme;\n }\n if (!readme && manifest.readme) {\n id = 'root';\n readme = manifest.readme;\n }\n debug('readme: %o %o', v, id);\n return readme;\n};\n\nfunction addReadmeWebApi(storage: Storage, auth: Auth): Router {\n debug('initialized readme web api');\n const can = allow(auth, {\n beforeAll: (a, b) => logger.trace(a, b),\n afterAll: (a, b) => logger.trace(a, b),\n });\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n\n pkgRouter.get(\n [WebUrls.readme_package_scoped_version, WebUrls.readme_package_version],\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('readme hit');\n const rawScope = req.params.scope; // May include '@'\n const scope = rawScope ? rawScope.slice(1) : null; // Remove '@' if present\n const name = scope ? addScope(scope, req.params.package) : req.params.package;\n debug('readme name %o', name);\n const requestOptions = getRequestOptions(req);\n try {\n const manifest = (await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n abbreviated: false,\n requestOptions,\n })) as Manifest;\n debug('readme pkg %o', manifest?.name);\n res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);\n // TODO: sanitize query\n const { v } = req.query;\n const readme = getReadmeFromManifest(manifest, v);\n next(getReadme(readme));\n } catch (err) {\n next(err);\n }\n }\n );\n return pkgRouter;\n}\n\nexport default addReadmeWebApi;\n"],"mappings":";;;;;;;;;AAqBA,IAAa,mBAAmB;AAEhC,IAAM,WAAA,GAAA,MAAA,SAAmB,2BAA2B;AAEpD,IAAM,aAAa,WAAW;AAC5B,KAAI,OAAO,WAAW,YAAY,OAAO,WAAW,EAClD,QAAO;AAET,KAAI,OAAO,WAAW,SACpB,QAAO;KAEP,QAAO;;AAIX,IAAM,yBAAyB,UAAoB,MAAgC;CACjF,IAAI;CACJ,IAAI;AACJ,KAAI,OAAO,MAAM,YAAY,kBAAA,eAAe,UAAU,EAAE,EAAE;AACxD,OAAK;AACL,WAAS,SAAS,SAAS,GAAG;;AAEhC,KAAI,CAAC,UAAU,kBAAA,eAAe,UAAU,SAAS,gBAAA,YAAY,OAAO,EAAE;AACpE,OAAK;AACL,WAAS,SAAS,SAAS,SAAS,gBAAA,WAAW,QAAQ;;AAEzD,KAAI,CAAC,UAAU,SAAS,QAAQ;AAC9B,OAAK;AACL,WAAS,SAAS;;AAEpB,SAAM,iBAAiB,GAAG,GAAG;AAC7B,QAAO;;AAGT,SAAS,gBAAgB,SAAkB,MAAoB;AAC7D,SAAM,6BAA6B;CACnC,MAAM,OAAA,GAAA,sBAAA,OAAY,MAAM;EACtB,YAAY,GAAG,MAAM,kBAAA,OAAO,MAAM,GAAG,EAAE;EACvC,WAAW,GAAG,MAAM,kBAAA,OAAO,MAAM,GAAG,EAAE;EACvC,CAAC;CACF,MAAM,aAAA,GAAA,QAAA,SAAoB;AAE1B,WAAU,IACR,CAAC,sBAAA,QAAQ,+BAA+B,sBAAA,QAAQ,uBAAuB,EACvE,IAAI,SAAS,EACb,eACE,KACA,KACA,MACe;AACf,UAAM,aAAa;EACnB,MAAM,WAAW,IAAI,OAAO;EAC5B,MAAM,QAAQ,WAAW,SAAS,MAAM,EAAE,GAAG;EAC7C,MAAM,OAAO,QAAQ,kBAAA,SAAS,OAAO,IAAI,OAAO,QAAQ,GAAG,IAAI,OAAO;AACtE,UAAM,kBAAkB,KAAK;EAC7B,MAAM,kBAAA,GAAA,sBAAA,mBAAmC,IAAI;AAC7C,MAAI;GACF,MAAM,WAAY,MAAM,QAAQ,oBAAoB;IAClD;IACA,aAAa;IACb,aAAa;IACb;IACD,CAAC;AACF,WAAM,iBAAiB,UAAU,KAAK;AACtC,OAAI,IAAI,gBAAA,YAAY,cAAc,gBAAA,QAAQ,gBAAgB;GAE1D,MAAM,EAAE,MAAM,IAAI;AAElB,QAAK,UADU,sBAAsB,UAAU,EAAE,CAC3B,CAAC;WAChB,KAAK;AACZ,QAAK,IAAI;;GAGd;AACD,QAAO"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { addScope, isVersionValid } from "../web-utils.mjs";
|
|
2
|
+
import { Router } from "express";
|
|
3
|
+
import { DIST_TAGS, HEADERS, HEADER_TYPE } from "@verdaccio/core";
|
|
4
|
+
import { logger } from "@verdaccio/logger";
|
|
5
|
+
import { WebUrls, allow, getRequestOptions } from "@verdaccio/middleware";
|
|
6
|
+
import buildDebug from "debug";
|
|
7
|
+
//#region src/api/readme.ts
|
|
8
|
+
var NOT_README_FOUND = "ERROR: No README data found!";
|
|
9
|
+
var debug = buildDebug("verdaccio:web:api:readme");
|
|
10
|
+
var getReadme = (readme) => {
|
|
11
|
+
if (typeof readme === "string" && readme.length === 0) return NOT_README_FOUND;
|
|
12
|
+
if (typeof readme !== "string") return NOT_README_FOUND;
|
|
13
|
+
else return readme;
|
|
14
|
+
};
|
|
15
|
+
var getReadmeFromManifest = (manifest, v) => {
|
|
16
|
+
let id;
|
|
17
|
+
let readme;
|
|
18
|
+
if (typeof v === "string" && isVersionValid(manifest, v)) {
|
|
19
|
+
id = "version";
|
|
20
|
+
readme = manifest.versions[v].readme;
|
|
21
|
+
}
|
|
22
|
+
if (!readme && isVersionValid(manifest, manifest[DIST_TAGS]?.latest)) {
|
|
23
|
+
id = "latest";
|
|
24
|
+
readme = manifest.versions[manifest[DIST_TAGS].latest].readme;
|
|
25
|
+
}
|
|
26
|
+
if (!readme && manifest.readme) {
|
|
27
|
+
id = "root";
|
|
28
|
+
readme = manifest.readme;
|
|
29
|
+
}
|
|
30
|
+
debug("readme: %o %o", v, id);
|
|
31
|
+
return readme;
|
|
32
|
+
};
|
|
33
|
+
function addReadmeWebApi(storage, auth) {
|
|
34
|
+
debug("initialized readme web api");
|
|
35
|
+
const can = allow(auth, {
|
|
36
|
+
beforeAll: (a, b) => logger.trace(a, b),
|
|
37
|
+
afterAll: (a, b) => logger.trace(a, b)
|
|
38
|
+
});
|
|
39
|
+
const pkgRouter = Router();
|
|
40
|
+
pkgRouter.get([WebUrls.readme_package_scoped_version, WebUrls.readme_package_version], can("access"), async function(req, res, next) {
|
|
41
|
+
debug("readme hit");
|
|
42
|
+
const rawScope = req.params.scope;
|
|
43
|
+
const scope = rawScope ? rawScope.slice(1) : null;
|
|
44
|
+
const name = scope ? addScope(scope, req.params.package) : req.params.package;
|
|
45
|
+
debug("readme name %o", name);
|
|
46
|
+
const requestOptions = getRequestOptions(req);
|
|
47
|
+
try {
|
|
48
|
+
const manifest = await storage.getPackageByOptions({
|
|
49
|
+
name,
|
|
50
|
+
uplinksLook: true,
|
|
51
|
+
abbreviated: false,
|
|
52
|
+
requestOptions
|
|
53
|
+
});
|
|
54
|
+
debug("readme pkg %o", manifest?.name);
|
|
55
|
+
res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);
|
|
56
|
+
const { v } = req.query;
|
|
57
|
+
next(getReadme(getReadmeFromManifest(manifest, v)));
|
|
58
|
+
} catch (err) {
|
|
59
|
+
next(err);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return pkgRouter;
|
|
63
|
+
}
|
|
64
|
+
//#endregion
|
|
65
|
+
export { addReadmeWebApi as default };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=readme.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme.mjs","names":[],"sources":["../../src/api/readme.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { DIST_TAGS, HEADERS, HEADER_TYPE } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport {\n $NextFunctionVer,\n $RequestExtend,\n $ResponseExtend,\n WebUrls,\n allow,\n getRequestOptions,\n} from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Manifest } from '@verdaccio/types';\n\nimport { addScope, isVersionValid } from '../web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\n\nconst debug = buildDebug('verdaccio:web:api:readme');\n\nconst getReadme = (readme) => {\n if (typeof readme === 'string' && readme.length === 0) {\n return NOT_README_FOUND;\n }\n if (typeof readme !== 'string') {\n return NOT_README_FOUND;\n } else {\n return readme;\n }\n};\n\nconst getReadmeFromManifest = (manifest: Manifest, v?: any): string | undefined => {\n let id;\n let readme;\n if (typeof v === 'string' && isVersionValid(manifest, v)) {\n id = 'version';\n readme = manifest.versions[v].readme;\n }\n if (!readme && isVersionValid(manifest, manifest[DIST_TAGS]?.latest)) {\n id = 'latest';\n readme = manifest.versions[manifest[DIST_TAGS].latest].readme;\n }\n if (!readme && manifest.readme) {\n id = 'root';\n readme = manifest.readme;\n }\n debug('readme: %o %o', v, id);\n return readme;\n};\n\nfunction addReadmeWebApi(storage: Storage, auth: Auth): Router {\n debug('initialized readme web api');\n const can = allow(auth, {\n beforeAll: (a, b) => logger.trace(a, b),\n afterAll: (a, b) => logger.trace(a, b),\n });\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n\n pkgRouter.get(\n [WebUrls.readme_package_scoped_version, WebUrls.readme_package_version],\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('readme hit');\n const rawScope = req.params.scope; // May include '@'\n const scope = rawScope ? rawScope.slice(1) : null; // Remove '@' if present\n const name = scope ? addScope(scope, req.params.package) : req.params.package;\n debug('readme name %o', name);\n const requestOptions = getRequestOptions(req);\n try {\n const manifest = (await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n abbreviated: false,\n requestOptions,\n })) as Manifest;\n debug('readme pkg %o', manifest?.name);\n res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);\n // TODO: sanitize query\n const { v } = req.query;\n const readme = getReadmeFromManifest(manifest, v);\n next(getReadme(readme));\n } catch (err) {\n next(err);\n }\n }\n );\n return pkgRouter;\n}\n\nexport default addReadmeWebApi;\n"],"mappings":";;;;;;;AAqBA,IAAa,mBAAmB;AAEhC,IAAM,QAAQ,WAAW,2BAA2B;AAEpD,IAAM,aAAa,WAAW;AAC5B,KAAI,OAAO,WAAW,YAAY,OAAO,WAAW,EAClD,QAAO;AAET,KAAI,OAAO,WAAW,SACpB,QAAO;KAEP,QAAO;;AAIX,IAAM,yBAAyB,UAAoB,MAAgC;CACjF,IAAI;CACJ,IAAI;AACJ,KAAI,OAAO,MAAM,YAAY,eAAe,UAAU,EAAE,EAAE;AACxD,OAAK;AACL,WAAS,SAAS,SAAS,GAAG;;AAEhC,KAAI,CAAC,UAAU,eAAe,UAAU,SAAS,YAAY,OAAO,EAAE;AACpE,OAAK;AACL,WAAS,SAAS,SAAS,SAAS,WAAW,QAAQ;;AAEzD,KAAI,CAAC,UAAU,SAAS,QAAQ;AAC9B,OAAK;AACL,WAAS,SAAS;;AAEpB,OAAM,iBAAiB,GAAG,GAAG;AAC7B,QAAO;;AAGT,SAAS,gBAAgB,SAAkB,MAAoB;AAC7D,OAAM,6BAA6B;CACnC,MAAM,MAAM,MAAM,MAAM;EACtB,YAAY,GAAG,MAAM,OAAO,MAAM,GAAG,EAAE;EACvC,WAAW,GAAG,MAAM,OAAO,MAAM,GAAG,EAAE;EACvC,CAAC;CACF,MAAM,YAAY,QAAQ;AAE1B,WAAU,IACR,CAAC,QAAQ,+BAA+B,QAAQ,uBAAuB,EACvE,IAAI,SAAS,EACb,eACE,KACA,KACA,MACe;AACf,QAAM,aAAa;EACnB,MAAM,WAAW,IAAI,OAAO;EAC5B,MAAM,QAAQ,WAAW,SAAS,MAAM,EAAE,GAAG;EAC7C,MAAM,OAAO,QAAQ,SAAS,OAAO,IAAI,OAAO,QAAQ,GAAG,IAAI,OAAO;AACtE,QAAM,kBAAkB,KAAK;EAC7B,MAAM,iBAAiB,kBAAkB,IAAI;AAC7C,MAAI;GACF,MAAM,WAAY,MAAM,QAAQ,oBAAoB;IAClD;IACA,aAAa;IACb,aAAa;IACb;IACD,CAAC;AACF,SAAM,iBAAiB,UAAU,KAAK;AACtC,OAAI,IAAI,YAAY,cAAc,QAAQ,gBAAgB;GAE1D,MAAM,EAAE,MAAM,IAAI;AAElB,QAAK,UADU,sBAAsB,UAAU,EAAE,CAC3B,CAAC;WAChB,KAAK;AACZ,QAAK,IAAI;;GAGd;AACD,QAAO"}
|
package/build/api/search.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import { Auth } from '@verdaccio/auth';
|
|
3
|
+
import { Storage } from '@verdaccio/store';
|
|
4
4
|
declare function addSearchWebApi(storage: Storage, auth: Auth): Router;
|
|
5
5
|
export default addSearchWebApi;
|
package/build/api/search.js
CHANGED
|
@@ -1,104 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
var _middleware = require("@verdaccio/middleware");
|
|
13
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
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 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); }
|
|
17
|
-
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); }); }; }
|
|
18
|
-
var debug = (0, _debug["default"])('verdaccio:web:api:search');
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.js");
|
|
2
|
+
let express = require("express");
|
|
3
|
+
let lodash = require("lodash");
|
|
4
|
+
lodash = require_runtime.__toESM(lodash);
|
|
5
|
+
let _verdaccio_core = require("@verdaccio/core");
|
|
6
|
+
let _verdaccio_middleware = require("@verdaccio/middleware");
|
|
7
|
+
let debug = require("debug");
|
|
8
|
+
debug = require_runtime.__toESM(debug);
|
|
9
|
+
let node_url = require("node:url");
|
|
10
|
+
//#region src/api/search.ts
|
|
11
|
+
var debug$1 = (0, debug.default)("verdaccio:web:api:search");
|
|
19
12
|
function checkAccess(pkg, auth, remoteUser) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
allowed = false;
|
|
30
|
-
return resolve(null);
|
|
31
|
-
} else {
|
|
32
|
-
reject(err);
|
|
33
|
-
}
|
|
34
|
-
} else {
|
|
35
|
-
return resolve(allowed ? pkg : null);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
});
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function(err, allowed) {
|
|
15
|
+
if (err) if (err.status && String(err.status).match(/^4\d\d$/)) {
|
|
16
|
+
allowed = false;
|
|
17
|
+
return resolve(null);
|
|
18
|
+
} else reject(err);
|
|
19
|
+
else return resolve(allowed ? pkg : null);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
39
22
|
}
|
|
40
23
|
function addSearchWebApi(storage, auth) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
data = _context.v;
|
|
76
|
-
_context.n = 2;
|
|
77
|
-
return Promise.all(data.map(function (pkgItem) {
|
|
78
|
-
return checkAccess(pkgItem, auth, req.remote_user);
|
|
79
|
-
}));
|
|
80
|
-
case 2:
|
|
81
|
-
checkAccessPromises = _context.v;
|
|
82
|
-
_final = checkAccessPromises.filter(function (i) {
|
|
83
|
-
return !_lodash["default"].isNull(i);
|
|
84
|
-
}).slice(from, size);
|
|
85
|
-
next(_final);
|
|
86
|
-
_context.n = 4;
|
|
87
|
-
break;
|
|
88
|
-
case 3:
|
|
89
|
-
_context.p = 3;
|
|
90
|
-
_t = _context.v;
|
|
91
|
-
next(_core.errorUtils.getInternalError(_t.message));
|
|
92
|
-
case 4:
|
|
93
|
-
return _context.a(2);
|
|
94
|
-
}
|
|
95
|
-
}, _callee, null, [[0, 3]]);
|
|
96
|
-
}));
|
|
97
|
-
return function (_x, _x2, _x3) {
|
|
98
|
-
return _ref.apply(this, arguments);
|
|
99
|
-
};
|
|
100
|
-
}());
|
|
101
|
-
return router;
|
|
24
|
+
const router = (0, express.Router)();
|
|
25
|
+
router.get(_verdaccio_middleware.WebUrls.search, async function(req, _res, next) {
|
|
26
|
+
try {
|
|
27
|
+
const abort = new AbortController();
|
|
28
|
+
req.socket.on("close", function() {
|
|
29
|
+
debug$1("search web aborted");
|
|
30
|
+
abort.abort();
|
|
31
|
+
});
|
|
32
|
+
const text = req.params.anything ?? "";
|
|
33
|
+
const size = 20;
|
|
34
|
+
const from = 0;
|
|
35
|
+
const query = {
|
|
36
|
+
from: 0,
|
|
37
|
+
maintenance: .5,
|
|
38
|
+
popularity: .98,
|
|
39
|
+
quality: .65,
|
|
40
|
+
size: 20,
|
|
41
|
+
text
|
|
42
|
+
};
|
|
43
|
+
const urlParams = new node_url.URLSearchParams(query);
|
|
44
|
+
debug$1("search web init");
|
|
45
|
+
const data = await storage?.search({
|
|
46
|
+
query,
|
|
47
|
+
url: `/-/v1/search?${urlParams.toString()}`,
|
|
48
|
+
abort
|
|
49
|
+
});
|
|
50
|
+
next((await Promise.all(data.map((pkgItem) => {
|
|
51
|
+
return checkAccess(pkgItem, auth, req.remote_user);
|
|
52
|
+
}))).filter((i) => !lodash.default.isNull(i)).slice(from, size));
|
|
53
|
+
} catch (err) {
|
|
54
|
+
next(_verdaccio_core.errorUtils.getInternalError(err.message));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return router;
|
|
102
58
|
}
|
|
103
|
-
|
|
59
|
+
//#endregion
|
|
60
|
+
exports.default = addSearchWebApi;
|
|
61
|
+
|
|
104
62
|
//# sourceMappingURL=search.js.map
|
package/build/api/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","names":["_debug","_interopRequireDefault","require","_express","_lodash","_nodeUrl","_core","_middleware","e","__esModule","_regenerator","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","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","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","debug","buildDebug","checkAccess","pkg","auth","remoteUser","reject","_pkg$package","allow_access","packageName","name","err","allowed","status","String","match","addSearchWebApi","storage","router","Router","get","WebUrls","search","_ref","_callee","req","_res","next","_ref2","abort","text","size","from","query","urlParams","data","checkAccessPromises","_final","_t","_context","AbortController","socket","on","params","anything","maintenance","popularity","quality","URLSearchParams","url","concat","toString","all","map","pkgItem","remote_user","final","filter","_","isNull","slice","errorUtils","getInternalError","message","_x","_x2","_x3","_default","exports"],"sources":["../../src/api/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\nimport { URLSearchParams } from 'node:url';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { errorUtils } from '@verdaccio/core';\nimport type { SearchQuery } from '@verdaccio/core/src/search-utils';\nimport { WebUrls } from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Manifest } from '@verdaccio/types';\n\nimport type { $NextFunctionVer, $RequestExtend, $ResponseExtend } from './package';\n\nconst debug = buildDebug('verdaccio:web:api:search');\n\nfunction checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n allowed = false;\n return resolve(null);\n } else {\n reject(err);\n }\n } else {\n return resolve(allowed ? pkg : null);\n }\n });\n });\n}\n\nfunction addSearchWebApi(storage: Storage, auth: Auth): Router {\n const router = Router(); /* eslint new-cap: 0 */\n router.get(\n WebUrls.search,\n async function (\n req: $RequestExtend,\n _res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n try {\n const abort = new AbortController();\n req.socket.on('close', function () {\n debug('search web aborted');\n abort.abort();\n });\n const text: string = (req.params.anything as string) ?? '';\n // These values are declared as optimal by npm cli\n // FUTURE: could be overwritten by ui settings.\n const size = 20;\n const from = 0;\n const query: SearchQuery = {\n from: 0,\n maintenance: 0.5,\n popularity: 0.98,\n quality: 0.65,\n size: 20,\n text,\n };\n // @ts-ignore\n const urlParams = new URLSearchParams(query);\n debug('search web init');\n const data = await storage?.search({\n query,\n url: `/-/v1/search?${urlParams.toString()}`,\n abort,\n });\n const checkAccessPromises = await Promise.all(\n data.map((pkgItem) => {\n return checkAccess(pkgItem, auth, req.remote_user);\n })\n );\n\n const final = checkAccessPromises\n .filter((i): i is Manifest => !_.isNull(i))\n .slice(from, size);\n\n next(final);\n } catch (err: any) {\n next(errorUtils.getInternalError(err.message));\n }\n }\n );\n return router;\n}\n\nexport default addSearchWebApi;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAGA,IAAAI,KAAA,GAAAJ,OAAA;AAEA,IAAAK,WAAA,GAAAL,OAAA;AAAgD,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,gBAAAA,CAAA;AAAA,SAAAE,aAAA,IAPhD,uKAAAF,CAAA,EAAAG,CAAA,EAAAC,CAAA,wBAAAC,MAAA,GAAAA,MAAA,OAAAC,CAAA,GAAAF,CAAA,CAAAG,QAAA,kBAAAC,CAAA,GAAAJ,CAAA,CAAAK,WAAA,8BAAAC,EAAAN,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAE,CAAA,QAAAC,CAAA,GAAAL,CAAA,IAAAA,CAAA,CAAAM,SAAA,YAAAC,SAAA,GAAAP,CAAA,GAAAO,SAAA,EAAAC,CAAA,GAAAC,MAAA,CAAAC,MAAA,CAAAL,CAAA,CAAAC,SAAA,UAAAK,mBAAA,CAAAH,CAAA,uBAAAV,CAAA,EAAAE,CAAA,EAAAE,CAAA,QAAAE,CAAA,EAAAC,CAAA,EAAAG,CAAA,EAAAI,CAAA,MAAAC,CAAA,GAAAX,CAAA,QAAAY,CAAA,OAAAC,CAAA,KAAAF,CAAA,KAAAb,CAAA,KAAAgB,CAAA,EAAAtB,CAAA,EAAAuB,CAAA,EAAAC,CAAA,EAAAN,CAAA,EAAAM,CAAA,CAAAC,IAAA,CAAAzB,CAAA,MAAAwB,CAAA,WAAAA,EAAArB,CAAA,EAAAC,CAAA,WAAAM,CAAA,GAAAP,CAAA,EAAAQ,CAAA,MAAAG,CAAA,GAAAd,CAAA,EAAAqB,CAAA,CAAAf,CAAA,GAAAF,CAAA,EAAAmB,CAAA,gBAAAC,EAAApB,CAAA,EAAAE,CAAA,SAAAK,CAAA,GAAAP,CAAA,EAAAU,CAAA,GAAAR,CAAA,EAAAH,CAAA,OAAAiB,CAAA,IAAAF,CAAA,KAAAV,CAAA,IAAAL,CAAA,GAAAgB,CAAA,CAAAO,MAAA,EAAAvB,CAAA,UAAAK,CAAA,EAAAE,CAAA,GAAAS,CAAA,CAAAhB,CAAA,GAAAqB,CAAA,GAAAH,CAAA,CAAAF,CAAA,EAAAQ,CAAA,GAAAjB,CAAA,KAAAN,CAAA,QAAAI,CAAA,GAAAmB,CAAA,KAAArB,CAAA,MAAAQ,CAAA,GAAAJ,CAAA,EAAAC,CAAA,GAAAD,CAAA,YAAAC,CAAA,WAAAD,CAAA,MAAAA,CAAA,MAAAV,CAAA,IAAAU,CAAA,OAAAc,CAAA,MAAAhB,CAAA,GAAAJ,CAAA,QAAAoB,CAAA,GAAAd,CAAA,QAAAC,CAAA,MAAAU,CAAA,CAAAC,CAAA,GAAAhB,CAAA,EAAAe,CAAA,CAAAf,CAAA,GAAAI,CAAA,OAAAc,CAAA,GAAAG,CAAA,KAAAnB,CAAA,GAAAJ,CAAA,QAAAM,CAAA,MAAAJ,CAAA,IAAAA,CAAA,GAAAqB,CAAA,MAAAjB,CAAA,MAAAN,CAAA,EAAAM,CAAA,MAAAJ,CAAA,EAAAe,CAAA,CAAAf,CAAA,GAAAqB,CAAA,EAAAhB,CAAA,cAAAH,CAAA,IAAAJ,CAAA,aAAAmB,CAAA,QAAAH,CAAA,OAAAd,CAAA,qBAAAE,CAAA,EAAAW,CAAA,EAAAQ,CAAA,QAAAT,CAAA,YAAAU,SAAA,uCAAAR,CAAA,UAAAD,CAAA,IAAAK,CAAA,CAAAL,CAAA,EAAAQ,CAAA,GAAAhB,CAAA,GAAAQ,CAAA,EAAAL,CAAA,GAAAa,CAAA,GAAAxB,CAAA,GAAAQ,CAAA,OAAAX,CAAA,GAAAc,CAAA,MAAAM,CAAA,KAAAV,CAAA,KAAAC,CAAA,GAAAA,CAAA,QAAAA,CAAA,SAAAU,CAAA,CAAAf,CAAA,QAAAkB,CAAA,CAAAb,CAAA,EAAAG,CAAA,KAAAO,CAAA,CAAAf,CAAA,GAAAQ,CAAA,GAAAO,CAAA,CAAAC,CAAA,GAAAR,CAAA,aAAAI,CAAA,MAAAR,CAAA,QAAAC,CAAA,KAAAH,CAAA,YAAAL,CAAA,GAAAO,CAAA,CAAAF,CAAA,WAAAL,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAnB,CAAA,EAAAI,CAAA,UAAAc,SAAA,2CAAAzB,CAAA,CAAA2B,IAAA,SAAA3B,CAAA,EAAAW,CAAA,GAAAX,CAAA,CAAA4B,KAAA,EAAApB,CAAA,SAAAA,CAAA,oBAAAA,CAAA,KAAAR,CAAA,GAAAO,CAAA,eAAAP,CAAA,CAAA0B,IAAA,CAAAnB,CAAA,GAAAC,CAAA,SAAAG,CAAA,GAAAc,SAAA,uCAAApB,CAAA,gBAAAG,CAAA,OAAAD,CAAA,GAAAV,CAAA,cAAAG,CAAA,IAAAiB,CAAA,GAAAC,CAAA,CAAAf,CAAA,QAAAQ,CAAA,GAAAV,CAAA,CAAAyB,IAAA,CAAAvB,CAAA,EAAAe,CAAA,OAAAE,CAAA,kBAAApB,CAAA,IAAAO,CAAA,GAAAV,CAAA,EAAAW,CAAA,MAAAG,CAAA,GAAAX,CAAA,cAAAe,CAAA,mBAAAa,KAAA,EAAA5B,CAAA,EAAA2B,IAAA,EAAAV,CAAA,SAAAhB,CAAA,EAAAI,CAAA,EAAAE,CAAA,QAAAI,CAAA,QAAAS,CAAA,gBAAAV,UAAA,cAAAmB,kBAAA,cAAAC,2BAAA,KAAA9B,CAAA,GAAAY,MAAA,CAAAmB,cAAA,MAAAvB,CAAA,MAAAL,CAAA,IAAAH,CAAA,CAAAA,CAAA,IAAAG,CAAA,SAAAW,mBAAA,CAAAd,CAAA,OAAAG,CAAA,iCAAAH,CAAA,GAAAW,CAAA,GAAAmB,0BAAA,CAAArB,SAAA,GAAAC,SAAA,CAAAD,SAAA,GAAAG,MAAA,CAAAC,MAAA,CAAAL,CAAA,YAAAO,EAAAlB,CAAA,WAAAe,MAAA,CAAAoB,cAAA,GAAApB,MAAA,CAAAoB,cAAA,CAAAnC,CAAA,EAAAiC,0BAAA,KAAAjC,CAAA,CAAAoC,SAAA,GAAAH,0BAAA,EAAAhB,mBAAA,CAAAjB,CAAA,EAAAQ,CAAA,yBAAAR,CAAA,CAAAY,SAAA,GAAAG,MAAA,CAAAC,MAAA,CAAAF,CAAA,GAAAd,CAAA,WAAAgC,iBAAA,CAAApB,SAAA,GAAAqB,0BAAA,EAAAhB,mBAAA,CAAAH,CAAA,iBAAAmB,0BAAA,GAAAhB,mBAAA,CAAAgB,0BAAA,iBAAAD,iBAAA,GAAAA,iBAAA,CAAAK,WAAA,wBAAApB,mBAAA,CAAAgB,0BAAA,EAAAzB,CAAA,wBAAAS,mBAAA,CAAAH,CAAA,GAAAG,mBAAA,CAAAH,CAAA,EAAAN,CAAA,gBAAAS,mBAAA,CAAAH,CAAA,EAAAR,CAAA,iCAAAW,mBAAA,CAAAH,CAAA,8DAAAZ,YAAA,YAAAA,aAAA,aAAAoC,CAAA,EAAA5B,CAAA,EAAA6B,CAAA,EAAArB,CAAA;AAAA,SAAAD,oBAAAjB,CAAA,EAAAI,CAAA,EAAAE,CAAA,EAAAH,CAAA,QAAAO,CAAA,GAAAK,MAAA,CAAAyB,cAAA,QAAA9B,CAAA,uBAAAV,CAAA,IAAAU,CAAA,QAAAO,mBAAA,YAAAwB,mBAAAzC,CAAA,EAAAI,CAAA,EAAAE,CAAA,EAAAH,CAAA,aAAAK,EAAAJ,CAAA,EAAAE,CAAA,IAAAW,mBAAA,CAAAjB,CAAA,EAAAI,CAAA,YAAAJ,CAAA,gBAAA0C,OAAA,CAAAtC,CAAA,EAAAE,CAAA,EAAAN,CAAA,SAAAI,CAAA,GAAAM,CAAA,GAAAA,CAAA,CAAAV,CAAA,EAAAI,CAAA,IAAA2B,KAAA,EAAAzB,CAAA,EAAAqC,UAAA,GAAAxC,CAAA,EAAAyC,YAAA,GAAAzC,CAAA,EAAA0C,QAAA,GAAA1C,CAAA,MAAAH,CAAA,CAAAI,CAAA,IAAAE,CAAA,IAAAE,CAAA,aAAAA,CAAA,cAAAA,CAAA,mBAAAS,mBAAA,CAAAjB,CAAA,EAAAI,CAAA,EAAAE,CAAA,EAAAH,CAAA;AAAA,SAAA2C,mBAAAxC,CAAA,EAAAH,CAAA,EAAAH,CAAA,EAAAI,CAAA,EAAAI,CAAA,EAAAe,CAAA,EAAAZ,CAAA,cAAAD,CAAA,GAAAJ,CAAA,CAAAiB,CAAA,EAAAZ,CAAA,GAAAG,CAAA,GAAAJ,CAAA,CAAAqB,KAAA,WAAAzB,CAAA,gBAAAN,CAAA,CAAAM,CAAA,KAAAI,CAAA,CAAAoB,IAAA,GAAA3B,CAAA,CAAAW,CAAA,IAAAiC,OAAA,CAAAC,OAAA,CAAAlC,CAAA,EAAAmC,IAAA,CAAA7C,CAAA,EAAAI,CAAA;AAAA,SAAA0C,kBAAA5C,CAAA,6BAAAH,CAAA,SAAAH,CAAA,GAAAmD,SAAA,aAAAJ,OAAA,WAAA3C,CAAA,EAAAI,CAAA,QAAAe,CAAA,GAAAjB,CAAA,CAAA8C,KAAA,CAAAjD,CAAA,EAAAH,CAAA,YAAAqD,MAAA/C,CAAA,IAAAwC,kBAAA,CAAAvB,CAAA,EAAAnB,CAAA,EAAAI,CAAA,EAAA6C,KAAA,EAAAC,MAAA,UAAAhD,CAAA,cAAAgD,OAAAhD,CAAA,IAAAwC,kBAAA,CAAAvB,CAAA,EAAAnB,CAAA,EAAAI,CAAA,EAAA6C,KAAA,EAAAC,MAAA,WAAAhD,CAAA,KAAA+C,KAAA;AAaA,IAAME,KAAK,GAAG,IAAAC,iBAAU,EAAC,0BAA0B,CAAC;AAEpD,SAASC,WAAWA,CAACC,GAAQ,EAAEC,IAAS,EAAEC,UAAU,EAA4B;EAC9E,OAAO,IAAIb,OAAO,CAAC,UAACC,OAAO,EAAEa,MAAM,EAAK;IAAA,IAAAC,YAAA;IACtCH,IAAI,CAACI,YAAY,CAAC;MAAEC,WAAW,EAAEN,GAAG,aAAHA,GAAG,gBAAAI,YAAA,GAAHJ,GAAG,WAAS,cAAAI,YAAA,uBAAZA,YAAA,CAAcG;IAAK,CAAC,EAAEL,UAAU,EAAE,UAAUM,GAAG,EAAEC,OAAO,EAAE;MACzF,IAAID,GAAG,EAAE;QACP,IAAIA,GAAG,CAACE,MAAM,IAAIC,MAAM,CAACH,GAAG,CAACE,MAAM,CAAC,CAACE,KAAK,CAAC,SAAS,CAAC,EAAE;UACrD;UACA;UACAH,OAAO,GAAG,KAAK;UACf,OAAOnB,OAAO,CAAC,IAAI,CAAC;QACtB,CAAC,MAAM;UACLa,MAAM,CAACK,GAAG,CAAC;QACb;MACF,CAAC,MAAM;QACL,OAAOlB,OAAO,CAACmB,OAAO,GAAGT,GAAG,GAAG,IAAI,CAAC;MACtC;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;AAEA,SAASa,eAAeA,CAACC,OAAgB,EAAEb,IAAU,EAAU;EAC7D,IAAMc,MAAM,GAAG,IAAAC,eAAM,EAAC,CAAC,CAAC,CAAC;EACzBD,MAAM,CAACE,GAAG,CACRC,mBAAO,CAACC,MAAM;IAAA,IAAAC,IAAA,GAAA5B,iBAAA,cAAAhD,YAAA,GAAAqC,CAAA,CACd,SAAAwC,QACEC,GAAmB,EACnBC,IAAqB,EACrBC,IAAsB;MAAA,IAAAC,KAAA,EAAAC,KAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,KAAA,EAAAC,SAAA,EAAAC,IAAA,EAAAC,mBAAA,EAAAC,MAAA,EAAAC,EAAA;MAAA,OAAA3F,YAAA,GAAAoC,CAAA,WAAAwD,QAAA;QAAA,kBAAAA,QAAA,CAAA3E,CAAA,GAAA2E,QAAA,CAAAxF,CAAA;UAAA;YAAAwF,QAAA,CAAA3E,CAAA;YAGdiE,KAAK,GAAG,IAAIW,eAAe,CAAC,CAAC;YACnCf,GAAG,CAACgB,MAAM,CAACC,EAAE,CAAC,OAAO,EAAE,YAAY;cACjC1C,KAAK,CAAC,oBAAoB,CAAC;cAC3B6B,KAAK,CAACA,KAAK,CAAC,CAAC;YACf,CAAC,CAAC;YACIC,IAAY,IAAAF,KAAA,GAAIH,GAAG,CAACkB,MAAM,CAACC,QAAQ,cAAAhB,KAAA,cAAAA,KAAA,GAAe,EAAE,EAC1D;YACA;YACMG,IAAI,GAAG,EAAE;YACTC,IAAI,GAAG,CAAC;YACRC,KAAkB,GAAG;cACzBD,IAAI,EAAE,CAAC;cACPa,WAAW,EAAE,GAAG;cAChBC,UAAU,EAAE,IAAI;cAChBC,OAAO,EAAE,IAAI;cACbhB,IAAI,EAAE,EAAE;cACRD,IAAI,EAAJA;YACF,CAAC,EACD;YACMI,SAAS,GAAG,IAAIc,wBAAe,CAACf,KAAK,CAAC;YAC5CjC,KAAK,CAAC,iBAAiB,CAAC;YAACuC,QAAA,CAAAxF,CAAA;YAAA,OACNkE,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,MAAM,CAAC;cACjCW,KAAK,EAALA,KAAK;cACLgB,GAAG,kBAAAC,MAAA,CAAkBhB,SAAS,CAACiB,QAAQ,CAAC,CAAC,CAAE;cAC3CtB,KAAK,EAALA;YACF,CAAC,CAAC;UAAA;YAJIM,IAAI,GAAAI,QAAA,CAAAxE,CAAA;YAAAwE,QAAA,CAAAxF,CAAA;YAAA,OAKwByC,OAAO,CAAC4D,GAAG,CAC3CjB,IAAI,CAACkB,GAAG,CAAC,UAACC,OAAO,EAAK;cACpB,OAAOpD,WAAW,CAACoD,OAAO,EAAElD,IAAI,EAAEqB,GAAG,CAAC8B,WAAW,CAAC;YACpD,CAAC,CACH,CAAC;UAAA;YAJKnB,mBAAmB,GAAAG,QAAA,CAAAxE,CAAA;YAMnByF,MAAK,GAAGpB,mBAAmB,CAC9BqB,MAAM,CAAC,UAACtG,CAAC;cAAA,OAAoB,CAACuG,kBAAC,CAACC,MAAM,CAACxG,CAAC,CAAC;YAAA,EAAC,CAC1CyG,KAAK,CAAC5B,IAAI,EAAED,IAAI,CAAC;YAEpBJ,IAAI,CAAC6B,MAAK,CAAC;YAACjB,QAAA,CAAAxF,CAAA;YAAA;UAAA;YAAAwF,QAAA,CAAA3E,CAAA;YAAA0E,EAAA,GAAAC,QAAA,CAAAxE,CAAA;YAEZ4D,IAAI,CAACkC,gBAAU,CAACC,gBAAgB,CAACxB,EAAA,CAAIyB,OAAO,CAAC,CAAC;UAAC;YAAA,OAAAxB,QAAA,CAAAvE,CAAA;QAAA;MAAA,GAAAwD,OAAA;IAAA,CAElD;IAAA,iBAAAwC,EAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAA3C,IAAA,CAAA1B,KAAA,OAAAD,SAAA;IAAA;EAAA,GACH,CAAC;EACD,OAAOsB,MAAM;AACf;AAAC,IAAAiD,QAAA,GAAAC,OAAA,cAEcpD,eAAe","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"search.js","names":[],"sources":["../../src/api/search.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\nimport { URLSearchParams } from 'node:url';\n\nimport type { Auth } from '@verdaccio/auth';\nimport { errorUtils } from '@verdaccio/core';\nimport type { SearchQuery } from '@verdaccio/core/src/search-utils';\nimport { WebUrls } from '@verdaccio/middleware';\nimport type { Storage } from '@verdaccio/store';\nimport type { Manifest } from '@verdaccio/types';\n\nimport type { $NextFunctionVer, $RequestExtend, $ResponseExtend } from './package';\n\nconst debug = buildDebug('verdaccio:web:api:search');\n\nfunction checkAccess(pkg: any, auth: any, remoteUser): Promise<Manifest | null> {\n return new Promise((resolve, reject) => {\n auth.allow_access({ packageName: pkg?.package?.name }, remoteUser, function (err, allowed) {\n if (err) {\n if (err.status && String(err.status).match(/^4\\d\\d$/)) {\n // auth plugin returns 4xx user error,\n // that's equivalent of !allowed basically\n allowed = false;\n return resolve(null);\n } else {\n reject(err);\n }\n } else {\n return resolve(allowed ? pkg : null);\n }\n });\n });\n}\n\nfunction addSearchWebApi(storage: Storage, auth: Auth): Router {\n const router = Router(); /* eslint new-cap: 0 */\n router.get(\n WebUrls.search,\n async function (\n req: $RequestExtend,\n _res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n try {\n const abort = new AbortController();\n req.socket.on('close', function () {\n debug('search web aborted');\n abort.abort();\n });\n const text: string = (req.params.anything as string) ?? '';\n // These values are declared as optimal by npm cli\n // FUTURE: could be overwritten by ui settings.\n const size = 20;\n const from = 0;\n const query: SearchQuery = {\n from: 0,\n maintenance: 0.5,\n popularity: 0.98,\n quality: 0.65,\n size: 20,\n text,\n };\n // @ts-ignore\n const urlParams = new URLSearchParams(query);\n debug('search web init');\n const data = await storage?.search({\n query,\n url: `/-/v1/search?${urlParams.toString()}`,\n abort,\n });\n const checkAccessPromises = await Promise.all(\n data.map((pkgItem) => {\n return checkAccess(pkgItem, auth, req.remote_user);\n })\n );\n\n const final = checkAccessPromises\n .filter((i): i is Manifest => !_.isNull(i))\n .slice(from, size);\n\n next(final);\n } catch (err: any) {\n next(errorUtils.getInternalError(err.message));\n }\n }\n );\n return router;\n}\n\nexport default addSearchWebApi;\n"],"mappings":";;;;;;;;;;AAcA,IAAM,WAAA,GAAA,MAAA,SAAmB,2BAA2B;AAEpD,SAAS,YAAY,KAAU,MAAW,YAAsC;AAC9E,QAAO,IAAI,SAAS,SAAS,WAAW;AACtC,OAAK,aAAa,EAAE,aAAa,KAAK,SAAS,MAAM,EAAE,YAAY,SAAU,KAAK,SAAS;AACzF,OAAI,IACF,KAAI,IAAI,UAAU,OAAO,IAAI,OAAO,CAAC,MAAM,UAAU,EAAE;AAGrD,cAAU;AACV,WAAO,QAAQ,KAAK;SAEpB,QAAO,IAAI;OAGb,QAAO,QAAQ,UAAU,MAAM,KAAK;IAEtC;GACF;;AAGJ,SAAS,gBAAgB,SAAkB,MAAoB;CAC7D,MAAM,UAAA,GAAA,QAAA,SAAiB;AACvB,QAAO,IACL,sBAAA,QAAQ,QACR,eACE,KACA,MACA,MACe;AACf,MAAI;GACF,MAAM,QAAQ,IAAI,iBAAiB;AACnC,OAAI,OAAO,GAAG,SAAS,WAAY;AACjC,YAAM,qBAAqB;AAC3B,UAAM,OAAO;KACb;GACF,MAAM,OAAgB,IAAI,OAAO,YAAuB;GAGxD,MAAM,OAAO;GACb,MAAM,OAAO;GACb,MAAM,QAAqB;IACzB,MAAM;IACN,aAAa;IACb,YAAY;IACZ,SAAS;IACT,MAAM;IACN;IACD;GAED,MAAM,YAAY,IAAI,SAAA,gBAAgB,MAAM;AAC5C,WAAM,kBAAkB;GACxB,MAAM,OAAO,MAAM,SAAS,OAAO;IACjC;IACA,KAAK,gBAAgB,UAAU,UAAU;IACzC;IACD,CAAC;AAWF,SAV4B,MAAM,QAAQ,IACxC,KAAK,KAAK,YAAY;AACpB,WAAO,YAAY,SAAS,MAAM,IAAI,YAAY;KAClD,CACH,EAGE,QAAQ,MAAqB,CAAC,OAAA,QAAE,OAAO,EAAE,CAAC,CAC1C,MAAM,MAAM,KAAK,CAET;WACJ,KAAU;AACjB,QAAK,gBAAA,WAAW,iBAAiB,IAAI,QAAQ,CAAC;;GAGnD;AACD,QAAO"}
|