Add runtime regex check to prevent SyntaxError on older browsers#8353
Merged
Add runtime regex check to prevent SyntaxError on older browsers#8353
Conversation
…n older browsers The UA-based isLookbehindSupported() can return true for unrecognized browsers (e.g. in-app WebViews, Chrome on old iOS using WebKit), causing highlight.ts to load highlightjs-roc which contains regex literals with lookbehind assertions. This triggers a fatal SyntaxError during module parsing on browsers that don't support lookbehinds. Adding areAllRegExpFeaturesSupported() as a runtime check before UA sniffing ensures the guard works correctly even when UA detection fails. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
SyntaxError: Invalid regular expression: invalid group specifier namereported on/journey(and likely other pages)isLookbehindSupported()function uses UA sniffing which can incorrectly returntruefor browsers that don't support lookbehinds (e.g. in-app WebViews, Chrome on old iOS using WebKit). This causeshighlight.tsto loadhighlightjs-roc, which contains regex literals with lookbehind assertions, triggering a fatal parse-timeSyntaxErrorareAllRegExpFeaturesSupported()runtime check (which was previously unused) as the first guard inisLookbehindSupported(), so even when UA detection fails the runtime check catches itTest plan
yarn testpasses (all failures are pre-existing@bugsnag/jsmodule resolution issues)areAllRegExpFeaturesSupported()returnsfalse→isLookbehindSupported()returnsfalse→lazyHighlightAll()exits early →highlight.tsnever loaded → no parse error🤖 Generated with Claude Code