Files
shields/services/wordpress/wordpress-platform.service.js
T
jNulljandGitHub e7d76b117e refactor - usage renderVersionBadge - part 2 [amo archlinux aur bower cdnjs chromewebstore cocoapods conan conda cookbook cpan cran crates ctan curseforge debian docker dub eclipsemarketplace elmpackage f-droid factorio fedora feedz flathub galaxytoolshed gem gitea github gitlab greasyfork hackage hexpm homebrew itunes jenkins jetbrains jitpack jsr mavenmetadata modrinth nexus npm nuget openvsx opm ore packagist piwheels polymart pub puppetforge pypi ros scoop snapcraft spack spiget thunderstore twitch ubuntu vaadindirectory vcpkg visualstudioappcenter visualstudiomarketplace vpm wordpress] (#10615)
* 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
2024-10-20 21:55:58 +02:00

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,
]