import { Version } from "./Version.js";
/**
 * Represents a <a href="https://semver.org/">Sematic Version</a>.
 *
 * <p>Compared to a regular {@link Version}, this type of version receives better support
 * for version comparisons in dependency notations, and is preferred.</p>
 *
 * @see Version
 */
export declare abstract class SemanticVersion extends Version {
    /**
     * The value of {@linkplain #getVersionComponent(int) version component} that indicates
     * a {@linkplain #hasWildcard() wildcard}.
     */
    static COMPONENT_WILDCARD: number;
    /**
     * Returns the number of components in this version.
     *
     * <p>For example, {@code 1.3.x} has 3 components.</p>
     *
     * @return the number of components
     */
    abstract getVersionComponentCount(): number;
    /**
     * Returns the version component at {@code pos}.
     *
     * <p>May return {@link #COMPONENT_WILDCARD} to indicate a wildcard component.</p>
     *
     * <p>If the pos exceeds the number of components, returns {@link #COMPONENT_WILDCARD}
     * if the version {@linkplain #hasWildcard() has wildcard}; otherwise returns {@code 0}.</p>
     *
     * @param pos - the position to check
     * @return the version component
     */
    abstract getVersionComponent(pos: number): number;
    /**
     * Returns the prerelease key in the version notation.
     *
     * <p>The prerelease key is indicated by a {@code -} before a {@code +} in
     * the version notation.</p>
     *
     * @return the optional prerelease key
     */
    abstract getPrereleaseKey(): string | null;
    /**
     * Returns the build key in the version notation.
     *
     * <p>The build key is indicated by a {@code +} in the version notation.</p>
     *
     * @return the optional build key
     */
    abstract getBuildKey(): string | null;
    /**
     * Returns if a wildcard notation is present in this version.
     *
     * <p>A wildcard notation is a {@code x}, {@code X}, or {@code *} in the version string,
     * such as {@code 2.5.*}.</p>
     *
     * @return whether this version has a wildcard notation
     */
    abstract hasWildcard(): boolean | undefined;
}
