@verdaccio/web 6.0.0-6-next.18 → 6.0.0-6-next.22

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 (56) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/build/api/package.d.ts +1 -1
  3. package/build/api/package.js +18 -22
  4. package/build/api/package.js.map +1 -1
  5. package/build/api/readme.d.ts +1 -1
  6. package/build/api/readme.js +9 -9
  7. package/build/api/readme.js.map +1 -1
  8. package/build/api/search.js +3 -3
  9. package/build/api/search.js.map +1 -1
  10. package/build/api/sidebar.d.ts +1 -1
  11. package/build/api/sidebar.js +17 -13
  12. package/build/api/sidebar.js.map +1 -1
  13. package/build/api/user.d.ts +1 -1
  14. package/build/api/user.js +9 -9
  15. package/build/api/user.js.map +1 -1
  16. package/build/middleware/render-web.js +9 -9
  17. package/build/middleware/render-web.js.map +1 -1
  18. package/build/middleware/security.js +5 -5
  19. package/build/middleware/security.js.map +1 -1
  20. package/build/middleware/web-api.d.ts +1 -1
  21. package/build/middleware/web-api.js +6 -6
  22. package/build/middleware/web-api.js.map +1 -1
  23. package/build/renderHTML.js +16 -16
  24. package/build/renderHTML.js.map +1 -1
  25. package/build/template.js +2 -2
  26. package/build/template.js.map +1 -1
  27. package/build/utils/web-utils.d.ts +1 -2
  28. package/build/utils/web-utils.js +5 -71
  29. package/build/utils/web-utils.js.map +1 -1
  30. package/build/web-middleware.js.map +1 -1
  31. package/package.json +20 -22
  32. package/src/api/package.ts +6 -7
  33. package/src/api/readme.ts +5 -5
  34. package/src/api/search.ts +6 -4
  35. package/src/api/sidebar.ts +7 -7
  36. package/src/api/user.ts +9 -9
  37. package/src/middleware/render-web.ts +5 -4
  38. package/src/middleware/security.ts +1 -1
  39. package/src/middleware/web-api.ts +7 -6
  40. package/src/renderHTML.ts +5 -4
  41. package/src/template.ts +3 -1
  42. package/src/utils/web-utils.ts +3 -55
  43. package/src/web-middleware.ts +1 -0
  44. package/test/api.packages.test.ts +3 -1
  45. package/test/api.readme.test.ts +2 -1
  46. package/test/api.search.test.ts +3 -2
  47. package/test/api.sidebar.test.ts +2 -1
  48. package/test/api.user.test.ts +3 -1
  49. package/test/helper.ts +7 -5
  50. package/test/render.test.ts +3 -1
  51. package/test/template.test.ts +1 -0
  52. package/test/utils.spec.ts +1 -209
  53. package/build/utils/user.d.ts +0 -5
  54. package/build/utils/user.js +0 -34
  55. package/build/utils/user.js.map +0 -1
  56. package/src/utils/user.ts +0 -37
@@ -6,20 +6,20 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.loadTheme = loadTheme;
7
7
  exports.renderWebMiddleware = renderWebMiddleware;
8
8
 
9
- var _path = _interopRequireDefault(require("path"));
10
-
11
- var _lodash = _interopRequireDefault(require("lodash"));
12
-
13
9
  var _debug = _interopRequireDefault(require("debug"));
14
10
 
15
11
  var _express = _interopRequireDefault(require("express"));
16
12
 
17
- var _store = require("@verdaccio/store");
13
+ var _lodash = _interopRequireDefault(require("lodash"));
14
+
15
+ var _path = _interopRequireDefault(require("path"));
18
16
 
19
- var _commonsApi = require("@verdaccio/commons-api");
17
+ var _core = require("@verdaccio/core");
20
18
 
21
19
  var _loaders = require("@verdaccio/loaders");
22
20
 
21
+ var _store = require("@verdaccio/store");
22
+
23
23
  var _url = require("@verdaccio/url");
24
24
 
25
25
  var _renderHTML = _interopRequireDefault(require("../renderHTML"));
@@ -43,7 +43,7 @@ const sendFileCallback = next => err => {
43
43
  return;
44
44
  }
45
45
 
