Repository: typescript-eslint/tslint-to-eslint-config
Pull request #432 (2020-04-29 02:55:42)

Add codelyzer component-class-suffix converter
<!--
👋 Hi, thanks for sending a PR to tslint-to-eslint-config! 💖
Please fill out all fields below to ensure your PR is reviewed quickly.
-->

## PR Checklist

-   [x] Addresses an existing issue: references #421
-   [x] That issue was marked as [`status: accepting prs`](https://github.com/typescript-eslint/tslint-to-eslint-config/labels/status%3A%20accepting%20prs)

## Overview

<!-- Brief description of what is changed and how the code change does that. -->

This is more like a example of how **codelyzer** rules should be placed inside their own folder so any contributor knows where find those converters.

This rule is pretty simple and examples can be found on [angular-eslint/component-class-suffix test](https://github.com/angular-eslint/angular-eslint/blob/master/packages/eslint-plugin/tests/rules/component-class-suffix.test.ts) file.

The [TSLint rule](http://codelyzer.com/rules/component-class-suffix/) is pretty much the same as the ESLint one, a set of rule arguments will be the suffix to match for any class decorated with `@Component`.


Patch:
diff --git a/package-lock.json b/package-lock.json
index f0f07e7..7dd553e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,30 +13,30 @@
             }
         },
         "@babel/compat-data": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz",
-            "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.6.tgz",
+            "integrity": "sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==",
             "dev": true,
             "requires": {
-                "browserslist": "^4.9.1",
+                "browserslist": "^4.11.1",
                 "invariant": "^2.2.4",
                 "semver": "^5.5.0"
             }
         },
         "@babel/core": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz",
-            "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz",
+            "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==",
             "dev": true,
             "requires": {
                 "@babel/code-frame": "^7.8.3",
-                "@babel/generator": "^7.9.0",
+                "@babel/generator": "^7.9.6",
                 "@babel/helper-module-transforms": "^7.9.0",
-                "@babel/helpers": "^7.9.0",
-                "@babel/parser": "^7.9.0",
+                "@babel/helpers": "^7.9.6",
+                "@babel/parser": "^7.9.6",
                 "@babel/template": "^7.8.6",
-                "@babel/traverse": "^7.9.0",
-                "@babel/types": "^7.9.0",
+                "@babel/traverse": "^7.9.6",
+                "@babel/types": "^7.9.6",
                 "convert-source-map": "^1.7.0",
                 "debug": "^4.1.0",
                 "gensync": "^1.0.0-beta.1",
@@ -57,44 +57,26 @@
                     }
                 },
                 "@babel/generator": {
-                    "version": "7.9.4",
-                    "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz",
-                    "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
+                    "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
                     "dev": true,
                     "requires": {
-                        "@babel/types": "^7.9.0",
+                        "@babel/types": "^7.9.6",
                         "jsesc": "^2.5.1",
                         "lodash": "^4.17.13",
                         "source-map": "^0.5.0"
                     }
                 },
                 "@babel/helper-function-name": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
-                    "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+                    "version": "7.9.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
+                    "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-get-function-arity": "^7.8.3",
                         "@babel/template": "^7.8.3",
-                        "@babel/types": "^7.8.3"
-                    }
-                },
-                "@babel/helper-get-function-arity": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
-                    "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/types": "^7.8.3"
-                    }
-                },
-                "@babel/helper-split-export-declaration": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
-                    "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/types": "^7.8.3"
+                        "@babel/types": "^7.9.5"
                     }
                 },
                 "@babel/highlight": {
@@ -109,48 +91,45 @@
                     }
                 },
                 "@babel/parser": {
-                    "version": "7.9.4",
-                    "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-                    "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz",
+                    "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==",
                     "dev": true
                 },
-                "@babel/template": {
-                    "version": "7.8.6",
-                    "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-                    "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/code-frame": "^7.8.3",
-                        "@babel/parser": "^7.8.6",
-                        "@babel/types": "^7.8.6"
-                    }
-                },
                 "@babel/traverse": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz",
-                    "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
+                    "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
                     "dev": true,
                     "requires": {
                         "@babel/code-frame": "^7.8.3",
-                        "@babel/generator": "^7.9.0",
-                        "@babel/helper-function-name": "^7.8.3",
+                        "@babel/generator": "^7.9.6",
+                        "@babel/helper-function-name": "^7.9.5",
                         "@babel/helper-split-export-declaration": "^7.8.3",
-                        "@babel/parser": "^7.9.0",
-                        "@babel/types": "^7.9.0",
+                        "@babel/parser": "^7.9.6",
+                        "@babel/types": "^7.9.6",
                         "debug": "^4.1.0",
                         "globals": "^11.1.0",
                         "lodash": "^4.17.13"
                     }
                 },
                 "@babel/types": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
-                    "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
-                        "@babel/helper-validator-identifier": "^7.9.0",
+                        "@babel/helper-validator-identifier": "^7.9.5",
                         "lodash": "^4.17.13",
                         "to-fast-properties": "^2.0.0"
+                    },
+                    "dependencies": {
+                        "@babel/helper-validator-identifier": {
+                            "version": "7.9.5",
+                            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
+                            "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
+                            "dev": true
+                        }
                     }
                 },
                 "chalk": {
@@ -164,30 +143,6 @@
                         "supports-color": "^5.3.0"
                     }
                 },
-                "convert-source-map": {
-                    "version": "1.7.0",
-                    "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
-                    "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
-                    "dev": true,
-                    "requires": {
-                        "safe-buffer": "~5.1.1"
-                    }
-                },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "ms": {
-                    "version": "2.1.2",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-                    "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-                    "dev": true
-                },
                 "supports-color": {
                     "version": "5.5.0",
                     "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -240,9 +195,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -269,9 +224,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -282,13 +237,13 @@
             }
         },
         "@babel/helper-compilation-targets": {
-            "version": "7.8.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz",
-            "integrity": "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz",
+            "integrity": "sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==",
             "dev": true,
             "requires": {
-                "@babel/compat-data": "^7.8.6",
-                "browserslist": "^4.9.1",
+                "@babel/compat-data": "^7.9.6",
+                "browserslist": "^4.11.1",
                 "invariant": "^2.2.4",
                 "levenary": "^1.1.1",
                 "semver": "^5.5.0"
@@ -442,9 +397,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -471,9 +426,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -545,9 +500,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -588,13 +543,19 @@
                 "@babel/types": "^7.8.3"
             },
             "dependencies": {
+                "@babel/helper-validator-identifier": {
+                    "version": "7.9.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
+                    "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
+                    "dev": true
+                },
                 "@babel/types": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
-                    "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
-                        "@babel/helper-validator-identifier": "^7.9.0",
+                        "@babel/helper-validator-identifier": "^7.9.5",
                         "lodash": "^4.17.13",
                         "to-fast-properties": "^2.0.0"
                     }
@@ -616,82 +577,22 @@
                 "lodash": "^4.17.13"
             },
             "dependencies": {
-                "@babel/code-frame": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-                    "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/highlight": "^7.8.3"
-                    }
-                },
-                "@babel/helper-split-export-declaration": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
-                    "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/types": "^7.8.3"
-                    }
-                },
-                "@babel/highlight": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
-                    "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/helper-validator-identifier": "^7.9.0",
-                        "chalk": "^2.0.0",
-                        "js-tokens": "^4.0.0"
-                    }
-                },
-                "@babel/parser": {
-                    "version": "7.9.4",
-                    "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-                    "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
+                "@babel/helper-validator-identifier": {
+                    "version": "7.9.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
+                    "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
                     "dev": true
                 },
-                "@babel/template": {
-                    "version": "7.8.6",
-                    "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-                    "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/code-frame": "^7.8.3",
-                        "@babel/parser": "^7.8.6",
-                        "@babel/types": "^7.8.6"
-                    }
-                },
                 "@babel/types": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
