matchesPermissionRule function

bool matchesPermissionRule(
  1. String command,
  2. String rulePattern
)

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;
}