@verdaccio/web 6.0.0-6-next.30 → 6.0.0-6-next.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/build/api/package.js +1 -1
- package/build/api/package.js.map +1 -1
- package/build/api/readme.js +1 -0
- package/build/api/readme.js.map +1 -1
- package/package.json +6 -6
- package/src/api/package.ts +1 -1
- package/src/api/readme.ts +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# @verdaccio/web
|
|
2
2
|
|
|
3
|
+
## 6.0.0-6-next.31
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 37274e4c: feat: implement abbreviated manifest
|
|
8
|
+
|
|
9
|
+
Enable abbreviated manifest data by adding the header:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
curl -H "Accept: application/vnd.npm.install-v1+json" https://registry.npmjs.org/verdaccio
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
It returns a filtered manifest, additionally includes the [time](https://github.com/pnpm/rfcs/pull/2) field by request.
|
|
16
|
+
|
|
17
|
+
Current support for packages managers:
|
|
18
|
+
|
|
19
|
+
- npm: yes
|
|
20
|
+
- pnpm: yes
|
|
21
|
+
- yarn classic: yes
|
|
22
|
+
- yarn modern (+2.x): [no](https://github.com/yarnpkg/berry/pull/3981#issuecomment-1076566096)
|
|
23
|
+
|
|
24
|
+
https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-metadata-format
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- Updated dependencies [37274e4c]
|
|
29
|
+
- @verdaccio/store@6.0.0-6-next.24
|
|
30
|
+
- @verdaccio/auth@6.0.0-6-next.23
|
|
31
|
+
- @verdaccio/core@6.0.0-6-next.6
|
|
32
|
+
- @verdaccio/readme@11.0.0-6-next.5
|
|
33
|
+
- @verdaccio/tarball@11.0.0-6-next.13
|
|
34
|
+
- @verdaccio/url@11.0.0-6-next.10
|
|
35
|
+
- @verdaccio/loaders@6.0.0-6-next.13
|
|
36
|
+
- @verdaccio/logger@6.0.0-6-next.12
|
|
37
|
+
|
|
3
38
|
## 6.0.0-6-next.30
|
|
4
39
|
|
|
5
40
|
### Major Changes
|
package/build/api/package.js
CHANGED
|
@@ -114,7 +114,7 @@ function addPackageWebApi(storage, auth, config) {
|
|
|
114
114
|
} catch (err) {
|
|
115
115
|
debug('process packages error %o', err);
|
|
116
116
|
|
|
117
|
-
_logger.logger.
|
|
117
|
+
_logger.logger.error({
|
|
118
118
|
name: pkg.name,
|
|
119
119
|
error: err
|
|
120
120
|
}, 'permission process for @{name} has failed: @{error}');
|
package/build/api/package.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.js","names":["getOrder","order","debug","buildDebug","addPackageWebApi","storage","auth","config","isLoginEnabled","web","login","pkgRouter","Router","anonymousRemoteUser","name","undefined","real_groups","groups","checkAllow","remoteUser","Promise","resolve","reject","allow_access","packageName","err","allowed","processPackages","packages","req","permissions","packagesToProcess","slice","pkg","pkgCopy","author","formatAuthor","remote_user","avatar","generateGravatarUrl","email","gravatar","_","isNil","dist","isNull","tarball","getLocalRegistryTarballUri","protocol","headers","host","hostname","url_prefix","push","logger","error","get","res","next","localPackages","getLocalDatabaseNext","sort_packages","pkgs","sortByName"],"sources":["../../src/api/package.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { logger } from '@verdaccio/logger';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { getLocalRegistryTarballUri } from '@verdaccio/tarball';\nimport { Config, RemoteUser, Version } from '@verdaccio/types';\nimport { formatAuthor, generateGravatarUrl } from '@verdaccio/utils';\n\nimport { sortByName } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nconst getOrder = (order = 'asc') => {\n return order === 'asc';\n};\n\nconst debug = buildDebug('verdaccio:web:api:package');\n\nfunction addPackageWebApi(storage: Storage, auth: IAuth, config: Config): Router {\n const isLoginEnabled = config?.web?.login === true ?? true;\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const anonymousRemoteUser: RemoteUser = {\n name: undefined,\n real_groups: [],\n groups: [],\n };\n\n debug('initialized package web api');\n const checkAllow = (name: string, remoteUser: RemoteUser): Promise<boolean> =>\n new Promise((resolve, reject): void => {\n debug('is login disabled %o', isLoginEnabled);\n // FIXME: this logic does not work, review\n // const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;\n try {\n auth.allow_access({ packageName: name }, remoteUser, (err, allowed): void => {\n if (err) {\n resolve(false);\n }\n resolve(allowed);\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 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 { protocol: req.protocol, headers: req.headers as any, host: req.hostname },\n config?.url_prefix\n );\n }\n permissions.push(pkgCopy);\n }\n } catch (err: any) {\n debug('process packages error %o', err);\n logger.
|
|
1
|
+
{"version":3,"file":"package.js","names":["getOrder","order","debug","buildDebug","addPackageWebApi","storage","auth","config","isLoginEnabled","web","login","pkgRouter","Router","anonymousRemoteUser","name","undefined","real_groups","groups","checkAllow","remoteUser","Promise","resolve","reject","allow_access","packageName","err","allowed","processPackages","packages","req","permissions","packagesToProcess","slice","pkg","pkgCopy","author","formatAuthor","remote_user","avatar","generateGravatarUrl","email","gravatar","_","isNil","dist","isNull","tarball","getLocalRegistryTarballUri","protocol","headers","host","hostname","url_prefix","push","logger","error","get","res","next","localPackages","getLocalDatabaseNext","sort_packages","pkgs","sortByName"],"sources":["../../src/api/package.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { logger } from '@verdaccio/logger';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { getLocalRegistryTarballUri } from '@verdaccio/tarball';\nimport { Config, RemoteUser, Version } from '@verdaccio/types';\nimport { formatAuthor, generateGravatarUrl } from '@verdaccio/utils';\n\nimport { sortByName } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\nconst getOrder = (order = 'asc') => {\n return order === 'asc';\n};\n\nconst debug = buildDebug('verdaccio:web:api:package');\n\nfunction addPackageWebApi(storage: Storage, auth: IAuth, config: Config): Router {\n const isLoginEnabled = config?.web?.login === true ?? true;\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const anonymousRemoteUser: RemoteUser = {\n name: undefined,\n real_groups: [],\n groups: [],\n };\n\n debug('initialized package web api');\n const checkAllow = (name: string, remoteUser: RemoteUser): Promise<boolean> =>\n new Promise((resolve, reject): void => {\n debug('is login disabled %o', isLoginEnabled);\n // FIXME: this logic does not work, review\n // const remoteUserAccess = !isLoginEnabled ? anonymousRemoteUser : remoteUser;\n try {\n auth.allow_access({ packageName: name }, remoteUser, (err, allowed): void => {\n if (err) {\n resolve(false);\n }\n resolve(allowed);\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 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 { protocol: req.protocol, headers: req.headers as any, host: req.hostname },\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 return permissions;\n }\n\n // Get list of all visible package\n pkgRouter.get(\n '/packages',\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.getLocalDatabaseNext();\n\n const order = getOrder(config?.web?.sort_packages);\n debug('order %o', order);\n const pkgs = await processPackages(localPackages, req);\n next(sortByName(pkgs, order));\n } catch (error: any) {\n next(error);\n }\n }\n );\n\n return pkgRouter;\n}\n\nexport default addPackageWebApi;\n"],"mappings":"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"}
|
package/build/api/readme.js
CHANGED
|
@@ -63,6 +63,7 @@ function addReadmeWebApi(storage, auth) {
|
|
|
63
63
|
const manifest = await storage.getPackageByOptions({
|
|
64
64
|
name,
|
|
65
65
|
uplinksLook: true,
|
|
66
|
+
abbreviated: false,
|
|
66
67
|
requestOptions
|
|
67
68
|
});
|
|
68
69
|
debug('readme pkg %o', manifest === null || manifest === void 0 ? void 0 : manifest.name);
|
package/build/api/readme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.js","names":["debug","buildDebug","NOT_README_FOUND","addReadmeWebApi","storage","auth","can","allow","pkgRouter","Router","get","req","res","next","name","params","scope","addScope","package","requestOptions","protocol","headers","host","remoteAddress","socket","manifest","getPackageByOptions","uplinksLook","set","HEADER_TYPE","CONTENT_TYPE","HEADERS","TEXT_PLAIN_UTF8","parseReadme","readme","sanitizyReadme","err"],"sources":["../../src/api/readme.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { HEADERS, HEADER_TYPE } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';\nimport sanitizyReadme from '@verdaccio/readme';\nimport { Storage } from '@verdaccio/store';\nimport { Manifest } from '@verdaccio/types';\n\nimport { AuthorAvatar, addScope, parseReadme } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\n// TODO: review this type, should be on @verdacid/types\nexport type PackageExt = Manifest & { author: AuthorAvatar; dist?: { tarball: string } };\n\nconst debug = buildDebug('verdaccio:web:api:readme');\n\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\n\nfunction addReadmeWebApi(storage: Storage, auth: IAuth): Router {\n debug('initialized readme web api');\n const can = allow(auth);\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n\n pkgRouter.get(\n '/package/readme/(@:scope/)?: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 name = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n debug('readme name %o', name);\n const requestOptions = {\n protocol: req.protocol,\n headers: req.headers as any,\n // FIXME: if we migrate to req.hostname, the port is not longer included.\n host: req.host,\n remoteAddress: req.socket.remoteAddress,\n };\n try {\n const manifest = await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n requestOptions,\n });\n debug('readme pkg %o', manifest?.name);\n res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);\n try {\n next(parseReadme(manifest.name, manifest.readme as string));\n } catch {\n next(sanitizyReadme(NOT_README_FOUND));\n }\n } catch (err) {\n next(err);\n }\n }\n );\n return pkgRouter;\n}\n\nexport default addReadmeWebApi;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAGA;;AACA;;AACA;;AAIA;;;;AAOA,MAAMA,KAAK,GAAG,IAAAC,cAAA,EAAW,0BAAX,CAAd;AAEO,MAAMC,gBAAgB,GAAG,8BAAzB;;;AAEP,SAASC,eAAT,CAAyBC,OAAzB,EAA2CC,IAA3C,EAAgE;EAC9DL,KAAK,CAAC,4BAAD,CAAL;EACA,MAAMM,GAAG,GAAG,IAAAC,iBAAA,EAAMF,IAAN,CAAZ;EACA,MAAMG,SAAS,GAAG,IAAAC,eAAA,GAAlB;EAA4B;;EAE5BD,SAAS,CAACE,GAAV,CACE,+CADF,EAEEJ,GAAG,CAAC,QAAD,CAFL,EAGE,gBACEK,GADF,EAEEC,GAFF,EAGEC,IAHF,EAIiB;IACfb,KAAK,CAAC,YAAD,CAAL;IACA,MAAMc,IAAI,GAAGH,GAAG,CAACI,MAAJ,CAAWC,KAAX,GACT,IAAAC,kBAAA,EAASN,GAAG,CAACI,MAAJ,CAAWC,KAApB,EAA2BL,GAAG,CAACI,MAAJ,CAAWG,OAAtC,CADS,GAETP,GAAG,CAACI,MAAJ,CAAWG,OAFf;IAGAlB,KAAK,CAAC,gBAAD,EAAmBc,IAAnB,CAAL;IACA,MAAMK,cAAc,GAAG;MACrBC,QAAQ,EAAET,GAAG,CAACS,QADO;MAErBC,OAAO,EAAEV,GAAG,CAACU,OAFQ;MAGrB;MACAC,IAAI,EAAEX,GAAG,CAACW,IAJW;MAKrBC,aAAa,EAAEZ,GAAG,CAACa,MAAJ,CAAWD;IALL,CAAvB;;IAOA,IAAI;MACF,MAAME,QAAQ,
|
|
1
|
+
{"version":3,"file":"readme.js","names":["debug","buildDebug","NOT_README_FOUND","addReadmeWebApi","storage","auth","can","allow","pkgRouter","Router","get","req","res","next","name","params","scope","addScope","package","requestOptions","protocol","headers","host","remoteAddress","socket","manifest","getPackageByOptions","uplinksLook","abbreviated","set","HEADER_TYPE","CONTENT_TYPE","HEADERS","TEXT_PLAIN_UTF8","parseReadme","readme","sanitizyReadme","err"],"sources":["../../src/api/readme.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { HEADERS, HEADER_TYPE } from '@verdaccio/core';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend, allow } from '@verdaccio/middleware';\nimport sanitizyReadme from '@verdaccio/readme';\nimport { Storage } from '@verdaccio/store';\nimport { Manifest } from '@verdaccio/types';\n\nimport { AuthorAvatar, addScope, parseReadme } from '../utils/web-utils';\n\nexport { $RequestExtend, $ResponseExtend, $NextFunctionVer }; // Was required by other packages\n\n// TODO: review this type, should be on @verdacid/types\nexport type PackageExt = Manifest & { author: AuthorAvatar; dist?: { tarball: string } };\n\nconst debug = buildDebug('verdaccio:web:api:readme');\n\nexport const NOT_README_FOUND = 'ERROR: No README data found!';\n\nfunction addReadmeWebApi(storage: Storage, auth: IAuth): Router {\n debug('initialized readme web api');\n const can = allow(auth);\n const pkgRouter = Router(); /* eslint new-cap: 0 */\n\n pkgRouter.get(\n '/package/readme/(@:scope/)?: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 name = req.params.scope\n ? addScope(req.params.scope, req.params.package)\n : req.params.package;\n debug('readme name %o', name);\n const requestOptions = {\n protocol: req.protocol,\n headers: req.headers as any,\n // FIXME: if we migrate to req.hostname, the port is not longer included.\n host: req.host,\n remoteAddress: req.socket.remoteAddress,\n };\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 try {\n next(parseReadme(manifest.name, manifest.readme as string));\n } catch {\n next(sanitizyReadme(NOT_README_FOUND));\n }\n } catch (err) {\n next(err);\n }\n }\n );\n return pkgRouter;\n}\n\nexport default addReadmeWebApi;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAGA;;AACA;;AACA;;AAIA;;;;AAOA,MAAMA,KAAK,GAAG,IAAAC,cAAA,EAAW,0BAAX,CAAd;AAEO,MAAMC,gBAAgB,GAAG,8BAAzB;;;AAEP,SAASC,eAAT,CAAyBC,OAAzB,EAA2CC,IAA3C,EAAgE;EAC9DL,KAAK,CAAC,4BAAD,CAAL;EACA,MAAMM,GAAG,GAAG,IAAAC,iBAAA,EAAMF,IAAN,CAAZ;EACA,MAAMG,SAAS,GAAG,IAAAC,eAAA,GAAlB;EAA4B;;EAE5BD,SAAS,CAACE,GAAV,CACE,+CADF,EAEEJ,GAAG,CAAC,QAAD,CAFL,EAGE,gBACEK,GADF,EAEEC,GAFF,EAGEC,IAHF,EAIiB;IACfb,KAAK,CAAC,YAAD,CAAL;IACA,MAAMc,IAAI,GAAGH,GAAG,CAACI,MAAJ,CAAWC,KAAX,GACT,IAAAC,kBAAA,EAASN,GAAG,CAACI,MAAJ,CAAWC,KAApB,EAA2BL,GAAG,CAACI,MAAJ,CAAWG,OAAtC,CADS,GAETP,GAAG,CAACI,MAAJ,CAAWG,OAFf;IAGAlB,KAAK,CAAC,gBAAD,EAAmBc,IAAnB,CAAL;IACA,MAAMK,cAAc,GAAG;MACrBC,QAAQ,EAAET,GAAG,CAACS,QADO;MAErBC,OAAO,EAAEV,GAAG,CAACU,OAFQ;MAGrB;MACAC,IAAI,EAAEX,GAAG,CAACW,IAJW;MAKrBC,aAAa,EAAEZ,GAAG,CAACa,MAAJ,CAAWD;IALL,CAAvB;;IAOA,IAAI;MACF,MAAME,QAAQ,GAAI,MAAMrB,OAAO,CAACsB,mBAAR,CAA4B;QAClDZ,IADkD;QAElDa,WAAW,EAAE,IAFqC;QAGlDC,WAAW,EAAE,KAHqC;QAIlDT;MAJkD,CAA5B,CAAxB;MAMAnB,KAAK,CAAC,eAAD,EAAkByB,QAAlB,aAAkBA,QAAlB,uBAAkBA,QAAQ,CAAEX,IAA5B,CAAL;MACAF,GAAG,CAACiB,GAAJ,CAAQC,iBAAA,CAAYC,YAApB,EAAkCC,aAAA,CAAQC,eAA1C;;MACA,IAAI;QACFpB,IAAI,CAAC,IAAAqB,qBAAA,EAAYT,QAAQ,CAACX,IAArB,EAA2BW,QAAQ,CAACU,MAApC,CAAD,CAAJ;MACD,CAFD,CAEE,MAAM;QACNtB,IAAI,CAAC,IAAAuB,eAAA,EAAelC,gBAAf,CAAD,CAAJ;MACD;IACF,CAdD,CAcE,OAAOmC,GAAP,EAAY;MACZxB,IAAI,CAACwB,GAAD,CAAJ;IACD;EACF,CArCH;EAuCA,OAAO7B,SAAP;AACD;;eAEcL,e"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/web",
|
|
3
|
-
"version": "6.0.0-6-next.
|
|
3
|
+
"version": "6.0.0-6-next.31",
|
|
4
4
|
"description": "web ui middleware",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"@verdaccio/logger": "6.0.0-6-next.12",
|
|
33
33
|
"@verdaccio/middleware": "6.0.0-6-next.23",
|
|
34
34
|
"@verdaccio/readme": "11.0.0-6-next.5",
|
|
35
|
-
"@verdaccio/store": "6.0.0-6-next.
|
|
35
|
+
"@verdaccio/store": "6.0.0-6-next.24",
|
|
36
36
|
"@verdaccio/tarball": "11.0.0-6-next.13",
|
|
37
37
|
"@verdaccio/url": "11.0.0-6-next.10",
|
|
38
38
|
"@verdaccio/utils": "6.0.0-6-next.12",
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"lru-cache": "6.0.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/node": "16.11.
|
|
47
|
-
"@verdaccio/types": "11.0.0-6-next.
|
|
48
|
-
"@verdaccio/test-helper": "1.1.0-6-next.
|
|
49
|
-
"@verdaccio/api": "6.0.0-6-next.
|
|
46
|
+
"@types/node": "16.11.51",
|
|
47
|
+
"@verdaccio/types": "11.0.0-6-next.14",
|
|
48
|
+
"@verdaccio/test-helper": "1.1.0-6-next.2",
|
|
49
|
+
"@verdaccio/api": "6.0.0-6-next.27",
|
|
50
50
|
"node-html-parser": "4.1.5",
|
|
51
51
|
"supertest": "6.2.4",
|
|
52
52
|
"nock": "13.2.9",
|
package/src/api/package.ts
CHANGED
|
@@ -75,7 +75,7 @@ function addPackageWebApi(storage: Storage, auth: IAuth, config: Config): Router
|
|
|
75
75
|
}
|
|
76
76
|
} catch (err: any) {
|
|
77
77
|
debug('process packages error %o', err);
|
|
78
|
-
logger.
|
|
78
|
+
logger.error(
|
|
79
79
|
{ name: pkg.name, error: err },
|
|
80
80
|
'permission process for @{name} has failed: @{error}'
|
|
81
81
|
);
|
package/src/api/readme.ts
CHANGED
|
@@ -45,11 +45,12 @@ function addReadmeWebApi(storage: Storage, auth: IAuth): Router {
|
|
|
45
45
|
remoteAddress: req.socket.remoteAddress,
|
|
46
46
|
};
|
|
47
47
|
try {
|
|
48
|
-
const manifest = await storage.getPackageByOptions({
|
|
48
|
+
const manifest = (await storage.getPackageByOptions({
|
|
49
49
|
name,
|
|
50
50
|
uplinksLook: true,
|
|
51
|
+
abbreviated: false,
|
|
51
52
|
requestOptions,
|
|
52
|
-
});
|
|
53
|
+
})) as Manifest;
|
|
53
54
|
debug('readme pkg %o', manifest?.name);
|
|
54
55
|
res.set(HEADER_TYPE.CONTENT_TYPE, HEADERS.TEXT_PLAIN_UTF8);
|
|
55
56
|
try {
|