Skip to content

Commit

Permalink
fix: handle all valid ST characters
Browse files Browse the repository at this point in the history
According to wiki, all of [0x1b5c, 0x07, 0x9C] are valid
ST (string terminator) signals, so support them all.
  • Loading branch information
llimllib committed Sep 4, 2024
1 parent 02fa893 commit e96b184
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export default function ansiRegex({onlyFirst = false} = {}) {
const pattern = [
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))',
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))'
].join('|');

Expand Down
23 changes: 13 additions & 10 deletions test.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,19 @@ test('match only first', t => {
});

test('match terminal link', t => {
t.regex('\u001B]8;k=v;https://example-a.com/?a_b=1&c=2#tit%20le\u0007click\u001B]8;;\u0007', ansiRegex());
t.regex('\u001B]8;;mailto:[email protected]\u0007mail\u001B]8;;\u0007', ansiRegex());
t.deepEqual('\u001B]8;k=v;https://example-a.com/?a_b=1&c=2#tit%20le\u0007click\u001B]8;;\u0007'.match(ansiRegex()), [
'\u001B]8;k=v;https://example-a.com/?a_b=1&c=2#tit%20le\u0007',
'\u001B]8;;\u0007'
]);
t.deepEqual('\u001B]8;;mailto:[email protected]\u0007mail-me\u001B]8;;\u0007'.match(ansiRegex()), [
'\u001B]8;;mailto:[email protected]\u0007',
'\u001B]8;;\u0007'
]);
const STs = ['\u0007', '\u001B\u005C', '\u009C']

Check failure on line 46 in test.js

View workflow job for this annotation

GitHub Actions / Node.js 14

Missing semicolon.

Check failure on line 46 in test.js

View workflow job for this annotation

GitHub Actions / Node.js 12

Missing semicolon.
STs.forEach(ST => {

Check failure on line 47 in test.js

View workflow job for this annotation

GitHub Actions / Node.js 14

Do not use `Array#forEach(…)`.

Check failure on line 47 in test.js

View workflow job for this annotation

GitHub Actions / Node.js 12

Do not use `Array#forEach(…)`.
t.regex(`\u000B]8;k=v;https://example-a.com/?a_b=1&c=2#tit%20le${ST}click\u001B]8;;${ST}`, ansiRegex());
t.regex(`\u001B]8;;mailto:[email protected]${ST}mail\u001B]8;;${ST}`, ansiRegex());
t.deepEqual(`\u001B]8;k=v;https://example-a.com/?a_b=1&c=2#tit%20le${ST}click\u001B]8;;${ST}`.match(ansiRegex()), [
`\u001B]8;k=v;https://example-a.com/?a_b=1&c=2#tit%20le${ST}`,
`\u001B]8;;${ST}`
]);
t.deepEqual(`\u001B]8;;mailto:[email protected]${ST}mail-me\u001B]8;;${ST}`.match(ansiRegex()), [
`\u001B]8;;mailto:[email protected]${ST}`,
`\u001B]8;;${ST}`
]);
})

Check failure on line 58 in test.js

View workflow job for this annotation

GitHub Actions / Node.js 14

Missing semicolon.

Check failure on line 58 in test.js

View workflow job for this annotation

GitHub Actions / Node.js 12

Missing semicolon.
});

test('match "change icon name and window title" in string', t => {
Expand Down

0 comments on commit e96b184

Please sign in to comment.