/** * SearchParamsNormalizer - Normalizes search operation parameters * * Transforms raw search input parameters into the format expected * by PortfolioHandler.searchAll(). * * Handles: * - Scope → sources array conversion * - Pagination (offset/limit → page/pageSize) * - Sort parameter normalization * - Filter parameter extraction * * @see Issue #243 - Unified search with normalizer architecture */ import type { Normalizer, NormalizerContext, NormalizerResult, NormalizedSearchParams } from './types.js'; /** * Raw input parameters for search operations. */ interface RawSearchParams { query?: unknown; scope?: unknown; type?: unknown; page?: unknown; limit?: unknown; pagination?: unknown; sort?: unknown; sortBy?: unknown; sortOrder?: unknown; filters?: unknown; options?: unknown; elementType?: unknown; fuzzyMatch?: unknown; includeKeywords?: unknown; includeTags?: unknown; includeTriggers?: unknown; includeDescriptions?: unknown; } /** * Normalizer for search operation parameters. * * Converts various input formats into a consistent structure * for the search handler. * * @example * ```typescript * const normalizer = new SearchParamsNormalizer(); * const result = normalizer.normalize({ * query: 'creative writer', * scope: ['local', 'collection'], * pagination: { offset: 20, limit: 10 } * }, context); * * // Result: * // { * // success: true, * // params: { * // query: 'creative writer', * // sources: ['local', 'collection'], * // page: 3, * // pageSize: 10 * // } * // } * ``` */ export declare class SearchParamsNormalizer implements Normalizer { readonly name = "searchParams"; /** * Normalize search parameters. * * @param params - Raw input parameters * @param _context - Operation context (unused but available for future use) * @returns Normalized parameters or error */ normalize(params: RawSearchParams, _context: NormalizerContext): NormalizerResult; /** * Normalize scope parameter to sources array. * * @param scope - Raw scope value (string, array, 'all', or undefined) * @returns Normalized sources array or error * * @example * normalizeScope(undefined) // => ['local', 'github', 'collection'] * normalizeScope('all') // => ['local', 'github', 'collection'] * normalizeScope('local') // => ['local'] * normalizeScope(['local', 'collection']) // => ['local', 'collection'] */ private normalizeScope; /** * Validate that all scope values are valid. * * @param scopes - Array of scope values to validate * @returns Validation result */ private validateScopes; /** * Normalize pagination parameters. * * Handles both: * - Pagination object: { offset, limit } * - Top-level params: page, limit * * Converts offset-based to page-based pagination. * * @param params - Raw parameters * @returns Normalized page and pageSize * * @example * // Offset-based * normalizePagination({ pagination: { offset: 20, limit: 10 } }) * // => { page: 3, pageSize: 10 } * * // Page-based * normalizePagination({ page: 2, limit: 25 }) * // => { page: 2, pageSize: 25 } */ private normalizePagination; /** * Normalize sort parameters. * * Handles: * - sort object: { field, order } * - sortBy/sortOrder top-level params * * @param params - Raw parameters * @returns Normalized sortBy and sortOrder * * @example * normalizeSort({ sort: { field: 'name', order: 'desc' } }) * // => { sortBy: 'name', sortOrder: 'desc' } * * normalizeSort({ sortBy: 'created', sortOrder: 'asc' }) * // => { sortBy: 'created', sortOrder: 'asc' } */ private normalizeSort; /** * Normalize filter parameters. * * Extracts and validates filter values. * * @param filters - Raw filters object * @returns Normalized filters * * @example * normalizeFilters({ tags: ['ai', 'creative'], author: 'user123' }) * // => { tags: ['ai', 'creative'], author: 'user123' } */ private normalizeFilters; /** * Normalize search options. * * Handles both options object and legacy top-level boolean params. * * @param params - Raw parameters * @returns Normalized options */ private normalizeOptions; /** * Normalize element type parameter. * * Handles both 'type' and legacy 'elementType' params. * * @param params - Raw parameters * @returns Normalized element type or undefined */ private normalizeElementType; } export {}; //# sourceMappingURL=SearchParamsNormalizer.d.ts.map