fix: message parser being slow to process very long messages with too many symbols (#33227)
parent
6730a3c911
commit
79c16d315a
@ -0,0 +1,6 @@ |
||||
--- |
||||
'@rocket.chat/message-parser': patch |
||||
'@rocket.chat/peggy-loader': patch |
||||
--- |
||||
|
||||
Improved the performance of the message parser |
||||
@ -0,0 +1,268 @@ |
||||
import { parse } from '../src'; |
||||
import { paragraph, plain, bold, italic, strike } from '../src/utils'; |
||||
|
||||
test.each([ |
||||
[ |
||||
`This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. , REPEATx2 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. REPEAT x3 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. REPEAT x4 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. REPEATx 5 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. , REPEAT x6 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. this can go long for some time, repeat x7 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. ,repeat x8 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some.`, |
||||
[ |
||||
paragraph([ |
||||
plain( |
||||
'This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&' |
||||
), |
||||
bold([ |
||||
plain('()'), |
||||
italic([ |
||||
plain( |
||||
`+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok` |
||||
), |
||||
strike([ |
||||
plain( |
||||
`, from now on we repeat some. , REPEATx2 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok` |
||||
), |
||||
]), |
||||
plain( |
||||
', from now on we repeat some. REPEAT x3 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()' |
||||
), |
||||
]), |
||||
plain( |
||||
`+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok` |
||||
), |
||||
strike([ |
||||
plain( |
||||
', from now on we repeat some. REPEAT x4 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()' |
||||
), |
||||
italic([ |
||||
plain( |
||||
`+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. REPEATx 5 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()` |
||||
), |
||||
]), |
||||
plain( |
||||
`+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok` |
||||
), |
||||
]), |
||||
plain( |
||||
`, from now on we repeat some. , REPEAT x6 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&` |
||||
), |
||||
]), |
||||
plain( |
||||
`()_+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok` |
||||
), |
||||
strike([ |
||||
plain( |
||||
`, from now on we repeat some. this can go long for some time, repeat x7 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()` |
||||
), |
||||
italic([ |
||||
plain( |
||||
`+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok~, from now on we repeat some. ,repeat x8 This a message designed to stress test the message parser, trying to force several rules to stack at the same time !!@#$%^&*()` |
||||
), |
||||
]), |
||||
plain( |
||||
`+, overloading the symbols {}:"|<>?, some more text ,./;'\\[], numbers too 1234567890-= let it call s o s ok` |
||||
), |
||||
]), |
||||
plain(', from now on we repeat some.'), |
||||
]), |
||||
], |
||||
], |
||||
[ |
||||
'**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__**_**__', |
||||
[ |
||||
paragraph([ |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
italic([bold([plain('_')])]), |
||||
bold([italic([plain('**')]), italic([plain('**')])]), |
||||
plain('__'), |
||||
]), |
||||
], |
||||
], |
||||
])('parses %p', (input, output) => { |
||||
expect(parse(input)).toMatchObject(output); |
||||
}); |
||||
Loading…
Reference in new issue