@verdaccio/web 6.0.0-6-next.29 → 6.0.0-6-next.32

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.
@@ -1,22 +1,21 @@
1
1
  import buildDebug from 'debug';
2
2
  import { Router } from 'express';
3
- import _ from 'lodash';
4
3
 
5
4
  import { IAuth } from '@verdaccio/auth';
6
5
  import { DIST_TAGS, HTTP_STATUS } from '@verdaccio/core';
7
6
  import { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';
8
7
  import { Storage } from '@verdaccio/store';
9
8
  import { convertDistRemoteToLocalTarballUrls } from '@verdaccio/tarball';
10
- import { Config, Package, Version } from '@verdaccio/types';
9
+ import { Config, Manifest, Version } from '@verdaccio/types';
11
10
  import { addGravatarSupport, formatAuthor, isVersionValid } from '@verdaccio/utils';
12
11
 
13
12
  import { AuthorAvatar, addScope, deleteProperties } from '../utils/web-utils';
14
13
 
15
14
  export { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages
16
15
 
17
- export type PackageExt = Package & { author: AuthorAvatar; dist?: { tarball: string } };
16
+ export type PackageExt = Manifest & { author: AuthorAvatar; dist?: { tarball: string } };
18
17
 
19
- export type $SidebarPackage = Package & { latest: Version };
18
+ export type $SidebarPackage = Manifest & { latest: Version };
20
19
  const debug = buildDebug('verdaccio:web:api:sidebar');
21
20
 
22
21
  function addSidebarWebApi(config: Config, storage: Storage, auth: IAuth): Router {
@@ -27,43 +26,56 @@ function addSidebarWebApi(config: Config, storage: Storage, auth: IAuth): Router
27
26
  router.get(
28
27
  '/sidebar/(@:scope/)?:package',
29
28
  can('access'),
30
- function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {
31
- const packageName: string = req.params.scope
29
+ async function (
30
+ req: $RequestExtend,
31
+ res: $ResponseExtend,
32
+ next: $NextFunctionVer
33
+ ): Promise<void> {
34
+ const name: string = req.params.scope
32
35
  ? addScope(req.params.scope, req.params.package)
33
36
  : req.params.package;
34
-
35
- storage.getPackage({
36
- name: packageName,
37
- uplinksLook: true,
38
- keepUpLinkData: true,
39
- req,
40
- callback: function (err: Error, info: $SidebarPackage): void {
41
- if (_.isNil(err)) {
42
- const { v } = req.query;
43
- let sideBarInfo = _.clone(info);
44
- sideBarInfo.versions = convertDistRemoteToLocalTarballUrls(
45
- info,
46
- { protocol: req.protocol, headers: req.headers as any, host: req.hostname },
47
- config.url_prefix
48
- ).versions;
49
- if (typeof v === 'string' && isVersionValid(info, v)) {
50
- sideBarInfo.latest = sideBarInfo.versions[v];
51
- sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);
52
- } else {
53
- sideBarInfo.latest = sideBarInfo.versions[info[DIST_TAGS].latest];
54
- sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);
55
- }
56
- sideBarInfo = deleteProperties(['readme', '_attachments', '_rev', 'name'], sideBarInfo);
57
- const authorAvatar = config.web
58
- ? addGravatarSupport(sideBarInfo, config.web.gravatar)
59
- : addGravatarSupport(sideBarInfo);
60
- next(authorAvatar);
61
- } else {
62
- res.status(HTTP_STATUS.NOT_FOUND);
63
- res.end();
64
- }
65
- },
66
- });
37
+ const requestOptions = {
38
+ protocol: req.protocol,
39
+ headers: req.headers as any,
40
+ // FIXME: if we migrate to req.hostname, the port is not longer included.
41
+ host: req.host,
42
+ remoteAddress: req.socket.remoteAddress,
43
+ };
44
+ try {
45
+ const info = (await storage.getPackageByOptions({
46
+ name,
47
+ uplinksLook: true,
48
+ keepUpLinkData: true,
49
+ requestOptions,
50
+ })) as Manifest;
51
+ const { v } = req.query;
52
+ let sideBarInfo = { ...info };
53
+ sideBarInfo.versions = convertDistRemoteToLocalTarballUrls(
54
+ info,
55
+ { protocol: req.protocol, headers: req.headers as any, host: req.hostname },
56
+ config.url_prefix
57
+ ).versions;
58
+ // TODO: review this implementation
59
+ if (typeof v === 'string' && isVersionValid(info, v)) {
60
+ // @ts-ignore
61
+ sideBarInfo.latest = sideBarInfo.versions[v];
62
+ // @ts-ignore
63
+ sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);
64
+ } else {
65
+ // @ts-ignore
66
+ sideBarInfo.latest = sideBarInfo.versions[info[DIST_TAGS].latest];
67
+ // @ts-ignore
68
+ sideBarInfo.latest.author = formatAuthor(sideBarInfo.latest.author);
69
+ }
70
+ sideBarInfo = deleteProperties(['readme', '_attachments', '_rev', 'name'], sideBarInfo);
71
+ const authorAvatar = config.web
72
+ ? addGravatarSupport(sideBarInfo, config.web.gravatar)
73
+ : addGravatarSupport(sideBarInfo);
74
+ next(authorAvatar);
75
+ } catch (err) {
76
+ res.status(HTTP_STATUS.NOT_FOUND);
77
+ res.end();
78
+ }
67
79
  }
68
80
  );
69
81
 
@@ -38,7 +38,7 @@ describe('readme api', () => {
38
38
  .expect(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8)
39
39
  .expect(HTTP_STATUS.OK);
40
40
  expect(response.text).toMatch('my readme scoped');
41
- });
41
+ }, 70000);
42
42
 
43
43
  test('should fetch readme scoped package with not found message', async () => {
44
44
  const app = await initializeServer('default-test.yaml');
@@ -69,8 +69,8 @@ describe('test web server', () => {
69
69
  );
70
70
  });
71
71
 
72
- test.todo('test default title');
73
- test.todo('test need html cache');
72
+ test.todo('should default title');
73
+ test.todo('should need html cache');
74
74
  });
75
75
 
76
76
  describe('status', () => {
package/tsconfig.json CHANGED
@@ -13,9 +13,6 @@
13
13
  {
14
14
  "path": "../config"
15
15
  },
16
- {
17
- "path": "../core/commons-api"
18
- },
19
16
  {
20
17
  "path": "../core/readme"
21
18
  },