@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
168 lines • 4.96 kB
TypeScript
/**
* 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<RawSearchParams, NormalizedSearchParams> {
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<NormalizedSearchParams>;
/**
* 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