mirror of
https://github.com/0x5eal/semver-luau.git
synced 2025-03-04 11:11:39 +00:00
feat: implement tostring for SemverImpl
* `SemverImpl:__tostring` - Allows for stringifying a parsed semver instance * Add TODO comment for future erroring for bad ordinal format
This commit is contained in:
parent
5543343612
commit
61f80fbf83
2 changed files with 55 additions and 0 deletions
|
@ -296,6 +296,8 @@ function Semver.parse(ver: string): SemverResult<SemverImpl>
|
||||||
local potentialOrdinalNumber, potentialBuildMetadata = string.match(components[4], "(%d)+(.*)")
|
local potentialOrdinalNumber, potentialBuildMetadata = string.match(components[4], "(%d)+(.*)")
|
||||||
if potentialOrdinalNumber == nil then
|
if potentialOrdinalNumber == nil then
|
||||||
return badPrereleaseType(components[4])
|
return badPrereleaseType(components[4])
|
||||||
|
-- TODO: If there are components after the 4th index, we
|
||||||
|
-- should error
|
||||||
end
|
end
|
||||||
|
|
||||||
if potentialBuildMetadata ~= nil then
|
if potentialBuildMetadata ~= nil then
|
||||||
|
@ -395,4 +397,24 @@ function Semver.__le(left: SemverImpl, right: SemverImpl): boolean
|
||||||
else prereleaseLe(left.prerelease:unwrapOrNil(), right.prerelease:unwrapOrNil())
|
else prereleaseLe(left.prerelease:unwrapOrNil(), right.prerelease:unwrapOrNil())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Semver.__tostring(self: SemverImpl): string
|
||||||
|
local base = `{self.major}.{self.minor}.{self.patch}`
|
||||||
|
local prerelease = self.prerelease
|
||||||
|
:map(function(prerelease: PrereleaseVersion)
|
||||||
|
return `-{prerelease.type}{prerelease.ordinal
|
||||||
|
:map(function(ord: number)
|
||||||
|
return `.{ord}`
|
||||||
|
end)
|
||||||
|
:unwrapOr("")}`
|
||||||
|
end)
|
||||||
|
:unwrapOr("")
|
||||||
|
local build = self.buildMetadata
|
||||||
|
:map(function(buildMetadata: string)
|
||||||
|
return `+{buildMetadata}`
|
||||||
|
end)
|
||||||
|
:unwrapOr("")
|
||||||
|
|
||||||
|
return base .. prerelease .. build
|
||||||
|
end
|
||||||
|
|
||||||
return Semver
|
return Semver
|
||||||
|
|
33
tests/tostring.luau
Normal file
33
tests/tostring.luau
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
local frktest = require("@pkg/frktest")
|
||||||
|
local test = frktest.test
|
||||||
|
local check = frktest.assert.check
|
||||||
|
|
||||||
|
local Option = require("../luau_packages/option")
|
||||||
|
type Option<T> = Option.Option<T>
|
||||||
|
|
||||||
|
local Semver = require("../lib")
|
||||||
|
|
||||||
|
return function()
|
||||||
|
test.suite("Stringification tests", function()
|
||||||
|
test.case("A parsed version when stringified should not change", function()
|
||||||
|
local versions = {
|
||||||
|
"1.2.3",
|
||||||
|
"1.0.0-alpha",
|
||||||
|
"2.3.4-beta.1",
|
||||||
|
"3.0.0-rc.1+build.123",
|
||||||
|
"4.5.6+sha.xyz",
|
||||||
|
"5.0.0-alpha.1+build.999",
|
||||||
|
"6.7.8-beta.2+exp.sha.5114f85",
|
||||||
|
"7.0.0-alpha.1",
|
||||||
|
"9.9.9+20230615",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, version in versions do
|
||||||
|
local parsed = Semver.parse(version):unwrap()
|
||||||
|
local stringified = tostring(parsed)
|
||||||
|
|
||||||
|
check.equal(stringified, version)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue