Strongly typed semver (https://semver.org) parser for Luau
Find a file
Erica Marigold 3f181c19bd
Some checks failed
CI / fmt (push) Has been cancelled
CI / typecheck (push) Has been cancelled
CI / test (push) Has been cancelled
chore(tests): remove attempting to show cursor in ANSI
2024-12-02 11:42:13 +00:00
.github revert: go back to rokit as a toolchain manager 2024-12-02 11:38:20 +00:00
.lune revert: go back to rokit as a toolchain manager 2024-12-02 11:38:20 +00:00
.vscode chore(vscode): remove trailing comma in JSON config 2024-11-12 20:25:33 +05:30
lib feat: Semver.new for construction 2024-11-22 05:30:16 +00:00
tests chore(tests): remove attempting to show cursor in ANSI 2024-12-02 11:42:13 +00:00
.gitignore chore: include .gitignore 2024-11-04 12:19:26 +05:30
.luaurc chore(luaurc): include pkg aliases for lune packages 2024-11-04 12:17:13 +05:30
LICENSE.md chore(LICENSE): replace copyright holder 2024-11-11 11:52:05 +05:30
pesde.toml revert: go back to rokit as a toolchain manager 2024-12-02 11:38:20 +00:00
README.md chore(README): treat imported semver as class 2024-11-22 05:34:36 +00:00
rokit.toml chore: remove info comment in rokit.toml 2024-11-21 19:18:43 +00:00

semver-luau

Discord Pesde Lune

A Luau library to parse and compare Semantic Versioning compatible version numbers.

Semantic Versioning (Semver) is a versioning scheme for software that uses a three-part version number format, MAJOR.MINOR.PATCH. Additionally, Semver defines rules on when to increment each of these parts:

  • MAJOR version increments indicate incompatible API changes.
  • MINOR version increments indicate the addition of functionality in a backward-compatible manner.
  • PATCH version increments indicate backward-compatible bug fixes.

Semver also allows for optional pre-release and build metadata tags.

For a detailed set of guidelines that Semver version numbers follow, visit the previously linked website containing the full Semver specification.

Usage

To improve error / nil handling ergnomics, this library makes use of util.luau's Option and Result implementations. Any fallible methods return a Result and potentially null values are represented as Options.

Invalid versions should return a Result with the respective error. If not, this is considered a bug, and please consider filing an issue here.

local Semver = require("semver")

-- Parse version strings
local v1 = Semver.parse("1.2.3"):unwrap() --[[
  major = 1,
  minor = 2,
  patch = 3,
  buildMetadata = Option::None,
  prerelease = Option::None
]]
local v2 = Semver.parse("5.12.0+build.1731248766"):unwrap() --[[
  major = 5,
  minor = 12,
  patch = 0,
  buildMetadata = Option::Some("build.1731248766"),
  prerelease = Option::None
]]

-- Compare versions
print(v1 < v2)  -- true
print(v1 > v2)  -- false
print(v1 == v2) -- false

MSLV (Minimum Supported Luau Version)

This library requires at least requires at least Luau 0.629, which corresponds to Lune 0.8.7 (for leading | support).

License

This project is licensed under the MIT license.