LogValueSanitizer typedef

LogValueSanitizer = Object? Function(SanitizeContext ctx)

Обрабатывает одно выводимое значение внутри data.

Возврат значения, идентичного SanitizeContext.value, означает «не трогал». Любое другое значение подставляется вместо исходного: внутрь оригинала обход не идёт, его дети правилу не предлагаются вовсе. Но сама замена рендерится как обычное значение — то есть её собственные дети предлагаются правилу наравне с любыми другими. Возврат Sanitize.drop убирает значение из вывода (см. Loggable.sanitizer).

Отсюда следует, что правило, возвращающее контейнер, внутри которого лежит значение, снова подходящее под то же правило, зациклится:

// Так нельзя: замена содержит 'secret', правило сработает на неё
// снова и будет подставлять контейнер бесконечно.
Loggable.sanitizer = (ctx) =>
    ctx.value == 'secret' ? {'was': 'secret'} : ctx.value;

Правило обязано быть тотальным: исключение из него выходит в publisher (см. спеку, раздел «Ошибки»).

Implementation

typedef LogValueSanitizer = Object? Function(SanitizeContext ctx);