analytics-configuration¶
Ensures a correct Openverse analytics event name and payload configuration.
The rule concerns the configuration of
the Events type
and uses information derived from the behaviour of
the useAnalytics composable.
Specifically, the recommended rule configuration depends on the list of default
payload items that useAnalytics automatically includes with every custom
event.
Enforces the following conventions:
Event names must be in screaming snake case
Events with no payload must define the payload type as
neverEvent payload property names must not overlap the default payload properties supplied by
useAnalyticsEvent payload values must conform to the value types allowed by Plausible (our analytics provider)
Caution
Because the rule does not operate with type information, it has no way to verify that referenced types are value payload values! This means maintainers must be vigilant when using type references as payload value types to confirm that the type only allows valid payloads.
Rule Details¶
Examples of incorrect code using this rule:
Incorrect
type Events = {
/* Incorrect event names */
eventNameNotInScreamingSnakeCase: never
event_name_not_in_screaming_case: never
DANGLING_UNDERSCORE_: never
/* Incorrect empty payloads */
INVALID_EMPTY_PAYLOAD: {}
NULL_PAYLOAD: null
UNDEFINED_PAYLOAD: undefined
/* Incorrect payload values */
OBJECT_PAYLOAD_VALUE: {
invalidPayloadValueType: {
foo: string
}
}
NONSENSE_PAYLOAD_VALUE: {
nonsense: 'one' & 'two' // resolves to `never`, doesn't make any sense
}
/* Incorrect payload properties */
OVERLAPPING_DEFAULT_PAYLOAD_PROP: {
ua: number
}
}
Examples of correct code using this rule:
Correct
type Events = {
/* Correct event names */
SINGLEWORDEVENTNAME: never
MULTI_WORD_EVENT_NAME: never
/* Correct empty payloads */
EMPTY_PAYLOAD: never
/* Correct payload values */
UNION_PAYLOAD_VALUE: {
foo: 'one' | 'two' | 'three'
bar: 1 | 'hello'
}
TYPE_REFERENCE_VALUE: {
foo: SearchType
}
SIMPLE_PAYLOAD_VALUES:{
foo: string
bar: number
baz: boolean
}
/* Correct payload properties */
PAYLOAD_PROPS: {
notADefaultPropName: string
}
}