Verificador de intervalos SemVer para pacotes
Atualizações de pacotes frequentemente dependem de uma pergunta que parece simples: uma versão semântica exata pertence ao intervalo escrito em um manifesto, regra de arquivo de bloqueio, política de lançamento ou matriz de compatibilidade?
Executar grátis
Este verificador responde usando precedência SemVer determinística. Ele entende operadores de comparação, interseções separadas por espaços, intervalos com hífen, versões parciais e curingas, além de alternativas com barras duplas. Identificadores de pré-lançamento e metadados de compilação recebem o significado semântico correto, portanto o resultado serve para ferramentas de dependências, não apenas como aproximação numérica.
Informe uma versão e o intervalo que deseja testar
Forneça uma versão semântica completa, como <code>2.4.1</code>, e uma expressão de intervalo. Em um conjunto de comparadores separados por espaços, todos precisam ser atendidos; assim, <code>>=2.0.0 <3.0.0</code> aceita lançamentos estáveis da versão principal dois. Separe conjuntos com <code>||</code> quando qualquer ramo puder ser aceito. Uma versão exata também é um intervalo válido. O verificador retorna a versão normalizada, o intervalo sem espaços externos, um resultado booleano e a alternativa correspondente numerada a partir de um; zero indica que nenhuma correspondeu. Essa saída explícita facilita o uso em bloqueios de implantação, relatórios de dependências, editores de manifesto ou testes sem interpretar prosa. As entradas são strings porque transformar versões inteiras em números de ponto flutuante faria 1.10 parecer menor que 1.9 e descartaria pré-lançamentos. Uma letra <code>v</code> inicial em versão completa é aceita e removida na normalização; componentes malformados, alternativas vazias e identificadores inválidos geram erro de entrada tipado, em vez de um resultado falso pouco confiável.
Use comparadores, intervalos com hífen e curingas corretamente
Os comparadores disponíveis são <code>></code>, <code>>=</code>, <code><</code>, <code><=</code> e <code>=</code>. Vários comparadores em uma alternativa formam uma interseção. Um intervalo como <code>1.2.3 - 2.4.0</code> inclui os dois limites completos, enquanto um limite superior parcial se expande até o fim daquela família: <code>1.2 - 2.4</code> começa em 1.2.0 e termina antes de 2.5.0. Curingas podem ser escritos como <code>x</code>, <code>X</code> ou <code>*</code>. Portanto, <code>3.x</code> cobre lançamentos estáveis de 3.0.0 até antes de 4.0.0, e o intervalo parcial <code>3.2</code> equivale a <code>3.2.x</code>. Os curingas devem vir depois dos componentes conhecidos; <code>1.x.4</code> é rejeitado porque não descreve um intervalo coerente. Esta capacidade rejeita intencionalmente os atalhos de circunflexo e til. Expresse esses limites com comparadores explícitos para que a regra avaliada permaneça clara e inequívoca em logs, políticas geradas, verificações automatizadas e análises humanas.
Entenda precedência, pré-lançamentos e metadados
Versões semânticas são comparadas componente por componente, não alfabeticamente. Primeiro decidem os números principal, secundário e de correção. Um pré-lançamento tem precedência menor que o lançamento estável correspondente, e seus identificadores separados por pontos são comparados da esquerda para a direita: identificadores numéricos são comparados numericamente, vêm antes dos não numéricos e um prefixo igual mais curto vem primeiro. Metadados após <code>+</code> são preservados na saída normalizada, mas nunca alteram a precedência, conforme exige o SemVer. Gerenciadores de dependências também evitam selecionar pré-lançamentos por acidente. Este verificador segue esse comportamento: um pré-lançamento só atende a um conjunto se o próprio conjunto contiver um comparador de pré-lançamento com os mesmos números principal, secundário e de correção. Por exemplo, <code>2.0.0-beta.2</code> pode atender a <code>>=2.0.0-beta.1 <2.0.0</code>, mas não entra em um curinga amplo apenas porque seu núcleo numérico se encaixa. Toda avaliação é local e determinística. Nenhum registro é consultado, nenhum pacote é baixado e nenhum lançamento atual é presumido; as mesmas strings sempre retornam a mesma decisão.
Casos de uso
Validar versões candidatas
Compare uma versão proposta ao intervalo declarado pelo projeto consumidor antes de alterar o arquivo de bloqueio.
Proteger um fluxo de lançamento
Autorize ou rejeite artefatos de implantação conforme uma janela explícita de compatibilidade registrada na política.
Explicar o comportamento do manifesto
Teste limites, curingas, alternativas e pré-lançamentos ao investigar por que um resolvedor aceita ou ignora uma versão.
Perguntas frequentes
Quanto custa uma verificação pela API?
Cada solicitação custa US$ 0,002. O mesmo verificador determinístico também pode ser executado diretamente no navegador.
Um intervalo pode conter várias condições?
Sim. Separe condições E com espaços e alternativas OU com ||.
Os limites de um intervalo com hífen são inclusivos?
Limites completos são inclusivos. Um limite superior parcial se expande para uma fronteira exclusiva acima de sua família.
Metadados de compilação afetam o resultado?
Não. Eles são preservados na versão normalizada, mas ignorados na precedência SemVer.
Por que um pré-lançamento falhou em um intervalo amplo?
Ele só é elegível quando o conjunto inclui explicitamente um pré-lançamento com os mesmos números principal, secundário e de correção.
Intervalos com circunflexo e til são aceitos?
Não. Use comparadores explícitos, intervalos com hífen, curingas, versões parciais ou alternativas ||.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"version": "2.4.1",
"range": ">=2.0.0 <3.0.0"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semver_satisfies",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |