matchesPermissionRule function
Check if a command matches a permission rule pattern.
Implementation
bool matchesPermissionRule(String command, String rulePattern) {
// Exact match
if (command == rulePattern) return true;
// Legacy prefix match: "npm:*" matches "npm" and "npm ..."
if (rulePattern.endsWith(':*')) {
final prefix = rulePattern.substring(0, rulePattern.length - 2);
return command == prefix || command.startsWith('$prefix ');
}
// Wildcard match: "npm *" matches "npm install lodash"
if (rulePattern.contains('*') && !rulePattern.endsWith(':*')) {
final regexPattern = rulePattern
.replaceAll(r'\*', '\x00') // Escape literal \*
.replaceAllMapped(RegExp(r'[.+?^${}()|[\]\\]'), (m) => '\\${m[0]}')
.replaceAll('*', '.*')
.replaceAll('\x00', r'\*');
// Make trailing args optional (e.g., "git" matches "git *")
final trailingOptional = regexPattern.endsWith('.*')
? '${regexPattern.substring(0, regexPattern.length - 2)}(.*)?'
: regexPattern;
return RegExp('^$trailingOptional\$', dotAll: true).hasMatch(command);
}
return false;
}