search-syntax-pro/docs/archived-specs/search-engine-adapters-expansion/00-repository-context.md
Zain 4c52de98ad feat(search): 支持Yandex和DuckDuckGo搜索引擎
- 新增Yandex和DuckDuckGo搜索引擎适配器配置
- 更新manifest.json添加新搜索引擎权限
- 优化URL工具类支持更多搜索引擎参数解析
- 移除调试日志输出
- 修复百度搜索输入框选择器兼容性问题
- 添加文档归档和历史需求规范

版本升级至1.8.6
2025-12-02 16:28:56 +08:00

6.8 KiB

Repository Context Analysis

Project Overview

  • Project Name: SearchSyntax Pro (ssp-smart-search-plugin)
  • Version: 1.8.1
  • Type: Chrome Extension (Browser Extension)
  • Description: 搜索语法可视化工具 - 支持10个搜索引擎和28个高级搜索语法功能

Technology Stack

Core Technologies

  • Language: TypeScript 5.x
  • Framework: React 18.x
  • Build Tool: Vite 5.x
  • Styling: Tailwind CSS 3.x
  • Extension API: Chrome Extension Manifest V3

Key Dependencies

  • UI Components: @headlessui/react, @dnd-kit (drag-and-drop)
  • Date Handling: date-fns
  • Build: @crxjs/vite-plugin (Chrome extension support)
  • Testing: Jest, @testing-library/react, Playwright

Development Tools

  • Type Checking: TypeScript
  • Linting: ESLint
  • Formatting: Prettier
  • Testing: Jest (unit), Playwright (E2E)

Project Structure

src/
├── components/          # React组件
├── services/           # 业务逻辑服务
│   ├── adapters/       # 搜索引擎适配器 ⭐ 核心扩展点
│   └── storage.ts      # 数据存储服务
├── hooks/              # 自定义React Hooks
├── types/              # TypeScript类型定义
├── i18n/               # 国际化翻译文件
├── popup/              # 弹窗界面
├── options/            # 设置页面
├── background/         # 后台脚本
└── content/            # 内容脚本

Search Engine Adapter Architecture

Existing Adapters (10 engines)

基于文件系统扫描结果:

  1. ✅ baidu.ts - 百度
  2. ✅ google.ts - 谷歌
  3. ✅ bing.ts - 必应
  4. ✅ duckduckgo.ts - DuckDuckGo
  5. ✅ brave.ts - Brave Search
  6. ✅ yandex.ts - Yandex
  7. ✅ twitter.ts - X (Twitter)
  8. ✅ reddit.ts - Reddit
  9. ✅ github.ts - GitHub
  10. ✅ stackoverflow.ts - Stack Overflow

Adapter Pattern Analysis

接口定义: SearchEngineAdapter (在 types/ 目录) 工厂模式: factory.ts - 适配器注册和创建 核心方法:

  • getName(): 返回引擎名称
  • getBaseUrl(): 返回基础搜索URL
  • buildQuery(params): 构建搜索查询URL
  • validateParams(params): 验证搜索参数
  • getSupportedSyntax(): 返回支持的语法类型
  • getSupportedFeatures(): 返回支持的UI功能特性
  • getFeatureGroups(): 返回功能分组配置

Code Patterns & Conventions

1. 国际化支持模式

async function getCurrentLanguage(): Promise<Language> {
  const result = await chrome.storage.local.get('user_settings')
  return result.user_settings?.language || 'zh-CN'
}

const t = (key: string, vars?) => translate(language, key, vars)

2. 多关键词支持模式 (🔥 重要)

// 支持单个或多个关键词
const sites = params.sites?.filter(s => s.trim()) ||
              (params.site ? [params.site] : [])
if (sites.length > 0) {
  const siteQuery = sites
    .map(s => `site:${this.cleanSiteDomain(s.trim())}`)
    .join(' OR ')
  query += sites.length > 1 ? ` (${siteQuery})` : ` ${siteQuery}`
}

3. 语法降级处理

