1
0
mirror of https://github.com/verdaccio/verdaccio.git synced 2025-02-21 07:29:37 +01:00

Merge branch 'master' into 4.1.x

This commit is contained in:
Juan Picado @jotadeveloper 2019-05-17 08:04:13 -07:00 committed by GitHub
commit 26c5e2d670
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 21 additions and 18 deletions

@ -17,7 +17,8 @@
"dependencies": { "dependencies": {
"@verdaccio/local-storage": "2.1.0", "@verdaccio/local-storage": "2.1.0",
"@verdaccio/streams": "2.0.0", "@verdaccio/streams": "2.0.0",
"@verdaccio/ui-theme": "0.1.7", "@verdaccio/readme": "1.0.3",
"@verdaccio/ui-theme": "0.1.10",
"JSONStream": "1.3.5", "JSONStream": "1.3.5",
"async": "3.0.1-0", "async": "3.0.1-0",
"body-parser": "1.19.0", "body-parser": "1.19.0",
@ -41,7 +42,7 @@
"mkdirp": "0.5.1", "mkdirp": "0.5.1",
"mv": "2.1.1", "mv": "2.1.1",
"pkginfo": "0.4.1", "pkginfo": "0.4.1",
"request": "2.88.0", "request": "2.87.0",
"semver": "6.0.0", "semver": "6.0.0",
"verdaccio-audit": "1.2.0", "verdaccio-audit": "1.2.0",
"verdaccio-htpasswd": "2.0.0" "verdaccio-htpasswd": "2.0.0"

@ -10,7 +10,8 @@ import semver from 'semver';
import YAML from 'js-yaml'; import YAML from 'js-yaml';
import URL from 'url'; import URL from 'url';
import createError from 'http-errors'; import createError from 'http-errors';
import marked from 'marked'; // $FlowFixMe
import sanitizyReadme from '@verdaccio/readme';
import { HTTP_STATUS, API_ERROR, DEFAULT_PORT, DEFAULT_DOMAIN, DEFAULT_PROTOCOL, CHARACTER_ENCODING, HEADERS, DIST_TAGS, DEFAULT_USER } from './constants'; import { HTTP_STATUS, API_ERROR, DEFAULT_PORT, DEFAULT_DOMAIN, DEFAULT_PROTOCOL, CHARACTER_ENCODING, HEADERS, DIST_TAGS, DEFAULT_USER } from './constants';
import { generateGravatarUrl, GENERIC_AVATAR } from '../utils/user'; import { generateGravatarUrl, GENERIC_AVATAR } from '../utils/user';
@ -487,14 +488,14 @@ export function addGravatarSupport(pkgInfo: Object, online: boolean = true): Obj
* @return {String} converted html template * @return {String} converted html template
*/ */
export function parseReadme(packageName: string, readme: string): string { export function parseReadme(packageName: string, readme: string): string {
if (readme) { if (_.isEmpty(readme) === false) {
return marked(readme); return sanitizyReadme(readme);
} }
// logs readme not found error // logs readme not found error
Logger.logger.error({ packageName }, '@{packageName}: No readme found'); Logger.logger.error({ packageName }, '@{packageName}: No readme found');
return marked('ERROR: No README data found!'); return sanitizyReadme('ERROR: No README data found!');
} }
export function buildToken(type: string, token: string): string { export function buildToken(type: string, token: string): string {

@ -5,6 +5,7 @@ export default function (server, server2) {
describe('should test readme', () => { describe('should test readme', () => {
const README_PKG1 = 'readme-test'; const README_PKG1 = 'readme-test';
const README_PKG2 = 'readme-test-no-readme'; const README_PKG2 = 'readme-test-no-readme';
const README_MESSAGE = 'this is a readme';
beforeAll(async function() { beforeAll(async function() {
await server.putPackage('readme-test', require('./pkg-readme.json')) await server.putPackage('readme-test', require('./pkg-readme.json'))
@ -16,20 +17,21 @@ export default function (server, server2) {
test('add pkg', () => {}); test('add pkg', () => {});
describe('should check readme file', () => { describe('should check readme file', () => {
const matchReadme = (serverRef, pkgName = README_PKG1, readmeMessage = 'this is a readme') => { const matchReadme = (serverRef, pkgName = README_PKG1, readmeMessage = README_MESSAGE) => {
return serverRef.request({ return serverRef.request({
uri: `/-/verdaccio/package/readme/${pkgName}` uri: `/-/verdaccio/package/readme/${pkgName}`
}).status(HTTP_STATUS.OK).then(function(body) { }).status(HTTP_STATUS.OK).then(function(body) {
expect(body).toEqual(`<p>${readmeMessage}</p>\n`);
expect(body).toEqual(`<p>${readmeMessage}</p>`);
}); });
}; };
test('should fetch server2 over uplink server1', () => { test('should fetch server2 over uplink server1', () => {
return matchReadme(server, README_PKG1, 'this is a readme'); return matchReadme(server, README_PKG1, README_MESSAGE);
}); });
test('should fetch package on local server1', () => { test('should fetch package on local server1', () => {
return matchReadme(server2, README_PKG1, 'this is a readme'); return matchReadme(server2, README_PKG1, README_MESSAGE);
}); });
test('should fetch not found readme server2 over uplink server1', () => { test('should fetch not found readme server2 over uplink server1', () => {

@ -37,6 +37,5 @@ exports[`Utilities parseReadme should parse makrdown text to html template 1`] =
<li>Hat tip to anyone whose code was used</li> <li>Hat tip to anyone whose code was used</li>
<li>Inspiration</li> <li>Inspiration</li>
<li>etc</li> <li>etc</li>
</ul> </ul>"
"
`; `;

@ -374,7 +374,7 @@ describe('Utilities', () => {
test('should parse makrdown text to html template', () => { test('should parse makrdown text to html template', () => {
const markdown = '# markdown'; const markdown = '# markdown';
expect(parseReadme('testPackage', markdown)).toEqual( expect(parseReadme('testPackage', markdown)).toEqual(
'<h1 id="markdown">markdown</h1>\n' '<h1 id="markdown">markdown</h1>'
); );
expect( expect(
parseReadme('testPackage', String(readmeFile('markdown.md'))) parseReadme('testPackage', String(readmeFile('markdown.md')))
@ -387,13 +387,13 @@ describe('Utilities', () => {
const randomTextMarkdown = 'simple text \n # markdown'; const randomTextMarkdown = 'simple text \n # markdown';
expect(parseReadme('testPackage', randomText)).toEqual( expect(parseReadme('testPackage', randomText)).toEqual(
'<p>%%%%%**##==</p>\n' '<p>%%%%%**##==</p>'
); );
expect(parseReadme('testPackage', simpleText)).toEqual( expect(parseReadme('testPackage', simpleText)).toEqual(
'<p>simple text</p>\n' '<p>simple text</p>'
); );
expect(parseReadme('testPackage', randomTextMarkdown)).toEqual( expect(parseReadme('testPackage', randomTextMarkdown)).toEqual(
'<p>simple text </p>\n<h1 id="markdown">markdown</h1>\n' '<p>simple text </p>\n<h1 id="markdown">markdown</h1>'
); );
}); });
@ -401,7 +401,7 @@ describe('Utilities', () => {
const noData = ''; const noData = '';
const spy = jest.spyOn(Logger.logger, 'error'); const spy = jest.spyOn(Logger.logger, 'error');
expect(parseReadme('testPackage', noData)).toEqual( expect(parseReadme('testPackage', noData)).toEqual(
'<p>ERROR: No README data found!</p>\n' '<p>ERROR: No README data found!</p>'
); );
expect(spy).toHaveBeenCalledWith( expect(spy).toHaveBeenCalledWith(
{ packageName: 'testPackage' }, { packageName: 'testPackage' },

@ -12,7 +12,7 @@ auth:
password: test password: test
logs: logs:
- { type: stdout, format: pretty, level: warn } - { type: stdout, format: pretty, level: trace }
packages: packages:
'@*/*': '@*/*':

BIN
yarn.lock

Binary file not shown.