Compare commits

..

2 Commits

Author SHA1 Message Date
Paul Melnikow
332a496e84 Match unit test to value used by API 2020-09-22 15:57:24 -04:00
Paul Melnikow
5f28ac34cc [PyPI] When Python version classifiers are absent, fall back to requires_python 2020-09-22 15:54:16 -04:00
452 changed files with 7072 additions and 6686 deletions

View File

@@ -14,6 +14,9 @@ update_configs:
- match:
dependency_name: 'eslint*'
update_type: 'semver:minor'
- match:
dependency_name: 'enzyme*'
update_type: 'semver:minor'
- match:
dependency_name: 'mocha*'
update_type: 'semver:minor'

View File

@@ -10,7 +10,6 @@
"**/*-test-helpers.js",
"**/*-fixtures.js",
"**/mocha-*.js",
"**/*.test-d.ts",
"dangerfile.js",
"gatsby-*.js",
"core/service-test-runner",

View File

@@ -1,3 +1,7 @@
{
"recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"]
"recommendations": [
"esbenp.prettier-vscode",
"EditorConfig.EditorConfig",
"dbaeumer.vscode-eslint"
]
}

View File

@@ -86,15 +86,11 @@ and pull requests! You can peruse the [contributing guidelines][contributing].
When adding or changing a service [please add tests][service-tests].
This project has quite a backlog of suggestions! If you're new to the project,
maybe you'd like to open a pull request to address one of them.
You can read a [tutorial on how to add a badge][tutorial].
maybe you'd like to open a pull request to address one of them:
[![GitHub issues by-label](https://img.shields.io/github/issues/badges/shields/good%20first%20issue)](https://github.com/badges/shields/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
[![Hacktoberfest 2020](https://img.shields.io/github/hacktoberfest/2020/badges/shields?label=hacktoberfest%202020)](https://github.com/badges/shields/issues?q=is%3Aopen+is%3Aissue+label%3Ahacktoberfest)
Let's see if we can beat last year!
[![Hacktoberfest 2019](https://img.shields.io/github/hacktoberfest/2019/badges/shields?label=hacktoberfest%202019)](https://github.com/badges/shields/issues?q=is%3Aopen+is%3Aissue+label%3Ahacktoberfest)
You can read a [tutorial on how to add a badge][tutorial].
[service-tests]: https://github.com/badges/shields/blob/master/doc/service-tests.md
[tutorial]: doc/TUTORIAL.md

View File

@@ -1,11 +1,5 @@
# Changelog
## 3.3.0
- Readability improvements: a dark font color is automatically used when the badge's background is too light. For example: ![](https://img.shields.io/badge/hello-world-white)
- Better CSS color compliance: thanks to a switch from _is-css-color_ to _[css-color-converter](https://www.npmjs.com/package/css-color-converter)_, you can use a wider range of color formats from the latest CSS specification, for example `rgb(0 255 0)`
- Less dependencies: _badge-maker_ no longer depends on _camelcase_
## 3.2.0
- Accessibility improvements: Help users of assistive technologies to read the badges when used inline

View File

@@ -1,6 +1,6 @@
'use strict'
const { fromString } = require('css-color-converter')
const cssColorConverter = require('css-color-converter')
// When updating these, be sure also to update the list in `badge-maker/README.md`.
const namedColors = {
@@ -38,7 +38,10 @@ function isHexColor(s = '') {
}
function isCSSColor(color) {
return typeof color === 'string' && fromString(color.trim())
return (
typeof color === 'string' &&
typeof cssColorConverter(color.trim()).toRgbaArray() !== 'undefined'
)
}
function normalizeColor(color) {
@@ -70,9 +73,8 @@ function toSvgColor(color) {
function brightness(color) {
if (color) {
const cssColor = fromString(color)
if (cssColor) {
const rgb = cssColor.toRgbaArray()
const rgb = cssColorConverter(color).toRgbaArray()
if (rgb) {
return +((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 255000).toFixed(2)
}
}

View File

@@ -37,7 +37,7 @@ test(normalizeColor, () => {
given(' blue ').expect(' blue ')
given('rgb(100%, 200%, 222%)').expect('rgb(100%, 200%, 222%)')
given('rgb(122, 200, 222)').expect('rgb(122, 200, 222)')
given('rgb(122, 200, 222, 1)').expect('rgb(122, 200, 222, 1)')
given('rgb(100%, 200, 222)').expect('rgb(100%, 200, 222)')
given('rgba(100, 20, 111, 1)').expect('rgba(100, 20, 111, 1)')
given('hsl(122, 200%, 222%)').expect('hsl(122, 200%, 222%)')
given('hsla(122, 200%, 222%, 1)').expect('hsla(122, 200%, 222%, 1)')
@@ -46,8 +46,8 @@ test(normalizeColor, () => {
given(''),
given('not-a-color'),
given('#ABCFGH'),
given('rgb(122, 200, 222, 1)'),
given('rgb(-100, 20, 111)'),
given('rgb(100%, 200, 222)'),
given('rgba(-100, 20, 111, 1.1)'),
given('hsl(122, 200, 222, 1)'),
given('hsl(122, 200, 222)'),

View File

@@ -34,14 +34,10 @@ describe('The badge generator', function () {
]).expect('#abc123')
// valid rgb(a)
given('rgb(0,128,255)').expect('rgb(0,128,255)')
given('rgb(220,128,255,0.5)').expect('rgb(220,128,255,0.5)')
given('rgba(0,0,255)').expect('rgba(0,0,255)')
given('rgba(0,128,255,0)').expect('rgba(0,128,255,0)')
// valid hsl(a)
given('hsl(100, 56%, 10%)').expect('hsl(100, 56%, 10%)')
given('hsl(360,50%,50%,0.5)').expect('hsl(360,50%,50%,0.5)')
given('hsla(25,20%,0%,0.1)').expect('hsla(25,20%,0%,0.1)')
given('hsla(0,50%,101%)').expect('hsla(0,50%,101%)')
// CSS named color.
given('papayawhip').expect('papayawhip')
// Shields named color.
@@ -57,6 +53,12 @@ describe('The badge generator', function () {
// invalid hex
given('#123red'), // contains letter above F
given('#red'), // contains letter above F
// invalid rgb(a)
given('rgb(220,128,255,0.5)'), // has alpha
given('rgba(0,0,255)'), // no alpha
// invalid hsl(a)
given('hsl(360,50%,50%,0.5)'), // has alpha
given('hsla(0,50%,101%)'), // no alpha
// neither a css named color nor colorscheme
given('notacolor'),
given('bluish'),

View File

@@ -1,6 +1,6 @@
{
"name": "badge-maker",
"version": "3.3.0",
"version": "3.2.0",
"description": "Shields.io badge library",
"keywords": [
"GitHub",
@@ -36,7 +36,7 @@
},
"dependencies": {
"anafanafo": "^1.0.0",
"css-color-converter": "^2.0.0"
"css-color-converter": "^1.1.1"
},
"scripts": {
"test": "echo 'Run tests from parent dir'; false"

View File

@@ -18,3 +18,7 @@ public:
redirectUrl: 'https://shields.io/'
rasterUrl: 'https://raster.shields.io'
private:
# These are not really private; they should be moved to `public`.
shields_ips: ['192.99.59.72', '51.254.114.150', '149.56.96.133']

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { expect } = require('chai')
const gql = require('graphql-tag')
const sinon = require('sinon')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { expect } = require('chai')
const sinon = require('sinon')
const BaseJsonService = require('./base-json')

View File

@@ -2,7 +2,7 @@
const { expect } = require('chai')
const sinon = require('sinon')
const Joi = require('joi')
const Joi = require('@hapi/joi')
const makeBadge = require('../../badge-maker/lib/make-badge')
const BaseSvgScrapingService = require('./base-svg-scraping')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { expect } = require('chai')
const sinon = require('sinon')
const BaseXmlService = require('./base-xml')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { expect } = require('chai')
const sinon = require('sinon')
const BaseYamlService = require('./base-yaml')

View File

@@ -5,7 +5,7 @@
// See available emoji at http://emoji.muan.co/
const emojic = require('emojic')
const Joi = require('joi')
const Joi = require('@hapi/joi')
const log = require('../server/log')
const { AuthHelper } = require('./auth-helper')
const { MetricHelper, MetricNames } = require('./metric-helper')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const chai = require('chai')
const { expect } = chai
const sinon = require('sinon')

View File

@@ -1,7 +1,7 @@
'use strict'
const assert = require('assert')
const Joi = require('joi')
const Joi = require('@hapi/joi')
const coalesce = require('./coalesce')
const serverStartTimeGMTString = new Date().toGMTString()

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const categories = require('../../services/categories')
const isRealCategory = Joi.equal(...categories.map(({ id }) => id)).required()

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const camelcase = require('camelcase')
const BaseService = require('./base')
const { isValidCategory } = require('./categories')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { pathToRegexp, compile } = require('path-to-regexp')
const categories = require('../../services/categories')
const coalesceBadge = require('./coalesce-badge')

View File

@@ -2,7 +2,7 @@
const camelcase = require('camelcase')
const emojic = require('emojic')
const Joi = require('joi')
const Joi = require('@hapi/joi')
const queryString = require('query-string')
const BaseService = require('./base')
const {

View File

@@ -1,7 +1,7 @@
'use strict'
const escapeStringRegexp = require('escape-string-regexp')
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { pathToRegexp } = require('path-to-regexp')
function makeFullUrl(base, partialUrl) {

View File

@@ -1,7 +1,7 @@
'use strict'
const { expect } = require('chai')
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { test, given, forCases } = require('sazerac')
const {
prepareRoute,

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
// This should be kept in sync with the schema in
// `frontend/lib/service-definitions/index.ts`.

View File

@@ -1,7 +1,7 @@
'use strict'
const emojic = require('emojic')
const Joi = require('joi')
const Joi = require('@hapi/joi')
const trace = require('./trace')
function validate(

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { expect } = require('chai')
const sinon = require('sinon')
const trace = require('./trace')

View File

@@ -1,6 +1,20 @@
'use strict'
const config = require('config').util.toObject()
const secretIsValid = require('./secret-is-valid')
const RateLimit = require('./rate-limit')
const log = require('./log')
function secretInvalid(req, res) {
if (!secretIsValid(req.password)) {
// An unknown entity tries to connect. Let the connection linger for a minute.
setTimeout(() => {
res.json({ errors: [{ code: 'invalid_secrets' }] })
}, 10000)
return true
}
return false
}
function setRoutes({ rateLimit }, { server, metricInstance }) {
const ipRateLimit = new RateLimit({
@@ -15,6 +29,12 @@ function setRoutes({ rateLimit }, { server, metricInstance }) {
})
server.handle((req, res, next) => {
if (req.url.startsWith('/sys/')) {
if (secretInvalid(req, res)) {
return
}
}
if (rateLimit) {
const ip =
(req.headers['x-forwarded-for'] || '').split(', ')[0] ||
@@ -39,6 +59,27 @@ function setRoutes({ rateLimit }, { server, metricInstance }) {
next()
})
server.get('/sys/network', (req, res) => {
res.json({ ips: config.public.shields_ips })
})
server.ws('/sys/logs', socket => {
const listener = (...msg) => socket.send(msg.join(' '))
socket.on('close', () => log.removeListener(listener))
socket.on('message', msg => {
let req
try {
req = JSON.parse(msg)
} catch (e) {
return
}
if (!secretIsValid(req.secret)) {
return socket.close()
}
log.addListener(listener)
})
})
server.get('/sys/rate-limit', (req, res) => {
res.json({
ip: ipRateLimit.toJSON(),
@@ -54,4 +95,6 @@ function setRoutes({ rateLimit }, { server, metricInstance }) {
}
}
module.exports = { setRoutes }
module.exports = {
setRoutes,
}

View File

@@ -1,5 +1,7 @@
'use strict'
const serverSecrets = require('../../lib/server-secrets')
function constEq(a, b) {
if (a.length !== b.length) {
return false
@@ -11,10 +13,9 @@ function constEq(a, b) {
return zero === 0
}
function makeSecretIsValid(shieldsSecret) {
return function secretIsValid(secret = '') {
return shieldsSecret && constEq(secret, shieldsSecret)
}
module.exports = function secretIsValid(secret = '') {
return (
serverSecrets.shields_secret &&
constEq(secret, serverSecrets.shields_secret)
)
}
module.exports = { makeSecretIsValid }

View File

@@ -8,7 +8,7 @@ const url = require('url')
const { URL } = url
const bytes = require('bytes')
const Camp = require('@shields_io/camp')
const originalJoi = require('joi')
const originalJoi = require('@hapi/joi')
const makeBadge = require('../../badge-maker/lib/make-badge')
const GithubConstellation = require('../../services/github/github-constellation')
const suggest = require('../../services/suggest')
@@ -168,6 +168,7 @@ const privateConfigSchema = Joi.object({
npm_token: Joi.string(),
redis_url: Joi.string().uri({ scheme: ['redis', 'rediss'] }),
sentry_dsn: Joi.string(),
shields_ips: Joi.array().items(Joi.string().ip()),
shields_secret: Joi.string(),
sl_insight_userUuid: Joi.string(),
sl_insight_apiToken: Joi.string(),

View File

@@ -3,7 +3,7 @@
* @module
*/
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { expect } = require('chai')
/**

View File

@@ -32,7 +32,6 @@ class FsTokenPersistence extends TokenPersistence {
}
async onTokenAdded(token) {
/* istanbul ignore if */
if (!this._tokens) {
throw Error('initialize() has not been called')
}
@@ -41,7 +40,6 @@ class FsTokenPersistence extends TokenPersistence {
}
async onTokenRemoved(token) {
/* istanbul ignore if */
if (!this._tokens) {
throw Error('initialize() has not been called')
}

View File

@@ -111,7 +111,10 @@ if (allFiles.length > 100) {
// eslint-disable-next-line promise/prefer-await-to-then
danger.git.diffForFile(file).then(({ diff }) => {
if (diff.includes('authHelper') && !secretsDocs.modified) {
if (
(diff.includes('authHelper') || diff.includes('serverSecrets')) &&
!secretsDocs.modified
) {
warn(
[
`:books: Remember to ensure any changes to \`config.private\` `,

View File

@@ -179,7 +179,7 @@ const { renderVersionBadge } = require('..//version')
const { BaseJsonService } = require('..')
// (4)
const Joi = require('joi')
const Joi = require('@hapi/joi')
const schema = Joi.object({
version: Joi.string().required(),
}).required()

View File

@@ -145,7 +145,7 @@ Once the route is working, fill out `render()` and `handle()`.
<details>
```js
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { errorMessagesFor } = require('./github-helpers')
const issueSchema = Joi.object({
@@ -174,7 +174,7 @@ or create an abstract superclass like **PypiBase**:
<details>
```js
const Joi = require('joi')
const Joi = require('@hapi/joi')
const BaseJsonService = require('../base-json')
const schema = Joi.object({

View File

@@ -0,0 +1,8 @@
import Enzyme from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'
import chai from 'chai'
import chaiEnzyme from 'chai-enzyme'
Enzyme.configure({ adapter: new Adapter() })
chai.use(chaiEnzyme())

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const {
toSvgColor,
brightness,

3935
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -22,7 +22,8 @@
"url": "https://github.com/badges/shields"
},
"dependencies": {
"joi": "17.2.1",
"@hapi/joi": "^17.1.1",
"@renovate/pep440": "^0.4.1",
"@sentry/node": "^5.24.2",
"@shields_io/camp": "^18.0.0",
"badge-maker": "file:badge-maker",
@@ -32,7 +33,7 @@
"chalk": "^4.1.0",
"check-node-version": "^4.0.3",
"chrome-web-store-item-property": "~1.2.0",
"config": "^3.3.2",
"config": "^3.3.1",
"cross-env": "^7.0.2",
"decamelize": "^3.2.0",
"dotenv": "^8.2.0",
@@ -44,13 +45,13 @@
"graphql": "^14.7.0",
"graphql-tag": "^2.11.0",
"ioredis": "4.17.3",
"joi-extension-semver": "5.0.0",
"joi-extension-semver": "4.1.1",
"js-yaml": "^3.14.0",
"jsonpath": "~1.0.2",
"lodash.countby": "^4.6.0",
"lodash.groupby": "^4.6.0",
"lodash.times": "^4.3.2",
"moment": "^2.29.0",
"moment": "^2.28.0",
"node-env-flag": "^0.1.0",
"parse-link-header": "^1.0.1",
"path-to-regexp": "^5.0.0",
@@ -60,7 +61,7 @@
"query-string": "^6.13.2",
"request": "~2.88.2",
"semver": "~7.3.2",
"simple-icons": "3.10.0",
"simple-icons": "3.8.0",
"xmldom": "~0.2.1",
"xpath": "~0.0.29"
},
@@ -147,13 +148,15 @@
"@babel/register": "7.11.5",
"@mapbox/react-click-to-select": "^2.2.0",
"@types/chai": "^4.2.12",
"@types/chai-enzyme": "^0.6.7",
"@types/enzyme": "^3.10.6",
"@types/lodash.debounce": "^4.0.6",
"@types/lodash.groupby": "^4.6.6",
"@types/mocha": "^8.0.3",
"@types/node": "^14.11.2",
"@types/node": "^14.11.1",
"@types/react-helmet": "^6.1.0",
"@types/react-modal": "^3.10.6",
"@types/react-select": "^3.0.21",
"@types/react-select": "^3.0.19",
"@types/styled-components": "5.1.3",
"@typescript-eslint/eslint-plugin": "^2.34.0",
"@typescript-eslint/parser": "^2.34.0",
@@ -163,37 +166,40 @@
"caller": "^1.0.1",
"chai": "^4.1.2",
"chai-datetime": "^1.7.0",
"chai-enzyme": "^1.0.0-beta.1",
"chai-string": "^1.4.0",
"cheerio": "^1.0.0-rc.3",
"child-process-promise": "^2.2.1",
"clipboard-copy": "^3.1.0",
"concurrently": "^5.3.0",
"cypress": "^5.3.0",
"danger": "^10.4.1",
"cypress": "^5.1.0",
"danger": "^10.4.0",
"danger-plugin-no-test-shortcuts": "^2.0.0",
"deepmerge": "^4.2.2",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.4",
"eslint": "^6.8.0",
"eslint-config-prettier": "^6.12.0",
"eslint-config-prettier": "^6.11.0",
"eslint-config-standard": "^14.1.1",
"eslint-config-standard-react": "^9.2.0",
"eslint-plugin-chai-friendly": "^0.6.0",
"eslint-plugin-cypress": "^2.11.2",
"eslint-plugin-cypress": "^2.11.1",
"eslint-plugin-import": "^2.22.0",
"eslint-plugin-jsdoc": "^30.6.3",
"eslint-plugin-jsdoc": "^30.4.2",
"eslint-plugin-mocha": "^6.3.0",
"eslint-plugin-no-extension-in-require": "^0.2.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-react": "^7.21.3",
"eslint-plugin-react": "^7.20.6",
"eslint-plugin-react-hooks": "^2.5.1",
"eslint-plugin-sort-class-members": "^1.8.0",
"eslint-plugin-standard": "^4.0.1",
"fetch-ponyfill": "^6.1.1",
"form-data": "^3.0.0",
"fs-readfile-promise": "^3.0.1",
"gatsby": "2.24.65",
"gatsby": "2.24.57",
"gatsby-plugin-catch-links": "^2.3.10",
"gatsby-plugin-page-creator": "^2.3.30",
"gatsby-plugin-page-creator": "^2.3.27",
"gatsby-plugin-react-helmet": "^3.3.9",
"gatsby-plugin-remove-trailing-slashes": "^2.3.10",
"gatsby-plugin-styled-components": "^3.3.9",
@@ -206,7 +212,7 @@
"is-png": "^2.0.0",
"is-svg": "^4.2.1",
"js-yaml-loader": "^1.2.2",
"jsdoc": "^3.6.6",
"jsdoc": "^3.6.5",
"lint-staged": "^10.4.0",
"lodash.debounce": "^4.0.8",
"lodash.difference": "^4.5.0",
@@ -235,10 +241,10 @@
"require-hacker": "^3.0.1",
"rimraf": "^3.0.2",
"sazerac": "^2.0.0",
"sinon": "^9.1.0",
"sinon": "^9.0.3",
"sinon-chai": "^3.5.0",
"snap-shot-it": "^7.9.3",
"start-server-and-test": "1.11.5",
"start-server-and-test": "1.11.3",
"styled-components": "^5.2.0",
"tmp": "0.2.1",
"tsd": "^0.13.1",

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { nonNegativeInteger } = require('../validators')
const { BaseJsonService } = require('..')

View File

@@ -9,7 +9,7 @@ const t = (module.exports = new ServiceTester({
}))
t.create('Weekly Downloads')
.get('/dw/duckduckgo-for-firefox.json')
.get('/dw/dustman.json')
.expectBadge({ label: 'downloads', message: isMetricOverTimePeriod })
t.create('Weekly Downloads (not found)')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isStarRating } = require('../test-validators')
const t = (module.exports = require('../tester').createServiceTester())

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { floorCount } = require('../color-formatters')
const { BaseJsonService, InvalidResponse } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { downloadCount } = require('../color-formatters')
const { metric } = require('../text-formatters')
const { nonNegativeInteger } = require('../validators')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { renderLicenseBadge } = require('../licenses')
const { renderVersionBadge } = require('../version')
const { metric } = require('../text-formatters')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { nonNegativeInteger } = require('../validators')
const { isBuildStatus } = require('../build-status')
const { BaseJsonService } = require('..')

View File

@@ -1,7 +1,7 @@
'use strict'
const queryString = require('querystring')
const Joi = require('joi')
const Joi = require('@hapi/joi')
const t = (module.exports = require('../tester').createServiceTester())
const isAppveyorTestTotals = Joi.string().regex(

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { renderVersionBadge } = require('../version')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { floorCount: floorCountColor } = require('../color-formatters')
const { addv, metric } = require('../text-formatters')
const { nonNegativeInteger } = require('../validators')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { BaseJsonService, NotFound } = require('..')
const latestBuildSchema = Joi.object({

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { renderBuildStatusBadge } = require('../build-status')
const { BaseSvgScrapingService, NotFound } = require('..')
const { keywords, fetch } = require('./azure-devops-helpers')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const {
coveragePercentage: coveragePercentageColor,
} = require('../color-formatters')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isBuildStatus } = require('../build-status')
const keywords = ['vso', 'vsts', 'azure-devops']

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const {
testResultQueryParamSchema,
renderTestResultBadge,

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const t = (module.exports = require('../tester').createServiceTester())
const org = 'azuredevops-powershell'

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { BaseJsonService } = require('..')
const schema = Joi.object({

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { metric } = require('../text-formatters')
const { downloadCount } = require('../color-formatters')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { renderVersionBadge } = require('../version')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { metric } = require('../text-formatters')
const { nonNegativeInteger } = require('../validators')
const { downloadCount } = require('../color-formatters')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { metric } = require('../text-formatters')
const { nonNegativeInteger } = require('../validators')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { renderBuildStatusBadge } = require('../build-status')
const { BaseJsonService, redirector } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { AuthHelper } = require('../../core/base-service/auth-helper')
const { metric } = require('../text-formatters')
const { nonNegativeInteger, optionalUrl } = require('../validators')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { BaseJsonService } = require('..')
// https://devcenter.bitrise.io/api/app-status-badge/

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { nonNegativeInteger } = require('../validators')
const { metric } = require('../text-formatters')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { BaseJsonService } = require('..')
const schema = Joi.object()

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { renderVersionBadge } = require('../version')
const { InvalidResponse, redirector } = require('..')
const BaseBowerService = require('./bower-base')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
const { ServiceTester } = require('../tester')
const t = (module.exports = new ServiceTester({

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { metric } = require('../text-formatters')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { metric } = require('../text-formatters')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { optionalUrl } = require('../validators')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const t = (module.exports = require('../tester').createServiceTester())
const bzBugStatus = Joi.equal(

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const greenStatuses = [
'fixed',

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isBuildStatus } = require('../build-status')
const t = (module.exports = require('../tester').createServiceTester())

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const prettyBytes = require('pretty-bytes')
const { nonNegativeInteger } = require('../validators')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { renderVersionBadge } = require('../version')
const { BaseJsonService, NotFound } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const t = (module.exports = require('../tester').createServiceTester())
t.create('Price')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { colorScale, coveragePercentage } = require('../color-formatters')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
const { BaseSvgScrapingService, redirector } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isBuildStatus } = require('../build-status')
const t = (module.exports = require('../tester').createServiceTester())

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { nonNegativeInteger } = require('../validators')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { version: versionColor } = require('../color-formatters')
const { redirector } = require('..')
const { BaseClojarsService } = require('./clojars-base')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { BaseJsonService } = require('..')
const schema = Joi.object({

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const {
coveragePercentage: coveragePercentageColor,
} = require('../color-formatters')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const t = (module.exports = require('../tester').createServiceTester())
const isPlatform = Joi.string().regex(

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const {
coveragePercentage: coveragePercentageColor,
} = require('../color-formatters')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { BaseSvgScrapingService } = require('..')
const { codacyGrade } = require('./codacy-helpers')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const codacyGrade = Joi.equal('A', 'B', 'C', 'D', 'E', 'F')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { colorScale, letterScore } = require('../color-formatters')
const { nonNegativeInteger } = require('../validators')
const { BaseJsonService, NotFound } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isIntegerPercentage } = require('../test-validators')
const t = (module.exports = require('../tester').createServiceTester())

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { NotFound } = require('..')
const keywords = ['codeclimate']

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { coveragePercentage, letterScore } = require('../color-formatters')
const { BaseJsonService, NotFound } = require('..')
const { keywords, isLetterGrade, fetchRepo } = require('./codeclimate-common')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isIntegerPercentage } = require('../test-validators')
const t = (module.exports = require('../tester').createServiceTester())

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { coveragePercentage } = require('../color-formatters')
const { BaseSvgScrapingService } = require('..')
const { parseJson } = require('../../core/base-service/json')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { BaseSvgScrapingService } = require('..')
const { isValidGrade, gradeColor } = require('./codefactor-helpers')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
// https://support.codefactor.io/i14-glossary
// https://github.com/badges/shields/issues/4269

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { isBuildStatus, renderBuildStatusBadge } = require('../build-status')
const { BaseSvgScrapingService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { nonNegativeInteger } = require('../validators')
const { BaseJsonService } = require('..')

View File

@@ -1,6 +1,6 @@
'use strict'
const Joi = require('joi')
const Joi = require('@hapi/joi')
const { renderLicenseBadge } = require('../licenses')
const toArray = require('../../core/base-service/to-array')
const BaseCondaService = require('./conda-base')

Some files were not shown because too many files have changed in this diff Show More