From bc8378e71d21b4582c61bbe7791ee1fb8e356284 Mon Sep 17 00:00:00 2001 From: "Juan Picado @jotadeveloper" Date: Thu, 27 Sep 2018 08:50:27 +0200 Subject: [PATCH 1/3] chore: update tagline description --- website/siteConfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/siteConfig.js b/website/siteConfig.js index 72c24b823..83193ce75 100644 --- a/website/siteConfig.js +++ b/website/siteConfig.js @@ -56,7 +56,7 @@ const users = [ const siteConfig = { title: 'Verdaccio' /* title for your website */, - tagline: 'Verdaccio ยท A lightweight private npm proxy registry', + tagline: 'A lightweight private npm proxy registry', url: 'https://verdaccio.org' /* your website url */, organizationName: 'verdaccio', cname: 'verdaccio.org', From 4deefe79ad5949e3066d5880d2974d0fe3571050 Mon Sep 17 00:00:00 2001 From: "Juan Picado @jotadeveloper" Date: Thu, 27 Sep 2018 12:17:47 +0200 Subject: [PATCH 2/3] fix: normalize contributors field #1022 (#1024) --- package.json | 2 +- src/lib/local-storage.js | 4 +- src/lib/storage-utils.js | 12 ++++- src/lib/utils.js | 17 ++++-- test/unit/api/utils.spec.js | 103 ++++++++++++++++++++++++++---------- yarn.lock | Bin 376934 -> 376933 bytes 6 files changed, 103 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index 7b97fa91f..68756399a 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "devDependencies": { "@commitlint/cli": "7.0.0", "@commitlint/config-conventional": "7.0.1", - "@verdaccio/types": "3.4.2", + "@verdaccio/types": "3.4.4", "babel-cli": "6.26.0", "babel-core": "6.26.3", "babel-eslint": "8.2.6", diff --git a/src/lib/local-storage.js b/src/lib/local-storage.js index 49289a630..ac5bf45f9 100644 --- a/src/lib/local-storage.js +++ b/src/lib/local-storage.js @@ -8,7 +8,7 @@ import _ from 'lodash'; // $FlowFixMe import {ErrorCode, isObject, getLatestVersion, tagVersion, validateName, DIST_TAGS} from './utils'; import { - generatePackageTemplate, normalizePackage, generateRevision, getLatestReadme, cleanUpReadme, + generatePackageTemplate, normalizePackage, generateRevision, getLatestReadme, cleanUpReadme, normalizeContributors, fileExist, noSuchFile, DEFAULT_REVISION, pkgFileName, } from './storage-utils'; import {createTarballHash} from './crypto-utils'; @@ -138,6 +138,7 @@ class LocalStorage implements IStorage { // we don't keep readmes for package versions, // only one readme per package version = cleanUpReadme(version); + version.contributors = normalizeContributors(version.contributors); change = true; packageLocalJson.versions[versionId] = version; @@ -219,6 +220,7 @@ class LocalStorage implements IStorage { // TODO: lodash remove metadata = cleanUpReadme(metadata); + metadata.contributors = normalizeContributors(metadata.contributors); if (data.versions[version] != null) { return cb( ErrorCode.getConflict() ); diff --git a/src/lib/storage-utils.js b/src/lib/storage-utils.js index 4d20a3a65..715037fb2 100644 --- a/src/lib/storage-utils.js +++ b/src/lib/storage-utils.js @@ -5,7 +5,7 @@ import {ErrorCode, isObject, normalizeDistTags, DIST_TAGS, semverSort} from './u import Search from './search'; import {generateRandomHexString} from '../lib/crypto-utils'; -import type {Package, Version} from '@verdaccio/types'; +import type {Package, Version, Author} from '@verdaccio/types'; import type {IStorage} from '../../types'; import {API_ERROR, HTTP_STATUS} from './constants'; @@ -99,7 +99,15 @@ function cleanUpReadme(version: Version): Version { return version; } -export const WHITELIST = ['_rev', 'name', 'versions', DIST_TAGS, 'readme', 'time']; +export function normalizeContributors(contributors: Array): Array { + if (isObject(contributors) || _.isString(contributors)) { + return [((contributors): any)]; + } + + return contributors; +} + +export const WHITELIST = ['_rev', 'name', 'versions', 'dist-tags', 'readme', 'time']; export function cleanUpLinksRef(keepUpLinkData: boolean, result: Package): Package { const propertyToKeep = [...WHITELIST]; diff --git a/src/lib/utils.js b/src/lib/utils.js index 3c7b818f3..1deba686a 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -14,11 +14,12 @@ import { DEFAULT_PORT, DEFAULT_DOMAIN, } from './constants'; -import {generateGravatarUrl} from '../utils/user'; +import {generateGravatarUrl, GRAVATAR_DEFAULT} from '../utils/user'; import type {Package} from '@verdaccio/types'; import type {$Request} from 'express'; import type {StringValue} from '../../types'; +import {normalizeContributors} from './storage-utils'; const Logger = require('./logger'); const pkginfo = require('pkginfo')(module); // eslint-disable-line no-unused-vars @@ -478,7 +479,7 @@ function deleteProperties(propertiesToDelete: Array, objectItem: any) { function addGravatarSupport(pkgInfo: Object): Object { const pkgInfoCopy = {...pkgInfo}; const author = _.get(pkgInfo, 'latest.author', null); - const contributors = _.get(pkgInfo, 'latest.contributors', []); + const contributors = normalizeContributors(_.get(pkgInfo, 'latest.contributors', [])); const maintainers = _.get(pkgInfo, 'latest.maintainers', []); // for author. @@ -497,7 +498,17 @@ function addGravatarSupport(pkgInfo: Object): Object { // for contributors if (_.isEmpty(contributors) === false) { pkgInfoCopy.latest.contributors = contributors.map((contributor) => { - contributor.avatar = generateGravatarUrl(contributor.email); + if (isObject(contributor)) { + // $FlowFixMe + contributor.avatar = generateGravatarUrl(contributor.email); + } else if (_.isString(contributor)) { + contributor = { + avatar: GRAVATAR_DEFAULT, + email: contributor, + name: contributor, + }; + } + return contributor; }); } diff --git a/test/unit/api/utils.spec.js b/test/unit/api/utils.spec.js index 80ba8e31b..d4a6667a7 100644 --- a/test/unit/api/utils.spec.js +++ b/test/unit/api/utils.spec.js @@ -231,35 +231,82 @@ describe('Utilities', () => { expect(addGravatarSupport(packageInfo)).toEqual(packageInfo); }); - test('contributors field has contributors', () => { - const packageInfo = { - latest: { - contributors: [ - { name: 'user', email: 'user@verdccio.org' }, - { name: 'user1', email: 'user1@verdccio.org' } - ] - } - }; + describe("contributors", () => { + test('contributors field has contributors', () => { + const packageInfo = { + latest: { + contributors: [ + { name: 'user', email: 'user@verdccio.org' }, + { name: 'user1', email: 'user1@verdccio.org' } + ] + } + }; - const result = { - latest: { - contributors: [ - { - avatar: - 'https://www.gravatar.com/avatar/794d7f6ef93d0689437de3c3e48fadc7', - email: 'user@verdccio.org', - name: 'user' - }, - { - avatar: - 'https://www.gravatar.com/avatar/51105a49ce4a9c2bfabf0f6a2cba3762', - email: 'user1@verdccio.org', - name: 'user1' - } - ] - } - }; - expect(addGravatarSupport(packageInfo)).toEqual(result); + const result = { + latest: { + contributors: [ + { + avatar: + 'https://www.gravatar.com/avatar/794d7f6ef93d0689437de3c3e48fadc7', + email: 'user@verdccio.org', + name: 'user' + }, + { + avatar: + 'https://www.gravatar.com/avatar/51105a49ce4a9c2bfabf0f6a2cba3762', + email: 'user1@verdccio.org', + name: 'user1' + } + ] + } + }; + expect(addGravatarSupport(packageInfo)).toEqual(result); + }); + + test('contributors field is an object', () => { + const packageInfo = { + latest: { + contributors: { name: 'user', email: 'user@verdccio.org' } + } + }; + + const result = { + latest: { + contributors: [ + { + avatar: 'https://www.gravatar.com/avatar/794d7f6ef93d0689437de3c3e48fadc7', + email: 'user@verdccio.org', + name: 'user' + } + ] + } + }; + + expect(addGravatarSupport(packageInfo)).toEqual(result); + }); + + test('contributors field is a string', () => { + const contributor: string = 'Barney Rubble (http://barnyrubble.tumblr.com/)'; + const packageInfo = { + latest: { + contributors: contributor + } + }; + + const result = { + latest: { + contributors: [ + { + avatar: GRAVATAR_DEFAULT, + email: contributor, + name: contributor + } + ] + } + }; + + expect(addGravatarSupport(packageInfo)).toEqual(result); + }); }); test('maintainers field is a blank array', () => { diff --git a/yarn.lock b/yarn.lock index 2a6e9cc9903b7c8fc8b7c01db3183514ce66d86c..f38aadbc5100f6cd77a110e83f8d2f8504ae337a 100644 GIT binary patch delta 122 zcmaFXApW#Le8W{0ArmDlE(L|M)S}|d{5%CEV?C3}2i>(N=c;f|mQ@wfGtnzauTnNh zvoy3cNHI4wO*Jx2O}0!*OfxV^GD Date: Thu, 27 Sep 2018 15:26:41 +0200 Subject: [PATCH 3/3] chore(release): 3.8.2 --- CHANGELOG.md | 10 ++++++++++ package.json | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc65f09ef..ddc865203 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [3.8.2](https://github.com/verdaccio/verdaccio/compare/v3.8.1...v3.8.2) (2018-09-27) + + +### Bug Fixes + +* normalize contributors field [#1022](https://github.com/verdaccio/verdaccio/issues/1022) ([#1024](https://github.com/verdaccio/verdaccio/issues/1024)) ([4deefe7](https://github.com/verdaccio/verdaccio/commit/4deefe7)) + + + ## [3.8.1](https://github.com/verdaccio/verdaccio/compare/v3.8.0...v3.8.1) (2018-09-10) diff --git a/package.json b/package.json index 68756399a..0b84e8e3d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "verdaccio", - "version": "3.8.1", + "version": "3.8.2", "description": "Private npm repository server", "author": { "name": "Alex Kocharin",