@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.
Files changed (51) hide show
  1. package/build/_virtual/_rolldown/runtime.js +23 -0
  2. package/build/_virtual/_rolldown/runtime.mjs +7 -0
  3. package/build/api/index.d.ts +1 -1
  4. package/build/api/index.js +26 -37
  5. package/build/api/index.js.map +1 -1
  6. package/build/api/index.mjs +27 -0
  7. package/build/api/index.mjs.map +1 -0
  8. package/build/api/package.d.ts +3 -3
  9. package/build/api/package.js +79 -200
  10. package/build/api/package.js.map +1 -1
  11. package/build/api/package.mjs +80 -0
  12. package/build/api/package.mjs.map +1 -0
  13. package/build/api/readme.d.ts +2 -2
  14. package/build/api/readme.js +64 -122
  15. package/build/api/readme.js.map +1 -1
  16. package/build/api/readme.mjs +67 -0
  17. package/build/api/readme.mjs.map +1 -0
  18. package/build/api/search.d.ts +2 -2
  19. package/build/api/search.js +57 -99
  20. package/build/api/search.js.map +1 -1
  21. package/build/api/search.mjs +59 -0
  22. package/build/api/search.mjs.map +1 -0
  23. package/build/api/sidebar.d.ts +3 -3
  24. package/build/api/sidebar.js +56 -109
  25. package/build/api/sidebar.js.map +1 -1
  26. package/build/api/sidebar.mjs +57 -0
  27. package/build/api/sidebar.mjs.map +1 -0
  28. package/build/api/user.d.ts +2 -2
  29. package/build/api/user.js +97 -212
  30. package/build/api/user.js.map +1 -1
  31. package/build/api/user.mjs +97 -0
  32. package/build/api/user.mjs.map +1 -0
  33. package/build/author-utils.d.ts +1 -1
  34. package/build/author-utils.js +109 -160
  35. package/build/author-utils.js.map +1 -1
  36. package/build/author-utils.mjs +117 -0
  37. package/build/author-utils.mjs.map +1 -0
  38. package/build/index.js +18 -47
  39. package/build/index.mjs +4 -0
  40. package/build/middleware.d.ts +1 -1
  41. package/build/middleware.js +49 -90
  42. package/build/middleware.js.map +1 -1
  43. package/build/middleware.mjs +48 -0
  44. package/build/middleware.mjs.map +1 -0
  45. package/build/web-utils.d.ts +2 -1
  46. package/build/web-utils.js +31 -31
  47. package/build/web-utils.js.map +1 -1
  48. package/build/web-utils.mjs +34 -0
  49. package/build/web-utils.mjs.map +1 -0
  50. package/package.json +30 -19
  51. 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"}
@@ -1,7 +1,7 @@
1
1
  import { Router } from 'express';
2
- import type { Auth } from '@verdaccio/auth';
2
+ import { Auth } from '@verdaccio/auth';
3
3
  import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';
