Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
2.8 kB · 103 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104// Parse plugin subcommand arguments into structured commandsexport type ParsedCommand = | { type: 'menu' } | { type: 'help' } | { type: 'install'; marketplace?: string; plugin?: string } | { type: 'manage' } | { type: 'uninstall'; plugin?: string } | { type: 'enable'; plugin?: string } | { type: 'disable'; plugin?: string } | { type: 'validate'; path?: string } | { type: 'marketplace' action?: 'add' | 'remove' | 'update' | 'list' target?: string }
export function parsePluginArgs(args?: string): ParsedCommand { if (!args) { return { type: 'menu' } }
const parts = args.trim().split(/\s+/) const command = parts[0]?.toLowerCase()
switch (command) { case 'help': case '--help': case '-h': return { type: 'help' }
case 'install': case 'i': { const target = parts[1] if (!target) { return { type: 'install' } }
// Check if it's in format plugin@marketplace if (target.includes('@')) { const [plugin, marketplace] = target.split('@') return { type: 'install', plugin, marketplace } }
// Check if the target looks like a marketplace (URL or path) const isMarketplace = target.startsWith('http://') || target.startsWith('https://') || target.startsWith('file://') || target.includes('/') || target.includes('\\')
if (isMarketplace) { // This is a marketplace URL/path, no plugin specified return { type: 'install', marketplace: target } }
// Otherwise treat it as a plugin name return { type: 'install', plugin: target } }
case 'manage': return { type: 'manage' }
case 'uninstall': return { type: 'uninstall', plugin: parts[1] }
case 'enable': return { type: 'enable', plugin: parts[1] }
case 'disable': return { type: 'disable', plugin: parts[1] }
case 'validate': { const target = parts.slice(1).join(' ').trim() return { type: 'validate', path: target || undefined } }
case 'marketplace': case 'market': { const action = parts[1]?.toLowerCase() const target = parts.slice(2).join(' ')
switch (action) { case 'add': return { type: 'marketplace', action: 'add', target } case 'remove': case 'rm': return { type: 'marketplace', action: 'remove', target } case 'update': return { type: 'marketplace', action: 'update', target } case 'list': return { type: 'marketplace', action: 'list' } default: // No action specified, show marketplace menu return { type: 'marketplace' } } }
default: // Unknown command, show menu return { type: 'menu' } }}