Verifica di versioni e intervalli SemVer
Gli aggiornamenti dei pacchetti dipendono spesso da una domanda solo apparentemente semplice: una versione semantica esatta appartiene all’intervallo scritto in un manifesto, in una regola del file di blocco, in una politica di rilascio o in una matrice di compatibilità?
Esegui gratis nel browser
Questo strumento risponde applicando la precedenza deterministica di SemVer. Comprende comparatori, intersezioni separate da spazi, intervalli con trattino, caratteri jolly, versioni parziali e alternative con doppia barra. Gli identificatori di prerelease e build ricevono il corretto significato semantico, quindi il risultato è adatto agli strumenti per le dipendenze e non è una semplice approssimazione numerica.
Inserisca una versione e l’intervallo da verificare
Fornisca una versione semantica completa, per esempio <code>2.4.1</code>, e un’espressione di intervallo. In un insieme di comparatori separati da spazi devono riuscire tutte le condizioni: <code>>=2.0.0 <3.0.0</code> accetta quindi le versioni stabili della seconda versione principale. Separi gli insiemi con <code>||</code> quando può bastare uno dei rami. Anche una versione esatta è un intervallo valido. Lo strumento restituisce la versione normalizzata, l’intervallo senza spazi esterni, un valore booleano e l’alternativa corrispondente numerata da uno; zero indica che nessuna alternativa coincide. Questo risultato esplicito è facile da usare in un controllo di distribuzione, un rapporto sulle dipendenze, un editor di manifesti o un test senza interpretare testo descrittivo. Gli input sono stringhe: convertire l’intera versione in virgola mobile farebbe sembrare 1.10 minore di 1.9 ed eliminerebbe i prerelease. Una <code>v</code> iniziale è accettata nelle versioni complete e rimossa dalla normalizzazione; componenti non validi, alternative vuote e identificatori errati producono un errore di input tipizzato anziché un falso risultato inaffidabile.
Usi con precisione comparatori, trattini e caratteri jolly
Sono disponibili <code>></code>, <code>>=</code>, <code><</code>, <code><=</code> e <code>=</code>. Più comparatori nella stessa alternativa formano un’intersezione. Un’espressione come <code>1.2.3 - 2.4.0</code> include entrambi gli estremi completi; un estremo superiore parziale viene esteso alla fine della propria famiglia: <code>1.2 - 2.4</code> parte da 1.2.0 e si ferma prima di 2.5.0. I caratteri jolly possono essere <code>x</code>, <code>X</code> o <code>*</code>. Pertanto <code>3.x</code> copre le versioni stabili da 3.0.0 fino a prima di 4.0.0, mentre <code>3.2</code> equivale a <code>3.2.x</code>. I jolly devono seguire i componenti noti; <code>1.x.4</code> viene rifiutato perché non descrive un intervallo coerente. Questa capacità rifiuta intenzionalmente le abbreviazioni con accento circonflesso e tilde. Esprima quei limiti con comparatori espliciti, affinché la regola resti visibile e inequivocabile nei log, nelle politiche generate, nei controlli automatici e nelle revisioni umane.
Comprenda precedenza, prerelease e metadati di build
Le versioni semantiche si confrontano componente per componente, non alfabeticamente. Decidono prima i numeri principale, secondario e patch. Un prerelease precede la relativa versione stabile; i suoi identificatori separati da punti vengono confrontati da sinistra a destra: quelli numerici si confrontano numericamente, precedono quelli non numerici e un prefisso uguale più corto viene prima. I metadati dopo <code>+</code> sono conservati nell’output normalizzato ma non cambiano mai la precedenza, come richiede SemVer. I gestori di dipendenze evitano inoltre di selezionare accidentalmente prerelease. Lo strumento segue tale comportamento: un prerelease può soddisfare un insieme soltanto quando quell’insieme contiene un comparatore prerelease con gli stessi numeri principale, secondario e patch. Per esempio, <code>2.0.0-beta.2</code> può soddisfare <code>>=2.0.0-beta.1 <2.0.0</code>, ma non rientra in un jolly ampio solo perché coincide il nucleo numerico. Ogni valutazione è locale e deterministica. Non vengono interrogati registri, scaricati pacchetti o ipotizzati rilasci correnti; le stesse stringhe restituiscono sempre la stessa decisione.
Casi d'uso
Convalidare versioni candidate
Confronti una versione proposta con l’intervallo dichiarato dal progetto che la usa prima di modificare il file di blocco.
Proteggere una pipeline di rilascio
Autorizzi o rifiuti gli artefatti di distribuzione secondo una finestra di compatibilità esplicita nella politica.
Spiegare il comportamento del manifesto
Provi limiti, jolly, alternative e prerelease per capire perché un risolutore accetta o ignora un rilascio.
Domande frequenti
Quanto costa una verifica tramite API?
Ogni richiesta costa $0.002. Lo stesso strumento deterministico può essere eseguito direttamente nel browser.
Un intervallo può contenere più condizioni?
Sì. Separi le condizioni E con spazi e le alternative O con ||.
Gli estremi di un intervallo con trattino sono inclusi?
Gli estremi completi sono inclusi. Un estremo superiore parziale diventa un limite esclusivo oltre la sua famiglia.
I metadati di build influiscono sul risultato?
No. Sono conservati nella versione normalizzata ma ignorati ai fini della precedenza SemVer.
Perché un prerelease non soddisfa un intervallo ampio?
È ammesso solo se l’insieme include esplicitamente un prerelease con gli stessi numeri principale, secondario e patch.
Sono supportati gli intervalli con circonflesso e tilde?
No. Usi comparatori espliciti, intervalli con trattino, jolly, versioni parziali oppure alternative ||.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"version": "2.4.1",
"range": ">=2.0.0 <3.0.0"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semver_satisfies",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |