Repository: vmware-tanzu/octant
Pull request #847 (2020-04-17 16:22:11)

Update karma, protractor, ngx-highlightjs versions
This PR updates karma to v5. The breaking changes have no effect on our usage (https://github.com/karma-runner/karma/blob/master/CHANGELOG.md#breaking-changes).

Also bumps protractor which removes an outdated dependency and removes npm warnings.



Patch:
diff --git a/web/package-lock.json b/web/package-lock.json
index 277e573f..d690b39a 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -2603,9 +2603,9 @@
       "dev": true
     },
     "@types/selenium-webdriver": {
-      "version": "3.0.16",
-      "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz",
-      "integrity": "sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA==",
+      "version": "3.0.17",
+      "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz",
+      "integrity": "sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==",
       "dev": true
     },
     "@types/source-list-map": {
@@ -2885,9 +2885,9 @@
       "dev": true
     },
     "adm-zip": {
-      "version": "0.4.13",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz",
-      "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==",
+      "version": "0.4.14",
+      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz",
+      "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==",
       "dev": true
     },
     "after": {
@@ -3872,9 +3872,9 @@
       }
     },
     "browserstack": {
-      "version": "1.5.3",
-      "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz",
-      "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.0.tgz",
+      "integrity": "sha512-HJDJ0TSlmkwnt9RZ+v5gFpa1XZTBYTj0ywvLwJ3241J7vMw2jAsGNVhKHtmCOyg+VxeLZyaibO9UL71AsUeDIw==",
       "dev": true,
       "requires": {
         "https-proxy-agent": "^2.2.1"
@@ -3891,34 +3891,12 @@
         "isarray": "^1.0.0"
       }
     },
-    "buffer-alloc": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
-      "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
-      "dev": true,
-      "requires": {
-        "buffer-alloc-unsafe": "^1.1.0",
-        "buffer-fill": "^1.0.0"
-      }
-    },
-    "buffer-alloc-unsafe": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
-      "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
-      "dev": true
-    },
     "buffer-crc32": {
       "version": "0.2.13",
       "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
       "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
       "dev": true
     },
-    "buffer-fill": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
-      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
-      "dev": true
-    },
     "buffer-from": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -7288,9 +7266,9 @@
       }
     },
     "flatted": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
-      "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
       "dev": true
     },
     "flush-write-stream": {
@@ -7808,6 +7786,11 @@
       "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz",
       "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg=="
     },
+    "highlightjs-line-numbers.js": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/highlightjs-line-numbers.js/-/highlightjs-line-numbers.js-2.7.0.tgz",
+      "integrity": "sha512-2kgZkfGy3TB6rF1o1XJtUThDyraLAFd6iiAIE1MEH89om8VwyHsal6BBnIOP2yOuq2TCuuGd0YD6aGHa6iq3/g=="
+    },
     "hmac-drbg": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@@ -8979,9 +8962,9 @@
       }
     },
     "jszip": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz",
-      "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.3.0.tgz",
+      "integrity": "sha512-EJ9k766htB1ZWnsV5ZMDkKLgA+201r/ouFF8R2OigVjVdcm2rurcBrrdXaeqBJbqnUVMko512PYmlncBKE1Huw==",
       "dev": true,
       "requires": {
         "lie": "~3.3.0",
@@ -8991,12 +8974,11 @@
       }
     },
     "karma": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz",