-                    "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
-                        "@babel/helper-validator-identifier": "^7.9.0",
+                        "@babel/helper-validator-identifier": "^7.9.5",
                         "lodash": "^4.17.13",
                         "to-fast-properties": "^2.0.0"
                     }
-                },
-                "chalk": {
-                    "version": "2.4.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-                    "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^3.2.1",
-                        "escape-string-regexp": "^1.0.5",
-                        "supports-color": "^5.3.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "5.5.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-                    "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
                 }
             }
         },
@@ -752,9 +653,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -929,73 +830,22 @@
                 "@babel/types": "^7.8.3"
             },
             "dependencies": {
-                "@babel/code-frame": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
-                    "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/highlight": "^7.8.3"
-                    }
-                },
-                "@babel/highlight": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
-                    "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/helper-validator-identifier": "^7.9.0",
-                        "chalk": "^2.0.0",
-                        "js-tokens": "^4.0.0"
-                    }
-                },
-                "@babel/parser": {
-                    "version": "7.9.4",
-                    "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-                    "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
+                "@babel/helper-validator-identifier": {
+                    "version": "7.9.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
+                    "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
                     "dev": true
                 },
-                "@babel/template": {
-                    "version": "7.8.6",
-                    "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-                    "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/code-frame": "^7.8.3",
-                        "@babel/parser": "^7.8.6",
-                        "@babel/types": "^7.8.6"
-                    }
-                },
                 "@babel/types": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
-                    "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
-                        "@babel/helper-validator-identifier": "^7.9.0",
+                        "@babel/helper-validator-identifier": "^7.9.5",
                         "lodash": "^4.17.13",
                         "to-fast-properties": "^2.0.0"
                     }
-                },
-                "chalk": {
-                    "version": "2.4.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-                    "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^3.2.1",
-                        "escape-string-regexp": "^1.0.5",
-                        "supports-color": "^5.3.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "5.5.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-                    "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
                 }
             }
         },
@@ -1046,9 +896,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -1059,14 +909,14 @@
             }
         },
         "@babel/helpers": {
-            "version": "7.9.2",
-            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz",
-            "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz",
+            "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==",
             "dev": true,
             "requires": {
                 "@babel/template": "^7.8.3",
-                "@babel/traverse": "^7.9.0",
-                "@babel/types": "^7.9.0"
+                "@babel/traverse": "^7.9.6",
+                "@babel/types": "^7.9.6"
             },
             "dependencies": {
                 "@babel/code-frame": {
@@ -1079,44 +929,26 @@
                     }
                 },
                 "@babel/generator": {
-                    "version": "7.9.4",
-                    "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz",
-                    "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
+                    "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
                     "dev": true,
                     "requires": {
-                        "@babel/types": "^7.9.0",
+                        "@babel/types": "^7.9.6",
                         "jsesc": "^2.5.1",
                         "lodash": "^4.17.13",
                         "source-map": "^0.5.0"
                     }
                 },
                 "@babel/helper-function-name": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
-                    "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+                    "version": "7.9.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
+                    "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-get-function-arity": "^7.8.3",
                         "@babel/template": "^7.8.3",
-                        "@babel/types": "^7.8.3"
-                    }
-                },
-                "@babel/helper-get-function-arity": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
-                    "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/types": "^7.8.3"
-                    }
-                },
-                "@babel/helper-split-export-declaration": {
-                    "version": "7.8.3",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
-                    "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/types": "^7.8.3"
+                        "@babel/types": "^7.9.5"
                     }
                 },
                 "@babel/highlight": {
@@ -1131,48 +963,45 @@
                     }
                 },
                 "@babel/parser": {
-                    "version": "7.9.4",
-                    "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
-                    "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz",
+                    "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==",
                     "dev": true
                 },
-                "@babel/template": {
-                    "version": "7.8.6",
-                    "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
-                    "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/code-frame": "^7.8.3",
-                        "@babel/parser": "^7.8.6",
-                        "@babel/types": "^7.8.6"
-                    }
-                },
                 "@babel/traverse": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz",
-                    "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
+                    "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
                     "dev": true,
                     "requires": {
                         "@babel/code-frame": "^7.8.3",
-                        "@babel/generator": "^7.9.0",
-                        "@babel/helper-function-name": "^7.8.3",
+                        "@babel/generator": "^7.9.6",
+                        "@babel/helper-function-name": "^7.9.5",
                         "@babel/helper-split-export-declaration": "^7.8.3",
-                        "@babel/parser": "^7.9.0",
-                        "@babel/types": "^7.9.0",
+                        "@babel/parser": "^7.9.6",
+                        "@babel/types": "^7.9.6",
                         "debug": "^4.1.0",
                         "globals": "^11.1.0",
                         "lodash": "^4.17.13"
                     }
                 },
                 "@babel/types": {
-                    "version": "7.9.0",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
-                    "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
-                        "@babel/helper-validator-identifier": "^7.9.0",
+                        "@babel/helper-validator-identifier": "^7.9.5",
                         "lodash": "^4.17.13",
                         "to-fast-properties": "^2.0.0"
+                    },
+                    "dependencies": {
+                        "@babel/helper-validator-identifier": {
+                            "version": "7.9.5",
+                            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
+                            "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
+                            "dev": true
+                        }
                     }
                 },
                 "chalk": {
@@ -1186,21 +1015,6 @@
                         "supports-color": "^5.3.0"
                     }
                 },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
-                "ms": {
-                    "version": "2.1.2",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-                    "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-                    "dev": true
-                },
                 "supports-color": {
                     "version": "5.5.0",
                     "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -1340,9 +1154,9 @@
             }
         },
         "@babel/plugin-proposal-object-rest-spread": {
-            "version": "7.9.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz",
-            "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz",
+            "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==",
             "dev": true,
             "requires": {
                 "@babel/helper-plugin-utils": "^7.8.3",
@@ -1744,9 +1558,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -1913,14 +1727,14 @@
             }
         },
         "@babel/plugin-transform-modules-amd": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz",
-            "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz",
+            "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==",
             "dev": true,
             "requires": {
                 "@babel/helper-module-transforms": "^7.9.0",
                 "@babel/helper-plugin-utils": "^7.8.3",
-                "babel-plugin-dynamic-import-node": "^2.3.0"
+                "babel-plugin-dynamic-import-node": "^2.3.3"
             },
             "dependencies": {
                 "@babel/helper-plugin-utils": {
@@ -1932,15 +1746,15 @@
             }
         },
         "@babel/plugin-transform-modules-commonjs": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz",