4
- import type { Storage } from '@verdaccio/store';
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;
@@ -1,127 +1,69 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "$NextFunctionVer", {
7
- enumerable: true,
8
- get: function get() {
9
- return _middleware.$NextFunctionVer;
10
- }
11
- });
12
- Object.defineProperty(exports, "$RequestExtend", {
13
- enumerable: true,
14
- get: function get() {
15
- return _middleware.$RequestExtend;
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 = function getReadmeFromManifest(manifest, v) {
51
- var _manifest$DIST_TAGS;
52
- var id;
53
- var readme;
54
- if (typeof v === 'string' && (0, _webUtils.isVersionValid)(manifest, v)) {
55
- id = 'version';
56
- readme = manifest.versions[v].readme;
57
- }
58
- if (!readme && (0, _webUtils.isVersionValid)(manifest, (_manifest$DIST_TAGS = manifest[_core.DIST_TAGS]) === null || _manifest$DIST_TAGS === void 0 ? void 0 : _manifest$DIST_TAGS.latest)) {
59
- id = 'latest';
60
- readme = manifest.versions[manifest[_core.DIST_TAGS].latest].readme;
61
- }
62
- if (!readme && manifest.readme) {
63
- id = 'root';
64
- readme = manifest.readme;
65
- }
66
- debug('readme: %o %o', v, id);
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
- debug('initialized readme web api');
71
- var can = (0, _middleware.allow)(auth, {
72
- beforeAll: function beforeAll(a, b) {
73
- return _logger.logger.trace(a, b);
74
- },
75
- afterAll: function afterAll(a, b) {
76
- return _logger.logger.trace(a, b);
77
- }
78
- });
79
- var pkgRouter = (0, _express.Router)(); /* eslint new-cap: 0 */
80
-
81
- pkgRouter.get([_middleware.WebUrls.readme_package_scoped_version, _middleware.WebUrls.readme_package_version], can('access'), /*#__PURE__*/function () {
82
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(req, res, next) {
83
- var rawScope, scope, name, requestOptions, manifest, v, readme, _t;
84
- return _regenerator().w(function (_context) {
85
- while (1) switch (_context.p = _context.n) {
86
- case 0:
87
- debug('readme hit');
88
- rawScope = req.params.scope; // May include '@'
89
- scope = rawScope ? rawScope.slice(1) : null; // Remove '@' if present
90
- name = scope ? (0, _webUtils.addScope)(scope, req.params["package"]) : req.params["package"];
91
- debug('readme name %o', name);
92
- requestOptions = (0, _middleware.getRequestOptions)(req);
93
- _context.p = 1;
94
- _context.n = 2;
95
- return storage.getPackageByOptions({
96
- name: name,
97
- uplinksLook: true,
98
- abbreviated: false,
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
- var _default = exports["default"] = addReadmeWebApi;
66
+ //#endregion
67
+ exports.default = addReadmeWebApi;
68
+
127
69
  //# sourceMappingURL=readme.js.map
@@ -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"}
@@ -1,5 +1,5 @@
1
1
  import { Router } from 'express';
2
- import type { Auth } from '@verdaccio/auth';
3
- import type { Storage } from '@verdaccio/store';
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;
@@ -1,104 +1,62 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = void 0;
7
- var _debug = _interopRequireDefault(require("debug"));
8
- var _express = require("express");
9
- var _lodash = _interopRequireDefault(require("lodash"));
10
- var _nodeUrl = require("node:url");
11
- var _core = require("@verdaccio/core");
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
- return new Promise(function (resolve, reject) {
21
- var _pkg$package;
22
- auth.allow_access({
23
- packageName: pkg === null || pkg === void 0 || (_pkg$package = pkg["package"]) === null || _pkg$package === void 0 ? void 0 : _pkg$package.name
24
- }, remoteUser, function (err, allowed) {
25
- if (err) {
26
- if (err.status && String(err.status).match(/^4\d\d$/)) {
27
- // auth plugin returns 4xx user error,
28
- // that's equivalent of !allowed basically
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
- var router = (0, _express.Router)(); /* eslint new-cap: 0 */
42
- router.get(_middleware.WebUrls.search, /*#__PURE__*/function () {
43
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(req, _res, next) {
44
- var _ref2, abort, text, size, from, query, urlParams, data, checkAccessPromises, _final, _t;
45
- return _regenerator().w(function (_context) {
46
- while (1) switch (_context.p = _context.n) {
47
- case 0:
48
- _context.p = 0;
49
- abort = new AbortController();
50
- req.socket.on('close', function () {
51
- debug('search web aborted');
52
- abort.abort();
53
- });
54
- text = (_ref2 = req.params.anything) !== null && _ref2 !== void 0 ? _ref2 : ''; // These values are declared as optimal by npm cli
55
- // FUTURE: could be overwritten by ui settings.
56
- size = 20;
57
- from = 0;
58
- query = {
59
- from: 0,
60
- maintenance: 0.5,
61
- popularity: 0.98,
62
- quality: 0.65,
63
- size: 20,
64
- text: text
65
- }; // @ts-ignore
66
- urlParams = new _nodeUrl.URLSearchParams(query);
67
- debug('search web init');
68
- _context.n = 1;
69
- return storage === null || storage === void 0 ? void 0 : storage.search({
70
- query: query,
71
- url: "/-/v1/search?".concat(urlParams.toString()),
72
- abort: abort
73
- });
74
- case 1:
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
- var _default = exports["default"] = addSearchWebApi;
59
+ //#endregion
60
+ exports.default = addSearchWebApi;
61
+
104
62
  //# sourceMappingURL=search.js.map
@@ -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":"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","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"}