import type { FetchEngineCore } from '../engine/types.ts';
import type { HttpMethods, DictAndT } from '../types.ts';
import { PropertyStore } from './store.ts';
/**
* Manages URL parameters for FetchEngine with event emission.
*
* Wraps PropertyStore with FetchEngine-specific event emission.
* Pulls initial params and validation from engine options.
*
* @template P - Params type
*
* @example
* ```typescript
* // Access via engine.params
* engine.params.set('apiKey', 'abc123');
* engine.params.set({ page: '1', limit: '10' });
*
* // Method-specific params
* engine.params.set('format', 'json', 'GET');
*
* // Remove params
* engine.params.remove('apiKey');
* engine.params.remove(['page', 'limit']);
*
* // Check if param exists
* if (engine.params.has('apiKey')) { ... }
*
* // Get resolved params for a request
* const params = engine.params.resolve('GET', { extra: 'value' });
* ```
*/
export declare class ParamsManager
{
constructor(engine: FetchEngineCore);
/**
* Set a param value globally or for a specific method.
*
* @example
* ```typescript
* engine.params.set('apiKey', 'abc123');
* engine.params.set('format', 'json', 'GET');
* ```
*/
set(key: string, value: string, method?: HttpMethods): void;
/**
* Set multiple param values globally or for a specific method.
*
* @example
* ```typescript
* engine.params.set({ page: '1', limit: '10' });
* engine.params.set({ format: 'json' }, 'GET');
* ```
*/
set(params: Partial>, method?: HttpMethods): void;
/**
* Remove a param globally or for a specific method.
*
* @example
* ```typescript
* engine.params.remove('apiKey');
* engine.params.remove('format', 'GET');
* ```
*/
remove(key: string, method?: HttpMethods): void;
/**
* Remove multiple params globally or for a specific method.
*
* @example
* ```typescript
* engine.params.remove(['page', 'limit']);
* engine.params.remove(['format'], 'GET');
* ```
*/
remove(keys: string[], method?: HttpMethods): void;
/**
* Check if a param exists globally or for a specific method.
*
* @example
* ```typescript
* if (engine.params.has('apiKey')) {
* console.log('API key is set');
* }
* ```
*/
has(key: string, method?: HttpMethods): boolean;
/**
* Resolve the final params for a specific method.
*
* Merges in order: defaults → method overrides → request overrides.
*
* @example
* ```typescript
* const params = engine.params.resolve('GET', { extra: 'value' });
* ```
*/
resolve(method: HttpMethods, requestOverrides?: Partial>): DictAndT;
/**
* Get the default params (without method overrides).
*/
get defaults(): DictAndT
;
/**
* Get all params including method overrides.
*
* @example
* ```typescript
* const all = engine.params.all;
* // { default: { apiKey: '...' }, get: { format: '...' } }
* ```
*/
get all(): {
default: DictAndT
;
} & Record>>;
/**
* Get method-specific params only (not merged with defaults).
*/
forMethod(method: HttpMethods): Partial>;
/**
* Get the underlying PropertyStore for internal use.
*
* Exposed for FetchEngineCore compliance. Internal components
* (executor, policies) access the store directly for resolution.
*
* @internal
*/
get $store(): PropertyStore>;
}