-            "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz",
+            "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==",
             "dev": true,
             "requires": {
                 "@babel/helper-module-transforms": "^7.9.0",
                 "@babel/helper-plugin-utils": "^7.8.3",
                 "@babel/helper-simple-access": "^7.8.3",
-                "babel-plugin-dynamic-import-node": "^2.3.0"
+                "babel-plugin-dynamic-import-node": "^2.3.3"
             },
             "dependencies": {
                 "@babel/helper-plugin-utils": {
@@ -1952,15 +1766,15 @@
             }
         },
         "@babel/plugin-transform-modules-systemjs": {
-            "version": "7.9.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz",
-            "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz",
+            "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==",
             "dev": true,
             "requires": {
                 "@babel/helper-hoist-variables": "^7.8.3",
                 "@babel/helper-module-transforms": "^7.9.0",
                 "@babel/helper-plugin-utils": "^7.8.3",
-                "babel-plugin-dynamic-import-node": "^2.3.0"
+                "babel-plugin-dynamic-import-node": "^2.3.3"
             },
             "dependencies": {
                 "@babel/helper-plugin-utils": {
@@ -2219,13 +2033,13 @@
             }
         },
         "@babel/preset-env": {
-            "version": "7.9.5",
-            "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.5.tgz",
-            "integrity": "sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ==",
+            "version": "7.9.6",
+            "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz",
+            "integrity": "sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==",
             "dev": true,
             "requires": {
-                "@babel/compat-data": "^7.9.0",
-                "@babel/helper-compilation-targets": "^7.8.7",
+                "@babel/compat-data": "^7.9.6",
+                "@babel/helper-compilation-targets": "^7.9.6",
                 "@babel/helper-module-imports": "^7.8.3",
                 "@babel/helper-plugin-utils": "^7.8.3",
                 "@babel/plugin-proposal-async-generator-functions": "^7.8.3",
@@ -2233,7 +2047,7 @@
                 "@babel/plugin-proposal-json-strings": "^7.8.3",
                 "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
                 "@babel/plugin-proposal-numeric-separator": "^7.8.3",
-                "@babel/plugin-proposal-object-rest-spread": "^7.9.5",
+                "@babel/plugin-proposal-object-rest-spread": "^7.9.6",
                 "@babel/plugin-proposal-optional-catch-binding": "^7.8.3",
                 "@babel/plugin-proposal-optional-chaining": "^7.9.0",
                 "@babel/plugin-proposal-unicode-property-regex": "^7.8.3",
@@ -2260,9 +2074,9 @@
                 "@babel/plugin-transform-function-name": "^7.8.3",
                 "@babel/plugin-transform-literals": "^7.8.3",
                 "@babel/plugin-transform-member-expression-literals": "^7.8.3",
-                "@babel/plugin-transform-modules-amd": "^7.9.0",
-                "@babel/plugin-transform-modules-commonjs": "^7.9.0",
-                "@babel/plugin-transform-modules-systemjs": "^7.9.0",
+                "@babel/plugin-transform-modules-amd": "^7.9.6",
+                "@babel/plugin-transform-modules-commonjs": "^7.9.6",
+                "@babel/plugin-transform-modules-systemjs": "^7.9.6",
                 "@babel/plugin-transform-modules-umd": "^7.9.0",
                 "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
                 "@babel/plugin-transform-new-target": "^7.8.3",
@@ -2278,8 +2092,8 @@
                 "@babel/plugin-transform-typeof-symbol": "^7.8.4",
                 "@babel/plugin-transform-unicode-regex": "^7.8.3",
                 "@babel/preset-modules": "^0.1.3",
-                "@babel/types": "^7.9.5",
-                "browserslist": "^4.9.1",
+                "@babel/types": "^7.9.6",
+                "browserslist": "^4.11.1",
                 "core-js-compat": "^3.6.2",
                 "invariant": "^2.2.2",
                 "levenary": "^1.1.1",
@@ -2299,9 +2113,9 @@
                     "dev": true
                 },
                 "@babel/types": {
-                    "version": "7.9.5",
-                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
-                    "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+                    "version": "7.9.6",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
+                    "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
                     "dev": true,
                     "requires": {
                         "@babel/helper-validator-identifier": "^7.9.5",
@@ -2601,30 +2415,30 @@
             }
         },
         "@jest/core": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.0.tgz",
-            "integrity": "sha512-YQPhBtPQa8QJCMpseg1b/DqJE0iG16uhUQOAOdRX2dbIzgZeobNQn4Cmigr1va6IC3RTnGPTUF7QmWOzsiJtbQ==",
+            "version": "25.5.4",
+            "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz",
+            "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==",
             "dev": true,
             "requires": {
                 "@jest/console": "^25.5.0",
-                "@jest/reporters": "^25.5.0",
+                "@jest/reporters": "^25.5.1",
                 "@jest/test-result": "^25.5.0",
-                "@jest/transform": "^25.5.0",
+                "@jest/transform": "^25.5.1",
                 "@jest/types": "^25.5.0",
                 "ansi-escapes": "^4.2.1",
                 "chalk": "^3.0.0",
                 "exit": "^0.1.2",
                 "graceful-fs": "^4.2.4",
                 "jest-changed-files": "^25.5.0",
-                "jest-config": "^25.5.0",
-                "jest-haste-map": "^25.5.0",
+                "jest-config": "^25.5.4",
+                "jest-haste-map": "^25.5.1",
                 "jest-message-util": "^25.5.0",
                 "jest-regex-util": "^25.2.6",
-                "jest-resolve": "^25.5.0",
-                "jest-resolve-dependencies": "^25.5.0",
-                "jest-runner": "^25.5.0",
-                "jest-runtime": "^25.5.0",
-                "jest-snapshot": "^25.5.0",
+                "jest-resolve": "^25.5.1",
+                "jest-resolve-dependencies": "^25.5.4",
+                "jest-runner": "^25.5.4",
+                "jest-runtime": "^25.5.4",
+                "jest-snapshot": "^25.5.1",
                 "jest-util": "^25.5.0",
                 "jest-validate": "^25.5.0",
                 "jest-watcher": "^25.5.0",
@@ -2817,9 +2631,9 @@
             }
         },
         "@jest/globals": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.0.tgz",
-            "integrity": "sha512-yC+WlD1ytYPZvTSbmSeZM+BNbkFXtkTBBjtmoFDYxjznwugl2Qv2KW7csxL7nTxJOxyjkffy6ngLZ6YMqAe7MA==",
+            "version": "25.5.2",
+            "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz",
+            "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==",
             "dev": true,
             "requires": {
                 "@jest/environment": "^25.5.0",
@@ -2877,15 +2691,15 @@
             }
         },
         "@jest/reporters": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.0.tgz",
-            "integrity": "sha512-CnrfHhrxGgMI2Va/w0e406CRmf+P1ZBAahgM4aaETWy8IQ5n3aGEDNE+tuh7vexIFCfZ1QFsVMYzvcVT4o9XOQ==",
+            "version": "25.5.1",
+            "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz",
+            "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==",
             "dev": true,
             "requires": {
                 "@bcoe/v8-coverage": "^0.2.3",
                 "@jest/console": "^25.5.0",
                 "@jest/test-result": "^25.5.0",
-                "@jest/transform": "^25.5.0",
+                "@jest/transform": "^25.5.1",
                 "@jest/types": "^25.5.0",
                 "chalk": "^3.0.0",
                 "collect-v8-coverage": "^1.0.0",
@@ -2897,8 +2711,8 @@
                 "istanbul-lib-report": "^3.0.0",
                 "istanbul-lib-source-maps": "^4.0.0",
                 "istanbul-reports": "^3.0.2",
-                "jest-haste-map": "^25.5.0",
-                "jest-resolve": "^25.5.0",
+                "jest-haste-map": "^25.5.1",
+                "jest-resolve": "^25.5.1",
                 "jest-util": "^25.5.0",
                 "jest-worker": "^25.5.0",
                 "node-notifier": "^6.0.0",
@@ -3045,22 +2859,22 @@
             }
         },
         "@jest/test-sequencer": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.0.tgz",
