web.ts
 1  import type { SlashCommand } from './ast'
 2  import type { ParsedSlashInput } from './lexer'
 3  
 4  export function parseWebSlashCommand(input: ParsedSlashInput): SlashCommand | null {
 5    const { name, rest } = input
 6  
 7    let searchType: 'web' | 'image' | 'news' | 'video' | undefined
 8    let query = rest
 9  
10    const flagMatch = rest.match(/^(--\w+)\s*(.*)$/)
11    if (flagMatch) {
12      const flag = flagMatch[1]
13      const remaining = flagMatch[2]
14      if (flag === '--image' || flag === '--news' || flag === '--video') {
15        searchType = flag.slice(2) as 'image' | 'news' | 'video'
16        query = remaining
17      }
18    }
19  
20    if (name === 'websearch' || name === 'search') {
21      if (!query) return { kind: 'help-web' }
22      return { kind: 'web-search', query, searchType }
23    }
24  
25    if (name === 'webfetch' || name === 'fetch' || name === 'fetchurl') {
26      if (!rest) return { kind: 'help-web' }
27      return { kind: 'web-fetch', url: rest }
28    }
29  
30    if (name === 'web' || name === 'webtools') return { kind: 'help-web' }
31    return null
32  }