* use defaultLabel in renderVersionBadge without tag As we refactor the codebase to use renderVersionBadge. some badges need to show default label regardless of tag existance. This is usefull for cases where the label is dynamic. This change requires fixing test for npm, not sure how it worked before. * Refactor AurVersion to use renderVersionBadge part of #2026 * Refactor CondaVersion to use renderVersionBadge part of #2026 * Refactor WordpressRequiresVersion to use renderVersionBadge * add postfix option to renderVersionBadge * add missing tests for renderVersionBadge add defaultLabel without tag test add postfix test add test for all options together * Refactor WordpressPluginTestedVersion to use renderVersionBadge * add prefix override to renderVersionBadge adds tests for all options with prefix as well used for #2026 but also usefull for usage letting people override v prefix for versions all over the project once #2026 is done as requested for example in #10574 * Refactor RequiresPHPVersionForType to use renderVersionBadge
158 lines
3.9 KiB
JavaScript
158 lines
3.9 KiB
JavaScript
import { NotFound, pathParams } from '../index.js'
|
|
import { renderVersionBadge } from '../version.js'
|
|
import { description, BaseWordpress } from './wordpress-base.js'
|
|
import { versionColorForWordpressVersion } from './wordpress-version-color.js'
|
|
|
|
const extensionData = {
|
|
plugin: {
|
|
capt: 'Plugin',
|
|
exampleSlug: 'bbpress',
|
|
},
|
|
theme: {
|
|
capt: 'Theme',
|
|
exampleSlug: 'twentytwenty',
|
|
},
|
|
}
|
|
|
|
function WordpressRequiresVersion(extensionType) {
|
|
const { capt, exampleSlug } = extensionData[extensionType]
|
|
|
|
return class WordpressRequiresVersion extends BaseWordpress {
|
|
static name = `Wordpress${capt}RequiresVersion`
|
|
|
|
static category = 'platform-support'
|
|
|
|
static route = {
|
|
base: `wordpress/${extensionType}/wp-version`,
|
|
pattern: ':slug',
|
|
}
|
|
|
|
static get openApi() {
|
|
const key = `/wordpress/${extensionType}/wp-version/{slug}`
|
|
const route = {}
|
|
route[key] = {
|
|
get: {
|
|
summary: `WordPress ${capt}: Required WP Version`,
|
|
description,
|
|
parameters: pathParams({
|
|
name: 'slug',
|
|
example: exampleSlug,
|
|
}),
|
|
},
|
|
}
|
|
return route
|
|
}
|
|
|
|
static defaultBadgeData = { label: 'wordpress' }
|
|
|
|
async handle({ slug }) {
|
|
const { requires: wordpressVersion } = await this.fetch({
|
|
extensionType,
|
|
slug,
|
|
})
|
|
|
|
if (wordpressVersion === false) {
|
|
throw new NotFound({
|
|
prettyMessage: `not set for this ${extensionType}`,
|
|
})
|
|
}
|
|
|
|
return renderVersionBadge({ version: wordpressVersion })
|
|
}
|
|
}
|
|
}
|
|
|
|
class WordpressPluginTestedVersion extends BaseWordpress {
|
|
static category = 'platform-support'
|
|
|
|
static route = {
|
|
base: 'wordpress/plugin/tested',
|
|
pattern: ':slug',
|
|
}
|
|
|
|
static openApi = {
|
|
'/wordpress/plugin/tested/{slug}': {
|
|
get: {
|
|
summary: 'WordPress Plugin: Tested WP Version',
|
|
description,
|
|
parameters: pathParams({
|
|
name: 'slug',
|
|
example: 'bbpress',
|
|
}),
|
|
},
|
|
},
|
|
}
|
|
|
|
static defaultBadgeData = { label: 'wordpress' }
|
|
|
|
async handle({ slug }) {
|
|
const { tested: testedVersion } = await this.fetch({
|
|
extensionType: 'plugin',
|
|
slug,
|
|
})
|
|
// Atypically, pulling color data from the server with async operation.
|
|
const color = await versionColorForWordpressVersion(testedVersion)
|
|
return renderVersionBadge({
|
|
version: testedVersion,
|
|
postfix: 'tested',
|
|
versionFormatter: () => color,
|
|
})
|
|
}
|
|
}
|
|
|
|
function RequiresPHPVersionForType(extensionType) {
|
|
const { capt, exampleSlug } = extensionData[extensionType]
|
|
|
|
return class WordpressRequiresPHPVersion extends BaseWordpress {
|
|
static name = `Wordpress${capt}RequiresPHPVersion`
|
|
|
|
static category = 'platform-support'
|
|
|
|
static route = {
|
|
base: `wordpress/${extensionType}/required-php`,
|
|
pattern: ':slug',
|
|
}
|
|
|
|
static get openApi() {
|
|
const key = `/wordpress/${extensionType}/required-php/{slug}`
|
|
const route = {}
|
|
route[key] = {
|
|
get: {
|
|
summary: `WordPress ${capt} Required PHP Version`,
|
|
description,
|
|
parameters: pathParams({
|
|
name: 'slug',
|
|
example: exampleSlug,
|
|
}),
|
|
},
|
|
}
|
|
return route
|
|
}
|
|
|
|
static defaultBadgeData = { label: 'php' }
|
|
|
|
async handle({ slug }) {
|
|
const { requires_php: requiresPhp } = await this.fetch({
|
|
extensionType,
|
|
slug,
|
|
})
|
|
|
|
if (requiresPhp === false) {
|
|
throw new NotFound({
|
|
prettyMessage: `not set for this ${extensionType}`,
|
|
})
|
|
}
|
|
|
|
return renderVersionBadge({ version: requiresPhp, prefix: '>=' })
|
|
}
|
|
}
|
|
}
|
|
|
|
const requiredPhp = ['plugin', 'theme'].map(RequiresPHPVersionForType)
|
|
const requiresVersion = ['plugin', 'theme'].map(WordpressRequiresVersion)
|
|
export default [
|
|
...requiredPhp,
|
|
...requiresVersion,
|
|
WordpressPluginTestedVersion,
|
|
]
|