Ah, you're right. But a pretty uncommon combination could still break:
`prefer = [unavailable provider]` (this could cause problems either will...)
`preferredOnly = true` (so `providers` is empty)
`firstOnly = true` (split on an empty object)