/** @module run */
import { AnyValueMap } from 'pip-services4-commons-node';
import { ConfigParams } from '../config/ConfigParams';
/**
 * Contains map with execution parameters.
 *
 * In general, this map may contain non-serializable values.
 * And in contrast with other maps, its getters and setters
 * support dot notation and able to access properties
 * in the entire object graph.
 *
 * This class is often use to pass execution and notification
 * arguments, and parameterize classes before execution.
 *
 * @see [[IParameterized]]
 * @see [[AnyValueMap]]
 */
export declare class Parameters extends AnyValueMap {
    /**
     * Creates a new instance of the map and assigns its value.
     *
     * @param value     (optional) values to initialize this map.
     */
    constructor(map?: any);
    /**
     * Gets a map element specified by its key.
     *
     * The key can be defined using dot notation
     * and allows to recursively access elements of elements.
     *
     * @param key     a key of the element to get.
     * @returns       the value of the map element.
     */
    get(key: string): any;
    /**
     * Puts a new value into map element specified by its key.
     *
     * The key can be defined using dot notation
     * and allows to recursively access elements of elements.
     *
     * @param key       a key of the element to put.
     * @param value     a new value for map element.
     */
    put(key: string, value: any): any;
    /**
     * Converts map element into an Parameters or returns null if conversion is not possible.
     *
     * @param key       a key of element to get.
     * @returns Parameters value of the element or null if conversion is not supported.
     */
    getAsNullableParameters(key: string): Parameters;
    /**
     * Converts map element into an Parameters or returns empty Parameters if conversion is not possible.
     *
     * @param key       a key of element to get.
     * @returns Parameters value of the element or empty Parameters if conversion is not supported.
     */
    getAsParameters(key: string): Parameters;
    /**
     * Converts map element into an Parameters or returns default value if conversion is not possible.
     *
     * @param key       a key of element to get.
     * @param defaultValue  the default value
     * @returns Parameters value of the element or default value if conversion is not supported.
     */
    getAsParametersWithDefault(key: string, defaultValue: Parameters): Parameters;
    /**
     * Checks if this map contains an element with specified key.
     *
     * The key can be defined using dot notation
     * and allows to recursively access elements of elements.
     *
     * @param key     a key to be checked
     * @returns       true if this map contains the key or false otherwise.
     */
    containsKey(key: string): boolean;
    /**
     * Overrides parameters with new values from specified Parameters
     * and returns a new Parameters object.
     *
     * @param parameters        Parameters with parameters to override the current values.
     * @param recursive            (optional) true to perform deep copy, and false for shallow copy. Default: false
     * @returns                    a new Parameters object.
     *
     * @see [[setDefaults]]
     */
    override(parameters: Parameters, recursive?: boolean): Parameters;
    /**
     * Set default values from specified Parameters and returns a new Parameters object.
     *
     * @param defaultParameters    Parameters with default parameter values.
     * @param recursive            (optional) true to perform deep copy, and false for shallow copy. Default: false
     * @returns                        a new Parameters object.
     *
     * @see [[override]]
     */
    setDefaults(defaultParameters: Parameters, recursive?: boolean): Parameters;
    /**
     * Assigns (copies over) properties from the specified value to this map.
     *
     * @param value     value whose properties shall be copied over.
     */
    assignTo(value: any): void;
    /**
     * Picks select parameters from this Parameters and returns them as a new Parameters object.
     *
     * @param paths     keys to be picked and copied over to new Parameters.
     * @returns a new Parameters object.
     */
    pick(...paths: string[]): Parameters;
    /**
     * Omits selected parameters from this Parameters and returns the rest as a new Parameters object.
     *
     * @param paths     keys to be omitted from copying over to new Parameters.
     * @returns a new Parameters object.
     */
    omit(...paths: string[]): Parameters;
    /**
     * Converts this map to JSON object.
     *
     * @returns    a JSON representation of this map.
     */
    toJson(): string;
    /**
     * Creates a new Parameters object filled with key-value pairs from specified object.
     *
     * @param value        an object with key-value pairs used to initialize a new Parameters.
     * @returns            a new Parameters object.
     */
    static fromValue(value: any): Parameters;
    /**
     * Creates a new Parameters object filled with provided key-value pairs called tuples.
     * Tuples parameters contain a sequence of key1, value1, key2, value2, ... pairs.
     *
     * @param tuples    the tuples to fill a new Parameters object.
     * @returns            a new Parameters object.
     *
     * @see [[AnyValueMap.fromTuplesArray]]
     */
    static fromTuples(...tuples: any[]): Parameters;
    /**
     * Merges two or more Parameters into one. The following Parameters override
     * previously defined parameters.
     *
     * @param configs     a list of Parameters objects to be merged.
     * @returns            a new Parameters object.
     *
     * @see [[AnyValueMap.fromMaps]]
     */
    static mergeParams(...parameters: Parameters[]): Parameters;
    /**
     * Creates new Parameters from JSON object.
     *
     * @param json     a JSON string containing parameters.
     * @returns a new Parameters object.
     *
     * @see [[JsonConverter.toNullableMap]]
     */
    static fromJson(json: string): Parameters;
    /**
     * Creates new Parameters from ConfigMap object.
     *
     * @param config     a ConfigParams that contain parameters.
     * @returns            a new Parameters object.
     *
     * @see [[ConfigParams]]
     */
    static fromConfig(config: ConfigParams): Parameters;
}