-            "integrity": "sha512-c9Go3EK4+5erD2HKibIyt8JqImV23iGTWfaqMKdtD3aish8CDcXlq1X+L/CMFPOORJDV63quN4obR6iHpARapg==",
+            "version": "25.5.4",
+            "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz",
+            "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==",
             "dev": true,
             "requires": {
                 "@jest/test-result": "^25.5.0",
                 "graceful-fs": "^4.2.4",
-                "jest-haste-map": "^25.5.0",
-                "jest-runner": "^25.5.0",
-                "jest-runtime": "^25.5.0"
+                "jest-haste-map": "^25.5.1",
+                "jest-runner": "^25.5.4",
+                "jest-runtime": "^25.5.4"
             }
         },
         "@jest/transform": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.0.tgz",
-            "integrity": "sha512-yqxpmosig2JWKHVbyEl8I7btXCinLIL8b3ENJYMvl9TqzZ9KulnV2t08wp4Wbv/pFKYqTd5NWyEzi4xCpcQ3mg==",
+            "version": "25.5.1",
+            "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz",
+            "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==",
             "dev": true,
             "requires": {
                 "@babel/core": "^7.1.0",
@@ -3070,7 +2884,7 @@
                 "convert-source-map": "^1.4.0",
                 "fast-json-stable-stringify": "^2.0.0",
                 "graceful-fs": "^4.2.4",
-                "jest-haste-map": "^25.5.0",
+                "jest-haste-map": "^25.5.1",
                 "jest-regex-util": "^25.2.6",
                 "jest-util": "^25.5.0",
                 "micromatch": "^4.0.2",
@@ -3272,6 +3086,15 @@
                 "@types/node": "*"
             }
         },
+        "@types/graceful-fs": {
+            "version": "4.1.3",
+            "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz",
+            "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==",
+            "dev": true,
+            "requires": {
+                "@types/node": "*"
+            }
+        },
         "@types/istanbul-lib-coverage": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
@@ -3675,12 +3498,12 @@
             "dev": true
         },
         "babel-jest": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.0.tgz",
-            "integrity": "sha512-8AfVNU7MEMsa+MjbY/CmwrGuQdplZ/+GkeWJDpRPm4C4wJZf937Pd9KgWU3NbnWEcYvIiqR15wy0U6C028kTWw==",
+            "version": "25.5.1",
+            "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz",
+            "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==",
             "dev": true,
             "requires": {
-                "@jest/transform": "^25.5.0",
+                "@jest/transform": "^25.5.1",
                 "@jest/types": "^25.5.0",
                 "@types/babel__core": "^7.1.7",
                 "babel-plugin-istanbul": "^6.0.0",
@@ -3740,9 +3563,9 @@
             }
         },
         "babel-plugin-dynamic-import-node": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
-            "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+            "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
             "dev": true,
             "requires": {
                 "object.assign": "^4.1.0"
@@ -3911,13 +3734,13 @@
             }
         },
         "browserslist": {
-            "version": "4.11.1",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz",
-            "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==",
+            "version": "4.12.0",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz",
+            "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==",
             "dev": true,
             "requires": {
-                "caniuse-lite": "^1.0.30001038",
-                "electron-to-chromium": "^1.3.390",
+                "caniuse-lite": "^1.0.30001043",
+                "electron-to-chromium": "^1.3.413",
                 "node-releases": "^1.1.53",
                 "pkg-up": "^2.0.0"
             }
@@ -3972,9 +3795,9 @@
             "dev": true
         },
         "caniuse-lite": {
-            "version": "1.0.30001039",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz",
-            "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==",
+            "version": "1.0.30001048",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz",
+            "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==",
             "dev": true
         },
         "capture-exit": {
@@ -4240,12 +4063,12 @@
             "dev": true
         },
         "core-js-compat": {
-            "version": "3.6.4",
-            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz",
-            "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==",
+            "version": "3.6.5",
+            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
+            "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
             "dev": true,
             "requires": {
-                "browserslist": "^4.8.3",
+                "browserslist": "^4.8.5",
                 "semver": "7.0.0"
             },
             "dependencies": {
@@ -4296,9 +4119,9 @@
             "dev": true
         },
         "cssstyle": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.2.0.tgz",
-            "integrity": "sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
+            "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
             "dev": true,
             "requires": {
                 "cssom": "~0.3.6"
@@ -4482,9 +4305,9 @@
             }
         },
         "electron-to-chromium": {
-            "version": "1.3.398",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.398.tgz",
-            "integrity": "sha512-BJjxuWLKFbM5axH3vES7HKMQgAknq9PZHBkMK/rEXUQG9i1Iw5R+6hGkm6GtsQSANjSUrh/a6m32nzCNDNo/+w==",
+            "version": "1.3.423",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.423.tgz",
+            "integrity": "sha512-jXdnLcawJ/EMdN+j77TC3YyeAWiIjo1U63DFCKrjtLv4cu8ToyoF4HYXtFvkVVHhEtIl7lU1uDd307Xj1/YDjw==",
             "dev": true
         },
         "elegant-spinner": {
@@ -5785,14 +5608,14 @@
             }
         },
         "jest": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.0.tgz",
-            "integrity": "sha512-wHCEcs3cyQmQfn2qNYoC/g51TGOE50F6dSsGNqgkkUHYDND29Cqe88FHDNXF04P7odYhkABxJ4Fe8kbig8R/8g==",
+            "version": "25.5.4",
+            "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz",
+            "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==",
             "dev": true,
             "requires": {
-                "@jest/core": "^25.5.0",
+                "@jest/core": "^25.5.4",
                 "import-local": "^3.0.2",
-                "jest-cli": "^25.5.0"
+                "jest-cli": "^25.5.4"
             },
             "dependencies": {
                 "@jest/types": {
@@ -5843,12 +5666,12 @@
                     "dev": true
                 },
                 "jest-cli": {
-                    "version": "25.5.0",
-                    "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.0.tgz",
-                    "integrity": "sha512-zcUtEL1wD7BO7ehhwb7KodGS//B5dqgEIrmO3zY4xOjMnS7MMs06yzndvlDqzJqMylIkeOr1A3ToGYWFbBNSmQ==",
+                    "version": "25.5.4",
+                    "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz",
+                    "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==",
                     "dev": true,
                     "requires": {
-                        "@jest/core": "^25.5.0",
+                        "@jest/core": "^25.5.4",
                         "@jest/test-result": "^25.5.0",
                         "@jest/types": "^25.5.0",
                         "chalk": "^3.0.0",
@@ -5856,7 +5679,7 @@
                         "graceful-fs": "^4.2.4",
                         "import-local": "^3.0.2",
                         "is-ci": "^2.0.0",
-                        "jest-config": "^25.5.0",
+                        "jest-config": "^25.5.4",
                         "jest-util": "^25.5.0",
                         "jest-validate": "^25.5.0",
                         "prompts": "^2.0.1",
@@ -6016,15 +5839,15 @@
             }
         },
         "jest-config": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.0.tgz",
-            "integrity": "sha512-ucmAX+AdcQAQCOnXOsefYygtFCdfkU7/pUdO+etV0JSgvO6WWnu/bWQLbff3SMw/gZLGl/t3S5Ts7Ct7Pejlwg==",
+            "version": "25.5.4",
+            "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz",
+            "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==",
             "dev": true,
             "requires": {
                 "@babel/core": "^7.1.0",
-                "@jest/test-sequencer": "^25.5.0",
+                "@jest/test-sequencer": "^25.5.4",
                 "@jest/types": "^25.5.0",
-                "babel-jest": "^25.5.0",
+                "babel-jest": "^25.5.1",
                 "chalk": "^3.0.0",
                 "deepmerge": "^4.2.2",
                 "glob": "^7.1.1",
@@ -6032,9 +5855,9 @@
                 "jest-environment-jsdom": "^25.5.0",
                 "jest-environment-node": "^25.5.0",
                 "jest-get-type": "^25.2.6",
-                "jest-jasmine2": "^25.5.0",
+                "jest-jasmine2": "^25.5.4",
                 "jest-regex-util": "^25.2.6",
-                "jest-resolve": "^25.5.0",
+                "jest-resolve": "^25.5.1",
                 "jest-util": "^25.5.0",
                 "jest-validate": "^25.5.0",
                 "micromatch": "^4.0.2",
@@ -6386,12 +6209,13 @@
             "dev": true
         },
         "jest-haste-map": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.0.tgz",
-            "integrity": "sha512-GTyTQ7tvWRUNUZKDl6DBUDJdrhXClcJ7Y0NdoRBJbOmN1KbrZIjSEmcoTgaOLOL+VwvLWhgphMR7HJ9Ywtp76Q==",
+            "version": "25.5.1",
+            "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz",
+            "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==",
             "dev": true,
             "requires": {
                 "@jest/types": "^25.5.0",
+                "@types/graceful-fs": "^4.1.2",
                 "anymatch": "^3.0.3",
                 "fb-watchman": "^2.0.0",
                 "fsevents": "^2.1.2",
@@ -6464,9 +6288,9 @@
             }
         },
         "jest-jasmine2": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.0.tgz",
