UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

64 lines (63 loc) 2.16 kB
/** * RecipeReadinessChecker — 共享 Recipe-Ready 字段完整性检查 * * ⚠️ 已重构为 UnifiedValidator 的薄封装。 * 保留此模块以兼容旧调用方签名,新代码请直接使用 UnifiedValidator。 * * @param item 候选数据(扁平字段或含 metadata 的对象) * @returns } */ import { UnifiedValidator } from './UnifiedValidator.js'; const STANDARD_CATEGORIES = [ 'View', 'Service', 'Tool', 'Model', 'Network', 'Storage', 'UI', 'Utility', ]; /** Bootstrap 等特殊来源使用的 category 白名单 */ const WHITELISTED_CATEGORIES = ['bootstrap', 'knowledge', 'general']; /** * 检查候选是否具备直接提升为 Recipe 的所有必要字段。 * * 薄封装: 内部调用 UnifiedValidator,将结果转换为旧格式 { ready, missing, suggestions }。 * * @param item 扁平字段对象(title, trigger, description …) * @returns } */ export function checkRecipeReadiness(item) { const validator = new UnifiedValidator(); const result = validator.validate(item, { skipUniqueness: true, // readiness 检查不做去重 }); // 转换为旧格式: errors → missing 字段名, warnings → suggestions const missing = []; const suggestions = []; for (const error of result.errors) { // 从错误消息中提取字段名: "缺少必填字段: fieldName — rule" const match = error.match(/缺少必填字段:\s*(\S+)/); if (match) { missing.push(match[1]); } suggestions.push(error); } for (const warning of result.warnings) { suggestions.push(warning); } return { ready: missing.length === 0, missing, suggestions }; } /** 从 Candidate 的 metadata 对象展开为扁平字段后检查 readiness。 */ export function checkReadinessFromCandidate(candidate) { const meta = (candidate.metadata || {}); const flat = { ...meta, code: candidate.code, language: candidate.language, category: candidate.category, }; return checkRecipeReadiness(flat); } export { STANDARD_CATEGORIES, WHITELISTED_CATEGORIES };