fix: Safari support for PrismJS env configuration

Fixes a RegExp validation error caused when building and executing
a RegExp with LookBehind syntax on Safari.

This issue causes a white screen when running `npm start` on Safari
browser.
This commit is contained in:
Esteban Borai
2021-05-22 01:10:07 -04:00
parent 02784d6320
commit e3eff37aca
+27 -25
View File
@@ -1,34 +1,36 @@
import Prism from "prismjs" import Prism from "prismjs"
if (supportsLookBehind()) { import type { Grammar } from "prismjs"
Prism.languages.env = {
property: {
pattern: /(.*.)(?==)/,
},
string: {
pattern: /(?<==)(.*.)/g,
global: true,
},
operator: {
pattern: /=/
}
}
} else {
Prism.languages.env = {
property: {
pattern: /(.*.)(?==)/,
},
operator: {
pattern: /=/
}
}
}
function supportsLookBehind() { function supportsLookBehind() {
try { try {
return /(?<==)(.*)/.test("=hello") const lookbehindRegexp = new RegExp("(?<==)(.*)");
return lookbehindRegexp.test("=hello");
} catch(e) { } catch(e) {
return false; return false;
} }
} }
function configurePrismJS() {
const config: Grammar = {
property: {
pattern: /(.*.)(?==)/,
},
operator: {
pattern: /=/
}
}
if (supportsLookBehind()) {
/* eslint-disable-next-line id-blacklist */
config.string = {
pattern: new RegExp("(?<==)(.*.)", "g"),
global: true,
}
}
Prism.languages.env = config;
}
configurePrismJS();