-            "integrity": "sha512-e66pVthiFQairNJddx7xoENQV9q3H8pNFj4SlCRb2/hi/ztVeO7RY3h41jpL/OZ5R4ewar36quJebL16jNoliQ==",
+            "version": "25.5.4",
+            "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz",
+            "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==",
             "dev": true,
             "requires": {
                 "@babel/traverse": "^7.1.0",
@@ -6481,8 +6305,8 @@
                 "jest-each": "^25.5.0",
                 "jest-matcher-utils": "^25.5.0",
                 "jest-message-util": "^25.5.0",
-                "jest-runtime": "^25.5.0",
-                "jest-snapshot": "^25.5.0",
+                "jest-runtime": "^25.5.4",
+                "jest-snapshot": "^25.5.1",
                 "jest-util": "^25.5.0",
                 "pretty-format": "^25.5.0",
                 "throat": "^5.0.0"
@@ -6859,9 +6683,9 @@
             "dev": true
         },
         "jest-resolve": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.0.tgz",
-            "integrity": "sha512-quY4fdl64UwIGZhrbWgHCORC4xPgrM+UUzucYW0Oy1PjIUHgazVTji+XtW1iQRbsrJEpfs974L2oXX3QHaYBaA==",
+            "version": "25.5.1",
+            "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz",
+            "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==",
             "dev": true,
             "requires": {
                 "@jest/types": "^25.5.0",
@@ -6934,14 +6758,14 @@
             }
         },
         "jest-resolve-dependencies": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.0.tgz",
-            "integrity": "sha512-TXTYxNSfB9EBl1/bPUyC4gPCy+WI/DhTtePfWckvS9qworAhq9HJI1OBSoHFP5X2WeO/mx4rCfU3atWo+OH7IQ==",
+            "version": "25.5.4",
+            "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz",
+            "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==",
             "dev": true,
             "requires": {
                 "@jest/types": "^25.5.0",
                 "jest-regex-util": "^25.2.6",
-                "jest-snapshot": "^25.5.0"
+                "jest-snapshot": "^25.5.1"
             },
             "dependencies": {
                 "@jest/types": {
@@ -6994,9 +6818,9 @@
             }
         },
         "jest-runner": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.0.tgz",
-            "integrity": "sha512-BJRbtZGe9V19Cv3ARFrpAfMHoHObUYLXNBKS4LTYBd85OJEp8DyFpxCG5g3AobrtmuMIvIbcNg4MvWlTtN3ODQ==",
+            "version": "25.5.4",
+            "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz",
+            "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==",
             "dev": true,
             "requires": {
                 "@jest/console": "^25.5.0",
@@ -7006,14 +6830,14 @@
                 "chalk": "^3.0.0",
                 "exit": "^0.1.2",
                 "graceful-fs": "^4.2.4",
-                "jest-config": "^25.5.0",
+                "jest-config": "^25.5.4",
                 "jest-docblock": "^25.3.0",
-                "jest-haste-map": "^25.5.0",
-                "jest-jasmine2": "^25.5.0",
+                "jest-haste-map": "^25.5.1",
+                "jest-jasmine2": "^25.5.4",
                 "jest-leak-detector": "^25.5.0",
                 "jest-message-util": "^25.5.0",
-                "jest-resolve": "^25.5.0",
-                "jest-runtime": "^25.5.0",
+                "jest-resolve": "^25.5.1",
+                "jest-runtime": "^25.5.4",
                 "jest-util": "^25.5.0",
                 "jest-worker": "^25.5.0",
                 "source-map-support": "^0.5.6",
@@ -7070,17 +6894,17 @@
             }
         },
         "jest-runtime": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.0.tgz",
