@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)
Алгоритм преобразования
- major.minor.patch - переносятся как есть из semver
- fourth - кодирует prerelease информацию:
- Если prerelease нет →
9999(максимальный приоритет) alpha.N→1000 + Nbeta.N→2000 + Nrc.N→3000 + N- Другие строки →
4000 + hash(string) % 1000 - Только числа →
5000 + number
- Если prerelease нет →
Это обеспечивает правильный порядок: 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.3→1.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 < version20если version1 === version21если 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
