aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/vlib/semver/semver.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/old/vlib/semver/semver.v')
-rw-r--r--v_windows/v/old/vlib/semver/semver.v110
1 files changed, 110 insertions, 0 deletions
diff --git a/v_windows/v/old/vlib/semver/semver.v b/v_windows/v/old/vlib/semver/semver.v
new file mode 100644
index 0000000..c35bbfb
--- /dev/null
+++ b/v_windows/v/old/vlib/semver/semver.v
@@ -0,0 +1,110 @@
+// * Documentation: https://docs.npmjs.com/misc/semver
+module semver
+
+// * Structures.
+// `Version` represents a semantic version in semver format.
+pub struct Version {
+pub:
+ major int
+ minor int
+ patch int
+ prerelease string
+ metadata string
+}
+
+// Increment represents the different types of version increments.
+pub enum Increment {
+ major
+ minor
+ patch
+}
+
+struct EmptyInputError {
+ msg string = 'Empty input'
+ code int
+}
+
+struct InvalidVersionFormatError {
+ msg string
+ code int
+}
+
+// * Constructor.
+// from returns a `Version` structure parsed from `input` `string`.
+pub fn from(input string) ?Version {
+ if input.len == 0 {
+ return IError(&EmptyInputError{})
+ }
+ raw_version := parse(input)
+ version := raw_version.validate() or {
+ return IError(&InvalidVersionFormatError{
+ msg: 'Invalid version format for input "$input"'
+ })
+ }
+ return version
+}
+
+// build returns a `Version` structure with given `major`, `minor` and `patch` versions.
+pub fn build(major int, minor int, patch int) Version {
+ // TODO Check if versions are greater than zero.
+ return Version{major, minor, patch, '', ''}
+}
+
+// * Transformation.
+// increment returns a `Version` structure with incremented values.
+pub fn (ver Version) increment(typ Increment) Version {
+ return increment_version(ver, typ)
+}
+
+// * Comparison.
+// satisfies returns `true` if the `input` expression can be validated to `true`
+// when run against this `Version`.
+// Example: assert semver.build(1,0,0).satisfies('<=2.0.0') == true
+// Example: assert semver.build(1,0,0).satisfies('>=2.0.0') == false
+pub fn (ver Version) satisfies(input string) bool {
+ return version_satisfies(ver, input)
+}
+
+// eq returns `true` if `v1` is equal to `v2`.
+pub fn (v1 Version) eq(v2 Version) bool {
+ return compare_eq(v1, v2)
+}
+
+// gt returns `true` if `v1` is greater than `v2`.
+pub fn (v1 Version) gt(v2 Version) bool {
+ return compare_gt(v1, v2)
+}
+
+// lt returns `true` if `v1` is less than `v2`.
+pub fn (v1 Version) lt(v2 Version) bool {
+ return compare_lt(v1, v2)
+}
+
+// ge returns `true` if `v1` is greater than or equal to `v2`.
+pub fn (v1 Version) ge(v2 Version) bool {
+ return compare_ge(v1, v2)
+}
+
+// le returns `true` if `v1` is less than or equal to `v2`.
+pub fn (v1 Version) le(v2 Version) bool {
+ return compare_le(v1, v2)
+}
+
+// * Utilites.
+// coerce converts the `input` version to a `Version` struct.
+// coerce will strip any contents *after* the parsed version string:
+/*
+Example:
+import semver
+v := semver.coerce('1.3-RC1-b2') or { semver.Version{} }
+assert v.satisfies('>1.0 <2.0') == true // 1.3.0
+*/
+pub fn coerce(input string) ?Version {
+ return coerce_version(input)
+}
+
+// is_valid returns `true` if the `input` `string` can be converted to
+// a (semantic) `Version` struct.
+pub fn is_valid(input string) bool {
+ return is_version_valid(input)
+}