тут скопіпащений метод з core
по ідеї можна позбавитись від дублювання коду почепившись на хук