( data: unknown, filePath: string, )
| 222 | * Returns warnings for each filtered rule. |
| 223 | */ |
| 224 | export function filterInvalidPermissionRules( |
| 225 | data: unknown, |
| 226 | filePath: string, |
| 227 | ): ValidationError[] { |
| 228 | if (!data || typeof data !== 'object') return [] |
| 229 | const obj = data as Record<string, unknown> |
| 230 | if (!obj.permissions || typeof obj.permissions !== 'object') return [] |
| 231 | const perms = obj.permissions as Record<string, unknown> |
| 232 | |
| 233 | const warnings: ValidationError[] = [] |
| 234 | for (const key of ['allow', 'deny', 'ask']) { |
| 235 | const rules = perms[key] |
| 236 | if (!Array.isArray(rules)) continue |
| 237 | |
| 238 | perms[key] = rules.filter(rule => { |
| 239 | if (typeof rule !== 'string') { |
| 240 | warnings.push({ |
| 241 | file: filePath, |
| 242 | path: `permissions.${key}`, |
| 243 | message: `Non-string value in ${key} array was removed`, |
| 244 | invalidValue: rule, |
| 245 | }) |
| 246 | return false |
| 247 | } |
| 248 | const result = validatePermissionRule(rule) |
| 249 | if (!result.valid) { |
| 250 | let message = `Invalid permission rule "${rule}" was skipped` |
| 251 | if (result.error) message += `: ${result.error}` |
| 252 | if (result.suggestion) message += `. ${result.suggestion}` |
| 253 | warnings.push({ |
| 254 | file: filePath, |
| 255 | path: `permissions.${key}`, |
| 256 | message, |
| 257 | invalidValue: rule, |
| 258 | }) |
| 259 | return false |
| 260 | } |
| 261 | return true |
| 262 | }) |
| 263 | } |
| 264 | return warnings |
| 265 | } |
| 266 |
no test coverage detected