-      "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==",
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/karma/-/karma-5.0.2.tgz",
+      "integrity": "sha512-RpUuCuGJfN3WnjYPGIH+VBF8023Lfm3TQH6D1kcNL+FxtEPc2UUz/nVjbVAGXH4Pm+Q7FVOAQjdAeFUpXpQ3IA==",
       "dev": true,
       "requires": {
-        "bluebird": "^3.3.0",
         "body-parser": "^1.16.1",
         "braces": "^3.0.2",
         "chokidar": "^3.0.0",
@@ -9008,29 +8990,92 @@
         "glob": "^7.1.1",
         "graceful-fs": "^4.1.2",
         "http-proxy": "^1.13.0",
-        "isbinaryfile": "^3.0.0",
+        "isbinaryfile": "^4.0.2",
         "lodash": "^4.17.14",
         "log4js": "^4.0.0",
         "mime": "^2.3.1",
         "minimatch": "^3.0.2",
-        "optimist": "^0.6.1",
         "qjobs": "^1.1.4",
         "range-parser": "^1.2.0",
         "rimraf": "^2.6.0",
-        "safe-buffer": "^5.0.1",
         "socket.io": "2.1.1",
         "source-map": "^0.6.1",
         "tmp": "0.0.33",
-        "useragent": "2.3.0"
+        "ua-parser-js": "0.7.21",
+        "yargs": "^15.3.1"
       },
       "dependencies": {
-        "isbinaryfile": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
-          "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "4.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
           "dev": true,
           "requires": {
-            "buffer-alloc": "^1.2.0"
+            "@types/color-name": "^1.1.1",
+            "color-convert": "^2.0.1"
+          }
+        },
+        "cliui": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+          "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.0",
+            "wrap-ansi": "^6.2.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "get-caller-file": {
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
           }
         },
         "mime": {
@@ -9039,11 +9084,92 @@
           "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
           "dev": true
         },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+          "dev": true
+        },
+        "require-main-filename": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+          "dev": true
+        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true
+        },
+        "string-width": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+          "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "yargs": {
+          "version": "15.3.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
+          "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
+          "dev": true,
+          "requires": {
+            "cliui": "^6.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^4.1.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^4.2.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^18.1.1"
+          }
+        },
+        "yargs-parser": {
+          "version": "18.1.3",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+          "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
         }
       }
     },
@@ -9868,9 +9994,9 @@
       }
     },
     "minimist": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
     "minipass": {
@@ -9991,20 +10117,12 @@
       }
     },
     "mkdirp": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
-      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
       "dev": true,
       "requires": {
-        "minimist": "0.0.8"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-          "dev": true
-        }
+        "minimist": "^1.2.5"
       }
     },
     "monaco-editor": {
@@ -10102,10 +10220,12 @@
       }
     },
     "ngx-highlightjs": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/ngx-highlightjs/-/ngx-highlightjs-3.0.3.tgz",
-      "integrity": "sha512-/Eh+uJL9CiePWXzyT7VpLaQoWQyyNEUQaHhJ4faUBQZLBpachCBY55iDX0mi50zG9dapTiiapH5Vz/sL2GDxlg==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/ngx-highlightjs/-/ngx-highlightjs-4.0.2.tgz",
+      "integrity": "sha512-qCQXMDFpbDv5u51rLfoc2G3mMq+l6uatFI+BZT0JkTYTvjdqOFkGWLzQ1hA5UPzyFc3dCpT+OLeVdtq6oX99dg==",
       "requires": {
+        "highlight.js": "*",
+        "highlightjs-line-numbers.js": "*",
         "tslib": "^1.9.0"
       }
     },
@@ -10574,24 +10694,6 @@
         }
       }
     },
-    "optimist": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
-      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
-      "dev": true,
-      "requires": {
-        "minimist": "~0.0.1",
-        "wordwrap": "~0.0.2"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.10",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
-          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
-          "dev": true
-        }
-      }
-    },
     "ora": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz",
@@ -11940,9 +12042,9 @@
       "optional": true
     },
     "protractor": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.3.tgz",
