| 411 | extraParams: { ...(a?.extraParams || {}), ...(b?.extraParams || {}) }, |
| 412 | } as T; |
| 413 | }; |
| 414 | |
| 415 | const matchModelRule = (model: string, rule: ModelMatchRule): boolean => { |
| 416 | if (!model) return false; |
| 417 | if (rule.type === "exact") return model === rule.value; |
| 418 | if (rule.type === "prefix") return model.startsWith(rule.value); |
| 419 | if (rule.type === "includes") return model.includes(rule.value); |
| 420 | if (rule.type === "regex") { |
| 421 | try { |
| 422 | return new RegExp(rule.value).test(model); |
| 423 | } catch { |
| 424 | return false; |
| 425 | } |
| 426 | } |
| 427 | return false; |
| 428 | }; |
| 429 | |