From 87524976c98615dd13f581a6da3bce01a2b17655 Mon Sep 17 00:00:00 2001 From: chris48s Date: Sun, 28 Oct 2018 15:56:19 +0000 Subject: [PATCH] upgrade to Joi 14; affects [elm-package jetbrains npmversion pypi vaadin-directory dynamic-xml] (#2221) * upgrade to Joi 14 Joi 14 throws an exception on regexes which use the `g` flag see https://github.com/hapijs/joi/issues/1615 semver-regex uses the `g` flag https://github.com/sindresorhus/semver-regex/blob/master/index.js so in order to upgrade Joi, I've swapped out semver-regex We'll use joi-extension-semver for semver validation now * use isVPlusDottedVersionNClauses in jetbrains tests some of these projects use version numbers like v1.7 or v3.0.0.141 --- package-lock.json | 87 ++++++++++---------------- package.json | 4 +- services/jetbrains/jetbrains.tester.js | 17 +++-- services/test-validators.js | 5 +- 4 files changed, 49 insertions(+), 64 deletions(-) diff --git a/package-lock.json b/package-lock.json index 104f5cbb51..9c511bf5c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -378,8 +378,7 @@ "acorn": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", - "optional": true + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" }, "acorn-dynamic-import": { "version": "2.0.2", @@ -2558,8 +2557,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2580,14 +2578,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2602,20 +2598,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2732,8 +2725,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2745,7 +2737,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2760,7 +2751,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2768,14 +2758,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2794,7 +2782,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -2875,8 +2862,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2888,7 +2874,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -2974,8 +2959,7 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -3011,7 +2995,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3031,7 +3014,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3075,14 +3057,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -3907,8 +3887,7 @@ "cssom": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", - "optional": true + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=" }, "cssstyle": { "version": "0.2.37", @@ -7167,9 +7146,9 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "isemail": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.1.3.tgz", - "integrity": "sha512-5xbsG5wYADIcB+mfLsd+nst1V/D+I7EU7LEZPo2GOIMu4JzfcRs5yQoypP4avA7QtUqgxYLKBYNv4IdzBmbhdw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", "requires": { "punycode": "2.x.x" }, @@ -7310,15 +7289,24 @@ } }, "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-14.0.1.tgz", + "integrity": "sha512-M8yD7j1G/9UfJ40h97ophm/flC0zDXUn1RrK3GEm2IsyxOOJAnjQiYLLFS5p75gDGtaKwAPMB4JNLLr5yvCadw==", "requires": { "hoek": "5.x.x", "isemail": "3.x.x", "topo": "3.x.x" } }, + "joi-extension-semver": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/joi-extension-semver/-/joi-extension-semver-2.0.0.tgz", + "integrity": "sha1-/XTCn1nDm2hlIlj0MCVDV2qYVQU=", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, "js-beautify": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.7.4.tgz", @@ -9421,7 +9409,6 @@ "version": "0.1.4", "bundled": true, "dev": true, - "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -9746,8 +9733,7 @@ "is-buffer": { "version": "1.1.6", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "is-builtin-module": { "version": "1.0.0", @@ -9831,7 +9817,6 @@ "version": "3.2.2", "bundled": true, "dev": true, - "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -9878,8 +9863,7 @@ "longest": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "lru-cache": { "version": "4.1.3", @@ -10145,8 +10129,7 @@ "repeat-string": { "version": "1.6.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "require-directory": { "version": "2.1.1", @@ -12308,12 +12291,6 @@ "semver": "^5.0.3" } }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, "send": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", @@ -13512,7 +13489,7 @@ }, "text-encoding": { "version": "0.6.4", - "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", "dev": true }, diff --git a/package.json b/package.json index f86c32fba7..d31caf8e95 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "glob": "^7.1.1", "gm": "^1.23.0", "is-css-color": "^1.0.0", - "joi": "13.7.0", + "joi": "14.0.1", "js-yaml": "^3.11.0", "jsonpath": "~1.0.0", "lodash.countby": "^4.6.0", @@ -155,6 +155,7 @@ "icedfrisby-nock": "^1.0.0", "is-png": "^1.1.0", "is-svg": "^3.0.0", + "joi-extension-semver": "2.0.0", "lint-staged": "^7.3.0", "lodash.debounce": "^4.0.8", "lodash.difference": "^4.5.0", @@ -179,7 +180,6 @@ "redis-server": "^1.2.2", "rimraf": "^2.6.2", "sazerac": "^0.4.2", - "semver-regex": "^2.0.0", "sinon": "^7.0.0", "sinon-chai": "^3.0.0", "snap-shot-it": "^6.1.8", diff --git a/services/jetbrains/jetbrains.tester.js b/services/jetbrains/jetbrains.tester.js index 8cb50f03a3..e4ea320a76 100644 --- a/services/jetbrains/jetbrains.tester.js +++ b/services/jetbrains/jetbrains.tester.js @@ -2,7 +2,7 @@ const Joi = require('joi') const ServiceTester = require('../service-tester') -const { isMetric, isSemver } = require('../test-validators') +const { isMetric, isVPlusDottedVersionNClauses } = require('../test-validators') const t = new ServiceTester({ id: 'jetbrains', title: 'JetBrains' }) module.exports = t @@ -215,17 +215,26 @@ t.create('version for unknown plugin') t.create('version (user friendly plugin id)') .get('/plugin/v/1347-scala.json') .expectJSONTypes( - Joi.object().keys({ name: 'jetbrains plugin', value: isSemver }) + Joi.object().keys({ + name: 'jetbrains plugin', + value: isVPlusDottedVersionNClauses, + }) ) t.create('version (plugin id from plugin.xml)') .get('/plugin/v/org.intellij.scala.json') .expectJSONTypes( - Joi.object().keys({ name: 'jetbrains plugin', value: isSemver }) + Joi.object().keys({ + name: 'jetbrains plugin', + value: isVPlusDottedVersionNClauses, + }) ) t.create('version (number as a plugin id)') .get('/plugin/v/7495.json') .expectJSONTypes( - Joi.object().keys({ name: 'jetbrains plugin', value: isSemver }) + Joi.object().keys({ + name: 'jetbrains plugin', + value: isVPlusDottedVersionNClauses, + }) ) diff --git a/services/test-validators.js b/services/test-validators.js index 06fe670876..0d12fba0fa 100644 --- a/services/test-validators.js +++ b/services/test-validators.js @@ -7,12 +7,11 @@ should be declared in that service's test file. */ -const Joi = require('joi') -const semverRegex = require('semver-regex')() +const Joi = require('joi').extend(require('joi-extension-semver')) const withRegex = re => Joi.string().regex(re) -const isSemver = withRegex(semverRegex) +const isSemver = Joi.semver().valid() const isVPlusTripleDottedVersion = withRegex(/^v[0-9]+.[0-9]+.[0-9]+$/)