This moves a few helpers from `lib/` to `services/`: build-status.js build-status.spec.js color-formatters.js color-formatters.spec.js contributor-count.js licenses.js licenses.spec.js php-version.js php-version.spec.js text-formatters.js text-formatters.spec.js version.js version.spec.js And one from `lib/` to `core/`: unhandled-rejection.spec.js The diff is long, but the changes are straightforward. Ref #2832
260 lines
6.0 KiB
JavaScript
260 lines
6.0 KiB
JavaScript
'use strict'
|
|
|
|
const Joi = require('joi')
|
|
const { renderVersionBadge } = require('../version')
|
|
const {
|
|
transformAndValidate,
|
|
renderDynamicBadge,
|
|
} = require('../dynamic-common')
|
|
const {
|
|
isPackageJsonWithDependencies,
|
|
getDependencyVersion,
|
|
} = require('../package-json-helpers')
|
|
const { semver } = require('../validators')
|
|
const { ConditionalGithubAuthService } = require('./github-auth-service')
|
|
const { fetchJsonFromRepo } = require('./github-common-fetch')
|
|
const { documentation } = require('./github-helpers')
|
|
|
|
const keywords = ['npm', 'node']
|
|
|
|
const versionSchema = Joi.object({
|
|
version: semver,
|
|
}).required()
|
|
|
|
class GithubPackageJsonVersion extends ConditionalGithubAuthService {
|
|
static get category() {
|
|
return 'version'
|
|
}
|
|
|
|
static get route() {
|
|
return {
|
|
base: 'github/package-json/v',
|
|
pattern: ':user/:repo/:branch*',
|
|
}
|
|
}
|
|
|
|
static get examples() {
|
|
return [
|
|
{
|
|
title: 'GitHub package.json version',
|
|
pattern: ':user/:repo',
|
|
namedParams: { user: 'IcedFrisby', repo: 'IcedFrisby' },
|
|
staticPreview: this.render({ version: '2.0.0-alpha.2' }),
|
|
documentation,
|
|
keywords,
|
|
},
|
|
{
|
|
title: 'GitHub package.json version (branch)',
|
|
pattern: ':user/:repo/:branch',
|
|
namedParams: {
|
|
user: 'IcedFrisby',
|
|
repo: 'IcedFrisby',
|
|
branch: 'master',
|
|
},
|
|
staticPreview: this.render({ version: '2.0.0-alpha.2' }),
|
|
documentation,
|
|
keywords,
|
|
},
|
|
]
|
|
}
|
|
|
|
static render({ version, branch }) {
|
|
return renderVersionBadge({
|
|
version,
|
|
tag: branch,
|
|
defaultLabel: 'version',
|
|
})
|
|
}
|
|
|
|
async handle({ user, repo, branch }) {
|
|
const { version } = await fetchJsonFromRepo(this, {
|
|
schema: versionSchema,
|
|
user,
|
|
repo,
|
|
branch,
|
|
filename: 'package.json',
|
|
})
|
|
return this.constructor.render({ version, branch })
|
|
}
|
|
}
|
|
|
|
class GithubPackageJsonDependencyVersion extends ConditionalGithubAuthService {
|
|
static get category() {
|
|
return 'platform-support'
|
|
}
|
|
|
|
static get route() {
|
|
return {
|
|
base: 'github/package-json/dependency-version',
|
|
pattern:
|
|
':user/:repo/:kind(dev|peer)?/:scope(@[^/]+)?/:packageName/:branch*',
|
|
}
|
|
}
|
|
|
|
static get examples() {
|
|
return [
|
|
{
|
|
title: 'GitHub package.json dependency version (prod)',
|
|
pattern: ':user/:repo/:packageName',
|
|
namedParams: {
|
|
user: 'developit',
|
|
repo: 'microbundle',
|
|
packageName: 'rollup',
|
|
},
|
|
staticPreview: this.render({
|
|
dependency: 'rollup',
|
|
range: '^0.67.3',
|
|
}),
|
|
documentation,
|
|
keywords,
|
|
},
|
|
{
|
|
title: 'GitHub package.json dependency version (dev dep on branch)',
|
|
pattern: ':user/:repo/dev/:scope?/:packageName/:branch*',
|
|
namedParams: {
|
|
user: 'zeit',
|
|
repo: 'next.js',
|
|
branch: 'canary',
|
|
scope: '@babel',
|
|
packageName: 'preset-react',
|
|
},
|
|
staticPreview: this.render({
|
|
dependency: '@babel/preset-react',
|
|
range: '7.0.0',
|
|
}),
|
|
documentation,
|
|
keywords,
|
|
},
|
|
]
|
|
}
|
|
|
|
static get defaultBadgeData() {
|
|
return {
|
|
label: 'dependency',
|
|
}
|
|
}
|
|
|
|
static render({ dependency, range }) {
|
|
return {
|
|
label: dependency,
|
|
message: range,
|
|
color: 'blue',
|
|
}
|
|
}
|
|
|
|
async handle({ user, repo, kind, branch = 'master', scope, packageName }) {
|
|
const {
|
|
dependencies,
|
|
devDependencies,
|
|
peerDependencies,
|
|
} = await fetchJsonFromRepo(this, {
|
|
schema: isPackageJsonWithDependencies,
|
|
user,
|
|
repo,
|
|
branch,
|
|
filename: 'package.json',
|
|
})
|
|
|
|
const wantedDependency = scope ? `${scope}/${packageName}` : packageName
|
|
const { range } = getDependencyVersion({
|
|
kind,
|
|
wantedDependency,
|
|
dependencies,
|
|
devDependencies,
|
|
peerDependencies,
|
|
})
|
|
|
|
return this.constructor.render({
|
|
dependency: wantedDependency,
|
|
range,
|
|
})
|
|
}
|
|
}
|
|
|
|
class DynamicGithubPackageJson extends ConditionalGithubAuthService {
|
|
static get category() {
|
|
return 'other'
|
|
}
|
|
|
|
static get route() {
|
|
return {
|
|
base: 'github/package-json',
|
|
format: '(?!v)([^/]+)/([^/]+)/([^/]+)/?([^/]+)?',
|
|
capture: ['key', 'user', 'repo', 'branch'],
|
|
}
|
|
}
|
|
|
|
static get examples() {
|
|
return [
|
|
{
|
|
title: 'GitHub package.json dynamic',
|
|
pattern: ':key/:user/:repo',
|
|
namedParams: {
|
|
key: 'keywords',
|
|
user: 'developit',
|
|
repo: 'microbundle',
|
|
},
|
|
staticPreview: this.render({
|
|
key: 'keywords',
|
|
value: ['bundle', 'rollup', 'micro library'],
|
|
}),
|
|
documentation,
|
|
keywords,
|
|
},
|
|
{
|
|
title: 'GitHub package.json dynamic',
|
|
pattern: ':key/:user/:repo/:branch',
|
|
namedParams: {
|
|
key: 'keywords',
|
|
user: 'developit',
|
|
repo: 'microbundle',
|
|
branch: 'master',
|
|
},
|
|
staticPreview: this.render({
|
|
key: 'keywords',
|
|
value: ['bundle', 'rollup', 'micro library'],
|
|
branch: 'master',
|
|
}),
|
|
documentation,
|
|
keywords,
|
|
},
|
|
]
|
|
}
|
|
|
|
static get defaultBadgeData() {
|
|
return {
|
|
label: 'package.json',
|
|
}
|
|
}
|
|
|
|
static render({ key, value, branch }) {
|
|
return renderDynamicBadge({
|
|
defaultLabel: key,
|
|
tag: branch,
|
|
value,
|
|
})
|
|
}
|
|
|
|
async handle({ key, user, repo, branch }) {
|
|
// Not sure `package-json/n` was ever advertised, but it was supported.
|
|
if (key === 'n') {
|
|
key = 'name'
|
|
}
|
|
const data = await fetchJsonFromRepo(this, {
|
|
schema: Joi.object().required(),
|
|
user,
|
|
repo,
|
|
branch,
|
|
filename: 'package.json',
|
|
})
|
|
const value = transformAndValidate({ data, key })
|
|
return this.constructor.render({ key, value, branch })
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
GithubPackageJsonVersion,
|
|
GithubPackageJsonDependencyVersion,
|
|
DynamicGithubPackageJson,
|
|
}
|