Vérifier une version dans une plage SemVer
La mise à niveau d’un paquet dépend souvent d’une question en apparence simple : une version sémantique précise appartient-elle à la plage inscrite dans un manifeste, une règle de verrouillage, une politique de publication ou une matrice de compatibilité ?
Lancer gratuitement
Ce vérificateur y répond selon l’ordre déterministe de SemVer. Il comprend les comparateurs, les intersections séparées par des espaces, les plages avec trait d’union, les jokers, les versions partielles et les alternatives à double barre. Les identifiants de préversion et de build gardent leur sens sémantique exact ; le résultat convient donc aux outils de dépendances et non à une simple approximation numérique.
Saisissez une version et la plage à contrôler
Indiquez une version sémantique complète telle que <code>2.4.1</code>, puis une expression de plage. Dans un ensemble de comparateurs séparés par des espaces, chaque condition doit réussir : <code>>=2.0.0 <3.0.0</code> accepte ainsi les versions stables de la deuxième version majeure. Séparez les ensembles par <code>||</code> lorsqu’une seule branche suffit. Une version exacte constitue également une plage valide. Le résultat contient la version normalisée, la plage sans espaces extérieurs, un booléen et le numéro, à partir de un, de l’alternative correspondante ; zéro signale qu’aucune branche ne convient. Cette réponse explicite s’intègre facilement dans une règle de déploiement, un rapport de dépendances, un éditeur de manifeste ou un test, sans analyser de prose. Les entrées restent des chaînes : convertir une version entière en nombre flottant ferait paraître 1.10 inférieur à 1.9 et supprimerait les préversions. Un <code>v</code> initial est accepté sur une version complète puis retiré ; les composants mal formés, alternatives vides et identifiants incorrects déclenchent une erreur de saisie typée plutôt qu’un faux résultat trompeur.
Maîtrisez comparateurs, plages à trait d’union et jokers
Vous pouvez employer <code>></code>, <code>>=</code>, <code><</code>, <code><=</code> ou <code>=</code>. Plusieurs comparateurs dans une alternative forment une intersection. Une expression comme <code>1.2.3 - 2.4.0</code> inclut ses deux bornes complètes ; une borne supérieure partielle s’étend jusqu’à la fin de sa famille : <code>1.2 - 2.4</code> commence à 1.2.0 et s’arrête avant 2.5.0. Les jokers s’écrivent <code>x</code>, <code>X</code> ou <code>*</code>. Ainsi, <code>3.x</code> couvre les versions stables de 3.0.0 jusqu’avant 4.0.0, tandis que <code>3.2</code> équivaut à <code>3.2.x</code>. Un joker doit suivre les composants connus ; <code>1.x.4</code> est refusé, car il ne décrit aucun intervalle cohérent. Cette capacité refuse volontairement les raccourcis avec accent circonflexe ou tilde. Exprimez ces limites au moyen de comparateurs explicites afin que la règle évaluée demeure lisible et sans ambiguïté dans les journaux, politiques produites, contrôles automatiques et revues humaines.
Comprenez l’ordre, les préversions et les métadonnées
Les versions sémantiques se comparent composant par composant, et non par ordre alphabétique. Les nombres majeur, mineur et correctif décident d’abord. Une préversion précède la version stable correspondante ; ses identifiants séparés par des points se comparent de gauche à droite : les éléments numériques suivent leur valeur, précèdent les éléments non numériques, et le préfixe identique le plus court vient en premier. Les métadonnées après <code>+</code> restent dans la sortie normalisée mais ne modifient jamais la priorité, conformément à SemVer. Les gestionnaires de dépendances empêchent aussi la sélection accidentelle de préversions. Le vérificateur applique cette règle : une préversion ne satisfait un ensemble que si celui-ci mentionne une préversion ayant les mêmes nombres majeur, mineur et correctif. Par exemple, <code>2.0.0-beta.2</code> peut satisfaire <code>>=2.0.0-beta.1 <2.0.0</code>, mais n’entre pas dans un joker général uniquement parce que son noyau numérique correspond. Toute évaluation est locale et déterministe. Aucun registre n’est interrogé, aucun paquet téléchargé et aucune version actuelle supposée ; les mêmes chaînes produisent toujours la même décision.
Cas d’usage
Valider une version candidate
Comparez une version proposée à la plage déclarée par le projet consommateur avant de modifier son fichier de verrouillage.
Sécuriser une chaîne de publication
Acceptez ou refusez les artefacts de déploiement selon une fenêtre de compatibilité explicite conservée dans la politique.
Expliquer le comportement d’un manifeste
Testez bornes, jokers, alternatives et préversions pour comprendre pourquoi un résolveur retient ou ignore une publication.
Questions fréquentes
Quel est le prix d’une vérification par API ?
Chaque requête coûte $0.002. Le même outil déterministe peut aussi s’exécuter directement dans votre navigateur.
Une plage peut-elle contenir plusieurs conditions ?
Oui. Séparez les conditions ET par des espaces et les alternatives OU par ||.
Les bornes d’une plage à trait d’union sont-elles incluses ?
Les bornes complètes le sont. Une borne supérieure partielle devient une limite exclusive au-dessus de sa famille.
Les métadonnées de build changent-elles le résultat ?
Non. Elles restent dans la version normalisée, mais ne comptent pas dans l’ordre SemVer.
Pourquoi une préversion échoue-t-elle dans une plage large ?
Elle n’est admissible que si l’ensemble mentionne une préversion ayant les mêmes nombres majeur, mineur et correctif.
Les plages avec accent circonflexe et tilde sont-elles prises en charge ?
Non. Utilisez des comparateurs explicites, des plages à trait d’union, des jokers, des versions partielles ou ||.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev/semver-satisfies \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"version":"2.4.1","range":">=2.0.0 <3.0.0"}'const res = await fetch("https://api.kit.forhosting.com/dev/semver-satisfies", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"version": "2.4.1",
"range": ">=2.0.0 <3.0.0"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/semver-satisfies",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"version": "2.4.1",
"range": ">=2.0.0 <3.0.0"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/semver-satisfies", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"version":"2.4.1","range":">=2.0.0 <3.0.0"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"version":"2.4.1","range":">=2.0.0 <3.0.0"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/semver-satisfies", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"version": "2.4.1",
"range": ">=2.0.0 <3.0.0"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semver_satisfies",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |