Fix jumbo emoji detection broken by production minifier.
Replace surrogate-pair emoji regex with Unicode property escapes so Rolldown no longer corrupts matching in production builds.
This commit is contained in:
@@ -31,7 +31,7 @@ import {
|
|||||||
mxcUrlToHttp,
|
mxcUrlToHttp,
|
||||||
} from '../utils/matrix';
|
} from '../utils/matrix';
|
||||||
import { getMemberDisplayName } from '../utils/room';
|
import { getMemberDisplayName } from '../utils/room';
|
||||||
import { EMOJI_PATTERN, sanitizeForRegex, URL_NEG_LB } from '../utils/regex';
|
import { EMOJI_REG_G, sanitizeForRegex } from '../utils/regex';
|
||||||
import { getHexcodeForEmoji, getShortcodeFor } from './emoji';
|
import { getHexcodeForEmoji, getShortcodeFor } from './emoji';
|
||||||
import { findAndReplace } from '../utils/findAndReplace';
|
import { findAndReplace } from '../utils/findAndReplace';
|
||||||
import {
|
import {
|
||||||
@@ -48,8 +48,6 @@ import { openExternalUrl } from '../utils/tauri';
|
|||||||
|
|
||||||
const ReactPrism = lazy(() => import('./react-prism/ReactPrism'));
|
const ReactPrism = lazy(() => import('./react-prism/ReactPrism'));
|
||||||
|
|
||||||
const EMOJI_REG_G = new RegExp(`${URL_NEG_LB}(${EMOJI_PATTERN})`, 'g');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Click handler for external links - uses Tauri shell on desktop/mobile
|
* Click handler for external links - uses Tauri shell on desktop/mobile
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -13,13 +13,18 @@ export const findAndReplace = <ReplaceReturnType, ConvertReturnType>(
|
|||||||
const result: Array<ReplaceReturnType | ConvertReturnType> = [];
|
const result: Array<ReplaceReturnType | ConvertReturnType> = [];
|
||||||
let lastEnd = 0;
|
let lastEnd = 0;
|
||||||
|
|
||||||
|
regex.lastIndex = 0;
|
||||||
let match: RegExpExecArray | RegExpMatchArray | null = regex.exec(text);
|
let match: RegExpExecArray | RegExpMatchArray | null = regex.exec(text);
|
||||||
while (match !== null && typeof match.index === 'number') {
|
while (match !== null && typeof match.index === 'number') {
|
||||||
result.push(convertPart(text.slice(lastEnd, match.index), result.length));
|
result.push(convertPart(text.slice(lastEnd, match.index), result.length));
|
||||||
result.push(replace(match, result.length));
|
result.push(replace(match, result.length));
|
||||||
|
|
||||||
lastEnd = match.index + match[0].length;
|
lastEnd = match.index + match[0].length;
|
||||||
|
if (match[0].length === 0) {
|
||||||
|
regex.lastIndex += 1;
|
||||||
|
}
|
||||||
if (regex.global) match = regex.exec(text);
|
if (regex.global) match = regex.exec(text);
|
||||||
|
else break;
|
||||||
}
|
}
|
||||||
|
|
||||||
result.push(convertPart(text.slice(lastEnd), result.length));
|
result.push(convertPart(text.slice(lastEnd), result.length));
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user