ensure

Last updated 9 months ago

Returns a new event definition whose events will first go through the validator before being passed to their target. Events that don't pass the validator won't reach their targets.

Import

import ensure from '@redux-beacon/ensure';

Syntax

ensure(validator, eventDef)

Parameters

  • validator: Validator

    • The function used to validate the event.

  • eventDef: EventDefinition

    • The event you want to validate.

Validator

type Validator = (event: any[]) => boolean;
  • Accepts an event or array of events as its sole argument.

  • Returns true if the event is valid.

  • Returns false if the event is not valid.

Example

import joi from 'joi';
import ensure from '@redux-beacon/ensure'
const pageview = (action, prevState) => ({
hitType: 'pageview',
route: action.payload.location.pathname,
referrer: prevState.currentRoute,
});
// Returns true if the event matches the schema
const isValidPageView = event =>
!joi.validate(event, joi.object().keys({
hitType: joi.string().only('pageview').required(),
page: joi.string().disallow('/404'),
title: joi.string(),
location: joi.string(),
})).error;
const eventsMap = {
LOCATION_CHANGE: ensure(isValidPageView, pageview)
};