@metamask/utils
Version:
Various JavaScript/TypeScript utilities of wide relevance to the MetaMask codebase
101 lines • 3.79 kB
text/typescript
import type { Struct } from "@metamask/superstruct";
import type { Opaque } from "./opaque.cjs";
/**
* {@link https://codemix.com/opaque-types-in-javascript/ Opaque} type for SemVer ranges.
*
* @example Use {@link assertIsSemVerRange} and {@link isValidSemVerRange} to cast to proper type.
* ```typescript
* const unsafeRange: string = dataFromUser();
* assertIsSemVerRange(unsafeRange);
* unsafeRange
* // ^? SemVerRange
* ```
* @example If you know what you're doing and want to side-step type safety, casting from a string works correctly.
* ```typescript
* const unsafeRange: string = dataFromUser();
* unsafeRange as SemVerRange;
* // ^? SemVerRange
* ```
* @see {@link assertIsSemVerRange}
* @see {@link isValidSemVerRange}
*/
export type SemVerRange = Opaque<string, typeof semVerRange>;
declare const semVerRange: unique symbol;
/**
* {@link https://codemix.com/opaque-types-in-javascript/ Opaque} type for singular SemVer version.
*
* @example Use {@link assertIsSemVerVersion} and {@link isValidSemVerVersion} to cast to proper type.
* ```typescript
* const unsafeVersion: string = dataFromUser();
* assertIsSemVerVersion(unsafeRange);
* unsafeVersion
* // ^? SemVerVersion
* ```
* @example If you know what you're doing and want to side-step type safety, casting from a string works correctly.
* ```typescript
* const unsafeVersion: string = dataFromUser();
* unsafeRange as SemVerVersion;
* // ^? SemVerVersion
* ```
* @see {@link assertIsSemVerVersion}
* @see {@link isValidSemVerVersion}
*/
export type SemVerVersion = Opaque<string, typeof semVerVersion>;
declare const semVerVersion: unique symbol;
/**
* A struct for validating a version string.
*/
export declare const VersionStruct: Struct<SemVerVersion, null>;
export declare const VersionRangeStruct: Struct<SemVerRange, null>;
/**
* Checks whether a SemVer version is valid.
*
* @param version - A potential version.
* @returns `true` if the version is valid, and `false` otherwise.
*/
export declare function isValidSemVerVersion(version: unknown): version is SemVerVersion;
/**
* Checks whether a SemVer version range is valid.
*
* @param versionRange - A potential version range.
* @returns `true` if the version range is valid, and `false` otherwise.
*/
export declare function isValidSemVerRange(versionRange: unknown): versionRange is SemVerRange;
/**
* Asserts that a value is a valid concrete SemVer version.
*
* @param version - A potential SemVer concrete version.
*/
export declare function assertIsSemVerVersion(version: unknown): asserts version is SemVerVersion;
/**
* Asserts that a value is a valid SemVer range.
*
* @param range - A potential SemVer range.
*/
export declare function assertIsSemVerRange(range: unknown): asserts range is SemVerRange;
/**
* Checks whether a SemVer version is greater than another.
*
* @param version1 - The left-hand version.
* @param version2 - The right-hand version.
* @returns `version1 > version2`.
*/
export declare function gtVersion(version1: SemVerVersion, version2: SemVerVersion): boolean;
/**
* Checks whether a SemVer version is greater than all possibilities in a range.
*
* @param version - A SemvVer version.
* @param range - The range to check against.
* @returns `version > range`.
*/
export declare function gtRange(version: SemVerVersion, range: SemVerRange): boolean;
/**
* Returns whether a SemVer version satisfies a SemVer range.
*
* @param version - The SemVer version to check.
* @param versionRange - The SemVer version range to check against.
* @returns Whether the version satisfied the version range.
*/
export declare function satisfiesVersionRange(version: SemVerVersion, versionRange: SemVerRange): boolean;
export {};
//# sourceMappingURL=versions.d.cts.map