-      "integrity": "sha512-7pMAolv8Ah1yJIqaorDTzACtn3gk7BamVKPTeO5lqIGOrfosjPgXFx/z1dqSI+m5EeZc2GMJHPr5DYlodujDNA==",
+      "version": "5.4.4",
+      "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.4.tgz",
+      "integrity": "sha512-BaL4vePgu3Vfa/whvTUAlgaCAId4uNSGxIFSCXMgj7LMYENPWLp85h5RBi9pdpX/bWQ8SF6flP7afmi2TC4eHw==",
       "dev": true,
       "requires": {
         "@types/q": "^0.0.32",
@@ -11953,13 +12055,13 @@
         "glob": "^7.0.3",
         "jasmine": "2.8.0",
         "jasminewd2": "^2.1.0",
-        "optimist": "~0.6.0",
         "q": "1.4.1",
         "saucelabs": "^1.5.0",
         "selenium-webdriver": "3.6.0",
         "source-map-support": "~0.4.0",
         "webdriver-js-extender": "2.1.0",
-        "webdriver-manager": "^12.0.6"
+        "webdriver-manager": "^12.0.6",
+        "yargs": "^12.0.5"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12104,12 +12206,6 @@
       "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
       "dev": true
     },
-    "pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
-      "dev": true
-    },
     "psl": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz",
@@ -14655,6 +14751,12 @@
       "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==",
       "dev": true
     },
+    "ua-parser-js": {
+      "version": "0.7.21",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz",
+      "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==",
+      "dev": true
+    },
     "ultron": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
@@ -14971,34 +15073,6 @@
       "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
       "dev": true
     },
-    "useragent": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz",
-      "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==",
-      "dev": true,
-      "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==",
-          "dev": true,
-          "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=",
-          "dev": true
-        }
-      }
-    },
     "utf8-byte-length": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
@@ -16935,12 +17009,6 @@
         }
       }
     },
-    "wordwrap": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
-      "dev": true
-    },
     "worker-farm": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
