( name: string, depth: number, config: ResolvedConfig, domClasses?: Set<string>, )
| 305 | } |
| 306 | |
| 307 | function shouldIncludeComponent( |
| 308 | name: string, |
| 309 | depth: number, |
| 310 | config: ResolvedConfig, |
| 311 | domClasses?: Set<string>, |
| 312 | ): boolean { |
| 313 | // Custom filter takes precedence |
| 314 | if (config.filter) { |
| 315 | return config.filter(name, depth); |
| 316 | } |
| 317 | |
| 318 | switch (config.mode) { |
| 319 | case "all": |
| 320 | // "all" mode shows everything - no filtering at all |
| 321 | return true; |
| 322 | |
| 323 | case "filtered": |
| 324 | // "filtered" mode skips framework internals |
| 325 | if (config.skipExact.has(name)) { |
| 326 | return false; |
| 327 | } |
| 328 | if (config.skipPatterns.some((p) => p.test(name))) { |
| 329 | return false; |
| 330 | } |
| 331 | return true; |
| 332 | |
| 333 | case "smart": |
| 334 | // "smart" mode: first apply framework filters, then require DOM correlation |
| 335 | if (config.skipExact.has(name)) { |
| 336 | return false; |
| 337 | } |
| 338 | if (config.skipPatterns.some((p) => p.test(name))) { |
| 339 | return false; |
| 340 | } |
| 341 | // Must correlate with DOM classes OR match user patterns |
| 342 | if (domClasses && componentCorrelatesWithDOM(name, domClasses)) { |
| 343 | return true; |
| 344 | } |
| 345 | if (config.userPatterns.some((p) => p.test(name))) { |
| 346 | return true; |
| 347 | } |
| 348 | // Skip components that don't correlate - this mode is intentionally strict |
| 349 | return false; |
| 350 | |
| 351 | default: |
| 352 | return true; |
| 353 | } |
| 354 | } |
| 355 | |
| 356 | // ============================================================================= |
| 357 | // React Detection |
no test coverage detected
searching dependent graphs…