@@ -8,6 +8,7 @@ ctx.addEventListener("message", (event) => {
8
8
9
9
if ( command === "cleanup" ) {
10
10
buffer = "" ;
11
+ discardFirstLine = true ;
11
12
}
12
13
13
14
if ( data ) {
@@ -16,6 +17,7 @@ ctx.addEventListener("message", (event) => {
16
17
} ) ;
17
18
18
19
let buffer = "" ;
20
+ let discardFirstLine = true ;
19
21
const separator = "\r\n" ;
20
22
var re = new RegExp ( `(${ separator } )` , "g" ) ;
21
23
@@ -25,8 +27,26 @@ export const parseSerialMessages = (
25
27
datasetNames : string [ ] ;
26
28
parsedLines : { [ key : string ] : number } [ ] ;
27
29
} => {
30
+ // when the serial is real fast, the first line can be incomplete and contain incomplete messages
31
+ // so we need to discard it and start aggregating from the first encountered separator
32
+ let joinMessages = messages . join ( "" ) ;
33
+ if ( discardFirstLine ) {
34
+ const firstSeparatorIndex = joinMessages . indexOf ( separator ) ;
35
+ if ( firstSeparatorIndex > - 1 ) {
36
+ joinMessages = joinMessages . substring (
37
+ firstSeparatorIndex + separator . length
38
+ ) ;
39
+ discardFirstLine = false ;
40
+ } else {
41
+ return {
42
+ datasetNames : [ ] ,
43
+ parsedLines : [ ] ,
44
+ } ;
45
+ }
46
+ }
47
+
28
48
//add any leftover from the buffer to the first line
29
- const messagesAndBuffer = ( buffer + messages . join ( "" ) )
49
+ const messagesAndBuffer = ( ( buffer || "" ) + joinMessages )
30
50
. split ( re )
31
51
. filter ( ( message ) => message . length > 0 ) ;
32
52
0 commit comments