-            "integrity": "sha512-s7TqawKRjaNaE82PjXxDYVhjrMQqjTiiY63N1jFcYtX2xtg05xsgCBk0ls6NMR3fy3AtvbPIQjD3FpssH01l6A==",
+            "version": "25.5.4",
+            "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz",
+            "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==",
             "dev": true,
             "requires": {
                 "@jest/console": "^25.5.0",
                 "@jest/environment": "^25.5.0",
-                "@jest/globals": "^25.5.0",
+                "@jest/globals": "^25.5.2",
                 "@jest/source-map": "^25.5.0",
                 "@jest/test-result": "^25.5.0",
-                "@jest/transform": "^25.5.0",
+                "@jest/transform": "^25.5.1",
                 "@jest/types": "^25.5.0",
                 "@types/yargs": "^15.0.0",
                 "chalk": "^3.0.0",
@@ -7088,13 +6912,13 @@
                 "exit": "^0.1.2",
                 "glob": "^7.1.3",
                 "graceful-fs": "^4.2.4",
-                "jest-config": "^25.5.0",
-                "jest-haste-map": "^25.5.0",
+                "jest-config": "^25.5.4",
+                "jest-haste-map": "^25.5.1",
                 "jest-message-util": "^25.5.0",
                 "jest-mock": "^25.5.0",
                 "jest-regex-util": "^25.2.6",
-                "jest-resolve": "^25.5.0",
-                "jest-snapshot": "^25.5.0",
+                "jest-resolve": "^25.5.1",
+                "jest-snapshot": "^25.5.1",
                 "jest-util": "^25.5.0",
                 "jest-validate": "^25.5.0",
                 "realpath-native": "^2.0.0",
@@ -7162,9 +6986,9 @@
             }
         },
         "jest-snapshot": {
-            "version": "25.5.0",
-            "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.0.tgz",
-            "integrity": "sha512-DveG7ZRn6HEmpDxpZXXR/U5x/aKG5N88tdaB+CH0d5jpb9tuvLMZn8rGZeBiLPS0RCO5VIlu8HL/WtY6wMk0QA==",
+            "version": "25.5.1",
+            "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz",
+            "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==",
             "dev": true,
             "requires": {
                 "@babel/types": "^7.0.0",
@@ -7177,7 +7001,7 @@
                 "jest-get-type": "^25.2.6",
                 "jest-matcher-utils": "^25.5.0",
                 "jest-message-util": "^25.5.0",
-                "jest-resolve": "^25.5.0",
+                "jest-resolve": "^25.5.1",
                 "make-dir": "^3.0.0",
                 "natural-compare": "^1.4.0",
                 "pretty-format": "^25.5.0",
@@ -7576,20 +7400,12 @@
             "dev": true
         },
         "json5": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.2.tgz",
-            "integrity": "sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ==",
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+            "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
             "dev": true,
             "requires": {
                 "minimist": "^1.2.5"
-            },
-            "dependencies": {
-                "minimist": {
-                    "version": "1.2.5",
-                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-                    "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
-                    "dev": true
-                }
             }
         },
         "jsprim": {
@@ -7648,9 +7464,9 @@
             "dev": true
         },
         "lint-staged": {
-            "version": "10.2.0",
-            "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.2.0.tgz",
-            "integrity": "sha512-4Dw2XMtEOGpICl0wvicE5KT/eFlt/kmwMmpNS4v09I/ywRWuR5udbMWjdfZez24jE6r0bQmPpkLZ1+wUGE1S+w==",
+            "version": "10.2.2",
+            "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.2.2.tgz",
+            "integrity": "sha512-78kNqNdDeKrnqWsexAmkOU3Z5wi+1CsQmUmfCuYgMTE8E4rAIX8RHW7xgxwAZ+LAayb7Cca4uYX4P3LlevzjVg==",
             "dev": true,
             "requires": {
                 "chalk": "^4.0.0",
diff --git a/package.json b/package.json
index 18bfc54..a5635a8 100644
--- a/package.json
+++ b/package.json
@@ -19,21 +19,21 @@
         "typescript": "3.8.3"
     },
     "devDependencies": {
-        "@babel/core": "7.9.0",
+        "@babel/core": "7.9.6",
         "@babel/plugin-proposal-nullish-coalescing-operator": "7.8.3",
         "@babel/plugin-proposal-optional-chaining": "7.9.0",
-        "@babel/preset-env": "7.9.5",
+        "@babel/preset-env": "7.9.6",
         "@babel/preset-typescript": "7.9.0",
         "@types/glob": "7.1.1",
         "@types/jest": "25.2.1",
         "@types/node": "12.12.21",
         "@typescript-eslint/eslint-plugin": "2.29.0",
         "@typescript-eslint/parser": "2.29.0",
-        "babel-jest": "25.5.0",
+        "babel-jest": "25.5.1",
         "eslint": "6.8.0",
         "husky": "4.2.5",
-        "jest": "25.5.0",
-        "lint-staged": "10.2.0",
+        "jest": "25.5.4",
+        "lint-staged": "10.2.2",
         "prettier": "2.0.5",
         "strip-ansi": "6.0.0"
     },
diff --git a/src/comments/convertComments.ts b/src/comments/convertComments.ts
index dad74e0..4e456c7 100644
--- a/src/comments/convertComments.ts
+++ b/src/comments/convertComments.ts
@@ -17,7 +17,14 @@ const noGlobsResult: ResultWithDataStatus<string[]> = {
 export const convertComments = async (
     dependencies: ConvertCommentsDependencies,
     filePathGlobs: true | string | string[] | undefined,
-): Promise<ResultWithDataStatus<string[]>> => {
+): Promise<ResultWithDataStatus<string[] | undefined>> => {
+    if (filePathGlobs === undefined) {
+        return {
+            data: undefined,
+            status: ResultStatus.Succeeded,
+        };
+    }
+
     if (filePathGlobs === true) {
         return noGlobsResult;
     }
diff --git a/src/conversion/convertConfig.ts b/src/conversion/convertConfig.ts
index 774f808..5b1bb2b 100644
--- a/src/conversion/convertConfig.ts
+++ b/src/conversion/convertConfig.ts
@@ -65,7 +65,7 @@ export const convertConfig = async (
 
     // 6. A summary of the results is printed to the user's console
     await dependencies.reportConversionResults(settings.config, simplifiedConfiguration);
-    dependencies.reportCommentResults(settings.comments, commentsResult);
+    dependencies.reportCommentResults(commentsResult);
     await dependencies.logMissingPackages(
         simplifiedConfiguration,
         originalConfigurations.data.packages,
diff --git a/src/creation/simplification/retrieveExtendsValues.ts b/src/creation/simplification/retrieveExtendsValues.ts
index c6ed31a..9d3a10e 100644
--- a/src/creation/simplification/retrieveExtendsValues.ts
+++ b/src/creation/simplification/retrieveExtendsValues.ts
@@ -18,7 +18,12 @@ const builtInExtensions = new Map([
     ["eslint:recommended", "eslint/conf/eslint-recommended"],
 ]);
 
-const typescriptPluginExtensions = new Map([
+const pluginExtensions = new Map([
+    ["eslint-plugin-prettier", "node_modules/eslint-config-prettier/index.js"],
+    [
+        "eslint-plugin-prettier/@typescript-eslint",
+        "node_modules/eslint-config-prettier/@typescript-eslint.js",
+    ],
     [
         "plugin:@typescript-eslint/all",
         "node_modules/@typescript-eslint/eslint-plugin/dist/configs/all.json",
@@ -54,10 +59,10 @@ export const retrieveExtendsValues = async (
                 return;
             }
 
-            const typescriptPluginExtension = typescriptPluginExtensions.get(extensionName);
-            if (typescriptPluginExtension !== undefined) {
+            const pluginExtension = pluginExtensions.get(extensionName);
+            if (pluginExtension !== undefined) {
                 const importedTypeScriptPlugin = (await dependencies.importer(
-                    typescriptPluginExtension,
+                    pluginExtension,
                 )) as ESLintConfiguration;
                 importedExtensions.push({
                     rules: importedTypeScriptPlugin.rules,
diff --git a/src/creation/simplification/simplifyPackageRules.ts b/src/creation/simplification/simplifyPackageRules.ts
index 3de99f5..b7df6f3 100644
--- a/src/creation/simplification/simplifyPackageRules.ts
+++ b/src/creation/simplification/simplifyPackageRules.ts
@@ -36,10 +36,7 @@ export const simplifyPackageRules = async (
 
     // 3a. If no output rules conflict with `eslint-config-prettier`, it's added in
     if (await dependencies.addPrettierExtensions(ruleConversionResults, prettierRequested)) {
-        allExtensions.push(
-            "plugin:eslint-config-prettier",
-            "plugin:eslint-config-prettier/@typescript-eslint",
-        );
+        allExtensions.push("prettier", "prettier/@typescript-eslint");
     }
 
     if (allExtensions.length === 0) {
@@ -58,7 +55,7 @@ export const simplifyPackageRules = async (
     return {
         ...ruleConversionResults,
         converted,
-        extends: allExtensions,
+        extends: uniqueFromSources(allExtensions),
         failed: [...ruleConversionResults.failed, ...configurationErrors],
     };
 };
diff --git a/src/reporting/packages/logMissingPackages.ts b/src/reporting/packages/logMissingPackages.ts
index fc7a9e5..8a662e6 100644
--- a/src/reporting/packages/logMissingPackages.ts
+++ b/src/reporting/packages/logMissingPackages.ts
@@ -29,8 +29,7 @@ export const logMissingPackages = async (
     const requiredPackageNames = [
         "@typescript-eslint/eslint-plugin",
         "@typescript-eslint/parser",
-        ruleConversionResults.extends?.join("").includes("eslint-config-prettier") &&
-            "eslint-config-prettier",
+        ruleConversionResults.extends?.join("").includes("prettier") && "eslint-config-prettier",
         ruleConversionResults.missing.length !== 0 && "@typescript-eslint/eslint-plugin-tslint",
         "eslint",
         ...Array.from(ruleConversionResults.plugins),
@@ -40,6 +39,10 @@ export const logMissingPackages = async (
         .filter((packageName) => !existingPackageNames.has(packageName))
         .sort();
 
+    if (missingPackageNames.length === 0) {
+        return;
+    }
+
     dependencies.logger.stdout.write(chalk.cyanBright(`${EOL}⚡ ${missingPackageNames.length}`));
     dependencies.logger.stdout.write(
         chalk.cyan(
diff --git a/src/reporting/reportCommentResults.ts b/src/reporting/reportCommentResults.ts
index d2d4f11..081bbc4 100644
--- a/src/reporting/reportCommentResults.ts
+++ b/src/reporting/reportCommentResults.ts
@@ -10,18 +10,8 @@ export type ReportCommentResultsDependencies = {
 
 export const reportCommentResults = (
     dependencies: ReportCommentResultsDependencies,
-    commentGlobs: string | string[] | undefined,
-    commentsResult: ResultWithDataStatus<string[]>,
+    commentsResult: ResultWithDataStatus<string[] | undefined>,
 ) => {
-    if (commentGlobs === undefined) {
-        dependencies.logger.stdout.write(
-            chalk.magentaBright(
-                `${EOL}♻ Consider using --comment to replace TSLint comment directives in your source files. ♻${EOL}`,
-            ),
-        );
-        return;
-    }
-
     if (commentsResult.status === ResultStatus.Failed) {
         const headline = `${commentsResult.errors.length} error${
             commentsResult.errors.length === 1 ? "" : "s"
@@ -40,6 +30,15 @@ export const reportCommentResults = (
         return;
     }
 
+    if (commentsResult.data === undefined) {
+        dependencies.logger.stdout.write(
+            chalk.magentaBright(
+                `${EOL}♻ Consider using --comment to replace TSLint comment directives in your source files. ♻${EOL}`,
+            ),
+        );
+        return;
+    }
+
     dependencies.logger.stdout.write(chalk.magentaBright(`${EOL}♻ ${commentsResult.data.length}`));
     dependencies.logger.stdout.write(
         chalk.magenta(` file${commentsResult.data.length === 1 ? "" : "s"}`),
diff --git a/src/reporting/reportConversionResults.ts b/src/reporting/reportConversionResults.ts
index 7f63938..d3949eb 100644
--- a/src/reporting/reportConversionResults.ts
+++ b/src/reporting/reportConversionResults.ts
@@ -42,7 +42,7 @@ export const reportConversionResults = async (
         );
     }
 
-    if (!ruleConversionResults.extends?.join("").includes("eslint-config-prettier")) {
+    if (!ruleConversionResults.extends?.join("").includes("prettier")) {
         logPrettierExtension(dependencies.logger);
     }
 };
@@ -92,7 +92,7 @@ const logPrettierExtension = (logger: Logger) => {
     logger.stdout.write(chalk.red(` to disable formatting ESLint rules.${EOL}`));
     logger.stdout.write(
         chalk.red(
-            `  See https://github/typescript-eslint/tslint-to-eslint-config/docs/FAQs.md#should-i-use-prettier.${EOL}`,
+            `  See https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md#should-i-use-prettier.${EOL}`,
         ),
     );
 };
diff --git a/src/reporting/reportOutputs.ts b/src/reporting/reportOutputs.ts
index 113add2..5200450 100644
--- a/src/reporting/reportOutputs.ts
+++ b/src/reporting/reportOutputs.ts
@@ -13,7 +13,7 @@ export const logSuccessfulConversions = (
     converted: Map<string, EditorSetting | ESLintRuleOptions>,
     logger: Logger,
 ) => {
-    logger.stdout.write(chalk.greenBright(`✨ ${converted.size}`));
+    logger.stdout.write(chalk.greenBright(`${EOL}✨ ${converted.size}`));
     logger.stdout.write(
         converted.size === 1
             ? chalk.green(` ${conversionTypeName} replaced with its ESLint equivalent.`)
diff --git a/src/rules/converters/codelyzer/component-class-suffix.ts b/src/rules/converters/codelyzer/component-class-suffix.ts
new file mode 100644
index 0000000..d253a63
--- /dev/null
+++ b/src/rules/converters/codelyzer/component-class-suffix.ts
@@ -0,0 +1,19 @@
+import { RuleConverter } from "../../converter";
+
+export const convertComponentClassSuffix: RuleConverter = (tslintRule) => {
+    return {
+        rules: [
+            {
+                ...(tslintRule.ruleArguments.length !== 0 && {
+                    ruleArguments: [
+                        {
+                            suffixes: tslintRule.ruleArguments,
+                        },
+                    ],
+                }),
+                ruleName: "@angular-eslint/component-class-suffix",
+            },
+        ],
+        plugins: ["@angular-eslint/eslint-plugin"],
+    };
+};
diff --git a/src/rules/rulesConverters.ts b/src/rules/rulesConverters.ts
index b9bfabc..206f02b 100644
--- a/src/rules/rulesConverters.ts
+++ b/src/rules/rulesConverters.ts
@@ -137,6 +137,9 @@ import { convertUseDefaultTypeParameter } from "./converters/use-default-type-pa
 import { convertUseIsnan } from "./converters/use-isnan";
 import { convertVariableName } from "./converters/variable-name";
 
+// Codelyzer converters
+import { convertComponentClassSuffix } from "./converters/codelyzer/component-class-suffix";
+
 /**
  * Keys TSLint rule names to their ESLint rule converters.
  */
@@ -154,6 +157,7 @@ export const rulesConverters = new Map([
     ["callable-types", convertCallableTypes],
     ["class-name", convertClassName],
     ["comment-format", convertCommentFormat],
+    ["component-class-suffix", convertComponentClassSuffix],
     ["curly", convertCurly],
     ["cyclomatic-complexity", convertCyclomaticComplexity],
     ["deprecation", convertDeprecation],


Test patch:
diff --git a/src/comments/convertComments.test.ts b/src/comments/convertComments.test.ts
index 7f8eb27..fa9ffeb 100644
--- a/src/comments/convertComments.test.ts
+++ b/src/comments/convertComments.test.ts
@@ -10,6 +10,20 @@ const createStubDependencies = (
 });
 
 describe("convertComments", () => {
+    it("returns an empty result when --comment is not provided", async () => {
+        // Arrange
+        const dependencies = createStubDependencies();
+
+        // Act
+        const result = await convertComments(dependencies, undefined);
+
+        // Assert
+        expect(result).toEqual({
+            data: undefined,
+            status: ResultStatus.Succeeded,
+        });
+    });
+
     it("returns an error when --comment is given as a boolean value", async () => {
         // Arrange
         const dependencies = createStubDependencies();
diff --git a/src/creation/simplification/simplifyPackageRules.test.ts b/src/creation/simplification/simplifyPackageRules.test.ts
index 07266de..5bde764 100644
--- a/src/creation/simplification/simplifyPackageRules.test.ts
+++ b/src/creation/simplification/simplifyPackageRules.test.ts
@@ -68,10 +68,7 @@ describe("simplifyPackageRules", () => {
         expect(simplifiedResults).toEqual({
             ...ruleConversionResults,
             converted: undefined,
-            extends: [
-                "plugin:eslint-config-prettier",
-                "plugin:eslint-config-prettier/@typescript-eslint",
-            ],
+            extends: ["prettier", "prettier/@typescript-eslint"],
         });
     });
 
diff --git a/src/reporting/packages/logMissingPackages.test.ts b/src/reporting/packages/logMissingPackages.test.ts
index ac1a6fb..7396d25 100644
--- a/src/reporting/packages/logMissingPackages.test.ts
+++ b/src/reporting/packages/logMissingPackages.test.ts
@@ -9,6 +9,25 @@ const createStubDependencies = (packageManager = PackageManager.npm) => ({
 });
 
 describe("logMissingPackages", () => {
+    it("does nothing when no package are missing", async () => {
+        // Arrange
+        const { choosePackageManager, logger } = createStubDependencies(PackageManager.npm);
+        const ruleConversionResults = createEmptyConversionResults();
+
+        // Act
+        await logMissingPackages({ choosePackageManager, logger }, ruleConversionResults, {
+            dependencies: {
+                "@typescript-eslint/eslint-plugin": "*",
+                "@typescript-eslint/parser": "*",
+                eslint: "*",
+            },
+            devDependencies: {},
+        });
+
+        // Assert
+        expectEqualWrites(logger.stdout.write);
+    });
+
     it("reports a singular message when one package is missing", async () => {
         // Arrange
         const { choosePackageManager, logger } = createStubDependencies(PackageManager.npm);
@@ -71,7 +90,7 @@ describe("logMissingPackages", () => {
         // Arrange
         const { choosePackageManager, logger } = createStubDependencies();
         const ruleConversionResults = createEmptyConversionResults({
-            extends: ["plugin:eslint-config-prettier"],
+            extends: ["prettier"],
         });
 
         // Act
diff --git a/src/reporting/reportCommentResults.test.ts b/src/reporting/reportCommentResults.test.ts
index 114222b..34e3966 100644
--- a/src/reporting/reportCommentResults.test.ts
+++ b/src/reporting/reportCommentResults.test.ts
@@ -3,12 +3,12 @@ import { ResultStatus } from "../types";
 import { reportCommentResults } from "./reportCommentResults";
 
 describe("reportCommentResults", () => {
-    it("logs a suggestion when no comment globs are provided", () => {
+    it("logs a suggestion when no comment globs were requested", () => {
         // Arrange
         const logger = createStubLogger();
 
         // Act
-        reportCommentResults({ logger }, undefined, { data: [], status: ResultStatus.Succeeded });
+        reportCommentResults({ logger }, { data: undefined, status: ResultStatus.Succeeded });
 
         // Assert
         expectEqualWrites(
@@ -23,7 +23,7 @@ describe("reportCommentResults", () => {
         const errors = [new Error("Hello")];
 
         // Act
-        reportCommentResults({ logger }, ["src/index.ts"], { errors, status: ResultStatus.Failed });
+        reportCommentResults({ logger }, { errors, status: ResultStatus.Failed });
 
         // Assert
         expectEqualWrites(
@@ -44,7 +44,7 @@ describe("reportCommentResults", () => {
         const errors = [new Error("Hello"), new Error("World")];
 
         // Act
-        reportCommentResults({ logger }, ["src/index.ts"], { errors, status: ResultStatus.Failed });
+        reportCommentResults({ logger }, { errors, status: ResultStatus.Failed });
 
         // Assert
         expectEqualWrites(
@@ -65,10 +65,13 @@ describe("reportCommentResults", () => {
         const logger = createStubLogger();
 
         // Act
-        reportCommentResults({ logger }, ["src/*.ts"], {
-            data: ["src/index.ts"],
-            status: ResultStatus.Succeeded,
-        });
+        reportCommentResults(
+            { logger },
+            {
+                data: ["src/index.ts"],
+                status: ResultStatus.Succeeded,
+            },
+        );
 
         // Assert
         expectEqualWrites(
@@ -82,10 +85,13 @@ describe("reportCommentResults", () => {
         const logger = createStubLogger();
 
         // Act
-        reportCommentResults({ logger }, ["src/*.ts"], {
-            data: ["src/index.ts", "src/data.ts"],
-            status: ResultStatus.Succeeded,
-        });
+        reportCommentResults(
+            { logger },
+            {
+                data: ["src/index.ts", "src/data.ts"],
+                status: ResultStatus.Succeeded,
+            },
+        );
 
         // Assert
         expectEqualWrites(
diff --git a/src/reporting/reportConversionResults.test.ts b/src/reporting/reportConversionResults.test.ts
index 4da981b..75c6da8 100644
--- a/src/reporting/reportConversionResults.test.ts
+++ b/src/reporting/reportConversionResults.test.ts
@@ -5,10 +5,7 @@ import { createEmptyConversionResults } from "../conversion/conversionResults.st
 import { ESLintRuleOptions } from "../rules/types";
 import { reportConversionResults } from "./reportConversionResults";
 
-const basicExtends = [
-    "plugin:eslint-config-prettier",
-    "plugin:eslint-config-prettier/@typescript-eslint",
-];
+const basicExtends = ["prettier", "prettier/@typescript-eslint"];
 
 describe("reportConversionResults", () => {
     it("logs a successful conversion without notices when there is one converted rule without notices", async () => {
@@ -243,7 +240,7 @@ describe("reportConversionResults", () => {
             logger.stdout.write,
             `☠ Prettier plugins are missing from your configuration. ☠`,
             `  We highly recommend running tslint-to-eslint-config --prettier to disable formatting ESLint rules.`,
-            `  See https://github/typescript-eslint/tslint-to-eslint-config/docs/FAQs.md#should-i-use-prettier.`,
+            `  See https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md#should-i-use-prettier.`,
         );
     });
 
@@ -262,7 +259,7 @@ describe("reportConversionResults", () => {
             logger.stdout.write,
             `☠ Prettier plugins are missing from your configuration. ☠`,
             `  We highly recommend running tslint-to-eslint-config --prettier to disable formatting ESLint rules.`,
-            `  See https://github/typescript-eslint/tslint-to-eslint-config/docs/FAQs.md#should-i-use-prettier.`,
+            `  See https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md#should-i-use-prettier.`,
         );
     });
 });
diff --git a/src/rules/converters/codelyzer/tests/component-class-suffix.test.ts b/src/rules/converters/codelyzer/tests/component-class-suffix.test.ts
new file mode 100644
index 0000000..69019e0
--- /dev/null
+++ b/src/rules/converters/codelyzer/tests/component-class-suffix.test.ts
@@ -0,0 +1,38 @@
+import { convertComponentClassSuffix } from "../component-class-suffix";
+
+describe(convertComponentClassSuffix, () => {
+    test("conversion without arguments", () => {
+        const result = convertComponentClassSuffix({
+            ruleArguments: [],
+        });
+
+        expect(result).toEqual({
+            rules: [
+                {
+                    ruleName: "@angular-eslint/component-class-suffix",
+                },
+            ],
+            plugins: ["@angular-eslint/eslint-plugin"],
+        });
+    });
+
+    test("conversion with arguments", () => {
+        const result = convertComponentClassSuffix({
+            ruleArguments: ["Component", "View"],
+        });
+
+        expect(result).toEqual({
+            rules: [
+                {
+                    ruleArguments: [
+                        {
+                            suffixes: ["Component", "View"],
+                        },
+                    ],
+                    ruleName: "@angular-eslint/component-class-suffix",
+                },
+            ],
+            plugins: ["@angular-eslint/eslint-plugin"],
+        });
+    });
+});