{"id":25567348,"url":"https://github.com/oscript-library/semver","last_synced_at":"2026-03-08T17:38:36.695Z","repository":{"id":150796350,"uuid":"114982375","full_name":"oscript-library/semver","owner":"oscript-library","description":"Библиотека для работы с версиями","archived":false,"fork":false,"pushed_at":"2019-02-02T16:00:24.000Z","size":39,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2024-12-31T20:17:04.036Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"1C Enterprise","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oscript-library.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-21T08:34:28.000Z","updated_at":"2024-03-10T18:20:41.000Z","dependencies_parsed_at":"2023-04-07T09:26:06.729Z","dependency_job_id":null,"html_url":"https://github.com/oscript-library/semver","commit_stats":null,"previous_names":["oscript-library/semver"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fsemver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fsemver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fsemver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscript-library%2Fsemver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oscript-library","download_url":"https://codeload.github.com/oscript-library/semver/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239930061,"owners_count":19720256,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-20T23:26:24.754Z","updated_at":"2026-03-08T17:38:36.650Z","avatar_url":"https://github.com/oscript-library.png","language":"1C Enterprise","readme":"# semver\n[![Stars](https://img.shields.io/github/stars/khorevaa/semver.svg?label=Github%20%E2%98%85\u0026a)](https://github.com/khorevaa/semver/stargazers)\n[![Release](https://img.shields.io/github/tag/khorevaa/semver.svg?label=Last%20release\u0026a)](https://github.com/khorevaa/semver/releases)\n[![Открытый чат проекта https://gitter.im/EvilBeaver/oscript-library](https://badges.gitter.im/khorevaa/semver.png)](https://gitter.im/EvilBeaver/oscript-library)\n\n[![Build Status](https://travis-ci.org/khorevaa/semver.svg?branch=master)](https://travis-ci.org/khorevaa/semver)\n[![Coverage Status](https://coveralls.io/repos/github/khorevaa/semver/badge.svg?branch=master)](https://coveralls.io/github/khorevaa/semver?branch=master)\n\n# Библиотека для работы с версиями\n\nБиблиотека позволяет читать из строк и сравнивать версии, а так же диапазоны версий семантического версионирования (semver) аннотация v2.0.0 (например, npmjs.org, pypi.org и другие)\n\nДанная библиотека не использует регулярные выражения.\n\n\nПример работы:\n\n* Чтение версии из файла\n```bsl\n\nВерсия = Версии.ВерсияИзФайла(\"Путь/К/Файлу\");\n\nСообщить(Версия.ВСтроку());\n\n```\n\n* Версия из строки\n```bsl\n\nВерсия = Версии.ВерсияИзСтроки(\"1.0.0\");\n\nСообщить(Версия.ВСтроку());\n\n```\n* Максимальная версия из массива версий\n```bsl\n\nМассивВерсий = Новый Массив();\nМассивВерсий.Добавить(ВерсияИзСтроки(\"1.0.2\"));\nМассивВерсий.Добавить(ВерсияИзСтроки(\"1.0.3\"));\nМассивВерсий.Добавить(ВерсияИзСтроки(\"1.0.4\"));\n\nМаксимальнаяВерсия = Версии.МаксимальнаяИзМассива(МассивВерсий);\n\nСообщить(МаксимальнаяВерсия.ВСтроку());\n\n```\n\n\n* Сравнение версий\n```bsl\n\nЗнакСравнения = Версии.СравнитьВерсии(\"1.0.0\", \"2.0\");\n// Пример,\n//  (-1) - СтрокаВерсия1 меньше (\u003c) СтрокаВерсия2\n//  (1) - СтрокаВерсия1 больше (\u003e) СтрокаВерсия2\n//  (0) - СтрокаВерсия1 равна (=) СтрокаВерсия2\n\nВерсия1Меньше = Версии.ВерсияМеньше(\"1.0.0\", \"2.0\");\n\nВерсия1Больше = Версии.ВерсияБольше(\"1.0.0\", \"2.0\");\n\n```\n\n* Соответсвие версии диапазону\n```bsl\n\nСравнение = Версии.Сравнение(\"\u003e=1.0.0\");\nРезультат = Сравнение.ПроверяемаяВерсия(\"1.0.2\")\n                     .ВДиапазоне();\n// ИЛИ\n\nРезультат = Версии.ВерсияВДиапазоне(\"1.0.2\", \"\u003e=1.0.0\")\n\n```\n\n* Соответсвие массива версий диапазону\n```bsl\n\nМассивВерсий = Новый Массив();\nМассивВерсий.Добавить(\"1.0.2\");\nМассивВерсий.Добавить(\"1.0.3\");\nМассивВерсий.Добавить(\"1.0.4\");\n\nСравнение = Версии.Сравнение(\"\u003e=1.0.0\");\nРезультат = Сравнение.ПроверяемыеВерсии(МассивВерсий)\n                     .ВДиапазоне();\n\n```\n\n* Масимальная версия массива версий соотвествующая диапазону\n```bsl\n\nМассивВерсий = Новый Массив();\nМассивВерсий.Добавить(\"1.0.2\");\nМассивВерсий.Добавить(\"1.0.3\");\nМассивВерсий.Добавить(\"1.0.4\");\n\nМаксимальнаяВерсия = Версии.Сравнение(\"\u003e=1.0.0\")\n                     .ПроверяемыеВерсии(МассивВерсий)\n                     .Максимальная();\n\nСообщить(МаксимальнаяВерсия.ВСтроку());\n\n```\n\n* Масимальная версия массива версий между диапазонами нижний и верхний\n```bsl\n\nМассивВерсий = Новый Массив();\nМассивВерсий.Добавить(\"1.0.2\");\nМассивВерсий.Добавить(\"1.0.3\");\nМассивВерсий.Добавить(\"1.0.4\");\n\nМаксимальнаяВерсия = Версии.МаксимальнаяВерсияМежду(МассивВерсий, \"\u003e=1.0.0\", \"\u003c2.0.0\");\n\n// ИЛИ\nМаксимальнаяВерсия = Версии.Сравнение(\"\u003e=1.0.0\")\n                .ДобавитьДиапазон(\"\u003c2.0.0\")\n                .ПроверяемыеВерсии(МассивВерсий)\n                .Максимальная();\n\nСообщить(МаксимальнаяВерсия.ВСтроку());\n\n```\n\nТак же описание функциональности содержится в папке `tests`. В прилагающихся `*.os` можно подсмотреть больше примеров из тестов.\n\n## Установка\n\nДля установки необходимо:\n* Скачать файл semver.ospx из раздела [releases](https://github.com/khorevaa/semver/releases)\n* Воспользоваться командой:\n\n```\nopm install -f \u003cПутьКФайлу\u003e\n```\nили\n\n```\nopm install semver\n```\n## Базовые принципы работы с классами библиотеки\n\n### Работа с версией\n\nДля чтения версии из строки и оперирования версиями реализован класс `Версия`.\n\u003e При чтении версии из строки, в случае возникновения ошибки всегда возвращается нулевая версия (`0.0.0`)\n\n* Создание класса версия\n```bsl\n\n    НоваяВерсия = Новый Версия(\"1.0.0\");\n\n```\n\n* Строковое представление класса версия\n```bsl\n\n    НоваяВерсия = Новый Версия(\"1.0.0\");\n    Сообщить(НоваяВерсия.ВСтроку());\n```\n\n* Сравнение версии с другими версиями\n```bsl\n\n    НоваяВерсия = Новый Версия(\"1.0.0\");\n    ВтораяВерсия = Новый Версия(\"2.0.0\");\n\n    Больше = НоваяВерсия.Больше(ВтораяВерсия);\n    БольшеИлиРавны = НоваяВерсия.БольшеИлиРавны(ВтораяВерсия);\n    Меньше = НоваяВерсия.Меньше(ВтораяВерсия);\n    МеньшеИлиРавны = НоваяВерсия.МеньшеИлиРавны(ВтораяВерсия);\n\n```\n\n* Получение ошибки при чтении версии из строки\n```bsl\n\n    НоваяВерсия = Новый Версия(\"1.0.0\");\n    Если НоваяВерсия.Ошибка() Тогда\n        Сообщить(НоваяВерсия.ПолучитьОписаниеОшибки());\n    КонецЕсли;\n\n```\n\nБолее подробно смотри в описании [публичного интерфейса](docs/README.md#класс-версия)\n\n### Работа с версиями\n\nДля работы с несколькими версиями реализован модуль `Версии`\n\nБолее подробно смотри в описании [публичного интерфейса](docs/README.md#модуль-версии)\n### Работа с диапазоном версий\n\nДля работы с диапазонами версий реализован класс `ДиапазонВерсий`.\n\n\nДанный класс реализовывает вычисление вхождения версии (или массива версии)  в переданный диапазон. А так же обеспечивает чтение простых диапазонов (`\u003e=1.2`), с тильдой (`~`), с кареткой (`^`) и X - диапазоны (`x, X или *`)\n\n\nБолее подробно смотри в описании [публичного интерфейса](docs/README.md#класс-диапазонверсий)\n### Работа с сравнением версий\n\nДля работы с сравнениями версий реализован класс СравнениеВерсий\n\nКласс реализовывает ряд терминальных методов:\n\n* `ВМассив()` - выполняет сравнение и выгружает результат (подходящие версии) в массив (элементы класса Версия)\n* `ВМассивСтрок()` - тоже самое, что и `ВМассив()`, только элементы массива равны строковым представлениям версий\n* `Максимальная()` - выполняет сравнение и возвращает максимальный из подходящих версий\n* `ВДиапазоне()` - выполняет сравнение и возвращает истина или ложь, если все проверяемые элементы подошли под диапазоны сравнения\n\nВсе остальные методы возвращают этот же класс, что позволяет работать в `текучем` виде.\n\nПримеры использования:\n\n* Создание объекта сравнения версий\n```bsl\n\nСравнениеВсеВерсии = Новый СравнениеВерсий(); // Диапазон по умолчанию \"*\"\nСравнениеБольшеРавно = Новый СравнениеВерсий(\"\u003e=1.0.0\");\n\n// Или через модуль Версии\nСравнениеВсеВерсии = Версии.Сравнение(); // Диапазон по умолчанию \"*\"\nСравнениеБольшеРавно = Версии.Сравнение(\"\u003e=1.0.0\");\n\n```\n\n* Добавление еще одного диапазона в сравнение\n```bsl\n\nСравнение = Новый СравнениеВерсий(\"\u003e=1.0.0\");\nСравнение.ДобавитьДиапазон(\"\u003c2.0.0\");\n\n// Или через модуль Версии\nСравнение = Версии.Сравнение(\"\u003e=1.0.0\")\n                .ДобавитьДиапазон(\"\u003c2.0.0\");\n\n```\n\n* Добавление версии для сравнения\n```bsl\n\nСравнение = Новый СравнениеВерсий(\"\u003e=1.0.0\");\nСравнение.ДобавитьДиапазон(\"\u003c2.0.0\");\nСравнение.ПроверяемаяВерсия(\"1.0.0\");\n\n// Или через модуль Версии\nСравнение = Версии.Сравнение(\"\u003e=1.0.0\")\n                .ДобавитьДиапазон(\"\u003c2.0.0\")\n                .ПроверяемаяВерсия(\"1.0.0\");\n\n```\n\n* Добавление массива версий для сравнения\n```bsl\n\nМассивВерсий = Новый Массив();\nМассивВерсий.Добавить(\"1.0.2\");\nМассивВерсий.Добавить(\"1.0.3\");\nМассивВерсий.Добавить(\"1.0.4\");\n\nСравнение = Новый СравнениеВерсий(\"\u003e=1.0.0\");\nСравнение.ДобавитьДиапазон(\"\u003c2.0.0\");\nСравнение.ПроверяемыеВерсии(МассивВерсий);\n\n// Или через модуль Версии\nСравнение = Версии.Сравнение(\"\u003e=1.0.0\")\n                .ДобавитьДиапазон(\"\u003c2.0.0\")\n                .ПроверяемыеВерсии(МассивВерсий);\n\n```\n\nБолее подробно смотри в описании [публичного интерфейса](docs/README.md#класс-сравнениеверсий)\n## Диапазоны\n\nПоддерживаются, как простые диапазоны версий `\u003e1.2.3`, `\u003e=1.2`, `\u003c1`. так и сложные с использованием символов тильда (`~`), каретка(`^`) и X (`x, X или *`)\n\n### Простые диапазоны (`\u003e1.2.3`, `\u003e=1.2`, `\u003c1`)\n\nОни состоят из `знака операции` и строкового представления `версии`. Возможные знаки операции:\n\n* `\u003c` Меньше\n* `\u003c=` Меньше или равно\n* `\u003e` Больше\n* `\u003e=` Больше или рано\n* `=` Равно. (по умолчанию) используется, если знак операции не задан\n\nПримеры,\n\n* `\u003e=1.2.3`\n* `\u003c1.3.0`\n\n### Поддержка диапазонов тильда (`~1.2.3`, `~1.2`, `~1`)\n\nПримеры, диапазонов с тильдой.\n\n* `~1.2.3` = `\u003e=1.2.3 \u003c1.(2+1).0` = `\u003e=1.2.3 \u003c1.3.0`\n* `~1.2` = `\u003e=1.2.0 \u003c1.(2+1).0` = `\u003e=1.2.0 \u003c1.3.0` (Или `1.2.x`)\n* `~1` = `\u003e=1.0.0 \u003c(1+1).0.0` = `\u003e=1.0.0 \u003c2.0.0` (Или `1.x`)\n* `~0.2.3` = `\u003e=0.2.3 \u003c0.(2+1).0` = `\u003e=0.2.3 \u003c0.3.0`\n* `~0.2` = `\u003e=0.2.0 \u003c0.(2+1).0` = `\u003e=0.2.0 \u003c0.3.0` (Или `0.2.x`)\n* `~0` = `\u003e=0.0.0 \u003c(0+1).0.0` = `\u003e=0.0.0 \u003c1.0.0` (Или `0.x`)\n\n### Поддержка диапазонов каретка (`^1.2.3`, `^0.2.5`, `^0.0.4`)\n\nДиапазон каретки используется, если совместимость API не сохраняется между версиями`0.2.4` и `0.3.0`\n\nПримеры:\n\n* `^1.2.3` = `\u003e=1.2.3 \u003c2.0.0`\n* `^0.2.3` = `\u003e=0.2.3 \u003c0.3.0`\n* `^0.0.3` = `\u003e=0.0.3 \u003c0.0.4`\n\nСовместно с X:\n\n* `^1.2.x` = `\u003e=1.2.0 \u003c2.0.0`\n* `^0.0.x` = `\u003e=0.0.0 \u003c0.1.0`\n* `^0.0` = `\u003e=0.0.0 \u003c0.1.0`\n* `^1.x` = `\u003e=1.0.0 \u003c2.0.0`\n* `^0.x` = `\u003e=0.0.0 \u003c1.0.0`\n\n### Поддержка диапазонов X `1.2.x`, `1.X`, `1.2.*`, `*`\n\nЛюбой из символов `X`, `x`, или `*` может быть использовать в диапазоне на месте номера `[основной, вспомогательной, патча]`, например:\n\n* `*` = `\u003e=0.0.0` (Любая версия)\n* `1.x` = `\u003e=1.0.0 \u003c2.0.0` (Между основными версиями)\n* `1.2.x` = `\u003e=1.2.0 \u003c1.3.0` (Mежду вспомогательными версиями)\n\nИли без них совсем.\n\n* `\"\"` (Пустая строка) = `*` = `\u003e=0.0.0`\n* `1` = `1.x.x` = `\u003e=1.0.0 \u003c2.0.0`\n* `1.2` = `1.2.x` = `\u003e=1.2.0 \u003c1.3.0`\n\n## Публичный интерфейс\n\n[Документация публичного интерфейса](docs/README.md)\n## Доработка\n\nДоработка проводится по git-flow. Жду ваших PR.\n\n## Лицензия\n\nСмотри файл `LICENSE`.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foscript-library%2Fsemver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foscript-library%2Fsemver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foscript-library%2Fsemver/lists"}