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 }