@@ -4,14 +4,14 @@ import { patch } from '@n1ru4l/json-patch-plus';
44
55type HawkEvent = {
66 payload : {
7- [ key : string ] : any
8- }
7+ [ key : string ] : any ;
8+ } ;
99}
1010
1111type HawkEventRepetition = {
1212 payload : {
13- [ key : string ] : any
14- }
13+ [ key : string ] : any ;
14+ } ;
1515 delta : string ;
1616}
1717
@@ -25,47 +25,46 @@ type HawkEventRepetition = {
2525 * @param repetition - the difference with its repetition, for the repetition we want to display
2626 * @returns fully assembled payload of the current repetition
2727 */
28- export function repetitionAssembler ( originalEvent : Object , repetition : { [ key : string ] : any } ) : any {
29- const customizer = ( originalParam : any , repetitionParam : any ) : any => {
30- if ( repetitionParam === null ) {
31- return originalParam ;
32- }
33-
34-
35- if ( typeof repetitionParam === 'object' && typeof originalParam === 'object' ) {
36- /**
37- * If original event has null but repetition has some value, we need to return repetition value
38- */
39- if ( originalParam === null ) {
40- return repetitionParam ;
41- /**
42- * Otherwise, we need to recursively merge original and repetition values
43- */
44- } else {
45- return repetitionAssembler ( originalParam , repetitionParam ) ;
46- }
47- }
28+ export function repetitionAssembler ( originalEvent : Record < string , any > , repetition : { [ key : string ] : any } ) : any {
29+ const customizer = ( originalParam : any , repetitionParam : any ) : any => {
30+ if ( repetitionParam === null ) {
31+ return originalParam ;
32+ }
4833
34+ if ( typeof repetitionParam === 'object' && typeof originalParam === 'object' ) {
35+ /**
36+ * If original event has null but repetition has some value, we need to return repetition value
37+ */
38+ if ( originalParam === null ) {
4939 return repetitionParam ;
50- } ;
40+ /**
41+ * Otherwise, we need to recursively merge original and repetition values
42+ */
43+ } else {
44+ return repetitionAssembler ( originalParam , repetitionParam ) ;
45+ }
46+ }
47+
48+ return repetitionParam ;
49+ } ;
5150
52- return mergeWith ( cloneDeep ( originalEvent ) , cloneDeep ( repetition ) , customizer ) ;
51+ return mergeWith ( cloneDeep ( originalEvent ) , cloneDeep ( repetition ) , customizer ) ;
5352}
5453
5554function parsePayloadField ( payload : any , field : string ) {
56- if ( payload && payload [ field ] && typeof payload [ field ] === 'string' ) {
57- payload [ field ] = JSON . parse ( payload [ field ] ) ;
58- }
55+ if ( payload && payload [ field ] && typeof payload [ field ] === 'string' ) {
56+ payload [ field ] = JSON . parse ( payload [ field ] ) ;
57+ }
5958
60- return payload ;
59+ return payload ;
6160}
6261
6362function stringifyPayloadField ( payload : any , field : string ) {
64- if ( payload && payload [ field ] ) {
65- payload [ field ] = JSON . stringify ( payload [ field ] ) ;
66- }
63+ if ( payload && payload [ field ] ) {
64+ payload [ field ] = JSON . stringify ( payload [ field ] ) ;
65+ }
6766
68- return payload ;
67+ return payload ;
6968}
7069
7170/**
@@ -78,52 +77,51 @@ function stringifyPayloadField(payload: any, field: string) {
7877 * @returns {HawkEvent } Updated event with processed repetition payload
7978 */
8079export function composeFullRepetitionEvent ( originalEvent : HawkEvent , repetition : HawkEventRepetition | undefined ) : HawkEvent {
80+ /**
81+ * Make a deep copy of the original event, because we need to avoid mutating the original event
82+ */
83+ const event = cloneDeep ( originalEvent ) ;
8184
82- /**
83- * Make a deep copy of the original event, because we need to avoid mutating the original event
84- */
85- const event = cloneDeep ( originalEvent ) ;
86-
87- if ( ! repetition ) {
88- return event ;
89- }
85+ if ( ! repetition ) {
86+ return event ;
87+ }
9088
89+ /**
90+ * New delta format (repetition.delta is not null)
91+ */
92+ if ( repetition . delta ) {
9193 /**
92- * New delta format (repetition.delta is not null)
94+ * Parse addons and context fields from string to object before patching
9395 */
94- if ( repetition . delta ) {
95- /**
96- * Parse addons and context fields from string to object before patching
97- */
98- event . payload = parsePayloadField ( event . payload , 'addons' ) ;
99- event . payload = parsePayloadField ( event . payload , 'context' ) ;
96+ event . payload = parsePayloadField ( event . payload , 'addons' ) ;
97+ event . payload = parsePayloadField ( event . payload , 'context' ) ;
10098
101- event . payload = patch ( {
102- left : event . payload ,
103- delta : JSON . parse ( repetition . delta )
104- } ) ;
105-
106- /**
107- * Stringify addons and context fields from object to string after patching
108- */
109- event . payload = stringifyPayloadField ( event . payload , 'addons' ) ;
110- event . payload = stringifyPayloadField ( event . payload , 'context' ) ;
111-
112- return event ;
113- }
99+ event . payload = patch ( {
100+ left : event . payload ,
101+ delta : JSON . parse ( repetition . delta ) ,
102+ } ) ;
114103
115104 /**
116- * New delta format (repetition.payload is null) and repetition.delta is null (there is no delta between original and repetition)
105+ * Stringify addons and context fields from object to string after patching
117106 */
118- if ( ! repetition . payload ) {
119- return event ;
120- }
107+ event . payload = stringifyPayloadField ( event . payload , 'addons' ) ;
108+ event . payload = stringifyPayloadField ( event . payload , 'context' ) ;
121109
122- /**
123- * Old delta format (repetition.payload is not null)
124- * @todo remove after July 5 2025
125- */
126- event . payload = repetitionAssembler ( event . payload , repetition . payload ) ;
110+ return event ;
111+ }
127112
113+ /**
114+ * New delta format (repetition.payload is null) and repetition.delta is null (there is no delta between original and repetition)
115+ */
116+ if ( ! repetition . payload ) {
128117 return event ;
118+ }
119+
120+ /**
121+ * Old delta format (repetition.payload is not null)
122+ * @todo remove after July 5 2025
123+ */
124+ event . payload = repetitionAssembler ( event . payload , repetition . payload ) ;
125+
126+ return event ;
129127}
0 commit comments