import JvmFeederBuilder = io.gatling.javaapi.core.FeederBuilder;
import JvmFeederBuilderFileBased = io.gatling.javaapi.core.FeederBuilder$FileBased;
import { Wrapper } from "./common";
export interface FeederBuilder<T> extends Wrapper<JvmFeederBuilder<T>> {
    /**
     * Set a queue strategy. Records will be provided in the same order as defined in the underlying
     * source. A given record will only be provided once. The run will be immediately stopped if the
     * feeder runs out of records.
     *
     * @returns a new FeederBuilder
     */
    queue(): FeederBuilder<T>;
    /**
     * Set a random strategy. Records will be provided in a random order, unrelated to the order in
     * the underlying source. A given record can be provided multiple times. Such feeder will never
     * run out of records.
     *
     * @returns a new FeederBuilder
     */
    random(): FeederBuilder<T>;
    /**
     * Set a shuffle strategy. Records will be provided in a random order, unrelated to the order in
     * the underlying source. A given record will only be provided once. The run will be immediately
     * stopped if the feeder runs out of records.
     *
     * @returns a new FeederBuilder
     */
    shuffle(): FeederBuilder<T>;
    /**
     * Set a circular strategy. Records will be provided in the same order as defined in the
     * underlying source. Once the last record of the underlying source is reached, the feeder will go
     * back to the first record. A given record can be provided multiple times. Such feeder will never
     * run out of records.
     *
     * @returns a new FeederBuilder
     */
    circular(): FeederBuilder<T>;
    /**
     * Provide a function to transform records as defined in the underlying source
     *
     * @param f - the transformation function
     * @returns a new FeederBuilder
     */
    transform(f: (name: string, value: T) => unknown): FeederBuilder<unknown>;
    /**
     * Return the number of records more efficiantly than readRecords().size().
     *
     * @returns the number of recordss
     */
    recordsCount(): number;
    /**
     * Distribute data evenly amongst all the injectors of a Gatling Enterprise cluster. Only
     * effective when the test is running with Gatling Enterprise, noop otherwise.
     *
     * @returns a new FeederBuilder
     */
    shard(): FeederBuilder<T>;
}
export interface FileBasedFeederBuilder<T> extends FeederBuilder<T> {
    /**
     * Advice to unzip the underlying source because it's a zip or tar file
     *
     * @returns a new FileBased
     */
    unzip(): FileBasedFeederBuilder<T>;
}
export declare const wrapFileBasedFeederBuilder: <T>(_underlying: JvmFeederBuilderFileBased<T>) => FileBasedFeederBuilder<T>;
export interface CsvFunction {
    /**
     * Bootstrap a new {@link https://datatracker.ietf.org/doc/html/rfc4180 | CSV file} based feeder
     *
     * @param filePath - the path of the file, relative to the root of the resources folder
     * @returns a new feeder
     */
    (filePath: string): FileBasedFeederBuilder<string>;
    /**
     * Bootstrap a new {@link https://datatracker.ietf.org/doc/html/rfc4180 | CSV file} based feeder
     *
     * @param filePath - the path of the file, relative to the root of the resources folder
     * @param quoteChar - the quote char to wrap values containing special characters
     * @returns a new feeder
     */
    (filePath: string, quoteChar: string): FileBasedFeederBuilder<string>;
}
export declare const csv: CsvFunction;
export interface SsvFunction {
    /**
     * Bootstrap a new {@link https://datatracker.ietf.org/doc/html/rfc4180 | CSV file} based feeder, where the separator
     * is a semi-colon
     *
     * @param filePath - the path of the file, relative to the root of the resources folder
     * @returns a new feeder
     */
    (filePath: string): FileBasedFeederBuilder<string>;
    /**
     * Bootstrap a new {@link https://datatracker.ietf.org/doc/html/rfc4180 | CSV file} based feeder, where the separator
     * is a semi-colon
     *
     * @param filePath - the path of the file, relative to the root of the resources folder
     * @param quoteChar - the quote char to wrap values containing special characters (must be a single character)
     * @returns a new feeder
     */
    (filePath: string, quoteChar: string): FileBasedFeederBuilder<string>;
}
export declare const ssv: SsvFunction;
export interface TsvFunction {
    /**
     * Bootstrap a new {@link https://datatracker.ietf.org/doc/html/rfc4180 | CSV file} based feeder, where the separator
     * is a tab
     *
     * @param filePath - the path of the file, relative to the root of the resources folder
     * @returns a new feeder
     */
    (filePath: string): FileBasedFeederBuilder<string>;
    /**
     * Bootstrap a new {@link https://datatracker.ietf.org/doc/html/rfc4180 | CSV file} based feeder, where the separator
     * is a tab
     *
     * @param filePath - the path of the file, relative to the root of the resources folder
     * @param quoteChar - the quote char to wrap values containing special characters (must be a single character)
     * @returns a new feeder
     */
    (filePath: string, quoteChar: string): FileBasedFeederBuilder<string>;
}
export declare const tsv: TsvFunction;
export interface SeparatedValuesFunction {
    /**
     * Bootstrap a new {@link https://datatracker.ietf.org/doc/html/rfc4180 | CSV file} based feeder, where the separator
     * is a tab
     *
     * @param filePath - the path of the file, relative to the root of the resources folder
     * @param separator - the provided separator char (must be a single character)
     * @returns a new feeder
     */
    (filePath: string, separator: string): FileBasedFeederBuilder<string>;
    /**
     * Bootstrap a new {@link https://datatracker.ietf.org/doc/html/rfc4180 | CSV file} based feeder, where the separator
     * is a tab
     *
     * @param filePath - the path of the file, relative to the root of the resources folder
     * @param separator - the provided separator char (must be a single character)
     * @param quoteChar - the quote char to wrap values containing special characters (must be a single character)
     * @returns a new feeder
     */
    (filePath: string, separator: string, quoteChar: string): FileBasedFeederBuilder<string>;
}
export declare const separatedValues: SeparatedValuesFunction;
/**
 * Bootstrap a new JSON file based feeder
 *
 * @param filePath - the path of the file, relative to the root of the resources folder
 * @returns a new feeder
 */
export declare const jsonFile: (filePath: string) => FileBasedFeederBuilder<any>;
/**
 * Bootstrap a new JSON API based feeder
 *
 * @param url - the url of the API
 * @returns a new feeder
 */
export declare const jsonUrl: (url: string) => FeederBuilder<any>;
/**
 * Bootstrap a new in-memory array of Maps based feeder
 *
 * @param data - the in-memory data
 * @returns a new feeder
 */
export declare const arrayFeeder: (data: Array<Record<string, unknown>>) => FeederBuilder<unknown>;