46
- if (err.status === _commonsApi.HTTP_STATUS.NOT_FOUND) {
46
+ if (err.status === _core.HTTP_STATUS.NOT_FOUND) {
47
47
  next();
48
48
  } else {
49
49
  next(err);
@@ -51,7 +51,7 @@ const sendFileCallback = next => err => {
51
51
  };
52
52
 
53
53
  function renderWebMiddleware(config, auth, storage) {
54
- var _config$web$logo, _config$web;
54
+ var _config$web;
55
55
 
56
56
  const {
57
57
  staticPath,
@@ -70,7 +70,7 @@ function renderWebMiddleware(config, auth, storage) {
70
70
  router.use(auth.webUIJWTmiddleware());
71
71
  router.use(_security.setSecurityWebHeaders); // Logo
72
72
 
73
- let logoURI = (_config$web$logo = config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.logo) !== null && _config$web$logo !== void 0 ? _config$web$logo : '';
73
+ let logoURI = (config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.logo) ?? '';
74
74
 
75
75
  if (logoURI && !(0, _url.isURLhasValidProtocol)(logoURI)) {
76
76
  // URI related to a local file
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/middleware/render-web.ts"],"names":["debug","loadTheme","config","_","isNil","theme","head","plugin","isString","sendFileCallback","next","err","status","HTTP_STATUS","NOT_FOUND","renderWebMiddleware","auth","storage","staticPath","manifest","manifestFiles","require","SearchInstance","configureStorage","router","express","Router","use","webUIJWTmiddleware","setSecurityWebHeaders","logoURI","web","logo","path","posix","join","basename","get","req","res","sendFile","resolve","filename","params","file"],"mappings":"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","sourcesContent":["import path from 'path';\nimport _ from 'lodash';\nimport buildDebug from 'debug';\nimport express from 'express';\n\nimport { SearchInstance } from '@verdaccio/store';\nimport { HTTP_STATUS } from '@verdaccio/commons-api';\nimport { loadPlugin } from '@verdaccio/loaders';\nimport { isURLhasValidProtocol } from '@verdaccio/url';\nimport renderHTML from '../renderHTML';\nimport { setSecurityWebHeaders } from './security';\n\nconst debug = buildDebug('verdaccio:web:render');\n\nexport function loadTheme(config) {\n if (_.isNil(config.theme) === false) {\n return _.head(\n loadPlugin(\n config,\n config.theme,\n {},\n function (plugin) {\n return _.isString(plugin);\n },\n 'verdaccio-theme'\n )\n );\n }\n}\n\nconst sendFileCallback = (next) => (err) => {\n if (!err) {\n return;\n }\n if (err.status === HTTP_STATUS.NOT_FOUND) {\n next();\n } else {\n next(err);\n }\n};\n\nexport function renderWebMiddleware(config, auth, storage): any {\n const { staticPath, manifest, manifestFiles } = require('@verdaccio/ui-theme')();\n debug('static path %o', staticPath);\n SearchInstance.configureStorage(storage);\n\n /* eslint new-cap:off */\n const router = express.Router();\n router.use(auth.webUIJWTmiddleware());\n router.use(setSecurityWebHeaders);\n\n // Logo\n let logoURI = config?.web?.logo ?? '';\n if (logoURI && !isURLhasValidProtocol(logoURI)) {\n // URI related to a local file\n\n // Note: `path.join` will break on Windows, because it transforms `/` to `\\`\n // Use POSIX version `path.posix.join` instead.\n logoURI = path.posix.join('/-/static/', path.basename(logoURI));\n router.get(logoURI, function (req, res, next) {\n res.sendFile(path.resolve(config.web.logo), sendFileCallback(next));\n debug('render static');\n });\n }\n\n // Static\n router.get('/-/static/*', function (req, res, next) {\n const filename = req.params[0];\n const file = `${staticPath}/${filename}`;\n debug('render static file %o', file);\n res.sendFile(file, sendFileCallback(next));\n });\n\n router.get('/-/web/:section/*', function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render html section');\n });\n\n router.get('/', function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render root');\n });\n\n return router;\n}\n"],"file":"render-web.js"}
1
+ {"version":3,"sources":["../../src/middleware/render-web.ts"],"names":["debug","loadTheme","config","_","isNil","theme","head","plugin","isString","sendFileCallback","next","err","status","HTTP_STATUS","NOT_FOUND","renderWebMiddleware","auth","storage","staticPath","manifest","manifestFiles","require","SearchInstance","configureStorage","router","express","Router","use","webUIJWTmiddleware","setSecurityWebHeaders","logoURI","web","logo","path","posix","join","basename","get","req","res","sendFile","resolve","filename","params","file"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport express from 'express';\nimport _ from 'lodash';\nimport path from 'path';\n\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { loadPlugin } from '@verdaccio/loaders';\nimport { SearchInstance } from '@verdaccio/store';\nimport { isURLhasValidProtocol } from '@verdaccio/url';\n\nimport renderHTML from '../renderHTML';\nimport { setSecurityWebHeaders } from './security';\n\nconst debug = buildDebug('verdaccio:web:render');\n\nexport function loadTheme(config) {\n if (_.isNil(config.theme) === false) {\n return _.head(\n loadPlugin(\n config,\n config.theme,\n {},\n function (plugin) {\n return _.isString(plugin);\n },\n 'verdaccio-theme'\n )\n );\n }\n}\n\nconst sendFileCallback = (next) => (err) => {\n if (!err) {\n return;\n }\n if (err.status === HTTP_STATUS.NOT_FOUND) {\n next();\n } else {\n next(err);\n }\n};\n\nexport function renderWebMiddleware(config, auth, storage): any {\n const { staticPath, manifest, manifestFiles } = require('@verdaccio/ui-theme')();\n debug('static path %o', staticPath);\n SearchInstance.configureStorage(storage);\n\n /* eslint new-cap:off */\n const router = express.Router();\n router.use(auth.webUIJWTmiddleware());\n router.use(setSecurityWebHeaders);\n\n // Logo\n let logoURI = config?.web?.logo ?? '';\n if (logoURI && !isURLhasValidProtocol(logoURI)) {\n // URI related to a local file\n\n // Note: `path.join` will break on Windows, because it transforms `/` to `\\`\n // Use POSIX version `path.posix.join` instead.\n logoURI = path.posix.join('/-/static/', path.basename(logoURI));\n router.get(logoURI, function (req, res, next) {\n res.sendFile(path.resolve(config.web.logo), sendFileCallback(next));\n debug('render static');\n });\n }\n\n // Static\n router.get('/-/static/*', function (req, res, next) {\n const filename = req.params[0];\n const file = `${staticPath}/${filename}`;\n debug('render static file %o', file);\n res.sendFile(file, sendFileCallback(next));\n });\n\n router.get('/-/web/:section/*', function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render html section');\n });\n\n router.get('/', function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render root');\n });\n\n return router;\n}\n"],"file":"render-web.js"}
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.setSecurityWebHeaders = setSecurityWebHeaders;
7
7
 
8
- var _commonsApi = require("@verdaccio/commons-api");
8
+ var _core = require("@verdaccio/core");
9
9
 
10
10
  function setSecurityWebHeaders(req, res, next) {
11
11
  // disable loading in frames (clickjacking, etc.)
12
- res.header(_commonsApi.HEADERS.FRAMES_OPTIONS, 'deny'); // avoid stablish connections outside of domain
12
+ res.header(_core.HEADERS.FRAMES_OPTIONS, 'deny'); // avoid stablish connections outside of domain
13
13
 
14
- res.header(_commonsApi.HEADERS.CSP, "connect-src 'self'"); // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff
14
+ res.header(_core.HEADERS.CSP, "connect-src 'self'"); // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff
15
15
 
16
- res.header(_commonsApi.HEADERS.CTO, 'nosniff'); // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection
16
+ res.header(_core.HEADERS.CTO, 'nosniff'); // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection
17
17
 
18
- res.header(_commonsApi.HEADERS.XSS, '1; mode=block');
18
+ res.header(_core.HEADERS.XSS, '1; mode=block');
19
19
  next();
20
20
  }
21
21
  //# sourceMappingURL=security.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/middleware/security.ts"],"names":["setSecurityWebHeaders","req","res","next","header","HEADERS","FRAMES_OPTIONS","CSP","CTO","XSS"],"mappings":";;;;;;;AAAA;;AAGO,SAASA,qBAAT,CACLC,GADK,EAELC,GAFK,EAGLC,IAHK,EAIC;AACN;AACAD,EAAAA,GAAG,CAACE,MAAJ,CAAWC,oBAAQC,cAAnB,EAAmC,MAAnC,EAFM,CAGN;;AACAJ,EAAAA,GAAG,CAACE,MAAJ,CAAWC,oBAAQE,GAAnB,EAAwB,oBAAxB,EAJM,CAKN;;AACAL,EAAAA,GAAG,CAACE,MAAJ,CAAWC,oBAAQG,GAAnB,EAAwB,SAAxB,EANM,CAON;;AACAN,EAAAA,GAAG,CAACE,MAAJ,CAAWC,oBAAQI,GAAnB,EAAwB,eAAxB;AACAN,EAAAA,IAAI;AACL","sourcesContent":["import { HEADERS } from '@verdaccio/commons-api';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';\n\nexport function setSecurityWebHeaders(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n): void {\n // disable loading in frames (clickjacking, etc.)\n res.header(HEADERS.FRAMES_OPTIONS, 'deny');\n // avoid stablish connections outside of domain\n res.header(HEADERS.CSP, \"connect-src 'self'\");\n // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff\n res.header(HEADERS.CTO, 'nosniff');\n // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection\n res.header(HEADERS.XSS, '1; mode=block');\n next();\n}\n"],"file":"security.js"}
1
+ {"version":3,"sources":["../../src/middleware/security.ts"],"names":["setSecurityWebHeaders","req","res","next","header","HEADERS","FRAMES_OPTIONS","CSP","CTO","XSS"],"mappings":";;;;;;;AAAA;;AAGO,SAASA,qBAAT,CACLC,GADK,EAELC,GAFK,EAGLC,IAHK,EAIC;AACN;AACAD,EAAAA,GAAG,CAACE,MAAJ,CAAWC,cAAQC,cAAnB,EAAmC,MAAnC,EAFM,CAGN;;AACAJ,EAAAA,GAAG,CAACE,MAAJ,CAAWC,cAAQE,GAAnB,EAAwB,oBAAxB,EAJM,CAKN;;AACAL,EAAAA,GAAG,CAACE,MAAJ,CAAWC,cAAQG,GAAnB,EAAwB,SAAxB,EANM,CAON;;AACAN,EAAAA,GAAG,CAACE,MAAJ,CAAWC,cAAQI,GAAnB,EAAwB,eAAxB;AACAN,EAAAA,IAAI;AACL","sourcesContent":["import { HEADERS } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';\n\nexport function setSecurityWebHeaders(\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n): void {\n // disable loading in frames (clickjacking, etc.)\n res.header(HEADERS.FRAMES_OPTIONS, 'deny');\n // avoid stablish connections outside of domain\n res.header(HEADERS.CSP, \"connect-src 'self'\");\n // https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff\n res.header(HEADERS.CTO, 'nosniff');\n // https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection\n res.header(HEADERS.XSS, '1; mode=block');\n next();\n}\n"],"file":"security.js"}
@@ -1,5 +1,5 @@
1
1
  import { Router } from 'express';
2
- import { Config } from '@verdaccio/types';
3
2
  import { IAuth } from '@verdaccio/auth';
4
3
  import { Storage } from '@verdaccio/store';
4
+ import { Config } from '@verdaccio/types';
5
5
  export declare function webAPI(config: Config, auth: IAuth, storage: Storage): Router;
@@ -5,24 +5,24 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.webAPI = webAPI;
7
7
 
8
- var _express = require("express");
9
-
10
8
  var _bodyParser = _interopRequireDefault(require("body-parser"));
11
9
 
12
- var _store = require("@verdaccio/store");
10
+ var _express = require("express");
13
11
 
14
12
  var _middleware = require("@verdaccio/middleware");
15
13
 
16
- var _search = _interopRequireDefault(require("../api/search"));
14
+ var _store = require("@verdaccio/store");
17
15
 
18
16
  var _package = _interopRequireDefault(require("../api/package"));
19
17
 
20
- var _user = _interopRequireDefault(require("../api/user"));
21
-
22
18
  var _readme = _interopRequireDefault(require("../api/readme"));
23
19
 
20
+ var _search = _interopRequireDefault(require("../api/search"));
21
+
24
22
  var _sidebar = _interopRequireDefault(require("../api/sidebar"));
25
23
 
24
+ var _user = _interopRequireDefault(require("../api/user"));
25
+
26
26
  var _webUtils = require("../utils/web-utils");
27
27
 
28
28
  var _security = require("./security");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/middleware/web-api.ts"],"names":["webAPI","config","auth","storage","route","SearchInstance","configureStorage","param","validatePackage","validateName","use","bodyParser","urlencoded","extended","webUIJWTmiddleware","setSecurityWebHeaders"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEO,SAASA,MAAT,CAAgBC,MAAhB,EAAgCC,IAAhC,EAA6CC,OAA7C,EAAuE;AAC5E;AACA,QAAMC,KAAK,GAAG,sBAAd;;AACAC,wBAAeC,gBAAf,CAAgCH,OAAhC,EAH4E,CAK5E;AACA;;;AACAC,EAAAA,KAAK,CAACG,KAAN,CAAY,SAAZ,EAAuBC,2BAAvB;AACAJ,EAAAA,KAAK,CAACG,KAAN,CAAY,UAAZ,EAAwBE,wBAAxB;AACAL,EAAAA,KAAK,CAACG,KAAN,CAAY,SAAZ,EAAuBE,wBAAvB;AACAL,EAAAA,KAAK,CAACG,KAAN,CAAY,UAAZ,EAAwB,uBAAM,IAAN,CAAxB;AAEAH,EAAAA,KAAK,CAACM,GAAN,CAAUC,oBAAWC,UAAX,CAAsB;AAAEC,IAAAA,QAAQ,EAAE;AAAZ,GAAtB,CAAV;AACAT,EAAAA,KAAK,CAACM,GAAN,CAAUR,IAAI,CAACY,kBAAL,EAAV;AACAV,EAAAA,KAAK,CAACM,GAAN,CAAUK,+BAAV;AAEA,wBAAiBX,KAAjB,EAAwBD,OAAxB,EAAiCD,IAAjC,EAAuCD,MAAvC;AACA,uBAAgBG,KAAhB,EAAuBD,OAAvB,EAAgCD,IAAhC;AACA,wBAAiBE,KAAjB,EAAwBH,MAAxB,EAAgCE,OAAhC,EAAyCD,IAAzC;AACA,uBAAgBE,KAAhB,EAAuBD,OAAvB,EAAgCD,IAAhC;;AACA,MAAI,wBAASD,MAAT,CAAJ,EAAsB;AACpB,uBAAeG,KAAf,EAAsBF,IAAtB,EAA4BD,MAA5B;AACD,GAtB2E,CAuB5E;AACA;AACA;AACA;;;AACA,SAAOG,KAAP;AACD","sourcesContent":["import { Router } from 'express';\nimport bodyParser from 'body-parser';\n\nimport { SearchInstance } from '@verdaccio/store';\nimport { match, validateName, validatePackage } from '@verdaccio/middleware';\nimport { Config } from '@verdaccio/types';\nimport { IAuth } from '@verdaccio/auth';\nimport { Storage } from '@verdaccio/store';\nimport addSearchWebApi from '../api/search';\nimport addPackageWebApi from '../api/package';\nimport addUserAuthApi from '../api/user';\nimport addReadmeWebApi from '../api/readme';\nimport addSidebarWebApi from '../api/sidebar';\nimport { hasLogin } from '../utils/web-utils';\nimport { setSecurityWebHeaders } from './security';\n\nexport function webAPI(config: Config, auth: IAuth, storage: Storage): Router {\n // eslint-disable-next-line new-cap\n const route = Router();\n SearchInstance.configureStorage(storage);\n\n // validate all of these params as a package name\n // this might be too harsh, so ask if it causes trouble=\n route.param('package', validatePackage);\n route.param('filename', validateName);\n route.param('version', validateName);\n route.param('anything', match(/.*/));\n\n route.use(bodyParser.urlencoded({ extended: false }));\n route.use(auth.webUIJWTmiddleware());\n route.use(setSecurityWebHeaders);\n\n addPackageWebApi(route, storage, auth, config);\n addReadmeWebApi(route, storage, auth);\n addSidebarWebApi(route, config, storage, auth);\n addSearchWebApi(route, storage, auth);\n if (hasLogin(config)) {\n addUserAuthApi(route, auth, config);\n }\n // What are you looking for? logout? client side will remove token when user click logout,\n // or it will auto expire after 24 hours.\n // This token is different with the token send to npm client.\n // With JWT you will be able to setup expire tokens.\n return route;\n}\n"],"file":"web-api.js"}
1
+ {"version":3,"sources":["../../src/middleware/web-api.ts"],"names":["webAPI","config","auth","storage","route","SearchInstance","configureStorage","param","validatePackage","validateName","use","bodyParser","urlencoded","extended","webUIJWTmiddleware","setSecurityWebHeaders"],"mappings":";;;;;;;AAAA;;AACA;;AAGA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEO,SAASA,MAAT,CAAgBC,MAAhB,EAAgCC,IAAhC,EAA6CC,OAA7C,EAAuE;AAC5E;AACA,QAAMC,KAAK,GAAG,sBAAd;;AACAC,wBAAeC,gBAAf,CAAgCH,OAAhC,EAH4E,CAK5E;AACA;;;AACAC,EAAAA,KAAK,CAACG,KAAN,CAAY,SAAZ,EAAuBC,2BAAvB;AACAJ,EAAAA,KAAK,CAACG,KAAN,CAAY,UAAZ,EAAwBE,wBAAxB;AACAL,EAAAA,KAAK,CAACG,KAAN,CAAY,SAAZ,EAAuBE,wBAAvB;AACAL,EAAAA,KAAK,CAACG,KAAN,CAAY,UAAZ,EAAwB,uBAAM,IAAN,CAAxB;AAEAH,EAAAA,KAAK,CAACM,GAAN,CAAUC,oBAAWC,UAAX,CAAsB;AAAEC,IAAAA,QAAQ,EAAE;AAAZ,GAAtB,CAAV;AACAT,EAAAA,KAAK,CAACM,GAAN,CAAUR,IAAI,CAACY,kBAAL,EAAV;AACAV,EAAAA,KAAK,CAACM,GAAN,CAAUK,+BAAV;AAEA,wBAAiBX,KAAjB,EAAwBD,OAAxB,EAAiCD,IAAjC,EAAuCD,MAAvC;AACA,uBAAgBG,KAAhB,EAAuBD,OAAvB,EAAgCD,IAAhC;AACA,wBAAiBE,KAAjB,EAAwBH,MAAxB,EAAgCE,OAAhC,EAAyCD,IAAzC;AACA,uBAAgBE,KAAhB,EAAuBD,OAAvB,EAAgCD,IAAhC;;AACA,MAAI,wBAASD,MAAT,CAAJ,EAAsB;AACpB,uBAAeG,KAAf,EAAsBF,IAAtB,EAA4BD,MAA5B;AACD,GAtB2E,CAuB5E;AACA;AACA;AACA;;;AACA,SAAOG,KAAP;AACD","sourcesContent":["import bodyParser from 'body-parser';\nimport { Router } from 'express';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { match, validateName, validatePackage } from '@verdaccio/middleware';\nimport { SearchInstance } from '@verdaccio/store';\nimport { Storage } from '@verdaccio/store';\nimport { Config } from '@verdaccio/types';\n\nimport addPackageWebApi from '../api/package';\nimport addReadmeWebApi from '../api/readme';\nimport addSearchWebApi from '../api/search';\nimport addSidebarWebApi from '../api/sidebar';\nimport addUserAuthApi from '../api/user';\nimport { hasLogin } from '../utils/web-utils';\nimport { setSecurityWebHeaders } from './security';\n\nexport function webAPI(config: Config, auth: IAuth, storage: Storage): Router {\n // eslint-disable-next-line new-cap\n const route = Router();\n SearchInstance.configureStorage(storage);\n\n // validate all of these params as a package name\n // this might be too harsh, so ask if it causes trouble=\n route.param('package', validatePackage);\n route.param('filename', validateName);\n route.param('version', validateName);\n route.param('anything', match(/.*/));\n\n route.use(bodyParser.urlencoded({ extended: false }));\n route.use(auth.webUIJWTmiddleware());\n route.use(setSecurityWebHeaders);\n\n addPackageWebApi(route, storage, auth, config);\n addReadmeWebApi(route, storage, auth);\n addSidebarWebApi(route, config, storage, auth);\n addSearchWebApi(route, storage, auth);\n if (hasLogin(config)) {\n addUserAuthApi(route, auth, config);\n }\n // What are you looking for? logout? client side will remove token when user click logout,\n // or it will auto expire after 24 hours.\n // This token is different with the token send to npm client.\n // With JWT you will be able to setup expire tokens.\n return route;\n}\n"],"file":"web-api.js"}
@@ -5,22 +5,22 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = renderHTML;
7
7
 
8
- var _url = require("url");
9
-
10
8
  var _debug = _interopRequireDefault(require("debug"));
11
9
 
12
10
  var _lruCache = _interopRequireDefault(require("lru-cache"));
13
11
 
14
- var _commonsApi = require("@verdaccio/commons-api");
15
-
16
- var _url2 = require("@verdaccio/url");
12
+ var _url = require("url");
17
13
 
18
14
  var _config = require("@verdaccio/config");
19
15
 
20
- var _webUtils = require("./utils/web-utils");
16
+ var _core = require("@verdaccio/core");
17
+
18
+ var _url2 = require("@verdaccio/url");
21
19
 
22
20
  var _template = _interopRequireDefault(require("./template"));
23
21
 
22
+ var _webUtils = require("./utils/web-utils");
23
+
24
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
25
 
26
26
  const pkgJSON = require('../package.json');
@@ -37,22 +37,22 @@ const defaultManifestFiles = {
37
37
  };
38
38
 
39
39
  function renderHTML(config, manifest, manifestFiles, req, res) {
40
- var _config$i18n$web, _config$i18n, _config$web$darkMode, _config$web, _config$web$title, _config$web2, _config$web$scope, _config$web3, _config$web$logo, _config$web4, _config$web$pkgManage, _config$web5, _validatePrimaryColor, _config$web6;
40
+ var _config$i18n, _config$web, _config$web2, _config$web3, _config$web4, _config$web5, _config$web6;
41
41
 
42
42
  const {
43
43
  url_prefix
44
44
  } = config;
45
45
  const base = (0, _url2.getPublicUrl)(config === null || config === void 0 ? void 0 : config.url_prefix, req);
46
46
  const basename = new _url.URL(base).pathname;
47
- const language = (_config$i18n$web = config === null || config === void 0 ? void 0 : (_config$i18n = config.i18n) === null || _config$i18n === void 0 ? void 0 : _config$i18n.web) !== null && _config$i18n$web !== void 0 ? _config$i18n$web : DEFAULT_LANGUAGE;
48
- const darkMode = (_config$web$darkMode = config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.darkMode) !== null && _config$web$darkMode !== void 0 ? _config$web$darkMode : false;
49
- const title = (_config$web$title = config === null || config === void 0 ? void 0 : (_config$web2 = config.web) === null || _config$web2 === void 0 ? void 0 : _config$web2.title) !== null && _config$web$title !== void 0 ? _config$web$title : _config.WEB_TITLE;
47
+ const language = (config === null || config === void 0 ? void 0 : (_config$i18n = config.i18n) === null || _config$i18n === void 0 ? void 0 : _config$i18n.web) ?? DEFAULT_LANGUAGE;
48
+ const darkMode = (config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.darkMode) ?? false;
49
+ const title = (config === null || config === void 0 ? void 0 : (_config$web2 = config.web) === null || _config$web2 === void 0 ? void 0 : _config$web2.title) ?? _config.WEB_TITLE;
50
50
  const login = (0, _webUtils.hasLogin)(config);
51
- const scope = (_config$web$scope = config === null || config === void 0 ? void 0 : (_config$web3 = config.web) === null || _config$web3 === void 0 ? void 0 : _config$web3.scope) !== null && _config$web$scope !== void 0 ? _config$web$scope : '';
52
- const logoURI = (_config$web$logo = config === null || config === void 0 ? void 0 : (_config$web4 = config.web) === null || _config$web4 === void 0 ? void 0 : _config$web4.logo) !== null && _config$web$logo !== void 0 ? _config$web$logo : '';
53
- const pkgManagers = (_config$web$pkgManage = config === null || config === void 0 ? void 0 : (_config$web5 = config.web) === null || _config$web5 === void 0 ? void 0 : _config$web5.pkgManagers) !== null && _config$web$pkgManage !== void 0 ? _config$web$pkgManage : ['yarn', 'pnpm', 'npm'];
51
+ const scope = (config === null || config === void 0 ? void 0 : (_config$web3 = config.web) === null || _config$web3 === void 0 ? void 0 : _config$web3.scope) ?? '';
52
+ const logoURI = (config === null || config === void 0 ? void 0 : (_config$web4 = config.web) === null || _config$web4 === void 0 ? void 0 : _config$web4.logo) ?? '';
53
+ const pkgManagers = (config === null || config === void 0 ? void 0 : (_config$web5 = config.web) === null || _config$web5 === void 0 ? void 0 : _config$web5.pkgManagers) ?? ['yarn', 'pnpm', 'npm'];
54
54
  const version = pkgJSON.version;
55
- const primaryColor = (_validatePrimaryColor = (0, _webUtils.validatePrimaryColor)(config === null || config === void 0 ? void 0 : (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.primary_color)) !== null && _validatePrimaryColor !== void 0 ? _validatePrimaryColor : '#4b5e40';
55
+ const primaryColor = (0, _webUtils.validatePrimaryColor)(config === null || config === void 0 ? void 0 : (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.primary_color) ?? '#4b5e40';
56
56
  const {
57
57
  scriptsBodyAfter,
58
58
  metaScripts,
@@ -85,7 +85,7 @@ function renderHTML(config, manifest, manifestFiles, req, res) {
85
85
  debug('web options %o', options);
86
86
  debug('web manifestFiles %o', manifestFiles);
87
87
  webPage = (0, _template.default)({
88
- manifest: manifestFiles !== null && manifestFiles !== void 0 ? manifestFiles : defaultManifestFiles,
88
+ manifest: manifestFiles ?? defaultManifestFiles,
89
89
  options,
90
90
  scriptsBodyAfter,
91
91
  metaScripts,
@@ -101,7 +101,7 @@ function renderHTML(config, manifest, manifestFiles, req, res) {
101
101
  throw new Error(`theme could not be load, stack ${error.stack}`);
102
102
  }
103
103
 
104
- res.setHeader('Content-Type', _commonsApi.HEADERS.TEXT_HTML);
104
+ res.setHeader('Content-Type', _core.HEADERS.TEXT_HTML);
105
105
  res.send(webPage);
106
106
  debug('render web');
107
107
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/renderHTML.ts"],"names":["pkgJSON","require","DEFAULT_LANGUAGE","cache","LRU","max","maxAge","debug","defaultManifestFiles","js","ico","renderHTML","config","manifest","manifestFiles","req","res","url_prefix","base","basename","URL","pathname","language","i18n","web","darkMode","title","WEB_TITLE","login","scope","logoURI","logo","pkgManagers","version","primaryColor","primary_color","scriptsBodyAfter","metaScripts","scriptsbodyBefore","Object","assign","bodyBefore","options","webPage","get","set","error","Error","stack","setHeader","HEADERS","TEXT_HTML","send"],"mappings":"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","sourcesContent":["import { URL } from 'url';\nimport buildDebug from 'debug';\nimport LRU from 'lru-cache';\nimport { HEADERS } from '@verdaccio/commons-api';\nimport { getPublicUrl } from '@verdaccio/url';\n\nimport { WEB_TITLE } from '@verdaccio/config';\nimport { hasLogin, validatePrimaryColor } from './utils/web-utils';\nimport renderTemplate from './template';\n\nconst pkgJSON = require('../package.json');\nconst DEFAULT_LANGUAGE = 'es-US';\nconst cache = new LRU({ max: 500, maxAge: 1000 * 60 * 60 });\n\nconst debug = buildDebug('verdaccio:web:render');\n\nconst defaultManifestFiles = {\n js: ['runtime.js', 'vendors.js', 'main.js'],\n ico: 'favicon.ico',\n};\n\nexport default function renderHTML(config, manifest, manifestFiles, req, res) {\n const { url_prefix } = config;\n const base = getPublicUrl(config?.url_prefix, req);\n const basename = new URL(base).pathname;\n const language = config?.i18n?.web ?? DEFAULT_LANGUAGE;\n const darkMode = config?.web?.darkMode ?? false;\n const title = config?.web?.title ?? WEB_TITLE;\n const login = hasLogin(config);\n const scope = config?.web?.scope ?? '';\n const logoURI = config?.web?.logo ?? '';\n const pkgManagers = config?.web?.pkgManagers ?? ['yarn', 'pnpm', 'npm'];\n const version = pkgJSON.version;\n const primaryColor = validatePrimaryColor(config?.web?.primary_color) ?? '#4b5e40';\n const { scriptsBodyAfter, metaScripts, scriptsbodyBefore } = Object.assign(\n {},\n {\n scriptsBodyAfter: [],\n bodyBefore: [],\n metaScripts: [],\n },\n config?.web\n );\n const options = {\n darkMode,\n url_prefix,\n basename,\n base,\n primaryColor,\n version,\n logoURI,\n login,\n pkgManagers,\n title,\n scope,\n language,\n };\n\n let webPage;\n\n try {\n webPage = cache.get('template');\n\n if (!webPage) {\n debug('web options %o', options);\n debug('web manifestFiles %o', manifestFiles);\n webPage = renderTemplate(\n {\n manifest: manifestFiles ?? defaultManifestFiles,\n options,\n scriptsBodyAfter,\n metaScripts,\n scriptsbodyBefore,\n },\n manifest\n );\n debug('template :: %o', webPage);\n cache.set('template', webPage);\n debug('set template cache');\n } else {\n debug('reuse template cache');\n }\n } catch (error: any) {\n throw new Error(`theme could not be load, stack ${error.stack}`);\n }\n res.setHeader('Content-Type', HEADERS.TEXT_HTML);\n res.send(webPage);\n debug('render web');\n}\n"],"file":"renderHTML.js"}
1
+ {"version":3,"sources":["../src/renderHTML.ts"],"names":["pkgJSON","require","DEFAULT_LANGUAGE","cache","LRU","max","maxAge","debug","defaultManifestFiles","js","ico","renderHTML","config","manifest","manifestFiles","req","res","url_prefix","base","basename","URL","pathname","language","i18n","web","darkMode","title","WEB_TITLE","login","scope","logoURI","logo","pkgManagers","version","primaryColor","primary_color","scriptsBodyAfter","metaScripts","scriptsbodyBefore","Object","assign","bodyBefore","options","webPage","get","set","error","Error","stack","setHeader","HEADERS","TEXT_HTML","send"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport LRU from 'lru-cache';\nimport { URL } from 'url';\n\nimport { WEB_TITLE } from '@verdaccio/config';\nimport { HEADERS } from '@verdaccio/core';\nimport { getPublicUrl } from '@verdaccio/url';\n\nimport renderTemplate from './template';\nimport { hasLogin, validatePrimaryColor } from './utils/web-utils';\n\nconst pkgJSON = require('../package.json');\nconst DEFAULT_LANGUAGE = 'es-US';\nconst cache = new LRU({ max: 500, maxAge: 1000 * 60 * 60 });\n\nconst debug = buildDebug('verdaccio:web:render');\n\nconst defaultManifestFiles = {\n js: ['runtime.js', 'vendors.js', 'main.js'],\n ico: 'favicon.ico',\n};\n\nexport default function renderHTML(config, manifest, manifestFiles, req, res) {\n const { url_prefix } = config;\n const base = getPublicUrl(config?.url_prefix, req);\n const basename = new URL(base).pathname;\n const language = config?.i18n?.web ?? DEFAULT_LANGUAGE;\n const darkMode = config?.web?.darkMode ?? false;\n const title = config?.web?.title ?? WEB_TITLE;\n const login = hasLogin(config);\n const scope = config?.web?.scope ?? '';\n const logoURI = config?.web?.logo ?? '';\n const pkgManagers = config?.web?.pkgManagers ?? ['yarn', 'pnpm', 'npm'];\n const version = pkgJSON.version;\n const primaryColor = validatePrimaryColor(config?.web?.primary_color) ?? '#4b5e40';\n const { scriptsBodyAfter, metaScripts, scriptsbodyBefore } = Object.assign(\n {},\n {\n scriptsBodyAfter: [],\n bodyBefore: [],\n metaScripts: [],\n },\n config?.web\n );\n const options = {\n darkMode,\n url_prefix,\n basename,\n base,\n primaryColor,\n version,\n logoURI,\n login,\n pkgManagers,\n title,\n scope,\n language,\n };\n\n let webPage;\n\n try {\n webPage = cache.get('template');\n\n if (!webPage) {\n debug('web options %o', options);\n debug('web manifestFiles %o', manifestFiles);\n webPage = renderTemplate(\n {\n manifest: manifestFiles ?? defaultManifestFiles,\n options,\n scriptsBodyAfter,\n metaScripts,\n scriptsbodyBefore,\n },\n manifest\n );\n debug('template :: %o', webPage);\n cache.set('template', webPage);\n debug('set template cache');\n } else {\n debug('reuse template cache');\n }\n } catch (error: any) {\n throw new Error(`theme could not be load, stack ${error.stack}`);\n }\n res.setHeader('Content-Type', HEADERS.TEXT_HTML);\n res.send(webPage);\n debug('render web');\n}\n"],"file":"renderHTML.js"}
package/build/template.js CHANGED
@@ -14,7 +14,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
14
14
  const debug = (0, _debug.default)('verdaccio:web:render:template');
15
15
 
16
16
  function renderTemplate(template, manifest) {
17
- var _template$options$tit, _template$options;
17
+ var _template$options;
18
18
 
19
19
  debug('template %o', template);
20
20
  debug('manifest %o', manifest);
@@ -24,7 +24,7 @@ function renderTemplate(template, manifest) {
24
24
  <head>
25
25
  <meta charset="utf-8">
26
26
  <base href="${template === null || template === void 0 ? void 0 : template.options.base}">
27
- <title>${(_template$options$tit = template === null || template === void 0 ? void 0 : (_template$options = template.options) === null || _template$options === void 0 ? void 0 : _template$options.title) !== null && _template$options$tit !== void 0 ? _template$options$tit : ''}</title>
27
+ <title>${(template === null || template === void 0 ? void 0 : (_template$options = template.options) === null || _template$options === void 0 ? void 0 : _template$options.title) ?? ''}</title>
28
28
  <link rel="icon" href="${template === null || template === void 0 ? void 0 : template.options.base}-/static/favicon.ico"/>
29
29
  <meta name="viewport" content="width=device-width, initial-scale=1" />
30
30
  <script>
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/template.ts"],"names":["debug","renderTemplate","template","manifest","options","base","title","JSON","stringify","metaScripts","join","scriptsbodyBefore","js","map","item","scriptsBodyAfter"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAEA,MAAMA,KAAK,GAAG,oBAAW,+BAAX,CAAd;;AAee,SAASC,cAAT,CAAwBC,QAAxB,EAA4CC,QAA5C,EAAuE;AAAA;;AACpFH,EAAAA,KAAK,CAAC,aAAD,EAAgBE,QAAhB,CAAL;AACAF,EAAAA,KAAK,CAAC,aAAD,EAAgBG,QAAhB,CAAL;AAEA,SAAQ;AACV;AACA;AACA;AACA;AACA,sBAAsBD,QALb,aAKaA,QALb,uBAKaA,QAAQ,CAAEE,OAAV,CAAkBC,IAAK;AAC7C,iBANS,yBAMQH,QANR,aAMQA,QANR,4CAMQA,QAAQ,CAAEE,OANlB,sDAMQ,kBAAmBE,KAN3B,yEAMoC,EAAG;AAChD,iCAAiCJ,QAPxB,aAOwBA,QAPxB,uBAOwBA,QAAQ,CAAEE,OAAV,CAAkBC,IAAK;AACxD;AACA;AACA,qDAAqDE,IAAI,CAACC,SAAL,CAAeN,QAAQ,CAACE,OAAxB,CAAiC;AACtF;AACA,UAAUF,QAAQ,SAAR,IAAAA,QAAQ,WAAR,IAAAA,QAAQ,CAAEO,WAAV,GAAwBP,QAAQ,CAACO,WAAT,CAAqBC,IAArB,CAA0B,EAA1B,CAAxB,GAAwD,EAAG;AACrE;AACA;AACA,QAAQR,QAAQ,SAAR,IAAAA,QAAQ,WAAR,IAAAA,QAAQ,CAAES,iBAAV,GAA8BT,QAAQ,CAACS,iBAAT,CAA2BD,IAA3B,CAAgC,EAAhC,CAA9B,GAAoE,EAAG;AAC/E;AACA,UAAU,gCAAiBR,QAAQ,CAACC,QAAT,CAAkBS,EAAnC,EAAuCT,QAAvC,EAAiDD,QAAjD,aAAiDA,QAAjD,uBAAiDA,QAAQ,CAAEE,OAAV,CAAkBC,IAAnE,EACCQ,GADD,CACMC,IAAD,IAAW,8BAA6BA,IAAK,aADlD,EAECJ,IAFD,CAEM,EAFN,CAEU;AACpB,UAAUR,QAAQ,SAAR,IAAAA,QAAQ,WAAR,IAAAA,QAAQ,CAAEa,gBAAV,GAA6Bb,QAAQ,CAACa,gBAAT,CAA0BL,IAA1B,CAA+B,EAA/B,CAA7B,GAAkE,EAAG;AAC/E;AACA;AACA,GAvBE;AAwBD","sourcesContent":["import buildDebug from 'debug';\nimport { TemplateUIOptions } from '@verdaccio/types';\nimport { getManifestValue, Manifest } from './utils/manifest';\n\nconst debug = buildDebug('verdaccio:web:render:template');\n\nexport type Template = {\n manifest: Manifest;\n options: TemplateUIOptions;\n metaScripts?: string[];\n scriptsBodyAfter?: string[];\n scriptsbodyBefore?: string[];\n};\n\n// the outcome of the Webpack Manifest Plugin\nexport interface WebpackManifest {\n [key: string]: string;\n}\n\nexport default function renderTemplate(template: Template, manifest: WebpackManifest) {\n debug('template %o', template);\n debug('manifest %o', manifest);\n\n return `\n <!DOCTYPE html>\n <html lang=\"en-us\"> \n <head>\n <meta charset=\"utf-8\">\n <base href=\"${template?.options.base}\">\n <title>${template?.options?.title ?? ''}</title> \n <link rel=\"icon\" href=\"${template?.options.base}-/static/favicon.ico\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /> \n <script>\n window.__VERDACCIO_BASENAME_UI_OPTIONS=${JSON.stringify(template.options)}\n </script>\n ${template?.metaScripts ? template.metaScripts.join('') : ''}\n </head> \n <body class=\"body\">\n ${template?.scriptsbodyBefore ? template.scriptsbodyBefore.join('') : ''}\n <div id=\"root\"></div>\n ${getManifestValue(template.manifest.js, manifest, template?.options.base)\n .map((item) => `<script defer=\"defer\" src=\"${item}\"></script>`)\n .join('')}\n ${template?.scriptsBodyAfter ? template.scriptsBodyAfter.join('') : ''}\n </body>\n </html>\n `;\n}\n"],"file":"template.js"}
1
+ {"version":3,"sources":["../src/template.ts"],"names":["debug","renderTemplate","template","manifest","options","base","title","JSON","stringify","metaScripts","join","scriptsbodyBefore","js","map","item","scriptsBodyAfter"],"mappings":";;;;;;;AAAA;;AAIA;;;;AAEA,MAAMA,KAAK,GAAG,oBAAW,+BAAX,CAAd;;AAee,SAASC,cAAT,CAAwBC,QAAxB,EAA4CC,QAA5C,EAAuE;AAAA;;AACpFH,EAAAA,KAAK,CAAC,aAAD,EAAgBE,QAAhB,CAAL;AACAF,EAAAA,KAAK,CAAC,aAAD,EAAgBG,QAAhB,CAAL;AAEA,SAAQ;AACV;AACA;AACA;AACA;AACA,sBAAsBD,QALb,aAKaA,QALb,uBAKaA,QAAQ,CAAEE,OAAV,CAAkBC,IAAK;AAC7C,iBAAiB,CAAAH,QAAQ,SAAR,IAAAA,QAAQ,WAAR,iCAAAA,QAAQ,CAAEE,OAAV,wEAAmBE,KAAnB,KAA4B,EAAG;AAChD,iCAAiCJ,QAPxB,aAOwBA,QAPxB,uBAOwBA,QAAQ,CAAEE,OAAV,CAAkBC,IAAK;AACxD;AACA;AACA,qDAAqDE,IAAI,CAACC,SAAL,CAAeN,QAAQ,CAACE,OAAxB,CAAiC;AACtF;AACA,UAAUF,QAAQ,SAAR,IAAAA,QAAQ,WAAR,IAAAA,QAAQ,CAAEO,WAAV,GAAwBP,QAAQ,CAACO,WAAT,CAAqBC,IAArB,CAA0B,EAA1B,CAAxB,GAAwD,EAAG;AACrE;AACA;AACA,QAAQR,QAAQ,SAAR,IAAAA,QAAQ,WAAR,IAAAA,QAAQ,CAAES,iBAAV,GAA8BT,QAAQ,CAACS,iBAAT,CAA2BD,IAA3B,CAAgC,EAAhC,CAA9B,GAAoE,EAAG;AAC/E;AACA,UAAU,gCAAiBR,QAAQ,CAACC,QAAT,CAAkBS,EAAnC,EAAuCT,QAAvC,EAAiDD,QAAjD,aAAiDA,QAAjD,uBAAiDA,QAAQ,CAAEE,OAAV,CAAkBC,IAAnE,EACCQ,GADD,CACMC,IAAD,IAAW,8BAA6BA,IAAK,aADlD,EAECJ,IAFD,CAEM,EAFN,CAEU;AACpB,UAAUR,QAAQ,SAAR,IAAAA,QAAQ,WAAR,IAAAA,QAAQ,CAAEa,gBAAV,GAA6Bb,QAAQ,CAACa,gBAAT,CAA0BL,IAA1B,CAA+B,EAA/B,CAA7B,GAAkE,EAAG;AAC/E;AACA;AACA,GAvBE;AAwBD","sourcesContent":["import buildDebug from 'debug';\n\nimport { TemplateUIOptions } from '@verdaccio/types';\n\nimport { Manifest, getManifestValue } from './utils/manifest';\n\nconst debug = buildDebug('verdaccio:web:render:template');\n\nexport type Template = {\n manifest: Manifest;\n options: TemplateUIOptions;\n metaScripts?: string[];\n scriptsBodyAfter?: string[];\n scriptsbodyBefore?: string[];\n};\n\n// the outcome of the Webpack Manifest Plugin\nexport interface WebpackManifest {\n [key: string]: string;\n}\n\nexport default function renderTemplate(template: Template, manifest: WebpackManifest) {\n debug('template %o', template);\n debug('manifest %o', manifest);\n\n return `\n <!DOCTYPE html>\n <html lang=\"en-us\"> \n <head>\n <meta charset=\"utf-8\">\n <base href=\"${template?.options.base}\">\n <title>${template?.options?.title ?? ''}</title> \n <link rel=\"icon\" href=\"${template?.options.base}-/static/favicon.ico\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /> \n <script>\n window.__VERDACCIO_BASENAME_UI_OPTIONS=${JSON.stringify(template.options)}\n </script>\n ${template?.metaScripts ? template.metaScripts.join('') : ''}\n </head> \n <body class=\"body\">\n ${template?.scriptsbodyBefore ? template.scriptsbodyBefore.join('') : ''}\n <div id=\"root\"></div>\n ${getManifestValue(template.manifest.js, manifest, template?.options.base)\n .map((item) => `<script defer=\"defer\" src=\"${item}\"></script>`)\n .join('')}\n ${template?.scriptsBodyAfter ? template.scriptsBodyAfter.join('') : ''}\n </body>\n </html>\n `;\n}\n"],"file":"template.js"}
@@ -1,9 +1,8 @@
1
- import { Package, Author, ConfigYaml } from '@verdaccio/types';
1
+ import { Author, ConfigYaml } from '@verdaccio/types';
2
2
  export declare type AuthorAvatar = Author & {
3
3
  avatar?: string;
4
4
  };
5
5
  export declare function validatePrimaryColor(primaryColor: any): any;
6
- export declare function addGravatarSupport(pkgInfo: Package, online?: boolean): AuthorAvatar;
7
6
  /**
8
7
  * parse package readme - markdown/ascii
9
8
  * @param {String} packageName name of package
@@ -3,34 +3,21 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.validatePrimaryColor = validatePrimaryColor;
7
- exports.addGravatarSupport = addGravatarSupport;
8
- exports.parseReadme = parseReadme;
9
- exports.deleteProperties = deleteProperties;
10
6
  exports.addScope = addScope;
11
- exports.sortByName = sortByName;
7
+ exports.deleteProperties = deleteProperties;
12
8
  exports.hasLogin = hasLogin;
13
-
14
- var _lodash = _interopRequireDefault(require("lodash"));
9
+ exports.parseReadme = parseReadme;
10
+ exports.sortByName = sortByName;
11
+ exports.validatePrimaryColor = validatePrimaryColor;
15
12
 
16
13
  var _debug = _interopRequireDefault(require("debug"));
17
14
 
18
- var _utils = require("@verdaccio/utils");
19
-
20
- var _store = require("@verdaccio/store");
15
+ var _lodash = _interopRequireDefault(require("lodash"));
21
16
 
22
17
  var _readme = _interopRequireDefault(require("@verdaccio/readme"));
23
18
 
24
- var _user = require("./user");
25
-
26
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
20
 
28
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
29
-
30
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
31
-
32
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
33
-
34
21
  const debug = (0, _debug.default)('verdaccio:web:utils');
35
22
 
36
23
  function validatePrimaryColor(primaryColor) {
@@ -43,59 +30,6 @@ function validatePrimaryColor(primaryColor) {
43
30
 
44
31
  return primaryColor;
45
32
  }
46
-
47
- function addGravatarSupport(pkgInfo, online = true) {
48
- const pkgInfoCopy = _objectSpread({}, pkgInfo);
49
-
50
- const author = _lodash.default.get(pkgInfo, 'latest.author', null);
51
-
52
- const contributors = (0, _store.normalizeContributors)(_lodash.default.get(pkgInfo, 'latest.contributors', []));
53
-
54
- const maintainers = _lodash.default.get(pkgInfo, 'latest.maintainers', []); // for author.
55
-
56
-
57
- if (author && _lodash.default.isObject(author)) {
58
- const {
59
- email
60
- } = author;
61
- pkgInfoCopy.latest.author.avatar = (0, _user.generateGravatarUrl)(email, online);
62
- }
63
-
64
- if (author && _lodash.default.isString(author)) {
65
- pkgInfoCopy.latest.author = {
66
- avatar: _user.GENERIC_AVATAR,
67
- email: '',
68
- author
69
- };
70
- } // for contributors
71
-
72
-
73
- if (_lodash.default.isEmpty(contributors) === false) {
74
- pkgInfoCopy.latest.contributors = contributors.map(contributor => {
75
- if ((0, _utils.isObject)(contributor)) {
76
- contributor.avatar = (0, _user.generateGravatarUrl)(contributor.email, online);
77
- } else if (_lodash.default.isString(contributor)) {
78
- contributor = {
79
- avatar: _user.GENERIC_AVATAR,
80
- email: contributor,
81
- name: contributor
82
- };
83
- }
84
-
85
- return contributor;
86
- });
87
- } // for maintainers
88
-
89
-
90
- if (_lodash.default.isEmpty(maintainers) === false) {
91
- pkgInfoCopy.latest.maintainers = maintainers.map(maintainer => {
92
- maintainer.avatar = (0, _user.generateGravatarUrl)(maintainer.email, online);
93
- return maintainer;
94
- });
95
- }
96
-
97
- return pkgInfoCopy;
98
- }
99
33
  /**
100
34
  * parse package readme - markdown/ascii
101
35
  * @param {String} packageName name of package
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/web-utils.ts"],"names":["debug","validatePrimaryColor","primaryColor","isHex","test","addGravatarSupport","pkgInfo","online","pkgInfoCopy","author","_","get","contributors","maintainers","isObject","email","latest","avatar","isString","GENERIC_AVATAR","isEmpty","map","contributor","name","maintainer","parseReadme","packageName","readme","Error","deleteProperties","propertiesToDelete","objectItem","forEach","property","addScope","scope","sortByName","packages","orderAscending","slice","sort","a","b","comparatorNames","toLowerCase","hasLogin","config","isNil","web","login"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport buildDebug from 'debug';\nimport { isObject } from '@verdaccio/utils';\nimport { Package, Author, ConfigYaml } from '@verdaccio/types';\nimport { normalizeContributors } from '@verdaccio/store';\n\nimport sanitizyReadme from '@verdaccio/readme';\n\nexport type AuthorAvatar = Author & { avatar?: string };\nimport { generateGravatarUrl, GENERIC_AVATAR } from './user';\n\nconst debug = buildDebug('verdaccio:web:utils');\n\nexport function validatePrimaryColor(primaryColor) {\n const isHex = /^#+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/i.test(primaryColor);\n if (!isHex) {\n debug('invalid primary color %o', primaryColor);\n return;\n }\n\n return primaryColor;\n}\n\nexport function addGravatarSupport(pkgInfo: Package, online = true): AuthorAvatar {\n const pkgInfoCopy = { ...pkgInfo } as any;\n const author: any = _.get(pkgInfo, 'latest.author', null) as any;\n const contributors: AuthorAvatar[] = normalizeContributors(\n _.get(pkgInfo, 'latest.contributors', [])\n );\n const maintainers = _.get(pkgInfo, 'latest.maintainers', []);\n\n // for author.\n if (author && _.isObject(author)) {\n const { email } = author as Author;\n pkgInfoCopy.latest.author.avatar = generateGravatarUrl(email, online);\n }\n\n if (author && _.isString(author)) {\n pkgInfoCopy.latest.author = {\n avatar: GENERIC_AVATAR,\n email: '',\n author,\n };\n }\n\n // for contributors\n if (_.isEmpty(contributors) === false) {\n pkgInfoCopy.latest.contributors = contributors.map((contributor): AuthorAvatar => {\n if (isObject(contributor)) {\n contributor.avatar = generateGravatarUrl(contributor.email, online);\n } else if (_.isString(contributor)) {\n contributor = {\n avatar: GENERIC_AVATAR,\n email: contributor,\n name: contributor,\n };\n }\n\n return contributor;\n });\n }\n\n // for maintainers\n if (_.isEmpty(maintainers) === false) {\n pkgInfoCopy.latest.maintainers = maintainers.map((maintainer): void => {\n maintainer.avatar = generateGravatarUrl(maintainer.email, online);\n return maintainer;\n });\n }\n\n return pkgInfoCopy;\n}\n\n/**\n * parse package readme - markdown/ascii\n * @param {String} packageName name of package\n * @param {String} readme package readme\n * @return {String} converted html template\n */\nexport function parseReadme(packageName: string, readme: string): string | void {\n if (_.isEmpty(readme) === false) {\n debug('sanizity readme');\n return sanitizyReadme(readme);\n }\n\n // logs readme not found error\n // logger.error({ packageName }, '@{packageName}: No readme found');\n throw new Error('ERROR: No README data found!');\n}\n\nexport function deleteProperties(propertiesToDelete: string[], objectItem: any): any {\n debug('deleted unused version properties');\n _.forEach(propertiesToDelete, (property): any => {\n delete objectItem[property];\n });\n\n return objectItem;\n}\n\nexport function addScope(scope: string, packageName: string): string {\n return `@${scope}/${packageName}`;\n}\n\nexport function sortByName(packages: any[], orderAscending: boolean | void = true): string[] {\n return packages.slice().sort(function (a, b): number {\n const comparatorNames = a.name.toLowerCase() < b.name.toLowerCase();\n return orderAscending ? (comparatorNames ? -1 : 1) : comparatorNames ? 1 : -1;\n });\n}\n\nexport function hasLogin(config: ConfigYaml) {\n return _.isNil(config?.web?.login) || config?.web?.login === true;\n}\n"],"file":"web-utils.js"}
1
+ {"version":3,"sources":["../../src/utils/web-utils.ts"],"names":["debug","validatePrimaryColor","primaryColor","isHex","test","parseReadme","packageName","readme","_","isEmpty","Error","deleteProperties","propertiesToDelete","objectItem","forEach","property","addScope","scope","sortByName","packages","orderAscending","slice","sort","a","b","comparatorNames","name","toLowerCase","hasLogin","config","isNil","web","login"],"mappings":";;;;;;;;;;;;AAAA;;AACA;;AAEA;;;;AAMA,MAAMA,KAAK,GAAG,oBAAW,qBAAX,CAAd;;AAEO,SAASC,oBAAT,CAA8BC,YAA9B,EAA4C;AACjD,QAAMC,KAAK,GAAG,uCAAuCC,IAAvC,CAA4CF,YAA5C,CAAd;;AACA,MAAI,CAACC,KAAL,EAAY;AACVH,IAAAA,KAAK,CAAC,0BAAD,EAA6BE,YAA7B,CAAL;AACA;AACD;;AAED,SAAOA,YAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASG,WAAT,CAAqBC,WAArB,EAA0CC,MAA1C,EAAyE;AAC9E,MAAIC,gBAAEC,OAAF,CAAUF,MAAV,MAAsB,KAA1B,EAAiC;AAC/BP,IAAAA,KAAK,CAAC,iBAAD,CAAL;AACA,WAAO,qBAAeO,MAAf,CAAP;AACD,GAJ6E,CAM9E;AACA;;;AACA,QAAM,IAAIG,KAAJ,CAAU,8BAAV,CAAN;AACD;;AAEM,SAASC,gBAAT,CAA0BC,kBAA1B,EAAwDC,UAAxD,EAA8E;AACnFb,EAAAA,KAAK,CAAC,mCAAD,CAAL;;AACAQ,kBAAEM,OAAF,CAAUF,kBAAV,EAA+BG,QAAD,IAAmB;AAC/C,WAAOF,UAAU,CAACE,QAAD,CAAjB;AACD,GAFD;;AAIA,SAAOF,UAAP;AACD;;AAEM,SAASG,QAAT,CAAkBC,KAAlB,EAAiCX,WAAjC,EAA8D;AACnE,SAAQ,IAAGW,KAAM,IAAGX,WAAY,EAAhC;AACD;;AAEM,SAASY,UAAT,CAAoBC,QAApB,EAAqCC,cAA8B,GAAG,IAAtE,EAAsF;AAC3F,SAAOD,QAAQ,CAACE,KAAT,GAAiBC,IAAjB,CAAsB,UAAUC,CAAV,EAAaC,CAAb,EAAwB;AACnD,UAAMC,eAAe,GAAGF,CAAC,CAACG,IAAF,CAAOC,WAAP,KAAuBH,CAAC,CAACE,IAAF,CAAOC,WAAP,EAA/C;AACA,WAAOP,cAAc,GAAIK,eAAe,GAAG,CAAC,CAAJ,GAAQ,CAA3B,GAAgCA,eAAe,GAAG,CAAH,GAAO,CAAC,CAA5E;AACD,GAHM,CAAP;AAID;;AAEM,SAASG,QAAT,CAAkBC,MAAlB,EAAsC;AAAA;;AAC3C,SAAOrB,gBAAEsB,KAAF,CAAQD,MAAR,aAAQA,MAAR,sCAAQA,MAAM,CAAEE,GAAhB,gDAAQ,YAAaC,KAArB,KAA+B,CAAAH,MAAM,SAAN,IAAAA,MAAM,WAAN,4BAAAA,MAAM,CAAEE,GAAR,8DAAaC,KAAb,MAAuB,IAA7D;AACD","sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\n\nimport sanitizyReadme from '@verdaccio/readme';\n// import { normalizeContributors } from '@verdaccio/store';\nimport { Author, ConfigYaml } from '@verdaccio/types';\n\nexport type AuthorAvatar = Author & { avatar?: string };\n\nconst debug = buildDebug('verdaccio:web:utils');\n\nexport function validatePrimaryColor(primaryColor) {\n const isHex = /^#+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/i.test(primaryColor);\n if (!isHex) {\n debug('invalid primary color %o', primaryColor);\n return;\n }\n\n return primaryColor;\n}\n\n/**\n * parse package readme - markdown/ascii\n * @param {String} packageName name of package\n * @param {String} readme package readme\n * @return {String} converted html template\n */\nexport function parseReadme(packageName: string, readme: string): string | void {\n if (_.isEmpty(readme) === false) {\n debug('sanizity readme');\n return sanitizyReadme(readme);\n }\n\n // logs readme not found error\n // logger.error({ packageName }, '@{packageName}: No readme found');\n throw new Error('ERROR: No README data found!');\n}\n\nexport function deleteProperties(propertiesToDelete: string[], objectItem: any): any {\n debug('deleted unused version properties');\n _.forEach(propertiesToDelete, (property): any => {\n delete objectItem[property];\n });\n\n return objectItem;\n}\n\nexport function addScope(scope: string, packageName: string): string {\n return `@${scope}/${packageName}`;\n}\n\nexport function sortByName(packages: any[], orderAscending: boolean | void = true): string[] {\n return packages.slice().sort(function (a, b): number {\n const comparatorNames = a.name.toLowerCase() < b.name.toLowerCase();\n return orderAscending ? (comparatorNames ? -1 : 1) : comparatorNames ? 1 : -1;\n });\n}\n\nexport function hasLogin(config: ConfigYaml) {\n return _.isNil(config?.web?.login) || config?.web?.login === true;\n}\n"],"file":"web-utils.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/web-middleware.ts"],"names":["config","auth","storage","app","express","Router","use"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;eAEe,CAACA,MAAD,EAASC,IAAT,EAAeC,OAAf,KAA2B;AACxC;AACA,QAAMC,GAAG,GAAGC,iBAAQC,MAAR,EAAZ,CAFwC,CAGxC;;;AACAF,EAAAA,GAAG,CAACG,GAAJ,CAAQ,GAAR,EAAa,oCAAoBN,MAApB,EAA4BC,IAA5B,EAAkCC,OAAlC,CAAb,EAJwC,CAKxC;;AACAC,EAAAA,GAAG,CAACG,GAAJ,CAAQ,eAAR,EAAyB,oBAAON,MAAP,EAAeC,IAAf,EAAqBC,OAArB,CAAzB;AACA,SAAOC,GAAP;AACD,C","sourcesContent":["import express from 'express';\nimport { renderWebMiddleware } from './middleware/render-web';\nimport { webAPI } from './middleware/web-api';\n\nexport default (config, auth, storage) => {\n // eslint-disable-next-line new-cap\n const app = express.Router();\n // load application\n app.use('/', renderWebMiddleware(config, auth, storage));\n // web endpoints, search, packages, etc\n app.use('/-/verdaccio/', webAPI(config, auth, storage));\n return app;\n};\n"],"file":"web-middleware.js"}
1
+ {"version":3,"sources":["../src/web-middleware.ts"],"names":["config","auth","storage","app","express","Router","use"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;;;eAEe,CAACA,MAAD,EAASC,IAAT,EAAeC,OAAf,KAA2B;AACxC;AACA,QAAMC,GAAG,GAAGC,iBAAQC,MAAR,EAAZ,CAFwC,CAGxC;;;AACAF,EAAAA,GAAG,CAACG,GAAJ,CAAQ,GAAR,EAAa,oCAAoBN,MAApB,EAA4BC,IAA5B,EAAkCC,OAAlC,CAAb,EAJwC,CAKxC;;AACAC,EAAAA,GAAG,CAACG,GAAJ,CAAQ,eAAR,EAAyB,oBAAON,MAAP,EAAeC,IAAf,EAAqBC,OAArB,CAAzB;AACA,SAAOC,GAAP;AACD,C","sourcesContent":["import express from 'express';\n\nimport { renderWebMiddleware } from './middleware/render-web';\nimport { webAPI } from './middleware/web-api';\n\nexport default (config, auth, storage) => {\n // eslint-disable-next-line new-cap\n const app = express.Router();\n // load application\n app.use('/', renderWebMiddleware(config, auth, storage));\n // web endpoints, search, packages, etc\n app.use('/-/verdaccio/', webAPI(config, auth, storage));\n return app;\n};\n"],"file":"web-middleware.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/web",
3
- "version": "6.0.0-6-next.18",
3
+ "version": "6.0.0-6-next.22",
4
4
  "description": "web ui middleware",
5
5
  "main": "./build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -20,37 +20,35 @@
20
20
  "verdaccio"
21
21
  ],
22
22
  "engines": {
23
- "node": ">=10",
23
+ "node": ">=14",
24
24
  "npm": ">=6"
25
25
  },
26
26
  "license": "MIT",
27
27
  "dependencies": {
28
- "@verdaccio/auth": "6.0.0-6-next.12",
29
- "@verdaccio/commons-api": "11.0.0-6-next.4",
30
- "@verdaccio/config": "6.0.0-6-next.8",
31
- "@verdaccio/loaders": "6.0.0-6-next.5",
32
- "@verdaccio/logger": "6.0.0-6-next.5",
33
- "@verdaccio/middleware": "6.0.0-6-next.12",
34
- "@verdaccio/readme": "11.0.0-alpha.3",
35
- "@verdaccio/store": "6.0.0-6-next.13",
36
- "@verdaccio/tarball": "11.0.0-6-next.7",
37
- "@verdaccio/url": "11.0.0-6-next.5",
38
- "@verdaccio/utils": "6.0.0-6-next.6",
39
- "body-parse": "0.1.0",
40
- "body-parser": "1.19.0",
41
- "debug": "4.3.2",
28
+ "@verdaccio/auth": "6.0.0-6-next.16",
29
+ "@verdaccio/core": "6.0.0-6-next.4",
30
+ "@verdaccio/config": "6.0.0-6-next.12",
31
+ "@verdaccio/loaders": "6.0.0-6-next.8",
32
+ "@verdaccio/logger": "6.0.0-6-next.8",
33
+ "@verdaccio/middleware": "6.0.0-6-next.16",
34
+ "@verdaccio/readme": "11.0.0-6-next.4",
35
+ "@verdaccio/store": "6.0.0-6-next.17",
36
+ "@verdaccio/tarball": "11.0.0-6-next.11",
37
+ "@verdaccio/url": "11.0.0-6-next.8",
38
+ "@verdaccio/utils": "6.0.0-6-next.10",
39
+ "body-parser": "1.19.1",
40
+ "debug": "4.3.3",
42
41
  "express": "4.17.1",
43
42
  "lodash": "4.17.21",
44
43
  "lru-cache": "6.0.0"
45
44
  },
46
45
  "devDependencies": {
47
- "@types/node": "16.9.1",
48
- "@verdaccio/types": "11.0.0-6-next.8",
49
- "body-parser": "1.19.0",
50
- "node-html-parser": "4.1.4",
46
+ "@types/node": "16.11.12",
47
+ "@verdaccio/types": "11.0.0-6-next.10",
48
+ "node-html-parser": "4.1.5",
51
49
  "supertest": "6.1.6",
52
- "verdaccio-auth-memory": "11.0.0-6-next.4",
53
- "verdaccio-memory": "11.0.0-6-next.5"
50
+ "verdaccio-auth-memory": "11.0.0-6-next.7",
51
+ "verdaccio-memory": "11.0.0-6-next.8"
54
52
  },
55
53
  "funding": {
56
54
  "type": "opencollective",
@@ -1,16 +1,15 @@
1
1
  import buildDebug from 'debug';
2
+ import { Router } from 'express';
2
3
  import _ from 'lodash';
3
- import { formatAuthor } from '@verdaccio/utils';
4
4
 
5
- import { $RequestExtend, $ResponseExtend, $NextFunctionVer } from '@verdaccio/middleware';
6
- import { logger } from '@verdaccio/logger';
7
- import { Router } from 'express';
8
5
  import { IAuth } from '@verdaccio/auth';
6
+ import { logger } from '@verdaccio/logger';
7
+ import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';
9
8
  import { Storage } from '@verdaccio/store';
9
+ import { getLocalRegistryTarballUri } from '@verdaccio/tarball';
10
10
  import { Config, Package, RemoteUser } from '@verdaccio/types';
11
+ import { formatAuthor, generateGravatarUrl } from '@verdaccio/utils';
11
12
 
12
- import { getLocalRegistryTarballUri } from '@verdaccio/tarball';
13
- import { generateGravatarUrl } from '../utils/user';
14
13
  import { AuthorAvatar, sortByName } from '../utils/web-utils';
15
14
 
16
15
  export { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages
@@ -80,7 +79,7 @@ function addPackageWebApi(route: Router, storage: Storage, auth: IAuth, config:
80
79
  pkgCopy.dist.tarball = getLocalRegistryTarballUri(
81
80
  pkgCopy.dist.tarball,
82
81
  pkg.name,
83
- req,
82
+ { protocol: req.protocol, headers: req.headers as any, host: req.hostname },
84
83
  config?.url_prefix
85
84
  );
86
85
  }
package/src/api/readme.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import buildDebug from 'debug';
2
- import sanitizyReadme from '@verdaccio/readme';
3
-
4
- import { allow, $RequestExtend, $ResponseExtend, $NextFunctionVer } from '@verdaccio/middleware';
5
- import { HEADER_TYPE, HEADERS } from '@verdaccio/commons-api';
6
2
  import { Router } from 'express';
3
+
7
4
  import { IAuth } from '@verdaccio/auth';
5
+ import { HEADERS, HEADER_TYPE } from '@verdaccio/core';
6
+ import { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';
7
+ import sanitizyReadme from '@verdaccio/readme';
8
8
  import { Storage } from '@verdaccio/store';
9
9
  import { Package } from '@verdaccio/types';
10
10
 
11
- import { addScope, AuthorAvatar, parseReadme } from '../utils/web-utils';
11
+ import { AuthorAvatar, addScope, parseReadme } from '../utils/web-utils';
12
12
 
13
13
  export { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages
14
14