/** * Provider normalization and dependency discovery utilities. * * These utilities convert user-facing provider definitions to internal * ProviderRecord format and discover dependencies. */ import type { Token, Type } from '../interfaces/base.interface.js'; import type { ProviderType } from '../interfaces/provider.interface.js'; import { type ProviderRecord } from '../records/provider.record.js'; /** * Token set for reading provider metadata from classes. * Each key maps to a metadata symbol used with reflect-metadata. */ export interface ProviderTokens { /** Token indicating this is a provider class */ type: symbol; /** Token for provider name */ name: symbol; /** Token for provider scope */ scope: symbol; /** Token for provider description */ description?: symbol; /** Token for provider id */ id?: symbol; } /** * Options for creating a provider normalizer. */ export interface ProviderNormalizerOptions { /** * Metadata tokens for reading provider information from decorated classes. */ tokens: ProviderTokens; } /** * Create a provider normalizer function with the given metadata tokens. * * The normalizer converts user-facing provider definitions to internal * ProviderRecord format. By injecting tokens, this works with any * decorator system (FrontMCP, custom, etc.). * * @param options - Normalizer configuration with metadata tokens * @returns A normalizer function * * @example * ```typescript * import { createProviderNormalizer } from '@frontmcp/di'; * * const normalizeProvider = createProviderNormalizer({ * tokens: { * type: Symbol('provider:type'), * name: Symbol('provider:name'), * scope: Symbol('provider:scope'), * } * }); * * const record = normalizeProvider(MyService); * ``` */ export declare function createProviderNormalizer(options: ProviderNormalizerOptions): (item: ProviderType) => ProviderRecord; /** * Discover dependencies for a provider record during the discovery phase. * * @param rec - The provider record * @param localTokens - Set of locally registered tokens * @param depsOfClassFn - Function to discover class dependencies * @returns Array of dependency tokens */ export declare function providerDiscoveryDeps(rec: ProviderRecord, localTokens: Set, depsOfClassFn: (klass: Type, phase: 'discovery' | 'invocation') => Type[]): Token[]; /** * Get invocation tokens for a provider record. * * These are the tokens that need to be resolved when instantiating the provider. * * @param rec - The provider record * @param depsOfClassFn - Function to discover class dependencies * @returns Array of dependency tokens */ export declare function providerInvocationTokens(rec: ProviderRecord, depsOfClassFn: (klass: Type, phase: 'discovery' | 'invocation') => Type[]): Token[];