@@ -17050,14 +17118,6 @@
       "requires": {
         "sax": ">=0.6.0",
         "xmlbuilder": "~11.0.0"
-      },
-      "dependencies": {
-        "sax": {
-          "version": "1.2.4",
-          "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-          "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
-          "dev": true
-        }
       }
     },
     "xmlbuilder": {
diff --git a/web/package.json b/web/package.json
index b2a2fd87..119db778 100644
--- a/web/package.json
+++ b/web/package.json
@@ -58,7 +58,7 @@
     "lodash-es": "^4.17.15",
     "monaco-editor": "^0.20.0",
     "ng-monaco-editor": "^2.2.2",
-    "ngx-highlightjs": "^3.0.3",
+    "ngx-highlightjs": "^4.0.2",
     "ngx-markdown": "^8.2.1",
     "rxjs": "^6.5.4",
     "serialize-javascript": "^3.0.0",
@@ -87,7 +87,7 @@
     "electron-builder": "^22.4.1",
     "jasmine-core": "~3.5.0",
     "jasmine-spec-reporter": "~5.0.1",
-    "karma": "^4.4.1",
+    "karma": "^5.0.2",
     "karma-chrome-launcher": "^3.1.0",
     "karma-coverage-istanbul-reporter": "^2.1.1",
     "karma-jasmine": "^3.1.1",
@@ -95,7 +95,7 @@
     "karma-spec-reporter": "0.0.32",
     "prettier": "^2.0.2",
     "prettier-tslint": "^0.4.2",
-    "protractor": "^5.4.3",
+    "protractor": "^5.4.4",
     "ts-node": "8.8.1",
     "tslint": "^5.20.1",
     "tslint-config-prettier": "^1.18.0",
diff --git a/web/src/app/modules/shared/highlight.ts b/web/src/app/modules/shared/highlight.ts
index 2aa8af29..6f44c656 100644
--- a/web/src/app/modules/shared/highlight.ts
+++ b/web/src/app/modules/shared/highlight.ts
@@ -9,17 +9,17 @@ import yaml from 'highlight.js/lib/languages/yaml';
 import { HIGHLIGHT_OPTIONS } from 'ngx-highlightjs';
 
 export function hljsLanguages() {
-  return [
-    { name: 'yaml', func: yaml },
-    { name: 'json', func: json },
-  ];
+  return {
+    json: () => json,
+    yaml: () => yaml,
+  };
 }
 
 export function highlightProvider() {
   return {
     provide: HIGHLIGHT_OPTIONS,
     useValue: {
-      languages: hljsLanguages,
+      languages: hljsLanguages(),
     },
   };
 }
diff --git a/web/src/app/modules/shared/shared.module.ts b/web/src/app/modules/shared/shared.module.ts
index f20c9f08..8a6e9f79 100644
--- a/web/src/app/modules/shared/shared.module.ts
+++ b/web/src/app/modules/shared/shared.module.ts
@@ -57,7 +57,7 @@ import { AnsiPipe } from './pipes/ansiPipe/ansi.pipe';
 import { DefaultPipe } from './pipes/default/default.pipe';
 import { RouterModule } from '@angular/router';
 import { ResizableModule } from 'angular-resizable-element';
-import { hljsLanguages } from './highlight';
+import { highlightProvider } from './highlight';
 import { IndicatorComponent } from './components/presentation/indicator/indicator.component';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { MonacoEditorModule } from 'ng-monaco-editor';
@@ -127,9 +127,7 @@ import { OverflowLabelsComponent } from './components/presentation/overflow-labe
     ClarityModule,
     CommonModule,
     FormsModule,
-    HighlightModule.forRoot({
-      languages: hljsLanguages,
-    }),
+    HighlightModule,
     MonacoEditorModule.forRoot({
       baseUrl: '',
       defaultOptions: {},
@@ -139,6 +137,7 @@ import { OverflowLabelsComponent } from './components/presentation/overflow-labe
     ResizableModule,
     RouterModule,
   ],
+  providers: [highlightProvider()],
   exports: [
     FormatPathPipe,
     AlertComponent,
diff --git a/web/src/app/modules/sugarloaf/components/smart/input-filter/input-filter.component.spec.ts b/web/src/app/modules/sugarloaf/components/smart/input-filter/input-filter.component.spec.ts
index 6776d41d..c872154b 100644
--- a/web/src/app/modules/sugarloaf/components/smart/input-filter/input-filter.component.spec.ts
+++ b/web/src/app/modules/sugarloaf/components/smart/input-filter/input-filter.component.spec.ts
@@ -62,6 +62,10 @@ describe('InputFilterComponent', () => {
   });
 
   it('should show the user text if there are no filters', () => {
+    const labelFilterService: LabelFilterService = TestBed.inject(
+      LabelFilterService
+    );
+    labelFilterService.filters.next([]);
     component.showTagList = true;
     fixture.whenStable().then(() => {
       fixture.detectChanges();
@@ -76,7 +80,7 @@ describe('InputFilterComponent', () => {
   });
 
   it('should show the tags if there are filters', () => {
-    const labelFilterService: LabelFilterService = TestBed.get(
+    const labelFilterService: LabelFilterService = TestBed.inject(
       LabelFilterService
     );
     labelFilterService.filters.next([


Test patch:
diff --git a/proposals/20200330-e2e-testing.md b/proposals/20200330-e2e-testing.md
deleted file mode 100644
index fc5ba21e..00000000
--- a/proposals/20200330-e2e-testing.md
+++ /dev/null
@@ -1,97 +0,0 @@
-# Octant e2e Testing
-
-Create a stable end-to-end testing developer workflow. The previous iteration of e2e tests required a given cluster state with expected Octant UI performance before executing tests resulting in flakey tests.
-
-## Goals
-
- - Mock backend data to avoid maintaining cluster state for tests
- - Remove dependencies such as kubectl and kind needed to start e2e tests
- - Provide an alternative for difficult testing cases
- - Gain feedback for automated user interaction
-
-## Non-Goals
-
- - Test Octant behavior under restricted RBAC
- - Benchmarking performance
- - Expanding test coverage
- - Test electron
-
-### Current implmentation
-
-The previous implementation removed after [v0.10](https://github.com/vmware-tanzu/octant/tree/release-0.10) had the following steps:
-
-1. Install and run `kind`
-1. Install kubectl and start Octant
-1. Apply yaml to create a test namespace and resources
-1. Run Cypress tests
-1. Clean up test namespace
-
-A wrapper that executes before tests would use `cy.execute` to run kubectl commands that could create a namespace.
-
-There were several problems as a result of this setup:
- - Test/cypress failure would leave the cluster in a dirty state
- - Sharing cluster state across multiple tests lead to multiple failures
- - Unreliable reporting as a result of cascading failures
-
-Running this setup locally became problematic because it would often leave behind unused resources if failing. The greater amount of compute resources available compared to a CI environment also hid undesired loading UI behaviors. For example, a resource may not be ready on the cluster, but Octant loads then proceed to fail the test.
-
-### Suggested implementation
-
-Tests can generally be divided into two types: mocked and cluster-dependent. This split is used to reflect the future development of action which allows running without a kubeconfig. Mocked tests will use stubbed websocket messages and are not truly e2e tests. These should check components that are not dependent on cluster states such as the context dropdown, navigation, and input filter.
-
-Rather than using kubectl for cluster dependent tests, use the javascript/typescript [client-go](https://github.com/kubernetes-client/javascript) library to programmatically create resources as needed by a given test.
-
-The wrapper that runs before all tests will only create a namespace and delete that namespace upon completion.
-
-Each test will be responsible for validating the needed cluster state before attempting to run tests.
-
-#### Mocked
-
-Mocked tests will have a list of stubbed messages read from file. Stubbed messages can be sent through various libraries for sending websocket messages with an API similar to below:
-
-```
-  sockets.mockServer = new Server("ws://localhost:7777/api/v1/stream")
-
-  sockets.mockServer.on("connection", socket => {
-    sockets.server = socket
-
-    // Will be sent any time a client connects
-    socket.send("Hello, world!")
-
-    socket.on("message", data => {
-      // Do something
-    }
-  }
-```
-
-A disadvantage of this method is that changes to components will also require updates to the stubbed messages.
-
-This method should be available because it avoids the need to provide cluster resources to test user interactivity. It also provides an alternative for testing potentially complex interactions. For example, we may want to test the color of an object in the resource viewer. Rather than creating objects which are known to have a certain object status in-cluster, this can provide a simplified alternative.
-
-#### Cluster-Dependent
-
-An example of a new implementation of tests using the javascript client-go library can be demonstrated with a case of testing port forwards.
-
-The current implementation looks for the port forward button HTML element in the summary view of a pod, clicks to start, then watches for the stop port forward button.
-
-Instead, the new implementation will [start a port forward](https://github.com/kubernetes-client/javascript/blob/master/examples/typescript/port-forward/port-forward.ts) for a given pod only check for the existence of a stop port forward button.
-
-The difference allows for creating a more specific by checking port forward functionality without having potential failures in generating the start button, click the button, etc. Another test for checking the contents of `Summary` tab will effectively test the same functionality without requiring a cluster state of an active port forward and a closed connection within the same test.
-
-### Implementation strategy
-
-A new Github Action workflow is added using [kinD](https://github.com/marketplace/actions/kind-kubernetes-in-docker-action) and [Cypress](https://github.com/cypress-io/github-action).
-
-Make a list of features to be tested based on the two groups described above.
-
-Create a `server.js` that will create a mock websocket to send messages.
-
-Create a wrapper that loads a given kubeconfig and create a namespace using the imported javascript client-go library.
-
-Depending on the test, `cy.before` will call the mocked websocket or do cluster setup.
-
-Each test that needs to create a resource will be responsible for doing so within the test. Reusable logic such as checking if a pod is running can be moved to a common library to be shared.
-
-Document the method for running e2e tests locally.
-
-Recordings of automated user interactions are recorded with the provided `CYPRESS_KEY` and send to a service which allows manual review if needed.