From a7c9f26c8fcca5a6b9a69f7cc7df7cd9f5eb7d0e Mon Sep 17 00:00:00 2001 From: mister-ben <1676039+mister-ben@users.noreply.github.com> Date: Mon, 22 Jul 2024 22:16:17 +0200 Subject: [PATCH] fix: Refactor evented to make mincompatable with Chrome 53 (#8810) ## Description Chrome 53 doesn't like the minified output. Specifically, it throws `Uncaught SyntaxError: Unexpected token (` on the ternary in the minified version of `normalizeListenArgs()` https://github.com/videojs/video.js/blob/e78bcc7b2d829fce01451cf105b918d8feec4548/src/js/mixins/evented.js#L165-L195 Line breaks added for clarify ```js Tt = (e, t, s) => { var i = t.length < 3 || t[0] === e || t[0] === e.eventBusEl_; let r, n, a; return i ? (r = e.eventBusEl_, 3 <= t.length && t.shift(), [n, a] = t) : [r, n, a] = t, ft(r, e, s), yt(n, e, s), bt(a, e, s), a = _(e, a), { isTargetingSelf: I, target: r, type: n, listener: a } }, ``` Chrome would be happy with this if `[r, n, a] = t` were `([r, n, a] = t)`. ## Specific Changes proposed Refactor `normalizeListenArgs()` slightly to use multiple statements to coerce uglify-js to include parentheses. Also updates uglify-js, but that in itself isn't the fix. Fixes #8783 ## Requirements Checklist - [x] Feature implemented / Bug fixed - [ ] If necessary, more likely in a feature request than a bug fix - [x] Change has been verified in an actual browser - Browserstack Chrome 53 - [ ] Unit Tests updated or fixed - [ ] Docs/guides updated - [ ] Example created ([starter template on JSBin](https://codepen.io/gkatsev/pen/GwZegv?editors=1000#0)) - [x] Has no DOM changes which impact accessiblilty or trigger warnings (e.g. Chrome issues tab) - [x] Has no changes to JSDoc which cause `npm run docs:api` to error - [ ] Reviewed by Two Core Contributors --------- Co-authored-by: Gary Katsevman --- package.json | 2 +- src/js/mixins/evented.js | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 01d9d962b1..27d31d7a76 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "shx": "^0.3.2", "sinon": "^11.1.1", "typescript": "^5.5.2", - "uglify-js": "^3.6.0", + "uglify-js": "^3.19.0", "unified": "^7.0.2", "videojs-generate-karma-config": "^8.1.0", "videojs-languages": "^2.0.0", diff --git a/src/js/mixins/evented.js b/src/js/mixins/evented.js index 0160a2b9d8..0d6bea5cca 100644 --- a/src/js/mixins/evented.js +++ b/src/js/mixins/evented.js @@ -182,7 +182,12 @@ const normalizeListenArgs = (self, args, fnName) => { [type, listener] = args; } else { - [target, type, listener] = args; + // This was `[target, type, listener] = args;` but this block needs more than + // one statement to produce minified output compatible with Chrome 53. + // See https://github.com/videojs/video.js/pull/8810 + target = args[0]; + type = args[1]; + listener = args[2]; } validateTarget(target, self, fnName);