{"id":15411865,"url":"https://github.com/walkercoderanger/semver","last_synced_at":"2025-04-14T04:56:41.165Z","repository":{"id":6289760,"uuid":"7524118","full_name":"WalkerCodeRanger/semver","owner":"WalkerCodeRanger","description":"A semantic version library for .NET fully compliant with v2.0.0 of the spec found at http://semver.org/.","archived":false,"fork":false,"pushed_at":"2025-04-05T22:25:02.000Z","size":1004,"stargazers_count":310,"open_issues_count":5,"forks_count":47,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-07T02:01:40.607Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WalkerCodeRanger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"License.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-01-09T16:05:06.000Z","updated_at":"2025-04-05T22:25:05.000Z","dependencies_parsed_at":"2024-06-18T12:17:51.426Z","dependency_job_id":"8ab64b71-3abc-4af4-b6a5-f93361d20106","html_url":"https://github.com/WalkerCodeRanger/semver","commit_stats":{"total_commits":595,"total_committers":12,"mean_commits":"49.583333333333336","dds":"0.13781512605042012","last_synced_commit":"1b271f46177af14b8931c31e926ea5a3a4cc87ab"},"previous_names":["walkercoderanger/semver"],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WalkerCodeRanger%2Fsemver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WalkerCodeRanger%2Fsemver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WalkerCodeRanger%2Fsemver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WalkerCodeRanger%2Fsemver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WalkerCodeRanger","download_url":"https://codeload.github.com/WalkerCodeRanger/semver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248824662,"owners_count":21167343,"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":"2024-10-01T16:50:26.479Z","updated_at":"2025-04-14T04:56:41.134Z","avatar_url":"https://github.com/WalkerCodeRanger.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build status](https://ci.appveyor.com/api/projects/status/uimm5tlwtvthlsfj?svg=true)](https://ci.appveyor.com/project/semvernuget/semver)\r\n[![NuGet](https://img.shields.io/nuget/v/semver.svg)](https://www.nuget.org/packages/semver/)\r\n\r\nA Semantic Version Library for .NET\r\n===================================\r\n\r\nCreate, parse, and manipulate semantic version numbers with the `SemVersion` class and semantic\r\nversion ranges with the `SemVersionRange` class. This library complies with v2.0.0 of the semantic\r\nversioning spec from [semver.org](http://semver.org).\r\n\r\nAPI docs for the most recent release are available online at [semver-nuget.org](https://semver-nuget.org/).\r\n\r\n## Parsing\r\n\r\n```csharp\r\nvar version = SemVersion.Parse(\"1.1.0-rc.1+e471d15\", SemVersionStyles.Strict);\r\n```\r\n\r\n## Constructing\r\n\r\n```csharp\r\nvar v1 = new SemVersion(1, 0);\r\nvar vNextRc = SemVersion.ParsedFrom(1, 1, 0, \"rc.1\");\r\n```\r\n\r\n## Comparing\r\n\r\n```csharp\r\nif (version.ComparePrecedenceTo(vNextRc) == 0)\r\n    Console.WriteLine($\"{version} has the same precedence as {vNextRc}\");\r\n\r\nif (version.CompareSortOrderTo(vNextRc) \u003e 0)\r\n    Console.WriteLine($\"{version} sorts after {vNextRc}\");\r\n```\r\n\r\nOutputs:\r\n\r\n```text\r\n1.1.0-rc.1+e471d15 has the same precedence as 1.1.0-rc.1\r\n1.1.0-rc.1+e471d15 sorts after 1.1.0-rc.1\r\n```\r\n\r\n## Sorting and Enumerable Max/Min\r\n\r\nSince there are two ways of comparing semantic versions, the desired comparison must be specified\r\nwhen sorting or comparing.\r\n\r\n```csharp\r\nvar examples = new List\u003cExample\u003e { ... };\r\n// Put in sort order\r\nvar sorted = examples.OrderBy(e =\u003e e.Version, SemVersion.SortOrderComparer);\r\n// Order by precedence, then by release date\r\nvar ordered = examples.OrderBy(e =\u003e e.Version, SemVersion.PrecedenceComparer)\r\n                      .ThenBy(e =\u003e e.Released);\r\n\r\nvar versions = new List\u003cSemVersion\u003e { vNextRc, v1 };\r\nvar max = versions.Max(SemVersion.SortOrderComparer);\r\nconsole.WriteLine($\"Max version is {max}\");\r\n```\r\n\r\nOutputs:\r\n\r\n```text\r\nMax version is 1.1.0-rc.1\r\n```\r\n\r\n## Manipulating\r\n\r\n```csharp\r\nConsole.WriteLine($\"Current: {version}\");\r\nif (version.IsPrerelease)\r\n{\r\n    Console.WriteLine($\"Prerelease: {version.Prerelease}\");\r\n    Console.WriteLine($\"Next release version is: {version.WithoutPrereleaseOrMetadata()}\");\r\n}\r\n```\r\n\r\nOutputs:\r\n\r\n```text\r\nCurrent: 1.1.0-rc.1+e471d15\r\nPrerelease: rc.1\r\nNext release version is: 1.1.0\r\n```\r\n\r\n## Version Ranges\r\n\r\n```csharp\r\nvar range = SemVersionRange.Parse(\"^1.0.0\");\r\nvar prereleaseRange = SemVersionRange.ParseNpm(\"^1.0.0\", includeAllPrerelease: true);\r\nConsole.WriteLine($\"Range: {range}\");\r\nConsole.WriteLine($\"Prerelease range: {prereleaseRange}\");\r\nConsole.WriteLine($\"Range includes version {version}: {range.Contains(version)}\");\r\nConsole.WriteLine($\"Prerelease range includes version {version}: {prereleaseRange.Contains(version)}\");\r\n\r\n// Alternative: another way to call SemVersionRange.Contains(version)\r\nversion.Satisfies(range);\r\n\r\n// Alternative: slower because it parses the range on every call\r\nversion.SatisfiesNpm(\"^1.0.0\", includeAllPrerelease: true)\r\n```\r\n\r\nOutputs:\r\n\r\n```text\r\nRange: 1.*\r\nPrerelease range: *-* 1.*\r\nRange includes version 1.1.0-rc.1+e471d15: False\r\nPrerelease range includes version 1.1.0-rc.1+e471d15: True\r\n```\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalkercoderanger%2Fsemver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwalkercoderanger%2Fsemver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalkercoderanger%2Fsemver/lists"}