Comprobar rangos SemVer y versiones de paquetes
Las actualizaciones de paquetes suelen depender de una pregunta aparentemente sencilla: ¿pertenece una versión semántica exacta al rango escrito en un manifiesto, una regla de bloqueo, una política de publicación o una matriz de compatibilidad?
Ejecutar — gratis
Este comprobador responde con la precedencia determinista de SemVer. Entiende comparadores, intersecciones separadas por espacios, rangos con guion, versiones parciales y comodines, además de alternativas con doble barra vertical. Los identificadores de prepublicación y compilación reciben su significado semántico correcto, por lo que el resultado sirve para herramientas de dependencias y no como aproximación numérica.
Escriba una versión y el rango que desea comprobar
Indique una versión semántica completa, como <code>2.4.1</code>, y una expresión de rango. En un conjunto de comparadores separados por espacios deben cumplirse todos: <code>>=2.0.0 <3.0.0</code> acepta las publicaciones estables de la versión mayor dos. Separe conjuntos con <code>||</code> si basta con que se cumpla una rama. Una versión exacta también constituye un rango válido. El comprobador devuelve la versión normalizada, el rango sin espacios exteriores, un resultado booleano y la alternativa coincidente numerada desde uno; cero significa que ninguna coincidió. Esta salida explícita permite integrarlo en controles de despliegue, informes de dependencias, editores de manifiestos o pruebas sin interpretar texto. Las entradas son cadenas porque convertir versiones completas a números de coma flotante haría que 1.10 pareciera menor que 1.9 y eliminaría las prepublicaciones. Se admite una <code>v</code> inicial en versiones completas y se elimina al normalizar; los componentes incorrectos, las alternativas vacías y los identificadores inválidos producen un error de entrada tipado en lugar de un falso poco fiable.
Use comparadores, rangos con guion y comodines con precisión
Los comparadores disponibles son <code>></code>, <code>>=</code>, <code><</code>, <code><=</code> y <code>=</code>. Varios comparadores dentro de una alternativa forman una intersección. Un rango como <code>1.2.3 - 2.4.0</code> incluye ambos extremos completos, mientras que un extremo superior parcial se amplía hasta el final de su familia: <code>1.2 - 2.4</code> empieza en 1.2.0 y termina antes de 2.5.0. Los comodines pueden escribirse como <code>x</code>, <code>X</code> o <code>*</code>. Por tanto, <code>3.x</code> abarca publicaciones estables desde 3.0.0 hasta antes de 4.0.0, y el rango parcial <code>3.2</code> equivale a <code>3.2.x</code>. Los comodines deben aparecer después de los componentes conocidos; <code>1.x.4</code> se rechaza porque no describe un intervalo coherente. Esta capacidad rechaza deliberadamente las abreviaturas con circunflejo y virgulilla. Exprese esos límites mediante comparadores explícitos para que la regla evaluada sea visible e inequívoca en registros, políticas generadas, comprobaciones automatizadas y revisiones humanas.
Comprenda la precedencia, las prepublicaciones y los metadatos
Las versiones semánticas se comparan componente por componente, no alfabéticamente. Primero deciden los números mayor, menor y de parche. Una prepublicación precede a la publicación estable correspondiente, y sus identificadores separados por puntos se comparan de izquierda a derecha: los numéricos se comparan como números, se ordenan antes que los no numéricos y un prefijo igual más corto aparece primero. Los metadatos situados tras <code>+</code> se conservan en la salida normalizada, pero nunca cambian la precedencia, tal como exige SemVer. Los gestores de dependencias también evitan seleccionar prepublicaciones accidentalmente. Este comprobador sigue ese criterio: una prepublicación solo puede satisfacer un conjunto si este incluye un comparador de prepublicación con idénticos valores mayor, menor y de parche. Por ejemplo, <code>2.0.0-beta.2</code> puede satisfacer <code>>=2.0.0-beta.1 <2.0.0</code>, pero no entra en un comodín amplio solo porque encaje su núcleo numérico. Cada evaluación es local y determinista. No se consulta ningún registro, no se descarga ningún paquete ni se adivina la publicación actual; las mismas cadenas siempre producen la misma decisión.
Qué puede hacer con ella
Validar candidatos de dependencias
Compruebe una versión propuesta frente al rango declarado por el proyecto consumidor antes de cambiar un archivo de bloqueo.
Proteger un proceso de publicación
Autorice o rechace artefactos de despliegue según una ventana de compatibilidad explícita guardada en la política de publicación.
Explicar el comportamiento del manifiesto
Pruebe límites, comodines, alternativas y prepublicaciones al investigar por qué un resolvedor acepta u omite una publicación.
Preguntas frecuentes
¿Cuánto cuesta una comprobación mediante la API?
Cada solicitud cuesta $0.002. El mismo comprobador determinista también puede ejecutarse directamente en el navegador.
¿Puede un rango contener varias condiciones?
Sí. Separe las condiciones Y con espacios y las alternativas O con ||.
¿Se incluyen los extremos de un rango con guion?
Los extremos completos se incluyen. Un extremo superior parcial se amplía hasta un límite exclusivo posterior a su familia de componentes.
¿Afectan los metadatos de compilación al resultado?
No. Se conservan en la versión normalizada, pero se ignoran al calcular la precedencia SemVer.
¿Por qué una prepublicación no cumple un rango amplio?
Solo puede considerarse si su conjunto incluye explícitamente otra prepublicación con los mismos valores mayor, menor y de parche.
¿Se admiten rangos con circunflejo y virgulilla?
No. Utilice comparadores explícitos, rangos con guion, comodines, versiones parciales o alternativas ||.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"version": "2.4.1",
"range": ">=2.0.0 <3.0.0"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semver_satisfies",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |