Open t2ym opened 6 years ago
[safari TP 46] SyntaxError: \u can only be followed by a Unicode character sequence
Some Unicode escape sequences \uXXXX in literals in some modules like acorn-jsx/xhtml.js (unnecessary module) and entities/maps/*.json are converted to raw unicode characters in hook.min.js, which causes parse error in Safari TP 46.
\uXXXX
acorn-jsx/xhtml.js
entities/maps/*.json
hook.min.js
Use raw string literals in the source codes
diff --git a/gulpfile.js b/gulpfile.js index 3a4ec70..bc5b888 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -159,9 +159,10 @@ gulp.task('build', () => { originalAst.body[0].expression.callee.body.body[0].alternate.alternate.body[4] = serviceWorkerHandlerRegistrationAst; // append service worker registration code originalAst.body[0].expression.callee.body.body[0].alternate.alternate.body[5] = serviceWorkerRegistrationAst; + let minifiedCode = escodegen.generate(originalAst, { format: { compact: true }, raw: true, parse: espree.parse, raw: true }); _trimStartEndRaw(originalAst); - let minifiedCode = escodegen.generate(originalAst, { format: { compact: true } }); - let minifiedAst = espree.parse(minifiedCode, espreeOptions); + let minifiedCode2 = escodegen.generate(originalAst, { format: { compact: true } }); + let minifiedAst = espree.parse(minifiedCode2, espreeOptions); _trimStartEndRaw(minifiedAst); let originalAstJson = JSON.stringify(originalAst, null, 2); let minifiedAstJson = JSON.stringify(minifiedAst, null, 2); @@ -235,9 +236,10 @@ gulp.task('build:coverage', () => { originalAst.body[0].expression.callee.body.body[0].alternate.alternate.body[4] = serviceWorkerHandlerRegistrationAst; // append service worker registration code originalAst.body[0].expression.callee.body.body[0].alternate.alternate.body[5] = serviceWorkerRegistrationAst; + let minifiedCode = escodegen.generate(originalAst, { format: { compact: true }, raw: true, parse: espree.parse, raw: true }); _trimStartEndRaw(originalAst); - let minifiedCode = escodegen.generate(originalAst, { format: { compact: true } }); - let minifiedAst = espree.parse(minifiedCode, espreeOptions); + let minifiedCode2 = escodegen.generate(originalAst, { format: { compact: true } }); + let minifiedAst = espree.parse(minifiedCode2, espreeOptions); _trimStartEndRaw(minifiedAst); let originalAstJson = JSON.stringify(originalAst, null, 2); let minifiedAstJson = JSON.stringify(minifiedAst, null, 2);
[safari TP 46] SyntaxError: \u can only be followed by a Unicode character sequence
Reproducible Version: Release 46 (Safari 11.1, WebKit 13605.1.18.2)
Root Cause
Some Unicode escape sequences
\uXXXX
in literals in some modules likeacorn-jsx/xhtml.js
(unnecessary module) andentities/maps/*.json
are converted to raw unicode characters inhook.min.js
, which causes parse error in Safari TP 46.Workaround
Use raw string literals in the source codes
Note