Эта библиотека облегчает работу с семантическими версиями
Библиотека позволяет читать из строк и сравнивать версии, а так же диапазоны версий семантического версионирования (semver) аннотация v2.0.0 (например, npmjs.org, pypi.org и другие)
Данная библиотека не использует регулярные выражения.
Пример работы:
Версия = Версии.ВерсияИзФайла("Путь/К/Файлу");
Сообщить(Версия.ВСтроку());
Версия = Версии.ВерсияИзСтроки("1.0.0");
Сообщить(Версия.ВСтроку());
МассивВерсий = Новый Массив();
МассивВерсий.Добавить(ВерсияИзСтроки("1.0.2"));
МассивВерсий.Добавить(ВерсияИзСтроки("1.0.3"));
МассивВерсий.Добавить(ВерсияИзСтроки("1.0.4"));
МаксимальнаяВерсия = Версии.МаксимальнаяИзМассива(МассивВерсий);
Сообщить(МаксимальнаяВерсия.ВСтроку());
ЗнакСравнения = Версии.СравнитьВерсии("1.0.0", "2.0");
// Пример,
// (-1) - СтрокаВерсия1 меньше (<) СтрокаВерсия2
// (1) - СтрокаВерсия1 больше (>) СтрокаВерсия2
// (0) - СтрокаВерсия1 равна (=) СтрокаВерсия2
Версия1Меньше = Версии.ВерсияМеньше("1.0.0", "2.0");
Версия1Больше = Версии.ВерсияБольше("1.0.0", "2.0");
Сравнение = Версии.Сравнение(">=1.0.0");
Результат = Сравнение.ПроверяемаяВерсия("1.0.2")
.ВДиапазоне();
// ИЛИ
Результат = Версии.ВерсияВДиапазоне("1.0.2", ">=1.0.0")
МассивВерсий = Новый Массив();
МассивВерсий.Добавить("1.0.2");
МассивВерсий.Добавить("1.0.3");
МассивВерсий.Добавить("1.0.4");
Сравнение = Версии.Сравнение(">=1.0.0");
Результат = Сравнение.ПроверяемыеВерсии(МассивВерсий)
.ВДиапазоне();
МассивВерсий = Новый Массив();
МассивВерсий.Добавить("1.0.2");
МассивВерсий.Добавить("1.0.3");
МассивВерсий.Добавить("1.0.4");
МаксимальнаяВерсия = Версии.Сравнение(">=1.0.0")
.ПроверяемыеВерсии(МассивВерсий)
.Максимальная();
Сообщить(МаксимальнаяВерсия.ВСтроку());
МассивВерсий = Новый Массив();
МассивВерсий.Добавить("1.0.2");
МассивВерсий.Добавить("1.0.3");
МассивВерсий.Добавить("1.0.4");
МаксимальнаяВерсия = Версии.МаксимальнаяВерсияМежду(МассивВерсий, ">=1.0.0", "<2.0.0");
// ИЛИ
МаксимальнаяВерсия = Версии.Сравнение(">=1.0.0")
.ДобавитьДиапазон("<2.0.0")
.ПроверяемыеВерсии(МассивВерсий)
.Максимальная();
Сообщить(МаксимальнаяВерсия.ВСтроку());
Так же описание функциональности содержится в папке tests
. В прилагающихся *.os
можно подсмотреть больше примеров из тестов.
Для установки необходимо:
opm install -f <ПутьКФайлу>
или
opm install semver
Для чтения версии из строки и оперирования версиями реализован класс Версия
.
При чтении версии из строки, в случае возникновения ошибки всегда возвращается нулевая версия (
0.0.0
)
НоваяВерсия = Новый Версия("1.0.0");
НоваяВерсия = Новый Версия("1.0.0");
Сообщить(НоваяВерсия.ВСтроку());
НоваяВерсия = Новый Версия("1.0.0");
ВтораяВерсия = Новый Версия("2.0.0");
Больше = НоваяВерсия.Больше(ВтораяВерсия);
БольшеИлиРавны = НоваяВерсия.БольшеИлиРавны(ВтораяВерсия);
Меньше = НоваяВерсия.Меньше(ВтораяВерсия);
МеньшеИлиРавны = НоваяВерсия.МеньшеИлиРавны(ВтораяВерсия);
НоваяВерсия = Новый Версия("1.0.0");
Если НоваяВерсия.Ошибка() Тогда
Сообщить(НоваяВерсия.ПолучитьОписаниеОшибки());
КонецЕсли;
Более подробно смотри в описании публичного интерфейса
Для работы с несколькими версиями реализован модуль Версии
Более подробно смотри в описании публичного интерфейса
Для работы с диапазонами версий реализован класс ДиапазонВерсий
.
Данный класс реализовывает вычисление вхождения версии (или массива версии) в переданный диапазон. А так же обеспечивает чтение простых диапазонов (>=1.2
), с тильдой (~
), с кареткой (^
) и X - диапазоны (x, X или *
)
Более подробно смотри в описании публичного интерфейса
Для работы с сравнениями версий реализован класс СравнениеВерсий
Класс реализовывает ряд терминальных методов:
ВМассив()
- выполняет сравнение и выгружает результат (подходящие версии) в массив (элементы класса Версия)ВМассивСтрок()
- тоже самое, что и ВМассив()
, только элементы массива равны строковым представлениям версийМаксимальная()
- выполняет сравнение и возвращает максимальный из подходящих версийВДиапазоне()
- выполняет сравнение и возвращает истина или ложь, если все проверяемые элементы подошли под диапазоны сравненияВсе остальные методы возвращают этот же класс, что позволяет работать в текучем
виде.
Примеры использования:
СравнениеВсеВерсии = Новый СравнениеВерсий(); // Диапазон по умолчанию "*"
СравнениеБольшеРавно = Новый СравнениеВерсий(">=1.0.0");
// Или через модуль Версии
СравнениеВсеВерсии = Версии.Сравнение(); // Диапазон по умолчанию "*"
СравнениеБольшеРавно = Версии.Сравнение(">=1.0.0");
Сравнение = Новый СравнениеВерсий(">=1.0.0");
Сравнение.ДобавитьДиапазон("<2.0.0");
// Или через модуль Версии
Сравнение = Версии.Сравнение(">=1.0.0")
.ДобавитьДиапазон("<2.0.0");
Сравнение = Новый СравнениеВерсий(">=1.0.0");
Сравнение.ДобавитьДиапазон("<2.0.0");
Сравнение.ПроверяемаяВерсия("1.0.0");
// Или через модуль Версии
Сравнение = Версии.Сравнение(">=1.0.0")
.ДобавитьДиапазон("<2.0.0")
.ПроверяемаяВерсия("1.0.0");
МассивВерсий = Новый Массив();
МассивВерсий.Добавить("1.0.2");
МассивВерсий.Добавить("1.0.3");
МассивВерсий.Добавить("1.0.4");
Сравнение = Новый СравнениеВерсий(">=1.0.0");
Сравнение.ДобавитьДиапазон("<2.0.0");
Сравнение.ПроверяемыеВерсии(МассивВерсий);
// Или через модуль Версии
Сравнение = Версии.Сравнение(">=1.0.0")
.ДобавитьДиапазон("<2.0.0")
.ПроверяемыеВерсии(МассивВерсий);
Более подробно смотри в описании публичного интерфейса
Поддерживаются, как простые диапазоны версий >1.2.3
, >=1.2
, <1
. так и сложные с использованием символов тильда (~
), каретка(^
) и X (x, X или *
)
>1.2.3
, >=1.2
, <1
)Они состоят из знака операции
и строкового представления версии
. Возможные знаки операции:
<
Меньше<=
Меньше или равно>
Больше>=
Больше или рано=
Равно. (по умолчанию) используется, если знак операции не заданПримеры,
>=1.2.3
<1.3.0
~1.2.3
, ~1.2
, ~1
)Примеры, диапазонов с тильдой.
~1.2.3
= >=1.2.3 <1.(2+1).0
= >=1.2.3 <1.3.0
~1.2
= >=1.2.0 <1.(2+1).0
= >=1.2.0 <1.3.0
(Или 1.2.x
)~1
= >=1.0.0 <(1+1).0.0
= >=1.0.0 <2.0.0
(Или 1.x
)~0.2.3
= >=0.2.3 <0.(2+1).0
= >=0.2.3 <0.3.0
~0.2
= >=0.2.0 <0.(2+1).0
= >=0.2.0 <0.3.0
(Или 0.2.x
)~0
= >=0.0.0 <(0+1).0.0
= >=0.0.0 <1.0.0
(Или 0.x
)^1.2.3
, ^0.2.5
, ^0.0.4
)Диапазон каретки используется, если совместимость API не сохраняется между версиями0.2.4
и 0.3.0
Примеры:
^1.2.3
= >=1.2.3 <2.0.0
^0.2.3
= >=0.2.3 <0.3.0
^0.0.3
= >=0.0.3 <0.0.4
Совместно с X:
^1.2.x
= >=1.2.0 <2.0.0
^0.0.x
= >=0.0.0 <0.1.0
^0.0
= >=0.0.0 <0.1.0
^1.x
= >=1.0.0 <2.0.0
^0.x
= >=0.0.0 <1.0.0
1.2.x
, 1.X
, 1.2.*
, *
Любой из символов X
, x
, или *
может быть использовать в диапазоне на месте номера [основной, вспомогательной, патча]
, например:
*
= >=0.0.0
(Любая версия)1.x
= >=1.0.0 <2.0.0
(Между основными версиями)1.2.x
= >=1.2.0 <1.3.0
(Mежду вспомогательными версиями)Или без них совсем.
""
(Пустая строка) = *
= >=0.0.0
1
= 1.x.x
= >=1.0.0 <2.0.0
1.2
= 1.2.x
= >=1.2.0 <1.3.0
Документация публичного интерфейса
Доработка проводится по git-flow. Жду ваших PR.
Смотри файл LICENSE
.