From 7686417f29323cd25bf025c5feaced91a8a3ef95 Mon Sep 17 00:00:00 2001 From: "Juan Picado @jotadeveloper" Date: Fri, 17 May 2019 08:03:58 -0700 Subject: [PATCH] feat: update readme v4 (#1312) * feat: update readme v4 * chore: update @verdaccio/ui-theme@0.1.9 * chore: update @verdaccio/ui-theme@0.1.10 --- package.json | 5 +++-- src/lib/utils.js | 9 +++++---- test/functional/readme/readme.js | 10 ++++++---- .../unit/api/__snapshots__/utils.spec.js.snap | 3 +-- test/unit/api/utils.spec.js | 10 +++++----- .../config-unit-mock-server-test.yaml | 2 +- yarn.lock | Bin 356749 -> 363253 bytes 7 files changed, 21 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 74df113fb..10b322acd 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "dependencies": { "@verdaccio/local-storage": "2.1.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", "async": "3.0.1-0", "body-parser": "1.19.0", @@ -41,7 +42,7 @@ "mkdirp": "0.5.1", "mv": "2.1.1", "pkginfo": "0.4.1", - "request": "2.88.0", + "request": "2.87.0", "semver": "6.0.0", "verdaccio-audit": "1.2.0", "verdaccio-htpasswd": "2.0.0" diff --git a/src/lib/utils.js b/src/lib/utils.js index ab4614d08..2b9d43067 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -10,7 +10,8 @@ import semver from 'semver'; import YAML from 'js-yaml'; import URL from 'url'; 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 { generateGravatarUrl, GENERIC_AVATAR } from '../utils/user'; @@ -487,14 +488,14 @@ export function addGravatarSupport(pkgInfo: Object, online: boolean = true): Obj * @return {String} converted html template */ export function parseReadme(packageName: string, readme: string): string { - if (readme) { - return marked(readme); + if (_.isEmpty(readme) === false) { + return sanitizyReadme(readme); } // logs readme not found error 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 { diff --git a/test/functional/readme/readme.js b/test/functional/readme/readme.js index 4e40beea0..61cfbdeaa 100644 --- a/test/functional/readme/readme.js +++ b/test/functional/readme/readme.js @@ -5,6 +5,7 @@ export default function (server, server2) { describe('should test readme', () => { const README_PKG1 = 'readme-test'; const README_PKG2 = 'readme-test-no-readme'; + const README_MESSAGE = 'this is a readme'; beforeAll(async function() { await server.putPackage('readme-test', require('./pkg-readme.json')) @@ -16,20 +17,21 @@ export default function (server, server2) { test('add pkg', () => {}); 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({ uri: `/-/verdaccio/package/readme/${pkgName}` }).status(HTTP_STATUS.OK).then(function(body) { - expect(body).toEqual(`

${readmeMessage}

\n`); + + expect(body).toEqual(`

${readmeMessage}

`); }); }; 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', () => { - 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', () => { diff --git a/test/unit/api/__snapshots__/utils.spec.js.snap b/test/unit/api/__snapshots__/utils.spec.js.snap index 9a591808d..4dd089d8a 100644 --- a/test/unit/api/__snapshots__/utils.spec.js.snap +++ b/test/unit/api/__snapshots__/utils.spec.js.snap @@ -37,6 +37,5 @@ exports[`Utilities parseReadme should parse makrdown text to html template 1`] =
  • Hat tip to anyone whose code was used
  • Inspiration
  • etc
  • - -" +" `; diff --git a/test/unit/api/utils.spec.js b/test/unit/api/utils.spec.js index f8810ba2a..b5657fcbb 100644 --- a/test/unit/api/utils.spec.js +++ b/test/unit/api/utils.spec.js @@ -374,7 +374,7 @@ describe('Utilities', () => { test('should parse makrdown text to html template', () => { const markdown = '# markdown'; expect(parseReadme('testPackage', markdown)).toEqual( - '

    markdown

    \n' + '

    markdown

    ' ); expect( parseReadme('testPackage', String(readmeFile('markdown.md'))) @@ -387,13 +387,13 @@ describe('Utilities', () => { const randomTextMarkdown = 'simple text \n # markdown'; expect(parseReadme('testPackage', randomText)).toEqual( - '

    %%%%%**##==

    \n' + '

    %%%%%**##==

    ' ); expect(parseReadme('testPackage', simpleText)).toEqual( - '

    simple text

    \n' + '

    simple text

    ' ); expect(parseReadme('testPackage', randomTextMarkdown)).toEqual( - '

    simple text

    \n

    markdown

    \n' + '

    simple text

    \n

    markdown

    ' ); }); @@ -401,7 +401,7 @@ describe('Utilities', () => { const noData = ''; const spy = jest.spyOn(Logger.logger, 'error'); expect(parseReadme('testPackage', noData)).toEqual( - '

    ERROR: No README data found!

    \n' + '

    ERROR: No README data found!

    ' ); expect(spy).toHaveBeenCalledWith( { packageName: 'testPackage' }, diff --git a/test/unit/partials/config-unit-mock-server-test.yaml b/test/unit/partials/config-unit-mock-server-test.yaml index c299eb932..8e54b1fe8 100644 --- a/test/unit/partials/config-unit-mock-server-test.yaml +++ b/test/unit/partials/config-unit-mock-server-test.yaml @@ -12,7 +12,7 @@ auth: password: test logs: - - { type: stdout, format: pretty, level: warn } + - { type: stdout, format: pretty, level: trace } packages: '@*/*': diff --git a/yarn.lock b/yarn.lock index 506c467d1d96b36d1d6853a20d74bc06e9e30ad3..64253c2a6d401daa51833d511c73e96986278d6f 100644 GIT binary patch delta 3949 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 HYvq3cYd*t* delta 429 zcmV;e0aE_;l@^WT6@at>ixRi)69Ie!0yiR;BuxZAmyQ+z4VStX0T?YeE_7#lBQQ8J zIc8)zIWjObHDO^hV>dZ8Gh<{pG+{JjW?^DEF*G(|VlrYglOcf?RbokIQe<~>baPN= zLvJu;WjQZ1OmAT@X?AEyYj;mna%)&kXKX=3T2x6&D`!P8XhUapb5d7ySxh%*bWB!S za7`~YF*0FQYc^*uWqMF%Zg+7+GIh6W7y+aOw_G0q90Rw8A^|7@x9cSVy(zb~PXT6b zw_m>jXF!u<{SlY{umLZX6au}M*g63Zm$DoMFt;HA0=Wd2DJBIEm+%(@Ft;lP0%9Sz zl_&zp6}NCc0^%~4RoMhUx1n(Yxd*p2dIEYMx4@YK0x!4E$pXTrw;Xf>LkG7=d;`K_ zw;taE$TqjG7X(2px9da%(=NBka|GNom!PTy6t~5y1Y{MrJ-`H22e-1w1iNjQWC#R5 zmpwTJ9+%%X1?RW>I0c>}x29VKIt;gHX$3+8m*_D850|t212DG%Yy}wsmnJ|250`DY X12DI7Z3Q9_x37K$A_2G5fCV86kcO85