import { type BooleanValidator, type StringValidator, type NumberValidator, type ArrayValidator, type SetValidator, type MapValidator, type UnknownValidator, JavascriptValidatorsImpl, type ConfigurationUpdater } from "./internal/internal.mjs";
/**
 * Validates the state of a number.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns a validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function requireThatNumber<T extends number | undefined | null>(value: T, name: string): NumberValidator<T>;
/**
 * Validates the state of a boolean.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns a validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function requireThatBoolean<T extends boolean | undefined | null>(value: T, name: string): BooleanValidator<T>;
/**
 * Validates the state of an array.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @typeParam E - the type elements in the array
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function requireThatArray<T extends E[] | undefined | null, E>(value: T, name: string): ArrayValidator<T, E>;
/**
 * Validates the state of a set.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @typeParam E - the type elements in the set
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function requireThatSet<T extends Set<E> | undefined | null, E>(value: T, name: string): SetValidator<T, E>;
/**
 * Validates the state of a map.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @typeParam K - the type of keys in the map
 * @typeParam V - the type of values in the map
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function requireThatMap<T extends Map<K, V> | undefined | null, K, V>(value: T, name: string): MapValidator<T, K, V>;
/**
 * Validates the state of a string.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function requireThatString<T extends string | undefined | null>(value: T, name: string): StringValidator<T>;
/**
 * Validates the state of an unknown value or a value that does not have a specialized validator.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function requireThat<T>(value: T, name: string): UnknownValidator<T>;
/**
 * Validates the state of a number.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function assertThatNumber<T extends number | undefined | null>(value: T, name?: string): NumberValidator<T>;
/**
 * Validates the state of a boolean.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function assertThatBoolean<T extends boolean | undefined | null>(value: T, name?: string): BooleanValidator<T>;
/**
 * Validates the state of an array.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @typeParam E - the type elements in the array
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function assertThatArray<T extends E[] | undefined | null, E>(value: T, name?: string): ArrayValidator<T, E>;
/**
 * Validates the state of a set.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @typeParam E - the type elements in the set
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function assertThatSet<T extends Set<E> | undefined | null, E>(value: T, name?: string): SetValidator<T, E>;
/**
 * Validates the state of a map.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @typeParam K - the type of keys in the map
 * @typeParam V - the type of values in the map
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function assertThatMap<T extends Map<K, V> | undefined | null, K, V>(value: T, name?: string): MapValidator<T, K, V>;
/**
 * Validates the state of a string.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function assertThatString<T extends string | undefined | null>(value: T, name?: string): StringValidator<T>;
/**
 * Validates the state of an unknown value or a value that does not have a specialized validator.
 * <p>
 * The returned validator throws an exception immediately if a validation fails. This exception is then
 * converted into an {@link AssertionError}. Exceptions unrelated to validation failures are not converted.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function assertThat<T>(value: T, name?: string): UnknownValidator<T>;
/**
 * Validates the state of a number.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function checkIfNumber<T extends number | undefined | null>(value: T, name: string): NumberValidator<T>;
/**
 * Validates the state of a boolean.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function checkIfBoolean<T extends boolean | undefined | null>(value: T, name: string): BooleanValidator<T>;
/**
 * Validates the state of an array.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @typeParam E - the type elements in the array
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function checkIfArray<T extends E[] | undefined | null, E>(value: T, name: string): ArrayValidator<T, E>;
/**
 * Validates the state of a set.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @typeParam E - the type elements in the array or set
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function checkIfSet<T extends Set<E> | undefined | null, E>(value: T, name: string): SetValidator<T, E>;
/**
 * Validates the state of a map.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @typeParam K - the type of keys in the map
 * @typeParam V - the type of values in the map
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function checkIfMap<T extends Map<K, V>, K, V>(value: T, name: string): MapValidator<T, K, V>;
/**
 * Validates the state of a string.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function checkIfString<T extends string | undefined | null>(value: T, name: string): StringValidator<T>;
/**
 * Validates the state of an unknown value or a value that does not have a specialized validator.
 * <p>
 * The returned validator throws an error immediately if a validation fails.
 *
 * @typeParam T - the type the value
 * @typeParam E - the type elements in the array or set
 * @typeParam K - the type of keys in the map
 * @typeParam V - the type of values in the map
 * @param value - the value
 * @param name - the name of the value
 * @returns validator for the value
 * @throws TypeError  if `name` is `undefined` or `null`
 * @throws RangeError if `name` is empty
 */
declare function checkIf<T>(value: T, name: string): UnknownValidator<T>;
/**
 * Updates the configuration that will be used by new validators.
 *
 * @param updater - a function that updates the configuration
 * @returns this
 * @see {@link JavascriptValidators.newInstance|Creating an independent configuration}
 */
declare function updateConfiguration(updater: (configuration: ConfigurationUpdater) => void): JavascriptValidatorsImpl;
/**
 * Returns the contextual information for validators created out by this factory. The contextual information
 * is a map of key-value pairs that can provide more details about validation failures. For example, if the
 * message is "Password may not be empty" and the map contains the key-value pair
 * `{"username": "john.smith"}`, the error message would be:
 * <p>
 * ```console
 * Password may not be empty
 * username: john.smith
 * ```
 *
 * @returns an unmodifiable map from each entry's name to its value
 */
declare function getContext(): Map<string, unknown>;
/**
 * Sets the contextual information for validators created by this factory.
 * <p>
 * This method adds contextual information to error messages. The contextual information is stored as
 * key-value pairs in a map. Values set by this method may be overridden by
 * {@link ValidatorComponent.withContext}.
 *
 * @param value - the value of the entry
 * @param name  - the name of an entry
 * @returns the underlying validator factory
 * @throws NullPointerError if `name` is not a string
 */
declare function withContext(value: unknown, name: string): JavascriptValidatorsImpl;
/**
 * Removes the contextual information of validators created by this factory.
 *
 * @param name - the parameter name
 * @returns the underlying validator factory
 * @throws NullPointerError     if `name` is not a string
 * @throws IllegalArgumentError if `name` contains leading or trailing whitespace, or is
 * empty
 */
declare function removeContext(name: string): JavascriptValidatorsImpl;
/**
 * Returns the global configuration shared by all validators.
 * <p>
 * <b>NOTE</b>: Updating this configuration affects existing and new validators.
 *
 * @returns the global configuration updater
 */
declare function globalConfiguration(): import("./GlobalConfiguration.mjs").GlobalConfiguration;
export { requireThatNumber, requireThatBoolean, requireThatArray, requireThatSet, requireThatMap, requireThatString, requireThat, assertThatNumber, assertThatBoolean, assertThatArray, assertThatSet, assertThatMap, assertThatString, assertThat, checkIfNumber, checkIfBoolean, checkIfArray, checkIfSet, checkIfMap, checkIfString, checkIf, updateConfiguration, getContext, withContext, removeContext, globalConfiguration };
