| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // Parse plugin subcommand arguments into structured commands
- export 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' }
- }
- }
|