autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
93 lines (92 loc) • 3.63 kB
TypeScript
/**
* SearchRepoAdapter — SearchEngine 用的轻量级仓储适配器
*
* 当完整的 KnowledgeRepositoryImpl / RecipeSourceRefRepositoryImpl 不可用时
* (例如单元测试中只传入 raw db),SearchEngine 自动使用这些适配器。
* 放在 lib/repository/ 下,允许使用 raw SQL(lint 白名单目录)。
*/
import type { SearchDb } from '../../service/search/SearchTypes.js';
/** 解包 DatabaseConnection → raw SearchDb(若已是 raw db 则直接返回) */
export declare function unwrapSearchDb(db: SearchDb & {
getDb?: () => SearchDb;
}): SearchDb;
/**
* 通用 db 解包:接受 raw db 或 { getDb() } wrapper,返回 raw db。
* 可用于 SearchDb、DatabaseLike 等不同 db 类型的构造函数。
*/
export declare function unwrapRawDb<T>(db: T | (T & {
getDb(): T;
})): T;
/** SearchEngine 需要的 KnowledgeRepo 最小接口 */
export interface SearchKnowledgeRepo {
findNonDeprecatedSync(): Record<string, unknown>[];
keywordSearchSync(pattern: string, limit: number): Record<string, unknown>[];
findByIdsDetailSync(ids: string[]): Record<string, unknown>[];
findUpdatedSinceSync(sinceIso: string): Record<string, unknown>[];
}
/** SearchEngine 需要的 SourceRefRepo 最小接口 */
export interface SearchSourceRefRepo {
findActiveByRecipeIds(ids: string[]): Array<{
recipeId: string;
sourcePath: string;
status: string;
newPath: string | null;
}>;
}
/**
* Raw-db 适配器:实现 SearchKnowledgeRepo 接口
* 仅在 KnowledgeRepositoryImpl 不可用时降级使用。
*/
export declare class RawDbKnowledgeAdapter implements SearchKnowledgeRepo {
#private;
constructor(db: SearchDb);
findNonDeprecatedSync(): import("../../service/search/SearchTypes.js").DbRow[];
keywordSearchSync(pattern: string, limit: number): import("../../service/search/SearchTypes.js").DbRow[];
findByIdsDetailSync(ids: string[]): import("../../service/search/SearchTypes.js").DbRow[];
findUpdatedSinceSync(sinceIso: string): import("../../service/search/SearchTypes.js").DbRow[];
}
/**
* Raw-db 适配器:实现 SearchSourceRefRepo 接口
* 仅在 RecipeSourceRefRepositoryImpl 不可用时降级使用。
*/
export declare class RawDbSourceRefAdapter implements SearchSourceRefRepo {
#private;
constructor(db: SearchDb);
findActiveByRecipeIds(ids: string[]): {
recipeId: string;
sourcePath: string;
status: string;
newPath: string | null;
}[];
}
/** GuardCheckEngine 需要的 KnowledgeRepo 最小接口 */
export interface GuardKnowledgeRepo {
findGuardRulesSync(lifecycles: readonly string[]): Record<string, unknown>[];
incrementGuardHitsSync(id: string, hits: number): void;
}
/**
* Raw-db 适配器:实现 GuardKnowledgeRepo 接口
* 仅在 KnowledgeRepositoryImpl 不可用时降级使用。
*/
export declare class RawDbGuardAdapter implements GuardKnowledgeRepo {
#private;
constructor(db: {
prepare(sql: string): {
all(...args: unknown[]): Record<string, unknown>[];
run(...args: unknown[]): unknown;
};
});
findGuardRulesSync(lifecycles: readonly string[]): Record<string, unknown>[];
incrementGuardHitsSync(id: string, hits: number): void;
}
/** 从 raw db 查询非 deprecated 的基本条目信息(SyncCoordinator 对账用) */
export declare function queryNonDeprecatedEntries(db: {
prepare(sql: string): {
all(): Array<Record<string, unknown>>;
};
}): Array<{
id: string;
title?: string;
content?: string;
kind?: string;
}>;