diff --git a/__tests__/server/middleware/sendHtml.spec.js b/__tests__/server/middleware/sendHtml.spec.js
index 2082bdbca..a8153e9d4 100644
--- a/__tests__/server/middleware/sendHtml.spec.js
+++ b/__tests__/server/middleware/sendHtml.spec.js
@@ -253,7 +253,8 @@ describe('sendHtml', () => {
});
it('sends a rendered page with the __holocron_module_bundle_type__ global set according to the user agent and the client module map that only includes the relevant details', () => {
- req.headers['user-agent'] = 'Browser/5.0 (compatible; NUEI 100.0; Doors TX 81.4; Layers/1.0)';
+ // MSIE indicates legacy IE
+ req.headers['user-agent'] = 'Browser/5.0 (compatible; MSIE 100.0; Doors TX 81.4; Layers/1.0)';
sendHtml(req, res);
expect(res.send).toHaveBeenCalledTimes(1);
expect(res.send.mock.calls[0][0]).toContain('');
@@ -319,7 +320,8 @@ describe('sendHtml', () => {
});
it('sends a rendered page with the legacy app bundle according to the user agent', () => {
- req.headers['user-agent'] = 'Browser/5.0 (compatible; NUEI 100.0; Doors TX 81.4; Layers/1.0)';
+ // rv:11 indicates IE 11 on mobile
+ req.headers['user-agent'] = 'Browser/5.0 (compatible; NUEI 100.0; Doors TX 81.4; rv:11)';
sendHtml(req, res);
expect(res.send).toHaveBeenCalledTimes(1);
expect(res.send.mock.calls[0][0]).toContain('');
diff --git a/package-lock.json b/package-lock.json
index 650870382..8b6867734 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4556,16 +4556,6 @@
"node-releases": "^1.1.42"
}
},
- "browserslist-useragent": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.2.tgz",
- "integrity": "sha512-/UPzK9xZnk5mwwWx4wcuBKAKx/mD3MNY8sUuZ2NPqnr4RVFWZogX+8mOP0cQEYo8j78sHk0hiDNaVXZ1U3hM9A==",
- "requires": {
- "browserslist": "^4.6.6",
- "semver": "^6.3.0",
- "useragent": "^2.3.0"
- }
- },
"bser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
@@ -16478,7 +16468,8 @@
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
},
"psl": {
"version": "1.6.0",
@@ -19016,6 +19007,7 @@
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
"requires": {
"os-tmpdir": "~1.0.2"
}
@@ -19564,31 +19556,6 @@
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
},
- "useragent": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz",
- "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==",
- "requires": {
- "lru-cache": "4.1.x",
- "tmp": "0.0.x"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- }
- }
- },
"util": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
diff --git a/package.json b/package.json
index b133a6a49..09b05198c 100644
--- a/package.json
+++ b/package.json
@@ -79,9 +79,7 @@
"@americanexpress/one-app-ducks": "^4.0.1",
"@americanexpress/one-app-router": "^1.1.0",
"@americanexpress/vitruvius": "^2.0.0",
- "babel-preset-amex": "^3.2.0",
"body-parser": "^1.19.0",
- "browserslist-useragent": "^3.0.2",
"chalk": "^3.0.0",
"compression": "^1.7.4",
"cookie-parser": "^1.4.4",
@@ -129,6 +127,7 @@
"@babel/core": "^7.7.2",
"@babel/node": "^7.7.0",
"@babel/register": "^7.7.0",
+ "babel-preset-amex": "^3.2.0",
"@commitlint/cli": "^8.2.0",
"@commitlint/config-conventional": "^8.2.0",
"@rollup/plugin-node-resolve": "^7.1.1",
diff --git a/src/server/middleware/sendHtml.js b/src/server/middleware/sendHtml.js
index 404d2e78c..3edae1161 100644
--- a/src/server/middleware/sendHtml.js
+++ b/src/server/middleware/sendHtml.js
@@ -16,8 +16,6 @@
// This rule is only needed for a couple functions below
/* eslint-disable es/no-arrow-functions */
-import { matchesUA } from 'browserslist-useragent';
-import { browserList } from 'babel-preset-amex/browserlist';
import { Set as iSet, Map as iMap } from 'immutable';
import transit from '../../universal/utils/transit';
@@ -33,6 +31,16 @@ const { buildVersion } = readJsonFile('../../../.build-meta.json');
const integrityManifest = readJsonFile('../../../bundle.integrity.manifest.json');
const nodeEnvIsDevelopment = process.env.NODE_ENV === 'development';
+// http://www.useragentstring.com/pages/useragentstring.php?name=Internet+Explorer
+const legacyIndicators = [
+ 'rv:11', // IE 11 on mobile
+ 'MSIE', // IE
+];
+
+const legacyUserAgent = (userAgent) => (
+ legacyIndicators.some((legacyIndicator) => userAgent.includes(legacyIndicator))
+);
+
function getChunkAssets(assetsByChunkName) {
return Object
.entries(assetsByChunkName)
@@ -278,10 +286,7 @@ export default function sendHtml(req, res) {
} = req;
const { scriptNonce } = res;
const userAgent = headers['user-agent'];
- const isLegacy = !matchesUA(userAgent, {
- browsers: browserList,
- allowHigherVersions: true,
- });
+ const isLegacy = legacyUserAgent(userAgent);
console.info(`sendHtml, have store? ${!!store}, have appHtml? ${!!appHtml}`);
if (appHtml && typeof appHtml !== 'string') {