Sort events upon creation, and keep ordered (#411)
* Sort events at start, as otherwise we risk misidentifying the last event * Keep inserted events in the correct order, ensuring we don't misidentify the last event - e.g. network conditions mean that 'live' events come in non-sequentially - or so that adding custom events to an existing event works * Ensure we maintain original ordering while inserting a new event which has an identical timestamp to an existing event. This came up with a series of mutations which had the same timestamp but needed to be applied in the correct order * Fast track the common case of a new event being added which occurs after all prior events
This commit is contained in:
@@ -129,6 +129,8 @@ export class Replayer {
|
||||
events: Array<eventWithTime | string>,
|
||||
config?: Partial<playerConfig>,
|
||||
) {
|
||||
events.sort((a1, a2) => a1.timestamp - a2.timestamp);
|
||||
|
||||
if (!config?.liveMode && events.length < 2) {
|
||||
throw new Error('Replayer need at least 2 events.');
|
||||
}
|
||||
@@ -520,6 +522,8 @@ export class Replayer {
|
||||
castFn();
|
||||
}
|
||||
this.service.send({ type: 'CAST_EVENT', payload: { event } });
|
||||
|
||||
// events are kept sorted by timestamp, check if this is the last event
|
||||
if (
|
||||
event ===
|
||||
this.service.state.context.events[
|
||||
|
||||
Reference in New Issue
Block a user