npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@boristype/ws-version

v0.1.0-alpha.2

Published

Утилита для преобразования semver версий в формат целевой системы

Downloads

295

Readme

WS Version Converter — Конвертер версий

Утилита для преобразования semver версий в формат целевой системы (4 компонента).

Установка

npm install

Использование

import { 
  convertSemverToWsVersion, 
  convertSemverRangeToWsRange, 
  compareWsVersions, 
  isValidWsVersion,
  isValidWsRange 
} from './index.js';

// Преобразование semver в ws-формат
const wsVersion = convertSemverToWsVersion('1.2.3-beta.1');
console.log(wsVersion); // "1.2.3.2001"

// Преобразование промежутков версий
const wsRange = convertSemverRangeToWsRange('^1.2.3');
console.log(wsRange); // "^1.2.3.9999"

const anyVersion = convertSemverRangeToWsRange('*');
console.log(anyVersion); // "^0.0.0.0"

// Сравнение ws-версий
const result = compareWsVersions('1.0.0.1001', '1.0.0.9999');
console.log(result); // -1 (альфа меньше обычной версии)

// Проверка валидности
console.log(isValidWsVersion('1.0.0')); // true
console.log(isValidWsRange('^1.0.0.0')); // true
console.log(isValidWsRange('~1.0.0.0')); // false (тильда не поддерживается)

Формат целевой системы

Целевая система использует версии из 3-4 компонентов в формате major.minor.patch[.fourth]:

  • Компоненты - неотрицательные числа
  • Разделитель - точка
  • Могут содержать лидирующие нули (например, 0.01.002)
  • Максимальная граница компонентов не ограничена (может превышать 255 и 65535)

Алгоритм преобразования

  1. major.minor.patch - переносятся как есть из semver
  2. fourth - кодирует prerelease информацию:
    • Если prerelease нет → 9999 (максимальный приоритет)
    • alpha.N1000 + N
    • beta.N2000 + N
    • rc.N3000 + N
    • Другие строки → 4000 + hash(string) % 1000
    • Только числа → 5000 + number

Это обеспечивает правильный порядок: prerelease < обычная версия.

Ограничения

  • Компоненты semver (major, minor, patch) не могут превышать 999
  • Информация о build (+metadata) игнорируется
  • Порядок сортировки semver сохраняется в ws-формате
  • Prerelease версии меньше обычных версий

Примеры преобразования

| semver | ws-формат | Описание | |--------|-----------|----------| | 1.0.0 | 1.0.0.9999 | Стандартная версия | | 1.0.0-alpha.1 | 1.0.0.1001 | Alpha с номером | | 1.0.0-beta.5 | 1.0.0.2005 | Beta с номером | | 1.0.0-rc.1 | 1.0.0.3001 | Release candidate | | 2.1.0+build.123 | 2.1.0.9999 | Build metadata игнорируется |

Промежутки версий (Version Ranges)

Модуль поддерживает преобразование промежутков версий semver в ws-формат:

Поддерживаемые промежутки:

  • Точная версия: 1.2.31.2.3.9999
  • Caret (совместимые): ^1.2.3^1.2.3.9999
  • Tilde (приблизительно эквивалентные): ~1.2.3^1.2.3.9999
  • Любая версия: *^0.0.0.0

Примечание: tilde (~) преобразуется в caret (^), так как ws-формат поддерживает только caret.

Примеры преобразования ranges:

| semver range | ws range | Описание | |--------------|----------|----------| | 1.0.0 | 1.0.0.9999 | Точная версия | | ^1.2.3 | ^1.2.3.9999 | Совместимые версии | | ~1.2.3 | ^1.2.3.9999 | Приблизительно эквивалентные | | * | ^0.0.0.0 | Любая версия | | ^1.0.0-alpha.1 | ^1.0.0.1001 | Caret с prerelease |

Порядок сортировки: 1.0.0-alpha.1 < 1.0.0-beta.5 < 1.0.0-rc.1 < 1.0.0 ✅

API

convertSemverToWsVersion(version: string): string

Преобразует semver версию в ws-формат.

Параметры:

  • version - Версия в формате semver

Возвращает: Версию в формате x.y.z.w

Исключения: Error если версия невалидна или содержит компоненты > 999

compareWsVersions(version1: string, version2: string): -1 | 0 | 1

Сравнивает две ws-версии.

Возвращает:

  • -1 если version1 < version2
  • 0 если version1 === version2
  • 1 если version1 > version2

isValidWsVersion(version: string): boolean

Проверяет валидность ws-версии.

Параметры:

  • version - Версия для проверки

Возвращает: true если версия валидна

convertSemverRangeToWsRange(range: string): string

Преобразует промежуток semver версий в ws-формат.

Параметры:

  • range - Промежуток версий в формате semver (например, "^1.2.3", "~1.2.3", "*")

Возвращает: Промежуток версий в формате ws

Исключения: Error если промежуток невалиден

isValidWsRange(range: string): boolean

Проверяет валидность ws-промежутка версий.

Тестирование

npm test
# или 
node test.js

Лицензия

MIT