// Bing适配器示例
degradeSyntax(params: SearchParams): SearchParams {
  const degradedParams = { ...params }
  if (params.cacheSite) {
    console.warn('Bing不支持cache语法,该参数将被忽略')
    degradedParams.cacheSite = undefined
  }
  return degradedParams
}

4. 验证错误消息国际化

const language = await getCurrentLanguage()
const t = (key: string, vars?) => translate(language, key, vars)

if (!params.keyword.trim() && !params.exactMatch?.trim()) {
  errors.push(t('adapter.validation.keywordRequired'))
}

Internationalization (i18n) Architecture

Translation System

  • Languages: 中文(zh-CN) + English(en-US)
  • Translation Keys: 1000+ 条翻译键值对
  • Structure: 分类组织 (common, searchForm, options, shortcuts, etc.)

Key Translation Categories

  1. common.searchEngines.* - 搜索引擎名称
  2. adapter.validation.* - 适配器验证消息
  3. searchForm.* - 搜索表单UI文本
  4. options.* - 设置页面文本

Translation Pattern

export function translate(
  language: Language,
  key: string,
  variables?: Record<string, string | number>,
  fallback?: string
): string {
  // 支持变量插值: {engine}, {fileType}, {count} 等
}

Integration Points for New Adapters

1. Adapter Implementation

Location: src/services/adapters/{engine}.ts Required: 实现 SearchEngineAdapter 接口

2. Factory Registration

Location: src/services/adapters/factory.ts

case 'new-engine':
  return new NewEngineAdapter()

3. Type Definitions

Location: src/types/

  • 添加新引擎到 SearchEngine 类型
  • 更新相关接口定义

4. i18n Translation Keys

Location: src/i18n/translations.ts

  • common.searchEngines.{engine} - 中英文引擎名称
  • adapter.validation.* - 特定验证消息

5. UI Components

根据需要更新组件以支持新引擎的特殊语法

Development Workflow

Build Commands

npm run dev          # 开发模式 (热重载)
npm run build        # 生产构建
npm run type-check   # 类型检查
npm run lint         # 代码检查
npm run test         # 单元测试
npm run test:e2e     # E2E测试

Quality Standards

  • ✅ TypeScript类型安全
  • ✅ ESLint代码规范
  • ✅ 单元测试覆盖
  • ✅ E2E测试验证
  • ✅ 国际化完整性

Constraints & Considerations

1. 浏览器兼容性

  • 必须兼容 Chrome/Edge (Manifest V3)
  • 使用 Chrome Storage API

2. 性能要求

  • 适配器需快速构建查询 (<100ms)
  • 验证逻辑应高效

3. 用户体验

  • 所有文本必须国际化
  • 错误消息应友好且具体
  • 支持语法降级和警告

4. 代码组织

  • 遵循现有命名约定
  • 保持与现有适配器一致的结构
  • 复用公共工具方法

Testing Strategy

Unit Tests

  • 适配器查询构建逻辑
  • 参数验证规则
  • 语法支持检查

E2E Tests (Playwright)

  • 完整搜索流程
  • 多引擎切换
  • UI交互验证

Current Feature Gaps

根据搜索网络信息,需要添加的新搜索引擎:

  1. Yahoo - 兼容Bing语法
  2. Startpage - 兼容Google语法,隐私友好
  3. Ecosia - 兼容Google/Bing,环保理念
  4. Qwant - 欧洲隐私搜索
  5. Naver - 韩国市场
  6. Sogou (搜狗) - 中国市场
  7. 360搜索 - 中国市场
  8. Perplexity AI - AI搜索
  9. You.com - AI搜索,程序员友好

Repository Best Practices

Code Style

  • 使用 4 空格缩进
  • 优先使用箭头函数
  • 明确的类型注解
  • JSDoc注释用于公共方法

Git Workflow

  • 功能分支开发
  • 详细的 commit 消息
  • 发布前版本号更新

Documentation

  • README保持更新
  • 代码内联注释
  • 类型定义即文档