Index: frontend/node_modules/@rushstack/eslint-patch/CHANGELOG.json
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/CHANGELOG.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/CHANGELOG.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,537 @@
+{
+  "name": "@rushstack/eslint-patch",
+  "entries": [
+    {
+      "version": "1.16.1",
+      "tag": "@rushstack/eslint-patch_v1.16.1",
+      "date": "Fri, 20 Feb 2026 00:15:04 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Add `\"node\"` condition before `\"import\"` in the `\"exports\"` map so that Node.js uses the CJS output (which handles extensionless imports), while bundlers still use ESM via `\"import\"`. Fixes https://github.com/microsoft/rushstack/issues/5644."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.16.0",
+      "tag": "@rushstack/eslint-patch_v1.16.0",
+      "date": "Thu, 19 Feb 2026 00:04:52 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Normalize package layout. CommonJS is now under `lib-commonjs`, DTS is now under `lib-dts`, and ESM is now under `lib-esm`. Imports to `lib` still work as before, handled by the `\"exports\"` field in `package.json`."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.15.0",
+      "tag": "@rushstack/eslint-patch_v1.15.0",
+      "date": "Wed, 12 Nov 2025 01:57:54 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "In ESLint >= 9.37, report bulk suppressed messages as suppressed messages rather than removing them completely."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.14.1",
+      "tag": "@rushstack/eslint-patch_v1.14.1",
+      "date": "Fri, 24 Oct 2025 11:22:09 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix an issue where suppressed rule violations still show up in the report in ESLint >=9.37.0."
+          },
+          {
+            "comment": "Fix an issue where the ESLint process will crash when running in the ESLint VSCode extension in ESLint >=9.37.0."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.14.0",
+      "tag": "@rushstack/eslint-patch_v1.14.0",
+      "date": "Mon, 13 Oct 2025 15:13:02 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.13.0",
+      "tag": "@rushstack/eslint-patch_v1.13.0",
+      "date": "Fri, 03 Oct 2025 20:09:59 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Normalize import of builtin modules to use the `node:` protocol."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.12.0",
+      "tag": "@rushstack/eslint-patch_v1.12.0",
+      "date": "Thu, 26 Jun 2025 18:57:04 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Update for compatibility with ESLint 9"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.11.0",
+      "tag": "@rushstack/eslint-patch_v1.11.0",
+      "date": "Tue, 11 Mar 2025 02:12:33 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Bump the `@typescript-eslint/*` packages to add support for TypeScript 5.8."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.10.5",
+      "tag": "@rushstack/eslint-patch_v1.10.5",
+      "date": "Tue, 07 Jan 2025 16:11:06 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix a performance issue when locating \".eslint-bulk-suppressions.json\"."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.10.4",
+      "tag": "@rushstack/eslint-patch_v1.10.4",
+      "date": "Sat, 27 Jul 2024 00:10:27 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Include CHANGELOG.md in published releases again"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.10.3",
+      "tag": "@rushstack/eslint-patch_v1.10.3",
+      "date": "Fri, 17 May 2024 00:10:40 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "[eslint-patch] Allow use of ESLint v9"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.10.2",
+      "tag": "@rushstack/eslint-patch_v1.10.2",
+      "date": "Wed, 10 Apr 2024 21:59:39 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Bump maximum supported ESLint version for the bulk-suppressions tool to `8.57.0`."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.10.1",
+      "tag": "@rushstack/eslint-patch_v1.10.1",
+      "date": "Fri, 29 Mar 2024 05:46:41 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix an issue where the `eslint-bulk prune` command would crash if a bulk suppressions file exists that speicifies no suppressions."
+          },
+          {
+            "comment": "Exit with success under normal conditions."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.10.0",
+      "tag": "@rushstack/eslint-patch_v1.10.0",
+      "date": "Thu, 28 Mar 2024 18:11:12 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix an issue with running `eslint-bulk prune` in a project with suppressions that refer to deleted files."
+          }
+        ],
+        "minor": [
+          {
+            "comment": "Delete the `.eslint-bulk-suppressions.json` file during pruning if all suppressions have been eliminated."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.9.0",
+      "tag": "@rushstack/eslint-patch_v1.9.0",
+      "date": "Wed, 27 Mar 2024 19:47:21 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Fix an issue where `eslint-bulk prune` does not work if there are no files to lint in the project root."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.8.0",
+      "tag": "@rushstack/eslint-patch_v1.8.0",
+      "date": "Wed, 20 Mar 2024 02:09:14 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Refactor the bulk-suppressions feature to fix some performance issues."
+          }
+        ],
+        "patch": [
+          {
+            "comment": "Fix an issue where linting issues that were already suppressed via suppression comments were recorded in the bulk suppressions list."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.7.2",
+      "tag": "@rushstack/eslint-patch_v1.7.2",
+      "date": "Thu, 25 Jan 2024 23:03:57 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Some minor documentation updates"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.7.1",
+      "tag": "@rushstack/eslint-patch_v1.7.1",
+      "date": "Wed, 24 Jan 2024 07:38:34 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Update documentation"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.7.0",
+      "tag": "@rushstack/eslint-patch_v1.7.0",
+      "date": "Tue, 16 Jan 2024 18:30:10 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Add support for TypeScript 5.3 with @typescript-eslint 6.19.x"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.6.1",
+      "tag": "@rushstack/eslint-patch_v1.6.1",
+      "date": "Fri, 15 Dec 2023 01:10:06 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix bulk suppression patch's eslintrc detection in polyrepos"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.6.0",
+      "tag": "@rushstack/eslint-patch_v1.6.0",
+      "date": "Wed, 22 Nov 2023 01:45:18 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Add an experimental new feature for ESLint bulk suppressions; for details see GitHub #4303"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.5.1",
+      "tag": "@rushstack/eslint-patch_v1.5.1",
+      "date": "Sun, 01 Oct 2023 02:56:29 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix patch compatibility with ESLint 7 for versions matching <7.12.0"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.5.0",
+      "tag": "@rushstack/eslint-patch_v1.5.0",
+      "date": "Tue, 26 Sep 2023 09:30:33 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Add an optional patch which can be used to allow ESLint to extend configurations from packages that do not have the \"eslint-config-\" prefix"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.4.0",
+      "tag": "@rushstack/eslint-patch_v1.4.0",
+      "date": "Fri, 15 Sep 2023 00:36:58 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Update @types/node from 14 to 18"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.3.3",
+      "tag": "@rushstack/eslint-patch_v1.3.3",
+      "date": "Tue, 08 Aug 2023 07:10:39 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix patching for running eslint via eslint/use-at-your-own-risk, which VS Code's eslint extension does when enabling flat config support"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.3.2",
+      "tag": "@rushstack/eslint-patch_v1.3.2",
+      "date": "Thu, 15 Jun 2023 00:21:01 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "[eslint-patch] add invalid importer path test to ESLint 7.x || 8.x block"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.3.1",
+      "tag": "@rushstack/eslint-patch_v1.3.1",
+      "date": "Wed, 07 Jun 2023 22:45:16 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Add test for invalid importer path to fallback to relative path when loading eslint 6 plugins"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.3.0",
+      "tag": "@rushstack/eslint-patch_v1.3.0",
+      "date": "Mon, 22 May 2023 06:34:32 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Upgrade the @typescript-eslint/* dependencies to ~5.59.2"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.2.0",
+      "tag": "@rushstack/eslint-patch_v1.2.0",
+      "date": "Thu, 15 Sep 2022 00:18:51 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "Use original resolver if patched resolver fails."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.1.4",
+      "tag": "@rushstack/eslint-patch_v1.1.4",
+      "date": "Tue, 28 Jun 2022 00:23:32 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Update the README to mention support for ESLint 8."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.1.3",
+      "tag": "@rushstack/eslint-patch_v1.1.3",
+      "date": "Fri, 15 Apr 2022 00:12:36 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix an issue where tools could not determine the module type as CommonJS"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.1.2",
+      "tag": "@rushstack/eslint-patch_v1.1.2",
+      "date": "Sat, 09 Apr 2022 02:24:26 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Rename the \"master\" branch to \"main\"."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.1.1",
+      "tag": "@rushstack/eslint-patch_v1.1.1",
+      "date": "Tue, 15 Mar 2022 19:15:53 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix the path in the package.json \"directory\" field."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.1.0",
+      "tag": "@rushstack/eslint-patch_v1.1.0",
+      "date": "Fri, 05 Nov 2021 15:09:18 GMT",
+      "comments": {
+        "minor": [
+          {
+            "comment": "feat(eslint-patch): Find patch targets independently of disk layout"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.9",
+      "tag": "@rushstack/eslint-patch_v1.0.9",
+      "date": "Wed, 27 Oct 2021 00:08:15 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Update the package.json repository field to include the directory property."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.8",
+      "tag": "@rushstack/eslint-patch_v1.0.8",
+      "date": "Wed, 13 Oct 2021 15:09:54 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Add support for ESLint 8.0.0"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.7",
+      "tag": "@rushstack/eslint-patch_v1.0.7",
+      "date": "Thu, 23 Sep 2021 00:10:40 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Upgrade the `@types/node` dependency to version to version 12."
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.6",
+      "tag": "@rushstack/eslint-patch_v1.0.6",
+      "date": "Fri, 30 Oct 2020 00:10:14 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Update the \"modern-module-resolution\" patch to support ESLint 7.8.0 and newer"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.5",
+      "tag": "@rushstack/eslint-patch_v1.0.5",
+      "date": "Wed, 30 Sep 2020 18:39:17 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Update to build with @rushstack/heft-node-rig"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.4",
+      "tag": "@rushstack/eslint-patch_v1.0.4",
+      "date": "Wed, 30 Sep 2020 06:53:53 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Update README.md"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.3",
+      "tag": "@rushstack/eslint-patch_v1.0.3",
+      "date": "Wed, 12 Aug 2020 00:10:05 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Updated project to build with Heft"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.2",
+      "tag": "@rushstack/eslint-patch_v1.0.2",
+      "date": "Wed, 24 Jun 2020 09:50:48 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Fix an issue with the published file set"
+          }
+        ]
+      }
+    },
+    {
+      "version": "1.0.1",
+      "tag": "@rushstack/eslint-patch_v1.0.1",
+      "date": "Wed, 24 Jun 2020 09:04:28 GMT",
+      "comments": {
+        "patch": [
+          {
+            "comment": "Initial release"
+          }
+        ]
+      }
+    }
+  ]
+}
Index: frontend/node_modules/@rushstack/eslint-patch/CHANGELOG.md
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,315 @@
+# Change Log - @rushstack/eslint-patch
+
+This log was last generated on Fri, 20 Feb 2026 00:15:04 GMT and should not be manually modified.
+
+## 1.16.1
+Fri, 20 Feb 2026 00:15:04 GMT
+
+### Patches
+
+- Add `"node"` condition before `"import"` in the `"exports"` map so that Node.js uses the CJS output (which handles extensionless imports), while bundlers still use ESM via `"import"`. Fixes https://github.com/microsoft/rushstack/issues/5644.
+
+## 1.16.0
+Thu, 19 Feb 2026 00:04:52 GMT
+
+### Minor changes
+
+- Normalize package layout. CommonJS is now under `lib-commonjs`, DTS is now under `lib-dts`, and ESM is now under `lib-esm`. Imports to `lib` still work as before, handled by the `"exports"` field in `package.json`.
+
+## 1.15.0
+Wed, 12 Nov 2025 01:57:54 GMT
+
+### Minor changes
+
+- In ESLint >= 9.37, report bulk suppressed messages as suppressed messages rather than removing them completely.
+
+## 1.14.1
+Fri, 24 Oct 2025 11:22:09 GMT
+
+### Patches
+
+- Fix an issue where suppressed rule violations still show up in the report in ESLint >=9.37.0.
+- Fix an issue where the ESLint process will crash when running in the ESLint VSCode extension in ESLint >=9.37.0.
+
+## 1.14.0
+Mon, 13 Oct 2025 15:13:02 GMT
+
+### Minor changes
+
+- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.
+
+## 1.13.0
+Fri, 03 Oct 2025 20:09:59 GMT
+
+### Minor changes
+
+- Normalize import of builtin modules to use the `node:` protocol.
+
+## 1.12.0
+Thu, 26 Jun 2025 18:57:04 GMT
+
+### Minor changes
+
+- Update for compatibility with ESLint 9
+
+## 1.11.0
+Tue, 11 Mar 2025 02:12:33 GMT
+
+### Minor changes
+
+- Bump the `@typescript-eslint/*` packages to add support for TypeScript 5.8.
+
+## 1.10.5
+Tue, 07 Jan 2025 16:11:06 GMT
+
+### Patches
+
+- Fix a performance issue when locating ".eslint-bulk-suppressions.json".
+
+## 1.10.4
+Sat, 27 Jul 2024 00:10:27 GMT
+
+### Patches
+
+- Include CHANGELOG.md in published releases again
+
+## 1.10.3
+Fri, 17 May 2024 00:10:40 GMT
+
+### Patches
+
+- [eslint-patch] Allow use of ESLint v9
+
+## 1.10.2
+Wed, 10 Apr 2024 21:59:39 GMT
+
+### Patches
+
+- Bump maximum supported ESLint version for the bulk-suppressions tool to `8.57.0`.
+
+## 1.10.1
+Fri, 29 Mar 2024 05:46:41 GMT
+
+### Patches
+
+- Fix an issue where the `eslint-bulk prune` command would crash if a bulk suppressions file exists that speicifies no suppressions.
+- Exit with success under normal conditions.
+
+## 1.10.0
+Thu, 28 Mar 2024 18:11:12 GMT
+
+### Minor changes
+
+- Delete the `.eslint-bulk-suppressions.json` file during pruning if all suppressions have been eliminated.
+
+### Patches
+
+- Fix an issue with running `eslint-bulk prune` in a project with suppressions that refer to deleted files.
+
+## 1.9.0
+Wed, 27 Mar 2024 19:47:21 GMT
+
+### Minor changes
+
+- Fix an issue where `eslint-bulk prune` does not work if there are no files to lint in the project root.
+
+## 1.8.0
+Wed, 20 Mar 2024 02:09:14 GMT
+
+### Minor changes
+
+- Refactor the bulk-suppressions feature to fix some performance issues.
+
+### Patches
+
+- Fix an issue where linting issues that were already suppressed via suppression comments were recorded in the bulk suppressions list.
+
+## 1.7.2
+Thu, 25 Jan 2024 23:03:57 GMT
+
+### Patches
+
+- Some minor documentation updates
+
+## 1.7.1
+Wed, 24 Jan 2024 07:38:34 GMT
+
+### Patches
+
+- Update documentation
+
+## 1.7.0
+Tue, 16 Jan 2024 18:30:10 GMT
+
+### Minor changes
+
+- Add support for TypeScript 5.3 with @typescript-eslint 6.19.x
+
+## 1.6.1
+Fri, 15 Dec 2023 01:10:06 GMT
+
+### Patches
+
+- Fix bulk suppression patch's eslintrc detection in polyrepos
+
+## 1.6.0
+Wed, 22 Nov 2023 01:45:18 GMT
+
+### Minor changes
+
+- Add an experimental new feature for ESLint bulk suppressions; for details see GitHub #4303
+
+## 1.5.1
+Sun, 01 Oct 2023 02:56:29 GMT
+
+### Patches
+
+- Fix patch compatibility with ESLint 7 for versions matching <7.12.0
+
+## 1.5.0
+Tue, 26 Sep 2023 09:30:33 GMT
+
+### Minor changes
+
+- Add an optional patch which can be used to allow ESLint to extend configurations from packages that do not have the "eslint-config-" prefix
+
+## 1.4.0
+Fri, 15 Sep 2023 00:36:58 GMT
+
+### Minor changes
+
+- Update @types/node from 14 to 18
+
+## 1.3.3
+Tue, 08 Aug 2023 07:10:39 GMT
+
+### Patches
+
+- Fix patching for running eslint via eslint/use-at-your-own-risk, which VS Code's eslint extension does when enabling flat config support
+
+## 1.3.2
+Thu, 15 Jun 2023 00:21:01 GMT
+
+### Patches
+
+- [eslint-patch] add invalid importer path test to ESLint 7.x || 8.x block
+
+## 1.3.1
+Wed, 07 Jun 2023 22:45:16 GMT
+
+### Patches
+
+- Add test for invalid importer path to fallback to relative path when loading eslint 6 plugins
+
+## 1.3.0
+Mon, 22 May 2023 06:34:32 GMT
+
+### Minor changes
+
+- Upgrade the @typescript-eslint/* dependencies to ~5.59.2
+
+## 1.2.0
+Thu, 15 Sep 2022 00:18:51 GMT
+
+### Minor changes
+
+- Use original resolver if patched resolver fails.
+
+## 1.1.4
+Tue, 28 Jun 2022 00:23:32 GMT
+
+### Patches
+
+- Update the README to mention support for ESLint 8.
+
+## 1.1.3
+Fri, 15 Apr 2022 00:12:36 GMT
+
+### Patches
+
+- Fix an issue where tools could not determine the module type as CommonJS
+
+## 1.1.2
+Sat, 09 Apr 2022 02:24:26 GMT
+
+### Patches
+
+- Rename the "master" branch to "main".
+
+## 1.1.1
+Tue, 15 Mar 2022 19:15:53 GMT
+
+### Patches
+
+- Fix the path in the package.json "directory" field.
+
+## 1.1.0
+Fri, 05 Nov 2021 15:09:18 GMT
+
+### Minor changes
+
+- feat(eslint-patch): Find patch targets independently of disk layout
+
+## 1.0.9
+Wed, 27 Oct 2021 00:08:15 GMT
+
+### Patches
+
+- Update the package.json repository field to include the directory property.
+
+## 1.0.8
+Wed, 13 Oct 2021 15:09:54 GMT
+
+### Patches
+
+- Add support for ESLint 8.0.0
+
+## 1.0.7
+Thu, 23 Sep 2021 00:10:40 GMT
+
+### Patches
+
+- Upgrade the `@types/node` dependency to version to version 12.
+
+## 1.0.6
+Fri, 30 Oct 2020 00:10:14 GMT
+
+### Patches
+
+- Update the "modern-module-resolution" patch to support ESLint 7.8.0 and newer
+
+## 1.0.5
+Wed, 30 Sep 2020 18:39:17 GMT
+
+### Patches
+
+- Update to build with @rushstack/heft-node-rig
+
+## 1.0.4
+Wed, 30 Sep 2020 06:53:53 GMT
+
+### Patches
+
+- Update README.md
+
+## 1.0.3
+Wed, 12 Aug 2020 00:10:05 GMT
+
+### Patches
+
+- Updated project to build with Heft
+
+## 1.0.2
+Wed, 24 Jun 2020 09:50:48 GMT
+
+### Patches
+
+- Fix an issue with the published file set
+
+## 1.0.1
+Wed, 24 Jun 2020 09:04:28 GMT
+
+### Patches
+
+- Initial release
+
Index: frontend/node_modules/@rushstack/eslint-patch/LICENSE
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+@rushstack/eslint-patch
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: frontend/node_modules/@rushstack/eslint-patch/README.md
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,252 @@
+# @rushstack/eslint-patch
+
+Enhance [ESLint](https://eslint.org/) with better support for large scale monorepos!
+
+This is a runtime patch that enables new/experimental features for ESLint.  It operates as a "monkey patch"
+that gets loaded with **.eslintrc.js** and modifies the ESLint engine in memory.  This approach works
+with your existing ESLint version (no need to install a forked ESLint), and is fully interoperable with
+companion tools such as the ESLint extensions for VS Code and WebStorm.
+
+This package provides several independently loadable features:
+
+- **eslint-bulk-suppressions**: enables you to roll out new lint rules in your monorepo without having to
+  clutter up source files with thousands of machine-generated `// eslint-ignore-next-line` directives.
+  Instead, the "bulk suppressions" for legacy violations are managed in a separate file called
+  **.eslint-bulk-suppressions.json**.
+
+- **modern-module-resolution**: allows an ESLint config package to provide plugin dependencies, avoiding the
+  problem where hundreds of projects in a monorepo need to copy+paste the same `"devDependencies"` in
+  every **package.json** file.
+
+  > **NOTE:** ESLint 8.21.0 has now introduced a new `ESLINT_USE_FLAT_CONFIG` mode that may reduce the need
+  for the `modern-module-resolution` patch.
+
+- **custom-config-package-names**: enables [rig packages](https://heft.rushstack.io/pages/intro/rig_packages/)
+  to provide shareable configs for ESLint, by removing the requirement that `eslint-config` must appear in
+  the NPM package name.
+
+Contributions welcome!  If you have more ideas for experimental ESLint enhancements that might benefit
+large scale monorepos, consider adding them to this patch.
+
+
+# eslint-bulk-suppressions feature
+
+<!-- ## is correct here, but ### looks better in NPM's rendering -->
+
+### What it does
+
+As your monorepo evolves and grows, there's an ongoing need to expand and improve lint rules.  But whenever a
+new rule is enabled, there may be hundreds or thousands of "legacy violations" in existing source files.
+How to handle that? We could fix the old code, but that's often prohibitively expensive and may even cause
+regressions. We could disable the rule for those projects or files, but we want new code to follow the rule.
+An effective solution is to inject thousands of `// eslint-ignore-next-line` lines, but these "bulk suppressions"
+have an unintended side effect:  It normalizes the practice of suppressing lint rules.  If people get used to
+seeing `// eslint-ignore-next-line` everywhere, nobody will notice when humans suppress the rules for new code.
+That would undermine the mission of establishing better code standards.
+
+The `eslint-bulk-suppressions` feature introduces a way to store machine-generated suppressions in a separate
+file **.eslint-bulk-suppressions.json** which can even be protected using `CODEOWNERS` policies, since that file
+will generally only change when new lint rules are introduced, or in occasional circumstances when existing files
+are being moved or renamed.  In this way `// eslint-ignore-next-line` remains a directive written by humans
+and hopefully rarely needed.
+
+
+### Why it's a patch
+
+As with `modern-module-resolution`, our hope is for this feature to eventually be incorporated as an official
+feature of ESLint.  Starting out as an unofficial patch allows faster iteration and community feedback.
+
+
+### How to use it
+
+1. Add `@rushstack/eslint-patch` as a dependency of your project:
+
+   ```bash
+   cd your-project
+   npm install --save-dev @rushstack/eslint-patch
+   ```
+
+2. Globally install the [`@rushstack/eslint-bulk`](https://www.npmjs.com/package/@rushstack/eslint-bulk)
+   command line interface (CLI) package. For example:
+
+   ```bash
+   npm install --global @rushstack/eslint-bulk
+   ```
+
+   This installs the `eslint-bulk` shell command for managing the **.eslint-bulk-suppressions.json** files.
+   With it you can generate new suppressions as well as "prune" old suppressions that are no longer needed.
+
+3. Load the patch by adding the following `require()` statement as the first line of
+   your **.eslintrc.js** file.  For example:
+
+   **.eslintrc.js**
+   ```js
+   require("@rushstack/eslint-patch/eslint-bulk-suppressions"); // 👈 add this line
+
+   module.exports = {
+     rules: {
+       rule1: 'error',
+       rule2: 'warning'
+     },
+     parserOptions: { tsconfigRootDir: __dirname }
+   };
+   ```
+
+Typical workflow:
+
+1. Checkout your `main` branch, which is in a clean state where ESLint reports no violations.
+2. Update your configuration to enable the latest lint rules; ESLint now reports thousands of legacy violations.
+3. Run `eslint-bulk suppress --all ./src` to update **.eslint-bulk-suppressions.json.**
+4. ESLint now no longer reports violations, so commit the results to Git and merge your pull request.
+5. Over time, engineers may improve some of the suppressed code, in which case the associated suppressions are no longer needed.
+6. Run `eslint-bulk prune` periodically to find and remove unnecessary suppressions from **.eslint-bulk-suppressions.json**, ensuring that new violations will now get caught in those scopes.
+
+### "eslint-bulk suppress" command
+
+```bash
+eslint-bulk suppress --rule NAME1 [--rule NAME2...] PATH1 [PATH2...]
+eslint-bulk suppress --all PATH1 [PATH2...]
+```
+
+Use this command to automatically generate bulk suppressions for the specified lint rules and file paths.
+The path argument is a [glob pattern](https://en.wikipedia.org/wiki/Glob_(programming)) with the same syntax
+as path arguments for the `eslint` command.
+
+
+### "eslint-bulk prune" command
+
+Use this command to automatically delete all unnecessary suppression entries in all
+**.eslint-bulk-suppressions.json** files under the current working directory.
+
+```bash
+eslint-bulk prune
+```
+
+### Implementation notes
+
+The `eslint-bulk` command is a thin wrapper whose behavior is actually provided by the patch itself.
+In this way, if your monorepo contains projects using different versions of this package, the same globally
+installed `eslint-bulk` command can be used under any project folder, and it will always invoke the correct
+version of the engine compatible with that project.  Because the patch is loaded by ESLint, the `eslint-bulk`
+command must be invoked in a project folder that contains an **.eslintrc.js** configuration with correctly
+installed **package.json** dependencies.
+
+Here's an example of the bulk suppressions file content:
+
+**.eslint-bulk-suppressions.json**
+```js
+{
+  "suppressions": [
+    {
+      "rule": "no-var",
+      "file": "./src/your-file.ts",
+      "scopeId": ".ExampleClass.exampleMethod"
+    }
+  ]
+}
+```
+The `rule` field is the ESLint rule name.  The `file` field is the source file path, relative to the **eslintrc.js** file.  The `scopeId` is a special string built from the names of containing structures.  (For implementation details, take a look at the [calculateScopeId()](https://github.com/microsoft/rushstack/blob/e95c51088341f01516ee5a7639d57c3f6dce8772/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-patch.ts#L52) function.)  The `scopeId` identifies a region of code where the rule should be suppressed, while being reasonably stable across edits of the source file.
+
+# modern-module-resolution feature
+
+### What it does
+
+This patch is a workaround for a longstanding [ESLint feature request](https://github.com/eslint/eslint/issues/3458)
+that would allow a shareable ESLint config to bring along its own plugins, rather than imposing peer dependencies
+on every consumer of the config.  In a monorepo scenario, this enables your lint setup to be consolidated in a
+single NPM package.  Doing so greatly reduces the copy+pasting and version management for all the other projects
+that use your standard lint rule set, but don't want to be bothered with the details.
+
+> **NOTE:** ESLint 8.21.0 has now introduced a new `ESLINT_USE_FLAT_CONFIG` mode that may reduce the need
+> for this patch.
+
+
+### Why it's a patch
+
+We initially proposed this feature in a pull request for the official ESLint back in 2019, however the
+maintainers preferred to implement a more comprehensive overhaul of the ESLint config engine.  It ultimately
+shipped with the experimental new `ESLINT_USE_FLAT_CONFIG` mode (still opt-in as of ESLint 8).
+While waiting for that, Rush Stack's `modern-module-resolution` patch provided a reliable interim solution.
+We will continue to maintain this patch as long as it is being widely used, but we encourage you to check out
+`ESLINT_USE_FLAT_CONFIG` and see if it meets your needs.
+
+
+### How to use it
+
+1. Add `@rushstack/eslint-patch` as a dependency of your project:
+
+   ```bash
+   cd your-project
+   npm install --save-dev @rushstack/eslint-patch
+   ```
+
+2. Add a `require()` call to the to top of the **.eslintrc.js** file for each project that depends
+   on your shareable ESLint config, for example:
+
+   **.eslintrc.js**
+   ```ts
+   require("@rushstack/eslint-patch/modern-module-resolution"); // 👈 add this line
+
+   // Add your "extends" boilerplate here, for example:
+   module.exports = {
+     extends: ['@your-company/eslint-config'],
+     parserOptions: { tsconfigRootDir: __dirname }
+   };
+   ```
+
+With this change, the local project no longer needs any ESLint plugins in its **package.json** file.
+Instead, the hypothetical `@your-company/eslint-config` NPM package would declare the plugins as its
+own dependencies.
+
+This patch works by modifying the ESLint engine so that its module resolver will load relative to the folder of
+the referencing config file, rather than the project folder.  The patch is compatible with ESLint 6, 7, and 8.
+It also works with any editor extensions that load ESLint as a library.
+
+For an even leaner setup, `@your-company/eslint-config` can provide the patches as its own dependency.
+See [@rushstack/eslint-config](https://github.com/microsoft/rushstack/blob/main/eslint/eslint-config/patch/modern-module-resolution.js) for a real world example.
+
+
+# custom-config-package-names feature
+
+### What it does
+
+Load the `custom-config-package-names` patch to remove ESLint's
+[naming requirement](https://eslint.org/docs/latest/extend/shareable-configs)
+that `eslint-config` must be part of the NPM package name for shareable configs.
+
+This is useful because Rush Stack's [rig package](https://heft.rushstack.io/pages/intro/rig_packages/)
+specification defines a way for many different tooling configurations and dependencies to be shared
+via a single NPM package, for example
+[`@rushstack/heft-web-rig`](https://www.npmjs.com/package/@rushstack/heft-web-rig).
+Rigs avoid a lot of copy+pasting of dependencies in a large scale monorepo.
+Rig packages always include the `-rig` suffix in their name.  It doesn't make sense to enforce
+that `eslint-config` should also appear in the name of a package that includes shareable configs
+for many other tools besides ESLint.
+
+### How to use it
+
+Continuing the example above, to load this patch you would add a second line to your config file:
+
+**.eslintrc.js**
+```ts
+require("@rushstack/eslint-patch/modern-module-resolution");
+require("@rushstack/eslint-patch/custom-config-package-names"); // 👈 add this line
+
+// Add your "extends" boilerplate here, for example:
+module.exports = {
+  extends: [
+    '@your-company/build-rig/profile/default/includes/eslint/node' // Notice the package name does not start with "eslint-config-"
+  ],
+  parserOptions: { tsconfigRootDir: __dirname }
+};
+```
+
+
+# Links
+
+- [CHANGELOG.md](https://github.com/microsoft/rushstack/blob/main/eslint/eslint-patch/CHANGELOG.md) - Find
+  out what's new in the latest version
+
+- [`@rushstack/eslint-bulk`](https://www.npmjs.com/package/@rushstack/eslint-bulk) CLI package
+
+`@rushstack/eslint-patch` is part of the [Rush Stack](https://rushstack.io/) family of projects.
Index: frontend/node_modules/@rushstack/eslint-patch/eslint.config.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/eslint.config.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/eslint.config.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+
+const nodeTrustedToolProfile = require('decoupled-local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool');
+const friendlyLocalsMixin = require('decoupled-local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals');
+const tsdocMixin = require('decoupled-local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc');
+
+module.exports = [
+  ...nodeTrustedToolProfile,
+  ...friendlyLocalsMixin,
+  ...tsdocMixin,
+  {
+    files: ['**/*.ts', '**/*.tsx'],
+    languageOptions: {
+      parserOptions: {
+        tsconfigRootDir: __dirname
+      }
+    },
+    rules: {
+      'no-console': 'off'
+    }
+  }
+];
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/_patch-base.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/_patch-base.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/_patch-base.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,286 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isModuleResolutionError = exports.ESLINT_MAJOR_VERSION = exports.Naming = exports.ModuleResolver = exports.configArrayFactory = exports.eslintFolder = exports.eslintPackageVersion = void 0;
+// This is a workaround for https://github.com/eslint/eslint/issues/3458
+//
+// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:
+//
+//    require("@rushstack/eslint-patch/modern-module-resolution");
+//
+const node_path_1 = __importDefault(require("node:path"));
+const isModuleResolutionError = (ex) => typeof ex === 'object' && !!ex && 'code' in ex && ex.code === 'MODULE_NOT_FOUND';
+exports.isModuleResolutionError = isModuleResolutionError;
+const FLAT_CONFIG_REGEX = /eslint\.config\.(cjs|mjs|js)$/i;
+// Ex:
+//     at async ESLint.lintFiles (C:\\path\\to\\\\eslint\\lib\\eslint\\eslint.js:720:21)
+const NODE_STACK_REGEX = /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?)(?::(\d+)| (\d+))(?::(\d+))?\)?\s*$/i;
+function parseNodeStack(stack) {
+    const stackTraceMatch = NODE_STACK_REGEX.exec(stack);
+    if (!stackTraceMatch) {
+        return undefined;
+    }
+    return {
+        file: stackTraceMatch[2],
+        method: stackTraceMatch[1],
+        lineNumber: parseInt(stackTraceMatch[3], 10),
+        column: stackTraceMatch[4] ? parseInt(stackTraceMatch[4], 10) : undefined
+    };
+}
+function getStackTrace() {
+    const stackObj = {};
+    const originalStackTraceLimit = Error.stackTraceLimit;
+    Error.stackTraceLimit = Infinity;
+    Error.captureStackTrace(stackObj, getStackTrace);
+    Error.stackTraceLimit = originalStackTraceLimit;
+    if (!stackObj.stack) {
+        throw new Error('Unable to capture stack trace');
+    }
+    const { stack } = stackObj;
+    const stackLines = stack.split('\n');
+    const frames = [];
+    for (const line of stackLines) {
+        const frame = parseNodeStack(line);
+        if (frame) {
+            frames.push(frame);
+        }
+    }
+    return frames;
+}
+// Module path for eslintrc.cjs
+// Example: ".../@eslint/eslintrc/dist/eslintrc.cjs"
+let eslintrcBundlePath = undefined;
+// Module path for config-array-factory.js
+// Example: ".../@eslint/eslintrc/lib/config-array-factory"
+let configArrayFactoryPath = undefined;
+// Module path for relative-module-resolver.js
+// Example: ".../@eslint/eslintrc/lib/shared/relative-module-resolver"
+let moduleResolverPath = undefined;
+// Module path for naming.js
+// Example: ".../@eslint/eslintrc/lib/shared/naming"
+let namingPath = undefined;
+// Folder path where ESLint's package.json can be found
+// Example: ".../node_modules/eslint"
+let eslintFolder = undefined;
+exports.eslintFolder = eslintFolder;
+// Probe for the ESLint >=9.0.0 flat config layout:
+for (let currentModule = module;;) {
+    if (FLAT_CONFIG_REGEX.test(currentModule.filename)) {
+        // Obtain the stack trace of the current module, since the
+        // parent module of a flat config is undefined. From the
+        // stack trace, we can find the ESLint folder.
+        const stackTrace = getStackTrace();
+        const targetFrame = stackTrace.find((frame) => frame.file && frame.file.endsWith('eslint.js'));
+        if (targetFrame) {
+            // Walk up the path and continuously attempt to resolve the ESLint folder
+            let currentPath = targetFrame.file;
+            while (currentPath) {
+                const potentialPath = node_path_1.default.dirname(currentPath);
+                if (potentialPath === currentPath) {
+                    break;
+                }
+                currentPath = potentialPath;
+                try {
+                    exports.eslintFolder = eslintFolder = node_path_1.default.dirname(require.resolve('eslint/package.json', { paths: [currentPath] }));
+                    break;
+                }
+                catch (ex) {
+                    if (!isModuleResolutionError(ex)) {
+                        throw ex;
+                    }
+                }
+            }
+        }
+        if (eslintFolder) {
+            const eslintrcFolderPath = node_path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] }));
+            eslintrcBundlePath = node_path_1.default.join(eslintrcFolderPath, 'dist/eslintrc.cjs');
+        }
+        break;
+    }
+    if (!currentModule.parent) {
+        break;
+    }
+    currentModule = currentModule.parent;
+}
+if (!eslintFolder) {
+    // Probe for the ESLint >=8.0.0 layout:
+    for (let currentModule = module;;) {
+        if (!eslintrcBundlePath) {
+            if (currentModule.filename.endsWith('eslintrc.cjs')) {
+                // For ESLint >=8.0.0, all @eslint/eslintrc code is bundled at this path:
+                //   .../@eslint/eslintrc/dist/eslintrc.cjs
+                try {
+                    const eslintrcFolderPath = node_path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] }));
+                    // Make sure we actually resolved the module in our call path
+                    // and not some other spurious dependency.
+                    const resolvedEslintrcBundlePath = node_path_1.default.join(eslintrcFolderPath, 'dist/eslintrc.cjs');
+                    if (resolvedEslintrcBundlePath === currentModule.filename) {
+                        eslintrcBundlePath = resolvedEslintrcBundlePath;
+                    }
+                }
+                catch (ex) {
+                    // Module resolution failures are expected, as we're walking
+                    // up our require stack to look for eslint. All other errors
+                    // are re-thrown.
+                    if (!isModuleResolutionError(ex)) {
+                        throw ex;
+                    }
+                }
+            }
+        }
+        else {
+            // Next look for a file in ESLint's folder
+            //   .../eslint/lib/cli-engine/cli-engine.js
+            try {
+                const eslintCandidateFolder = node_path_1.default.dirname(require.resolve('eslint/package.json', {
+                    paths: [currentModule.path]
+                }));
+                // Make sure we actually resolved the module in our call path
+                // and not some other spurious dependency.
+                if (currentModule.filename.startsWith(eslintCandidateFolder + node_path_1.default.sep)) {
+                    exports.eslintFolder = eslintFolder = eslintCandidateFolder;
+                    break;
+                }
+            }
+            catch (ex) {
+                // Module resolution failures are expected, as we're walking
+                // up our require stack to look for eslint. All other errors
+                // are re-thrown.
+                if (!isModuleResolutionError(ex)) {
+                    throw ex;
+                }
+            }
+        }
+        if (!currentModule.parent) {
+            break;
+        }
+        currentModule = currentModule.parent;
+    }
+}
+if (!eslintFolder) {
+    // Probe for the ESLint >=7.12.0 layout:
+    for (let currentModule = module;;) {
+        if (!configArrayFactoryPath) {
+            // For ESLint >=7.12.0, config-array-factory.js is at this path:
+            //   .../@eslint/eslintrc/lib/config-array-factory.js
+            try {
+                const eslintrcFolder = node_path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', {
+                    paths: [currentModule.path]
+                }));
+                const resolvedConfigArrayFactoryPath = node_path_1.default.join(eslintrcFolder, '/lib/config-array-factory.js');
+                if (resolvedConfigArrayFactoryPath === currentModule.filename) {
+                    configArrayFactoryPath = resolvedConfigArrayFactoryPath;
+                    moduleResolverPath = `${eslintrcFolder}/lib/shared/relative-module-resolver`;
+                    namingPath = `${eslintrcFolder}/lib/shared/naming`;
+                }
+            }
+            catch (ex) {
+                // Module resolution failures are expected, as we're walking
+                // up our require stack to look for eslint. All other errors
+                // are re-thrown.
+                if (!isModuleResolutionError(ex)) {
+                    throw ex;
+                }
+            }
+        }
+        else if (currentModule.filename.endsWith('cli-engine.js')) {
+            // Next look for a file in ESLint's folder
+            //   .../eslint/lib/cli-engine/cli-engine.js
+            try {
+                const eslintCandidateFolder = node_path_1.default.dirname(require.resolve('eslint/package.json', {
+                    paths: [currentModule.path]
+                }));
+                if (node_path_1.default.join(eslintCandidateFolder, 'lib/cli-engine/cli-engine.js') === currentModule.filename) {
+                    exports.eslintFolder = eslintFolder = eslintCandidateFolder;
+                    break;
+                }
+            }
+            catch (ex) {
+                // Module resolution failures are expected, as we're walking
+                // up our require stack to look for eslint. All other errors
+                // are rethrown.
+                if (!isModuleResolutionError(ex)) {
+                    throw ex;
+                }
+            }
+        }
+        if (!currentModule.parent) {
+            break;
+        }
+        currentModule = currentModule.parent;
+    }
+}
+if (!eslintFolder) {
+    // Probe for the <7.12.0 layout:
+    for (let currentModule = module;;) {
+        // For ESLint <7.12.0, config-array-factory.js was at this path:
+        //   .../eslint/lib/cli-engine/config-array-factory.js
+        if (/[\\/]eslint[\\/]lib[\\/]cli-engine[\\/]config-array-factory\.js$/i.test(currentModule.filename)) {
+            exports.eslintFolder = eslintFolder = node_path_1.default.join(node_path_1.default.dirname(currentModule.filename), '../..');
+            configArrayFactoryPath = `${eslintFolder}/lib/cli-engine/config-array-factory`;
+            moduleResolverPath = `${eslintFolder}/lib/shared/relative-module-resolver`;
+            // The naming module was moved to @eslint/eslintrc in ESLint 7.8.0, which is also when the @eslint/eslintrc
+            // package was created and added to ESLint, so we need to probe for whether it's in the old or new location.
+            let eslintrcFolder;
+            try {
+                eslintrcFolder = node_path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', {
+                    paths: [currentModule.path]
+                }));
+            }
+            catch (ex) {
+                if (!isModuleResolutionError(ex)) {
+                    throw ex;
+                }
+            }
+            namingPath = `${eslintrcFolder !== null && eslintrcFolder !== void 0 ? eslintrcFolder : eslintFolder}/lib/shared/naming`;
+            break;
+        }
+        if (!currentModule.parent) {
+            // This was tested with ESLint 6.1.0 .. 7.12.1.
+            throw new Error('Failed to patch ESLint because the calling module was not recognized.\n' +
+                'If you are using a newer ESLint version that may be unsupported, please create a GitHub issue:\n' +
+                'https://github.com/microsoft/rushstack/issues');
+        }
+        currentModule = currentModule.parent;
+    }
+}
+// Detect the ESLint package version
+const eslintPackageJsonPath = `${eslintFolder}/package.json`;
+const eslintPackageObject = require(eslintPackageJsonPath);
+exports.eslintPackageVersion = eslintPackageObject.version;
+const ESLINT_MAJOR_VERSION = parseInt(exports.eslintPackageVersion, 10);
+exports.ESLINT_MAJOR_VERSION = ESLINT_MAJOR_VERSION;
+if (isNaN(ESLINT_MAJOR_VERSION)) {
+    throw new Error(`Unable to parse ESLint version "${exports.eslintPackageVersion}" in file "${eslintPackageJsonPath}"`);
+}
+if (!(ESLINT_MAJOR_VERSION >= 6 && ESLINT_MAJOR_VERSION <= 9)) {
+    throw new Error('The ESLint patch script has only been tested with ESLint version 6.x, 7.x, 8.x, and 9.x.' +
+        ` (Your version: ${exports.eslintPackageVersion})\n` +
+        'Consider reporting a GitHub issue:\n' +
+        'https://github.com/microsoft/rushstack/issues');
+}
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+let configArrayFactory;
+if (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {
+    exports.configArrayFactory = configArrayFactory = require(eslintrcBundlePath).Legacy.ConfigArrayFactory;
+}
+else if (configArrayFactoryPath) {
+    exports.configArrayFactory = configArrayFactory = require(configArrayFactoryPath).ConfigArrayFactory;
+}
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+let ModuleResolver;
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+let Naming;
+if (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {
+    exports.ModuleResolver = ModuleResolver = require(eslintrcBundlePath).Legacy.ModuleResolver;
+    exports.Naming = Naming = require(eslintrcBundlePath).Legacy.naming;
+}
+else if (moduleResolverPath && namingPath) {
+    exports.ModuleResolver = ModuleResolver = require(moduleResolverPath);
+    exports.Naming = Naming = require(namingPath);
+}
+//# sourceMappingURL=_patch-base.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/_patch-base.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/_patch-base.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/_patch-base.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"_patch-base.js","sourceRoot":"","sources":["../src/_patch-base.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This is a workaround for https://github.com/eslint/eslint/issues/3458\n//\n// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:\n//\n//    require(\"@rushstack/eslint-patch/modern-module-resolution\");\n//\n\nimport path from 'node:path';\n\nconst isModuleResolutionError: (ex: unknown) => boolean = (ex) =>\n  typeof ex === 'object' && !!ex && 'code' in ex && (ex as { code: unknown }).code === 'MODULE_NOT_FOUND';\n\nconst FLAT_CONFIG_REGEX: RegExp = /eslint\\.config\\.(cjs|mjs|js)$/i;\n\n// Ex:\n//     at async ESLint.lintFiles (C:\\\\path\\\\to\\\\\\\\eslint\\\\lib\\\\eslint\\\\eslint.js:720:21)\nconst NODE_STACK_REGEX: RegExp =\n  /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?)(?::(\\d+)| (\\d+))(?::(\\d+))?\\)?\\s*$/i;\n\ninterface INodeStackFrame {\n  file: string;\n  method?: string;\n  lineNumber: number;\n  column?: number;\n}\n\nfunction parseNodeStack(stack: string): INodeStackFrame | undefined {\n  const stackTraceMatch: RegExpExecArray | null = NODE_STACK_REGEX.exec(stack);\n  if (!stackTraceMatch) {\n    return undefined;\n  }\n\n  return {\n    file: stackTraceMatch[2],\n    method: stackTraceMatch[1],\n    lineNumber: parseInt(stackTraceMatch[3], 10),\n    column: stackTraceMatch[4] ? parseInt(stackTraceMatch[4], 10) : undefined\n  };\n}\n\nfunction getStackTrace(): INodeStackFrame[] {\n  const stackObj: { stack?: string } = {};\n  const originalStackTraceLimit: number = Error.stackTraceLimit;\n  Error.stackTraceLimit = Infinity;\n  Error.captureStackTrace(stackObj, getStackTrace);\n  Error.stackTraceLimit = originalStackTraceLimit;\n  if (!stackObj.stack) {\n    throw new Error('Unable to capture stack trace');\n  }\n\n  const { stack } = stackObj;\n  const stackLines: string[] = stack.split('\\n');\n  const frames: INodeStackFrame[] = [];\n  for (const line of stackLines) {\n    const frame: INodeStackFrame | undefined = parseNodeStack(line);\n    if (frame) {\n      frames.push(frame);\n    }\n  }\n\n  return frames;\n}\n\n// Module path for eslintrc.cjs\n// Example: \".../@eslint/eslintrc/dist/eslintrc.cjs\"\nlet eslintrcBundlePath: string | undefined = undefined;\n\n// Module path for config-array-factory.js\n// Example: \".../@eslint/eslintrc/lib/config-array-factory\"\nlet configArrayFactoryPath: string | undefined = undefined;\n\n// Module path for relative-module-resolver.js\n// Example: \".../@eslint/eslintrc/lib/shared/relative-module-resolver\"\nlet moduleResolverPath: string | undefined = undefined;\n\n// Module path for naming.js\n// Example: \".../@eslint/eslintrc/lib/shared/naming\"\nlet namingPath: string | undefined = undefined;\n\n// Folder path where ESLint's package.json can be found\n// Example: \".../node_modules/eslint\"\nlet eslintFolder: string | undefined = undefined;\n\n// Probe for the ESLint >=9.0.0 flat config layout:\nfor (let currentModule: NodeModule = module; ; ) {\n  if (FLAT_CONFIG_REGEX.test(currentModule.filename)) {\n    // Obtain the stack trace of the current module, since the\n    // parent module of a flat config is undefined. From the\n    // stack trace, we can find the ESLint folder.\n    const stackTrace: INodeStackFrame[] = getStackTrace();\n    const targetFrame: INodeStackFrame | undefined = stackTrace.find(\n      (frame: INodeStackFrame) => frame.file && frame.file.endsWith('eslint.js')\n    );\n    if (targetFrame) {\n      // Walk up the path and continuously attempt to resolve the ESLint folder\n      let currentPath: string | undefined = targetFrame.file;\n      while (currentPath) {\n        const potentialPath: string = path.dirname(currentPath);\n        if (potentialPath === currentPath) {\n          break;\n        }\n        currentPath = potentialPath;\n        try {\n          eslintFolder = path.dirname(require.resolve('eslint/package.json', { paths: [currentPath] }));\n          break;\n        } catch (ex: unknown) {\n          if (!isModuleResolutionError(ex)) {\n            throw ex;\n          }\n        }\n      }\n    }\n\n    if (eslintFolder) {\n      const eslintrcFolderPath: string = path.dirname(\n        require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] })\n      );\n      eslintrcBundlePath = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');\n    }\n\n    break;\n  }\n\n  if (!currentModule.parent) {\n    break;\n  }\n  currentModule = currentModule.parent;\n}\n\nif (!eslintFolder) {\n  // Probe for the ESLint >=8.0.0 layout:\n  for (let currentModule: NodeModule = module; ; ) {\n    if (!eslintrcBundlePath) {\n      if (currentModule.filename.endsWith('eslintrc.cjs')) {\n        // For ESLint >=8.0.0, all @eslint/eslintrc code is bundled at this path:\n        //   .../@eslint/eslintrc/dist/eslintrc.cjs\n        try {\n          const eslintrcFolderPath: string = path.dirname(\n            require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] })\n          );\n\n          // Make sure we actually resolved the module in our call path\n          // and not some other spurious dependency.\n          const resolvedEslintrcBundlePath: string = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');\n          if (resolvedEslintrcBundlePath === currentModule.filename) {\n            eslintrcBundlePath = resolvedEslintrcBundlePath;\n          }\n        } catch (ex: unknown) {\n          // Module resolution failures are expected, as we're walking\n          // up our require stack to look for eslint. All other errors\n          // are re-thrown.\n          if (!isModuleResolutionError(ex)) {\n            throw ex;\n          }\n        }\n      }\n    } else {\n      // Next look for a file in ESLint's folder\n      //   .../eslint/lib/cli-engine/cli-engine.js\n      try {\n        const eslintCandidateFolder: string = path.dirname(\n          require.resolve('eslint/package.json', {\n            paths: [currentModule.path]\n          })\n        );\n\n        // Make sure we actually resolved the module in our call path\n        // and not some other spurious dependency.\n        if (currentModule.filename.startsWith(eslintCandidateFolder + path.sep)) {\n          eslintFolder = eslintCandidateFolder;\n          break;\n        }\n      } catch (ex: unknown) {\n        // Module resolution failures are expected, as we're walking\n        // up our require stack to look for eslint. All other errors\n        // are re-thrown.\n        if (!isModuleResolutionError(ex)) {\n          throw ex;\n        }\n      }\n    }\n\n    if (!currentModule.parent) {\n      break;\n    }\n    currentModule = currentModule.parent;\n  }\n}\n\nif (!eslintFolder) {\n  // Probe for the ESLint >=7.12.0 layout:\n  for (let currentModule: NodeModule = module; ; ) {\n    if (!configArrayFactoryPath) {\n      // For ESLint >=7.12.0, config-array-factory.js is at this path:\n      //   .../@eslint/eslintrc/lib/config-array-factory.js\n      try {\n        const eslintrcFolder: string = path.dirname(\n          require.resolve('@eslint/eslintrc/package.json', {\n            paths: [currentModule.path]\n          })\n        );\n\n        const resolvedConfigArrayFactoryPath: string = path.join(\n          eslintrcFolder,\n          '/lib/config-array-factory.js'\n        );\n        if (resolvedConfigArrayFactoryPath === currentModule.filename) {\n          configArrayFactoryPath = resolvedConfigArrayFactoryPath;\n          moduleResolverPath = `${eslintrcFolder}/lib/shared/relative-module-resolver`;\n          namingPath = `${eslintrcFolder}/lib/shared/naming`;\n        }\n      } catch (ex: unknown) {\n        // Module resolution failures are expected, as we're walking\n        // up our require stack to look for eslint. All other errors\n        // are re-thrown.\n        if (!isModuleResolutionError(ex)) {\n          throw ex;\n        }\n      }\n    } else if (currentModule.filename.endsWith('cli-engine.js')) {\n      // Next look for a file in ESLint's folder\n      //   .../eslint/lib/cli-engine/cli-engine.js\n      try {\n        const eslintCandidateFolder: string = path.dirname(\n          require.resolve('eslint/package.json', {\n            paths: [currentModule.path]\n          })\n        );\n\n        if (path.join(eslintCandidateFolder, 'lib/cli-engine/cli-engine.js') === currentModule.filename) {\n          eslintFolder = eslintCandidateFolder;\n          break;\n        }\n      } catch (ex: unknown) {\n        // Module resolution failures are expected, as we're walking\n        // up our require stack to look for eslint. All other errors\n        // are rethrown.\n        if (!isModuleResolutionError(ex)) {\n          throw ex;\n        }\n      }\n    }\n\n    if (!currentModule.parent) {\n      break;\n    }\n    currentModule = currentModule.parent;\n  }\n}\n\nif (!eslintFolder) {\n  // Probe for the <7.12.0 layout:\n  for (let currentModule: NodeModule = module; ; ) {\n    // For ESLint <7.12.0, config-array-factory.js was at this path:\n    //   .../eslint/lib/cli-engine/config-array-factory.js\n    if (/[\\\\/]eslint[\\\\/]lib[\\\\/]cli-engine[\\\\/]config-array-factory\\.js$/i.test(currentModule.filename)) {\n      eslintFolder = path.join(path.dirname(currentModule.filename), '../..');\n      configArrayFactoryPath = `${eslintFolder}/lib/cli-engine/config-array-factory`;\n      moduleResolverPath = `${eslintFolder}/lib/shared/relative-module-resolver`;\n\n      // The naming module was moved to @eslint/eslintrc in ESLint 7.8.0, which is also when the @eslint/eslintrc\n      // package was created and added to ESLint, so we need to probe for whether it's in the old or new location.\n      let eslintrcFolder: string | undefined;\n      try {\n        eslintrcFolder = path.dirname(\n          require.resolve('@eslint/eslintrc/package.json', {\n            paths: [currentModule.path]\n          })\n        );\n      } catch (ex: unknown) {\n        if (!isModuleResolutionError(ex)) {\n          throw ex;\n        }\n      }\n\n      namingPath = `${eslintrcFolder ?? eslintFolder}/lib/shared/naming`;\n      break;\n    }\n\n    if (!currentModule.parent) {\n      // This was tested with ESLint 6.1.0 .. 7.12.1.\n      throw new Error(\n        'Failed to patch ESLint because the calling module was not recognized.\\n' +\n          'If you are using a newer ESLint version that may be unsupported, please create a GitHub issue:\\n' +\n          'https://github.com/microsoft/rushstack/issues'\n      );\n    }\n    currentModule = currentModule.parent;\n  }\n}\n\n// Detect the ESLint package version\nconst eslintPackageJsonPath: string = `${eslintFolder}/package.json`;\nconst eslintPackageObject: { version: string } = require(eslintPackageJsonPath);\nexport const eslintPackageVersion: string = eslintPackageObject.version;\nconst ESLINT_MAJOR_VERSION: number = parseInt(eslintPackageVersion, 10);\nif (isNaN(ESLINT_MAJOR_VERSION)) {\n  throw new Error(\n    `Unable to parse ESLint version \"${eslintPackageVersion}\" in file \"${eslintPackageJsonPath}\"`\n  );\n}\n\nif (!(ESLINT_MAJOR_VERSION >= 6 && ESLINT_MAJOR_VERSION <= 9)) {\n  throw new Error(\n    'The ESLint patch script has only been tested with ESLint version 6.x, 7.x, 8.x, and 9.x.' +\n      ` (Your version: ${eslintPackageVersion})\\n` +\n      'Consider reporting a GitHub issue:\\n' +\n      'https://github.com/microsoft/rushstack/issues'\n  );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet configArrayFactory: any;\nif (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {\n  configArrayFactory = require(eslintrcBundlePath).Legacy.ConfigArrayFactory;\n} else if (configArrayFactoryPath) {\n  configArrayFactory = require(configArrayFactoryPath).ConfigArrayFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet ModuleResolver: { resolve: any };\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Naming: { normalizePackageName: any };\nif (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {\n  ModuleResolver = require(eslintrcBundlePath).Legacy.ModuleResolver;\n  Naming = require(eslintrcBundlePath).Legacy.naming;\n} else if (moduleResolverPath && namingPath) {\n  ModuleResolver = require(moduleResolverPath);\n  Naming = require(namingPath);\n}\n\nexport {\n  eslintFolder,\n  configArrayFactory,\n  ModuleResolver,\n  Naming,\n  ESLINT_MAJOR_VERSION,\n  isModuleResolutionError\n};\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/custom-config-package-names.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/custom-config-package-names.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/custom-config-package-names.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,47 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+// This is a workaround for ESLint's requirement to consume shareable configurations from package names prefixed
+// with "eslint-config".
+//
+// To remove this requirement, add this line to the top of your project's .eslintrc.js file:
+//
+//    require("@rushstack/eslint-patch/custom-config-package-names");
+//
+const _patch_base_1 = require("./_patch-base");
+if (!_patch_base_1.configArrayFactory.__loadExtendedShareableConfigPatched) {
+    _patch_base_1.configArrayFactory.__loadExtendedShareableConfigPatched = true;
+    // eslint-disable-next-line @typescript-eslint/typedef
+    const originalLoadExtendedShareableConfig = _patch_base_1.configArrayFactory.prototype._loadExtendedShareableConfig;
+    // Common between ESLint versions
+    // https://github.com/eslint/eslintrc/blob/242d569020dfe4f561e4503787b99ec016337457/lib/config-array-factory.js#L910
+    _patch_base_1.configArrayFactory.prototype._loadExtendedShareableConfig = function (extendName) {
+        const originalResolve = _patch_base_1.ModuleResolver.resolve;
+        try {
+            _patch_base_1.ModuleResolver.resolve = function (moduleName, relativeToPath) {
+                try {
+                    return originalResolve.call(this, moduleName, relativeToPath);
+                }
+                catch (e) {
+                    // Only change the name we resolve if we cannot find the normalized module, since it is
+                    // valid to rely on the normalized package name. Use the originally provided module path
+                    // instead of the normalized module path.
+                    if ((e === null || e === void 0 ? void 0 : e.code) === 'MODULE_NOT_FOUND' &&
+                        moduleName !== extendName &&
+                        moduleName === _patch_base_1.Naming.normalizePackageName(extendName, 'eslint-config')) {
+                        return originalResolve.call(this, extendName, relativeToPath);
+                    }
+                    else {
+                        throw e;
+                    }
+                }
+            };
+            return originalLoadExtendedShareableConfig.apply(this, arguments);
+        }
+        finally {
+            _patch_base_1.ModuleResolver.resolve = originalResolve;
+        }
+    };
+}
+//# sourceMappingURL=custom-config-package-names.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/custom-config-package-names.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/custom-config-package-names.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/custom-config-package-names.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"custom-config-package-names.js","sourceRoot":"","sources":["../src/custom-config-package-names.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,gHAAgH;AAChH,wBAAwB;AACxB,EAAE;AACF,4FAA4F;AAC5F,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,+CAA2E;AAE3E,IAAI,CAAC,gCAAkB,CAAC,oCAAoC,EAAE,CAAC;IAC7D,gCAAkB,CAAC,oCAAoC,GAAG,IAAI,CAAC;IAC/D,sDAAsD;IACtD,MAAM,mCAAmC,GAAG,gCAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC;IAEtG,iCAAiC;IACjC,oHAAoH;IACpH,gCAAkB,CAAC,SAAS,CAAC,4BAA4B,GAAG,UAAU,UAAkB;QACtF,MAAM,eAAe,GAA2D,4BAAc,CAAC,OAAO,CAAC;QACvG,IAAI,CAAC;YACH,4BAAc,CAAC,OAAO,GAAG,UAAU,UAAkB,EAAE,cAAsB;gBAC3E,IAAI,CAAC;oBACH,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;gBAChE,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,uFAAuF;oBACvF,wFAAwF;oBACxF,yCAAyC;oBACzC,IACE,CAAC,CAA2B,aAA3B,CAAC,uBAAD,CAAC,CAA4B,IAAI,MAAK,kBAAkB;wBACzD,UAAU,KAAK,UAAU;wBACzB,UAAU,KAAK,oBAAM,CAAC,oBAAoB,CAAC,UAAU,EAAE,eAAe,CAAC,EACvE,CAAC;wBACD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;oBAChE,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,CAAC;oBACV,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YACF,OAAO,mCAAmC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpE,CAAC;gBAAS,CAAC;YACT,4BAAc,CAAC,OAAO,GAAG,eAAe,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This is a workaround for ESLint's requirement to consume shareable configurations from package names prefixed\n// with \"eslint-config\".\n//\n// To remove this requirement, add this line to the top of your project's .eslintrc.js file:\n//\n//    require(\"@rushstack/eslint-patch/custom-config-package-names\");\n//\nimport { configArrayFactory, ModuleResolver, Naming } from './_patch-base';\n\nif (!configArrayFactory.__loadExtendedShareableConfigPatched) {\n  configArrayFactory.__loadExtendedShareableConfigPatched = true;\n  // eslint-disable-next-line @typescript-eslint/typedef\n  const originalLoadExtendedShareableConfig = configArrayFactory.prototype._loadExtendedShareableConfig;\n\n  // Common between ESLint versions\n  // https://github.com/eslint/eslintrc/blob/242d569020dfe4f561e4503787b99ec016337457/lib/config-array-factory.js#L910\n  configArrayFactory.prototype._loadExtendedShareableConfig = function (extendName: string): unknown {\n    const originalResolve: (moduleName: string, relativeToPath: string) => string = ModuleResolver.resolve;\n    try {\n      ModuleResolver.resolve = function (moduleName: string, relativeToPath: string): string {\n        try {\n          return originalResolve.call(this, moduleName, relativeToPath);\n        } catch (e) {\n          // Only change the name we resolve if we cannot find the normalized module, since it is\n          // valid to rely on the normalized package name. Use the originally provided module path\n          // instead of the normalized module path.\n          if (\n            (e as NodeJS.ErrnoException)?.code === 'MODULE_NOT_FOUND' &&\n            moduleName !== extendName &&\n            moduleName === Naming.normalizePackageName(extendName, 'eslint-config')\n          ) {\n            return originalResolve.call(this, extendName, relativeToPath);\n          } else {\n            throw e;\n          }\n        }\n      };\n      return originalLoadExtendedShareableConfig.apply(this, arguments);\n    } finally {\n      ModuleResolver.resolve = originalResolve;\n    }\n  };\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/ast-guards.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/ast-guards.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/ast-guards.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,190 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isArrayExpression = isArrayExpression;
+exports.isArrowFunctionExpression = isArrowFunctionExpression;
+exports.isAssignmentPattern = isAssignmentPattern;
+exports.isClassDeclaration = isClassDeclaration;
+exports.isClassExpression = isClassExpression;
+exports.isExportDefaultDeclaration = isExportDefaultDeclaration;
+exports.isExpression = isExpression;
+exports.isFunctionDeclaration = isFunctionDeclaration;
+exports.isFunctionExpression = isFunctionExpression;
+exports.isIdentifier = isIdentifier;
+exports.isLiteral = isLiteral;
+exports.isMethodDefinition = isMethodDefinition;
+exports.isObjectExpression = isObjectExpression;
+exports.isPrivateIdentifier = isPrivateIdentifier;
+exports.isProperty = isProperty;
+exports.isPropertyDefinition = isPropertyDefinition;
+exports.isTSEnumDeclaration = isTSEnumDeclaration;
+exports.isTSInterfaceDeclaration = isTSInterfaceDeclaration;
+exports.isTSModuleDeclaration = isTSModuleDeclaration;
+exports.isTSQualifiedName = isTSQualifiedName;
+exports.isTSTypeAliasDeclaration = isTSTypeAliasDeclaration;
+exports.isVariableDeclarator = isVariableDeclarator;
+exports.isClassDeclarationWithName = isClassDeclarationWithName;
+exports.isClassPropertyNameNonComputed = isClassPropertyNameNonComputed;
+exports.isFunctionDeclarationWithName = isFunctionDeclarationWithName;
+exports.isNumberLiteral = isNumberLiteral;
+exports.isPropertyNameNonComputed = isPropertyNameNonComputed;
+exports.isStringLiteral = isStringLiteral;
+exports.isClassExpressionWithName = isClassExpressionWithName;
+exports.isFunctionExpressionWithName = isFunctionExpressionWithName;
+exports.isNormalAnonymousExpression = isNormalAnonymousExpression;
+exports.isNormalAssignmentPattern = isNormalAssignmentPattern;
+exports.isNormalClassPropertyDefinition = isNormalClassPropertyDefinition;
+exports.isNormalMethodDefinition = isNormalMethodDefinition;
+exports.isNormalObjectProperty = isNormalObjectProperty;
+exports.isNormalVariableDeclarator = isNormalVariableDeclarator;
+exports.isNormalAssignmentPatternWithAnonymousExpressionAssigned = isNormalAssignmentPatternWithAnonymousExpressionAssigned;
+exports.isNormalVariableDeclaratorWithAnonymousExpressionAssigned = isNormalVariableDeclaratorWithAnonymousExpressionAssigned;
+exports.isNormalObjectPropertyWithAnonymousExpressionAssigned = isNormalObjectPropertyWithAnonymousExpressionAssigned;
+exports.isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned = isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned;
+exports.isNodeWithName = isNodeWithName;
+function isArrayExpression(node) {
+    return node.type === 'ArrayExpression';
+}
+function isArrowFunctionExpression(node) {
+    return node.type === 'ArrowFunctionExpression';
+}
+/** default parameters */
+function isAssignmentPattern(node) {
+    return node.type === 'AssignmentPattern';
+}
+function isClassDeclaration(node) {
+    return node.type === 'ClassDeclaration';
+}
+function isClassExpression(node) {
+    return node.type === 'ClassExpression';
+}
+function isExportDefaultDeclaration(node) {
+    return node.type === 'ExportDefaultDeclaration';
+}
+function isExpression(node) {
+    return node.type.includes('Expression');
+}
+function isFunctionDeclaration(node) {
+    return node.type === 'FunctionDeclaration';
+}
+function isFunctionExpression(node) {
+    return node.type === 'FunctionExpression';
+}
+function isIdentifier(node) {
+    return node.type === 'Identifier';
+}
+function isLiteral(node) {
+    return node.type === 'Literal';
+}
+function isMethodDefinition(node) {
+    return node.type === 'MethodDefinition';
+}
+function isObjectExpression(node) {
+    return node.type === 'ObjectExpression';
+}
+function isPrivateIdentifier(node) {
+    return node.type === 'PrivateIdentifier';
+}
+function isProperty(node) {
+    return node.type === 'Property';
+}
+function isPropertyDefinition(node) {
+    return node.type === 'PropertyDefinition';
+}
+function isTSEnumDeclaration(node) {
+    return node.type === 'TSEnumDeclaration';
+}
+function isTSInterfaceDeclaration(node) {
+    return node.type === 'TSInterfaceDeclaration';
+}
+function isTSModuleDeclaration(node) {
+    return node.type === 'TSModuleDeclaration';
+}
+function isTSQualifiedName(node) {
+    return node.type === 'TSQualifiedName';
+}
+function isTSTypeAliasDeclaration(node) {
+    return node.type === 'TSTypeAliasDeclaration';
+}
+function isVariableDeclarator(node) {
+    return node.type === 'VariableDeclarator';
+}
+// Compound Type Guards for @typescript-eslint/types ast-spec compound types
+function isClassDeclarationWithName(node) {
+    return isClassDeclaration(node) && node.id !== null;
+}
+function isClassPropertyNameNonComputed(node) {
+    return isPrivateIdentifier(node) || isPropertyNameNonComputed(node);
+}
+function isFunctionDeclarationWithName(node) {
+    return isFunctionDeclaration(node) && node.id !== null;
+}
+function isNumberLiteral(node) {
+    return isLiteral(node) && typeof node.value === 'number';
+}
+function isPropertyNameNonComputed(node) {
+    return isIdentifier(node) || isNumberLiteral(node) || isStringLiteral(node);
+}
+function isStringLiteral(node) {
+    return isLiteral(node) && typeof node.value === 'string';
+}
+function isClassExpressionWithName(node) {
+    return isClassExpression(node) && node.id !== null;
+}
+function isFunctionExpressionWithName(node) {
+    return isFunctionExpression(node) && node.id !== null;
+}
+function isNormalAnonymousExpression(node) {
+    const ANONYMOUS_EXPRESSION_GUARDS = [
+        isArrowFunctionExpression,
+        isClassExpression,
+        isFunctionExpression,
+        isObjectExpression
+    ];
+    return ANONYMOUS_EXPRESSION_GUARDS.some((guard) => guard(node));
+}
+function isNormalAssignmentPattern(node) {
+    return isAssignmentPattern(node) && isIdentifier(node.left);
+}
+function isNormalClassPropertyDefinition(node) {
+    return (isPropertyDefinition(node) &&
+        (isIdentifier(node.key) || isPrivateIdentifier(node.key)) &&
+        node.value !== null);
+}
+function isNormalMethodDefinition(node) {
+    return isMethodDefinition(node) && (isIdentifier(node.key) || isPrivateIdentifier(node.key));
+}
+function isNormalObjectProperty(node) {
+    return isProperty(node) && (isIdentifier(node.key) || isPrivateIdentifier(node.key));
+}
+function isNormalVariableDeclarator(node) {
+    return isVariableDeclarator(node) && isIdentifier(node.id) && node.init !== null;
+}
+function isNormalAssignmentPatternWithAnonymousExpressionAssigned(node) {
+    return isNormalAssignmentPattern(node) && isNormalAnonymousExpression(node.right);
+}
+function isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node) {
+    return isNormalVariableDeclarator(node) && isNormalAnonymousExpression(node.init);
+}
+function isNormalObjectPropertyWithAnonymousExpressionAssigned(node) {
+    return isNormalObjectProperty(node) && isNormalAnonymousExpression(node.value);
+}
+function isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node) {
+    return isNormalClassPropertyDefinition(node) && isNormalAnonymousExpression(node.value);
+}
+function isNodeWithName(node) {
+    return (isClassDeclarationWithName(node) ||
+        isFunctionDeclarationWithName(node) ||
+        isClassExpressionWithName(node) ||
+        isFunctionExpressionWithName(node) ||
+        isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node) ||
+        isNormalObjectPropertyWithAnonymousExpressionAssigned(node) ||
+        isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node) ||
+        isNormalAssignmentPatternWithAnonymousExpressionAssigned(node) ||
+        isNormalMethodDefinition(node) ||
+        isTSEnumDeclaration(node) ||
+        isTSInterfaceDeclaration(node) ||
+        isTSTypeAliasDeclaration(node));
+}
+//# sourceMappingURL=ast-guards.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/ast-guards.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/ast-guards.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/ast-guards.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"ast-guards.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/ast-guards.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { TSESTree } from '@typescript-eslint/types';\n\nexport function isArrayExpression(node: TSESTree.Node): node is TSESTree.ArrayExpression {\n  return node.type === 'ArrayExpression';\n}\n\nexport function isArrowFunctionExpression(node: TSESTree.Node): node is TSESTree.ArrowFunctionExpression {\n  return node.type === 'ArrowFunctionExpression';\n}\n\n/** default parameters */\nexport function isAssignmentPattern(node: TSESTree.Node): node is TSESTree.AssignmentPattern {\n  return node.type === 'AssignmentPattern';\n}\n\nexport function isClassDeclaration(node: TSESTree.Node): node is TSESTree.ClassDeclaration {\n  return node.type === 'ClassDeclaration';\n}\n\nexport function isClassExpression(node: TSESTree.Node): node is TSESTree.ClassExpression {\n  return node.type === 'ClassExpression';\n}\n\nexport function isExportDefaultDeclaration(node: TSESTree.Node): node is TSESTree.ExportDefaultDeclaration {\n  return node.type === 'ExportDefaultDeclaration';\n}\n\nexport function isExpression(node: TSESTree.Node): node is TSESTree.Expression {\n  return node.type.includes('Expression');\n}\n\nexport function isFunctionDeclaration(node: TSESTree.Node): node is TSESTree.FunctionDeclaration {\n  return node.type === 'FunctionDeclaration';\n}\n\nexport function isFunctionExpression(node: TSESTree.Node): node is TSESTree.FunctionExpression {\n  return node.type === 'FunctionExpression';\n}\n\nexport function isIdentifier(node: TSESTree.Node): node is TSESTree.Identifier {\n  return node.type === 'Identifier';\n}\n\nexport function isLiteral(node: TSESTree.Node): node is TSESTree.Literal {\n  return node.type === 'Literal';\n}\n\nexport function isMethodDefinition(node: TSESTree.Node): node is TSESTree.MethodDefinition {\n  return node.type === 'MethodDefinition';\n}\n\nexport function isObjectExpression(node: TSESTree.Node): node is TSESTree.ObjectExpression {\n  return node.type === 'ObjectExpression';\n}\n\nexport function isPrivateIdentifier(node: TSESTree.Node): node is TSESTree.PrivateIdentifier {\n  return node.type === 'PrivateIdentifier';\n}\n\nexport function isProperty(node: TSESTree.Node): node is TSESTree.Property {\n  return node.type === 'Property';\n}\n\nexport function isPropertyDefinition(node: TSESTree.Node): node is TSESTree.PropertyDefinition {\n  return node.type === 'PropertyDefinition';\n}\n\nexport function isTSEnumDeclaration(node: TSESTree.Node): node is TSESTree.TSEnumDeclaration {\n  return node.type === 'TSEnumDeclaration';\n}\n\nexport function isTSInterfaceDeclaration(node: TSESTree.Node): node is TSESTree.TSInterfaceDeclaration {\n  return node.type === 'TSInterfaceDeclaration';\n}\n\nexport function isTSModuleDeclaration(node: TSESTree.Node): node is TSESTree.TSModuleDeclaration {\n  return node.type === 'TSModuleDeclaration';\n}\n\nexport function isTSQualifiedName(node: TSESTree.Node): node is TSESTree.TSQualifiedName {\n  return node.type === 'TSQualifiedName';\n}\n\nexport function isTSTypeAliasDeclaration(node: TSESTree.Node): node is TSESTree.TSTypeAliasDeclaration {\n  return node.type === 'TSTypeAliasDeclaration';\n}\n\nexport function isVariableDeclarator(node: TSESTree.Node): node is TSESTree.VariableDeclarator {\n  return node.type === 'VariableDeclarator';\n}\n\n// Compound Type Guards for @typescript-eslint/types ast-spec compound types\nexport function isClassDeclarationWithName(node: TSESTree.Node): node is TSESTree.ClassDeclarationWithName {\n  return isClassDeclaration(node) && node.id !== null;\n}\n\nexport function isClassPropertyNameNonComputed(\n  node: TSESTree.Node\n): node is TSESTree.ClassPropertyNameNonComputed {\n  return isPrivateIdentifier(node) || isPropertyNameNonComputed(node);\n}\n\nexport function isFunctionDeclarationWithName(\n  node: TSESTree.Node\n): node is TSESTree.FunctionDeclarationWithName {\n  return isFunctionDeclaration(node) && node.id !== null;\n}\n\nexport function isNumberLiteral(node: TSESTree.Node): node is TSESTree.NumberLiteral {\n  return isLiteral(node) && typeof node.value === 'number';\n}\n\nexport function isPropertyNameNonComputed(node: TSESTree.Node): node is TSESTree.PropertyNameNonComputed {\n  return isIdentifier(node) || isNumberLiteral(node) || isStringLiteral(node);\n}\n\nexport function isStringLiteral(node: TSESTree.Node): node is TSESTree.StringLiteral {\n  return isLiteral(node) && typeof node.value === 'string';\n}\n\n// Custom compound types\nexport interface IClassExpressionWithName extends TSESTree.ClassExpression {\n  id: TSESTree.Identifier;\n}\n\nexport function isClassExpressionWithName(node: TSESTree.Node): node is IClassExpressionWithName {\n  return isClassExpression(node) && node.id !== null;\n}\nexport interface IFunctionExpressionWithName extends TSESTree.FunctionExpression {\n  id: TSESTree.Identifier;\n}\n\nexport function isFunctionExpressionWithName(node: TSESTree.Node): node is IFunctionExpressionWithName {\n  return isFunctionExpression(node) && node.id !== null;\n}\n\nexport type NormalAnonymousExpression =\n  | TSESTree.ArrowFunctionExpression\n  | TSESTree.ClassExpression\n  | TSESTree.FunctionExpression\n  | TSESTree.ObjectExpression;\n\nexport function isNormalAnonymousExpression(node: TSESTree.Node): node is NormalAnonymousExpression {\n  const ANONYMOUS_EXPRESSION_GUARDS: ((node: TSESTree.Node) => boolean)[] = [\n    isArrowFunctionExpression,\n    isClassExpression,\n    isFunctionExpression,\n    isObjectExpression\n  ];\n  return ANONYMOUS_EXPRESSION_GUARDS.some((guard) => guard(node));\n}\n\nexport interface INormalAssignmentPattern extends TSESTree.AssignmentPattern {\n  left: TSESTree.Identifier;\n}\n\nexport function isNormalAssignmentPattern(node: TSESTree.Node): node is INormalAssignmentPattern {\n  return isAssignmentPattern(node) && isIdentifier(node.left);\n}\n\nexport interface INormalClassPropertyDefinition extends TSESTree.PropertyDefinitionNonComputedName {\n  key: TSESTree.PrivateIdentifier | TSESTree.Identifier;\n  value: TSESTree.Expression;\n}\n\nexport function isNormalClassPropertyDefinition(node: TSESTree.Node): node is INormalClassPropertyDefinition {\n  return (\n    isPropertyDefinition(node) &&\n    (isIdentifier(node.key) || isPrivateIdentifier(node.key)) &&\n    node.value !== null\n  );\n}\n\nexport interface INormalMethodDefinition extends TSESTree.MethodDefinitionNonComputedName {\n  key: TSESTree.PrivateIdentifier | TSESTree.Identifier;\n}\n\nexport function isNormalMethodDefinition(node: TSESTree.Node): node is INormalMethodDefinition {\n  return isMethodDefinition(node) && (isIdentifier(node.key) || isPrivateIdentifier(node.key));\n}\n\nexport interface INormalObjectProperty extends TSESTree.PropertyNonComputedName {\n  key: TSESTree.Identifier;\n}\n\nexport function isNormalObjectProperty(node: TSESTree.Node): node is INormalObjectProperty {\n  return isProperty(node) && (isIdentifier(node.key) || isPrivateIdentifier(node.key));\n}\n\nexport type INormalVariableDeclarator = TSESTree.LetOrConstOrVarDeclaration & {\n  id: TSESTree.Identifier;\n  init: TSESTree.Expression;\n};\n\nexport function isNormalVariableDeclarator(node: TSESTree.Node): node is INormalVariableDeclarator {\n  return isVariableDeclarator(node) && isIdentifier(node.id) && node.init !== null;\n}\n\nexport interface INormalAssignmentPatternWithAnonymousExpressionAssigned extends INormalAssignmentPattern {\n  right: NormalAnonymousExpression;\n}\n\nexport function isNormalAssignmentPatternWithAnonymousExpressionAssigned(\n  node: TSESTree.Node\n): node is INormalAssignmentPatternWithAnonymousExpressionAssigned {\n  return isNormalAssignmentPattern(node) && isNormalAnonymousExpression(node.right);\n}\n\nexport type INormalVariableDeclaratorWithAnonymousExpressionAssigned = INormalVariableDeclarator & {\n  init: NormalAnonymousExpression;\n};\n\nexport function isNormalVariableDeclaratorWithAnonymousExpressionAssigned(\n  node: TSESTree.Node\n): node is INormalVariableDeclaratorWithAnonymousExpressionAssigned {\n  return isNormalVariableDeclarator(node) && isNormalAnonymousExpression(node.init);\n}\n\nexport interface INormalObjectPropertyWithAnonymousExpressionAssigned extends INormalObjectProperty {\n  value: NormalAnonymousExpression;\n}\n\nexport function isNormalObjectPropertyWithAnonymousExpressionAssigned(\n  node: TSESTree.Node\n): node is INormalObjectPropertyWithAnonymousExpressionAssigned {\n  return isNormalObjectProperty(node) && isNormalAnonymousExpression(node.value);\n}\n\nexport interface INormalClassPropertyDefinitionWithAnonymousExpressionAssigned\n  extends INormalClassPropertyDefinition {\n  value: NormalAnonymousExpression;\n}\n\nexport function isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(\n  node: TSESTree.Node\n): node is INormalClassPropertyDefinitionWithAnonymousExpressionAssigned {\n  return isNormalClassPropertyDefinition(node) && isNormalAnonymousExpression(node.value);\n}\n\nexport type NodeWithName =\n  | TSESTree.ClassDeclarationWithName\n  | TSESTree.FunctionDeclarationWithName\n  | IClassExpressionWithName\n  | IFunctionExpressionWithName\n  | INormalVariableDeclaratorWithAnonymousExpressionAssigned\n  | INormalObjectPropertyWithAnonymousExpressionAssigned\n  | INormalClassPropertyDefinitionWithAnonymousExpressionAssigned\n  | INormalAssignmentPatternWithAnonymousExpressionAssigned\n  | INormalMethodDefinition\n  | TSESTree.TSEnumDeclaration\n  | TSESTree.TSInterfaceDeclaration\n  | TSESTree.TSTypeAliasDeclaration;\n\nexport function isNodeWithName(node: TSESTree.Node): node is NodeWithName {\n  return (\n    isClassDeclarationWithName(node) ||\n    isFunctionDeclarationWithName(node) ||\n    isClassExpressionWithName(node) ||\n    isFunctionExpressionWithName(node) ||\n    isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node) ||\n    isNormalObjectPropertyWithAnonymousExpressionAssigned(node) ||\n    isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node) ||\n    isNormalAssignmentPatternWithAnonymousExpressionAssigned(node) ||\n    isNormalMethodDefinition(node) ||\n    isTSEnumDeclaration(node) ||\n    isTSInterfaceDeclaration(node) ||\n    isTSTypeAliasDeclaration(node)\n  );\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-file.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-file.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-file.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,171 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getSuppressionsConfigForEslintConfigFolderPath = getSuppressionsConfigForEslintConfigFolderPath;
+exports.getAllBulkSuppressionsConfigsByEslintConfigFolderPath = getAllBulkSuppressionsConfigsByEslintConfigFolderPath;
+exports.writeSuppressionsJsonToFile = writeSuppressionsJsonToFile;
+exports.deleteBulkSuppressionsFileInEslintConfigFolder = deleteBulkSuppressionsFileInEslintConfigFolder;
+exports.serializeSuppression = serializeSuppression;
+const node_fs_1 = __importDefault(require("node:fs"));
+const constants_1 = require("./constants");
+const IS_RUNNING_IN_VSCODE = process.env[constants_1.VSCODE_PID_ENV_VAR_NAME] !== undefined;
+const TEN_SECONDS_MS = 10 * 1000;
+const SUPPRESSIONS_JSON_FILENAME = '.eslint-bulk-suppressions.json';
+function throwIfAnythingOtherThanNotExistError(e) {
+    if ((e === null || e === void 0 ? void 0 : e.code) !== 'ENOENT') {
+        // Throw an error if any other error than file not found
+        throw e;
+    }
+}
+const suppressionsJsonByFolderPath = new Map();
+function getSuppressionsConfigForEslintConfigFolderPath(eslintConfigFolderPath) {
+    const cachedSuppressionsConfig = suppressionsJsonByFolderPath.get(eslintConfigFolderPath);
+    let shouldLoad;
+    let suppressionsConfig;
+    if (cachedSuppressionsConfig) {
+        shouldLoad = IS_RUNNING_IN_VSCODE && cachedSuppressionsConfig.readTime < Date.now() - TEN_SECONDS_MS;
+        suppressionsConfig = cachedSuppressionsConfig.suppressionsConfig;
+    }
+    else {
+        shouldLoad = true;
+    }
+    if (shouldLoad) {
+        const suppressionsPath = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;
+        let rawJsonFile;
+        try {
+            rawJsonFile = node_fs_1.default.readFileSync(suppressionsPath).toString();
+        }
+        catch (e) {
+            throwIfAnythingOtherThanNotExistError(e);
+        }
+        if (!rawJsonFile) {
+            suppressionsConfig = {
+                serializedSuppressions: new Set(),
+                jsonObject: { suppressions: [] },
+                newSerializedSuppressions: new Set(),
+                newJsonObject: { suppressions: [] }
+            };
+        }
+        else {
+            const jsonObject = JSON.parse(rawJsonFile);
+            validateSuppressionsJson(jsonObject);
+            const serializedSuppressions = new Set();
+            for (const suppression of jsonObject.suppressions) {
+                serializedSuppressions.add(serializeSuppression(suppression));
+            }
+            suppressionsConfig = {
+                serializedSuppressions,
+                jsonObject,
+                newSerializedSuppressions: new Set(),
+                newJsonObject: { suppressions: [] }
+            };
+        }
+        suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });
+    }
+    return suppressionsConfig;
+}
+function getAllBulkSuppressionsConfigsByEslintConfigFolderPath() {
+    const result = [];
+    for (const [eslintConfigFolderPath, { suppressionsConfig }] of suppressionsJsonByFolderPath) {
+        result.push([eslintConfigFolderPath, suppressionsConfig]);
+    }
+    return result;
+}
+function writeSuppressionsJsonToFile(eslintConfigFolderPath, suppressionsConfig) {
+    suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });
+    const suppressionsPath = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;
+    if (suppressionsConfig.jsonObject.suppressions.length === 0) {
+        deleteFile(suppressionsPath);
+    }
+    else {
+        suppressionsConfig.jsonObject.suppressions.sort(compareSuppressions);
+        node_fs_1.default.writeFileSync(suppressionsPath, JSON.stringify(suppressionsConfig.jsonObject, undefined, 2));
+    }
+}
+function deleteBulkSuppressionsFileInEslintConfigFolder(eslintConfigFolderPath) {
+    const suppressionsPath = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;
+    deleteFile(suppressionsPath);
+}
+function deleteFile(filePath) {
+    try {
+        node_fs_1.default.unlinkSync(filePath);
+    }
+    catch (e) {
+        throwIfAnythingOtherThanNotExistError(e);
+    }
+}
+function serializeSuppression({ file, scopeId, rule }) {
+    return `${file}|${scopeId}|${rule}`;
+}
+function compareSuppressions(a, b) {
+    if (a.file < b.file) {
+        return -1;
+    }
+    else if (a.file > b.file) {
+        return 1;
+    }
+    else if (a.scopeId < b.scopeId) {
+        return -1;
+    }
+    else if (a.scopeId > b.scopeId) {
+        return 1;
+    }
+    else if (a.rule < b.rule) {
+        return -1;
+    }
+    else if (a.rule > b.rule) {
+        return 1;
+    }
+    else {
+        return 0;
+    }
+}
+function validateSuppressionsJson(json) {
+    if (typeof json !== 'object') {
+        throw new Error(`Invalid JSON object: ${JSON.stringify(json, null, 2)}`);
+    }
+    if (!json) {
+        throw new Error('JSON object is null.');
+    }
+    const EXPECTED_ROOT_PROPERTY_NAMES = new Set(['suppressions']);
+    for (const propertyName of Object.getOwnPropertyNames(json)) {
+        if (!EXPECTED_ROOT_PROPERTY_NAMES.has(propertyName)) {
+            throw new Error(`Unexpected property name: ${propertyName}`);
+        }
+    }
+    const { suppressions } = json;
+    if (!suppressions) {
+        throw new Error('Missing "suppressions" property.');
+    }
+    if (!Array.isArray(suppressions)) {
+        throw new Error('"suppressions" property is not an array.');
+    }
+    const EXPECTED_SUPPRESSION_PROPERTY_NAMES = new Set(['file', 'scopeId', 'rule']);
+    for (const suppression of suppressions) {
+        if (typeof suppression !== 'object') {
+            throw new Error(`Invalid suppression: ${JSON.stringify(suppression, null, 2)}`);
+        }
+        if (!suppression) {
+            throw new Error(`Suppression is null: ${JSON.stringify(suppression, null, 2)}`);
+        }
+        for (const propertyName of Object.getOwnPropertyNames(suppression)) {
+            if (!EXPECTED_SUPPRESSION_PROPERTY_NAMES.has(propertyName)) {
+                throw new Error(`Unexpected property name: ${propertyName}`);
+            }
+        }
+        for (const propertyName of EXPECTED_SUPPRESSION_PROPERTY_NAMES) {
+            if (!suppression.hasOwnProperty(propertyName)) {
+                throw new Error(`Missing "${propertyName}" property in suppression: ${JSON.stringify(suppression, null, 2)}`);
+            }
+            else if (typeof suppression[propertyName] !== 'string') {
+                throw new Error(`"${propertyName}" property in suppression is not a string: ${JSON.stringify(suppression, null, 2)}`);
+            }
+        }
+    }
+    return true;
+}
+//# sourceMappingURL=bulk-suppressions-file.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-file.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-file.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-file.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"bulk-suppressions-file.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-file.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport { VSCODE_PID_ENV_VAR_NAME } from './constants';\n\nexport interface ISuppression {\n  file: string;\n  scopeId: string;\n  rule: string;\n}\n\nexport interface IBulkSuppressionsConfig {\n  serializedSuppressions: Set<string>;\n  jsonObject: IBulkSuppressionsJson;\n  newSerializedSuppressions: Set<string>;\n  newJsonObject: IBulkSuppressionsJson;\n}\n\nexport interface IBulkSuppressionsJson {\n  suppressions: ISuppression[];\n}\n\nconst IS_RUNNING_IN_VSCODE: boolean = process.env[VSCODE_PID_ENV_VAR_NAME] !== undefined;\nconst TEN_SECONDS_MS: number = 10 * 1000;\nconst SUPPRESSIONS_JSON_FILENAME: string = '.eslint-bulk-suppressions.json';\n\nfunction throwIfAnythingOtherThanNotExistError(e: NodeJS.ErrnoException): void | never {\n  if (e?.code !== 'ENOENT') {\n    // Throw an error if any other error than file not found\n    throw e;\n  }\n}\n\ninterface ICachedBulkSuppressionsConfig {\n  readTime: number;\n  suppressionsConfig: IBulkSuppressionsConfig;\n}\nconst suppressionsJsonByFolderPath: Map<string, ICachedBulkSuppressionsConfig> = new Map();\nexport function getSuppressionsConfigForEslintConfigFolderPath(\n  eslintConfigFolderPath: string\n): IBulkSuppressionsConfig {\n  const cachedSuppressionsConfig: ICachedBulkSuppressionsConfig | undefined =\n    suppressionsJsonByFolderPath.get(eslintConfigFolderPath);\n\n  let shouldLoad: boolean;\n  let suppressionsConfig: IBulkSuppressionsConfig;\n  if (cachedSuppressionsConfig) {\n    shouldLoad = IS_RUNNING_IN_VSCODE && cachedSuppressionsConfig.readTime < Date.now() - TEN_SECONDS_MS;\n    suppressionsConfig = cachedSuppressionsConfig.suppressionsConfig;\n  } else {\n    shouldLoad = true;\n  }\n\n  if (shouldLoad) {\n    const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n    let rawJsonFile: string | undefined;\n    try {\n      rawJsonFile = fs.readFileSync(suppressionsPath).toString();\n    } catch (e) {\n      throwIfAnythingOtherThanNotExistError(e);\n    }\n\n    if (!rawJsonFile) {\n      suppressionsConfig = {\n        serializedSuppressions: new Set(),\n        jsonObject: { suppressions: [] },\n        newSerializedSuppressions: new Set(),\n        newJsonObject: { suppressions: [] }\n      };\n    } else {\n      const jsonObject: IBulkSuppressionsJson = JSON.parse(rawJsonFile);\n      validateSuppressionsJson(jsonObject);\n\n      const serializedSuppressions: Set<string> = new Set();\n      for (const suppression of jsonObject.suppressions) {\n        serializedSuppressions.add(serializeSuppression(suppression));\n      }\n\n      suppressionsConfig = {\n        serializedSuppressions,\n        jsonObject,\n        newSerializedSuppressions: new Set(),\n        newJsonObject: { suppressions: [] }\n      };\n    }\n\n    suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });\n  }\n\n  return suppressionsConfig!;\n}\n\nexport function getAllBulkSuppressionsConfigsByEslintConfigFolderPath(): [string, IBulkSuppressionsConfig][] {\n  const result: [string, IBulkSuppressionsConfig][] = [];\n  for (const [eslintConfigFolderPath, { suppressionsConfig }] of suppressionsJsonByFolderPath) {\n    result.push([eslintConfigFolderPath, suppressionsConfig]);\n  }\n\n  return result;\n}\n\nexport function writeSuppressionsJsonToFile(\n  eslintConfigFolderPath: string,\n  suppressionsConfig: IBulkSuppressionsConfig\n): void {\n  suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });\n  const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n  if (suppressionsConfig.jsonObject.suppressions.length === 0) {\n    deleteFile(suppressionsPath);\n  } else {\n    suppressionsConfig.jsonObject.suppressions.sort(compareSuppressions);\n    fs.writeFileSync(suppressionsPath, JSON.stringify(suppressionsConfig.jsonObject, undefined, 2));\n  }\n}\n\nexport function deleteBulkSuppressionsFileInEslintConfigFolder(eslintConfigFolderPath: string): void {\n  const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n  deleteFile(suppressionsPath);\n}\n\nfunction deleteFile(filePath: string): void {\n  try {\n    fs.unlinkSync(filePath);\n  } catch (e) {\n    throwIfAnythingOtherThanNotExistError(e);\n  }\n}\n\nexport function serializeSuppression({ file, scopeId, rule }: ISuppression): string {\n  return `${file}|${scopeId}|${rule}`;\n}\n\nfunction compareSuppressions(a: ISuppression, b: ISuppression): -1 | 0 | 1 {\n  if (a.file < b.file) {\n    return -1;\n  } else if (a.file > b.file) {\n    return 1;\n  } else if (a.scopeId < b.scopeId) {\n    return -1;\n  } else if (a.scopeId > b.scopeId) {\n    return 1;\n  } else if (a.rule < b.rule) {\n    return -1;\n  } else if (a.rule > b.rule) {\n    return 1;\n  } else {\n    return 0;\n  }\n}\n\nfunction validateSuppressionsJson(json: IBulkSuppressionsJson): json is IBulkSuppressionsJson {\n  if (typeof json !== 'object') {\n    throw new Error(`Invalid JSON object: ${JSON.stringify(json, null, 2)}`);\n  }\n\n  if (!json) {\n    throw new Error('JSON object is null.');\n  }\n\n  const EXPECTED_ROOT_PROPERTY_NAMES: Set<keyof IBulkSuppressionsJson> = new Set(['suppressions']);\n\n  for (const propertyName of Object.getOwnPropertyNames(json)) {\n    if (!EXPECTED_ROOT_PROPERTY_NAMES.has(propertyName as keyof IBulkSuppressionsJson)) {\n      throw new Error(`Unexpected property name: ${propertyName}`);\n    }\n  }\n\n  const { suppressions } = json;\n  if (!suppressions) {\n    throw new Error('Missing \"suppressions\" property.');\n  }\n\n  if (!Array.isArray(suppressions)) {\n    throw new Error('\"suppressions\" property is not an array.');\n  }\n\n  const EXPECTED_SUPPRESSION_PROPERTY_NAMES: Set<keyof ISuppression> = new Set(['file', 'scopeId', 'rule']);\n  for (const suppression of suppressions) {\n    if (typeof suppression !== 'object') {\n      throw new Error(`Invalid suppression: ${JSON.stringify(suppression, null, 2)}`);\n    }\n\n    if (!suppression) {\n      throw new Error(`Suppression is null: ${JSON.stringify(suppression, null, 2)}`);\n    }\n\n    for (const propertyName of Object.getOwnPropertyNames(suppression)) {\n      if (!EXPECTED_SUPPRESSION_PROPERTY_NAMES.has(propertyName as keyof ISuppression)) {\n        throw new Error(`Unexpected property name: ${propertyName}`);\n      }\n    }\n\n    for (const propertyName of EXPECTED_SUPPRESSION_PROPERTY_NAMES) {\n      if (!suppression.hasOwnProperty(propertyName)) {\n        throw new Error(\n          `Missing \"${propertyName}\" property in suppression: ${JSON.stringify(suppression, null, 2)}`\n        );\n      } else if (typeof suppression[propertyName] !== 'string') {\n        throw new Error(\n          `\"${propertyName}\" property in suppression is not a string: ${JSON.stringify(suppression, null, 2)}`\n        );\n      }\n    }\n  }\n\n  return true;\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-patch.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-patch.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-patch.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,248 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+    var ownKeys = function(o) {
+        ownKeys = Object.getOwnPropertyNames || function (o) {
+            var ar = [];
+            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+            return ar;
+        };
+        return ownKeys(o);
+    };
+    return function (mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        __setModuleDefault(result, mod);
+        return result;
+    };
+})();
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.shouldBulkSuppress = shouldBulkSuppress;
+exports.prune = prune;
+exports.write = write;
+exports.requireFromPathToLinterJS = requireFromPathToLinterJS;
+exports.patchClass = patchClass;
+exports.extendVerifyFunction = extendVerifyFunction;
+const node_fs_1 = __importDefault(require("node:fs"));
+const Guards = __importStar(require("./ast-guards"));
+const _patch_base_1 = require("../_patch-base");
+const constants_1 = require("./constants");
+const bulk_suppressions_file_1 = require("./bulk-suppressions-file");
+const ESLINT_CONFIG_FILENAMES = [
+    'eslint.config.js',
+    'eslint.config.cjs',
+    'eslint.config.mjs',
+    '.eslintrc.js',
+    '.eslintrc.cjs'
+    // Several other filenames are allowed, but this patch requires that it be loaded via a JS config file,
+    // so we only need to check for the JS-based filenames
+];
+const SUPPRESSION_SYMBOL = Symbol('suppression');
+const ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE = process.env[constants_1.ESLINT_BULK_SUPPRESS_ENV_VAR_NAME];
+const SUPPRESS_ALL_RULES = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE === '*';
+const RULES_TO_SUPPRESS = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE
+    ? new Set(ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE.split(','))
+    : undefined;
+function getNodeName(node) {
+    if (Guards.isClassDeclarationWithName(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isFunctionDeclarationWithName(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isClassExpressionWithName(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isFunctionExpressionWithName(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isNormalObjectPropertyWithAnonymousExpressionAssigned(node)) {
+        return node.key.name;
+    }
+    else if (Guards.isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node)) {
+        return node.key.name;
+    }
+    else if (Guards.isNormalAssignmentPatternWithAnonymousExpressionAssigned(node)) {
+        return node.left.name;
+    }
+    else if (Guards.isNormalMethodDefinition(node)) {
+        return node.key.name;
+    }
+    else if (Guards.isTSEnumDeclaration(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isTSInterfaceDeclaration(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isTSTypeAliasDeclaration(node)) {
+        return node.id.name;
+    }
+}
+function calculateScopeId(node) {
+    const scopeIds = [];
+    for (let current = node; current; current = current.parent) {
+        const scopeIdForASTNode = getNodeName(current);
+        if (scopeIdForASTNode !== undefined) {
+            scopeIds.unshift(scopeIdForASTNode);
+        }
+    }
+    if (scopeIds.length === 0) {
+        return '.';
+    }
+    else {
+        return '.' + scopeIds.join('.');
+    }
+}
+const eslintConfigPathByFileOrFolderPath = new Map();
+function findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFilePath) {
+    const cachedFolderPathForFilePath = eslintConfigPathByFileOrFolderPath.get(normalizedFilePath);
+    if (cachedFolderPathForFilePath) {
+        return cachedFolderPathForFilePath;
+    }
+    const normalizedFileFolderPath = normalizedFilePath.substring(0, normalizedFilePath.lastIndexOf('/'));
+    const pathsToCache = [normalizedFilePath];
+    let eslintConfigFolderPath;
+    findEslintConfigFileLoop: for (let currentFolder = normalizedFileFolderPath; currentFolder; // 'something'.substring(0, -1) is ''
+     currentFolder = currentFolder.substring(0, currentFolder.lastIndexOf('/'))) {
+        const cachedEslintrcFolderPath = eslintConfigPathByFileOrFolderPath.get(currentFolder);
+        if (cachedEslintrcFolderPath) {
+            // Need to cache this result into the intermediate paths
+            eslintConfigFolderPath = cachedEslintrcFolderPath;
+            break;
+        }
+        pathsToCache.push(currentFolder);
+        for (const eslintConfigFilename of ESLINT_CONFIG_FILENAMES) {
+            if (node_fs_1.default.existsSync(`${currentFolder}/${eslintConfigFilename}`)) {
+                eslintConfigFolderPath = currentFolder;
+                break findEslintConfigFileLoop;
+            }
+        }
+    }
+    if (eslintConfigFolderPath) {
+        for (const checkedFolder of pathsToCache) {
+            eslintConfigPathByFileOrFolderPath.set(checkedFolder, eslintConfigFolderPath);
+        }
+        return eslintConfigFolderPath;
+    }
+    else {
+        throw new Error(`Cannot locate an ESLint configuration file for ${normalizedFilePath}`);
+    }
+}
+// One-line insert into the ruleContext report method to prematurely exit if the ESLint problem has been suppressed
+function shouldBulkSuppress(params) {
+    // Use this ENV variable to turn off eslint-bulk-suppressions functionality, default behavior is on
+    if (process.env[constants_1.ESLINT_BULK_ENABLE_ENV_VAR_NAME] === 'false') {
+        return false;
+    }
+    const { filename: fileAbsolutePath, currentNode, ruleId: rule, problem } = params;
+    const normalizedFileAbsolutePath = fileAbsolutePath.replace(/\\/g, '/');
+    const eslintConfigDirectory = findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFileAbsolutePath);
+    const fileRelativePath = normalizedFileAbsolutePath.substring(eslintConfigDirectory.length + 1);
+    const scopeId = calculateScopeId(currentNode);
+    const suppression = { file: fileRelativePath, scopeId, rule };
+    const config = (0, bulk_suppressions_file_1.getSuppressionsConfigForEslintConfigFolderPath)(eslintConfigDirectory);
+    const serializedSuppression = (0, bulk_suppressions_file_1.serializeSuppression)(suppression);
+    const currentNodeIsSuppressed = config.serializedSuppressions.has(serializedSuppression);
+    if (currentNodeIsSuppressed || SUPPRESS_ALL_RULES || (RULES_TO_SUPPRESS === null || RULES_TO_SUPPRESS === void 0 ? void 0 : RULES_TO_SUPPRESS.has(suppression.rule))) {
+        problem[SUPPRESSION_SYMBOL] = {
+            suppression,
+            serializedSuppression,
+            config
+        };
+    }
+    return process.env[constants_1.ESLINT_BULK_PRUNE_ENV_VAR_NAME] !== '1' && currentNodeIsSuppressed;
+}
+function prune() {
+    for (const [eslintConfigFolderPath, suppressionsConfig] of (0, bulk_suppressions_file_1.getAllBulkSuppressionsConfigsByEslintConfigFolderPath)()) {
+        if (suppressionsConfig) {
+            const { newSerializedSuppressions, newJsonObject } = suppressionsConfig;
+            const newSuppressionsConfig = {
+                serializedSuppressions: newSerializedSuppressions,
+                jsonObject: newJsonObject,
+                newSerializedSuppressions: new Set(),
+                newJsonObject: { suppressions: [] }
+            };
+            (0, bulk_suppressions_file_1.writeSuppressionsJsonToFile)(eslintConfigFolderPath, newSuppressionsConfig);
+        }
+    }
+}
+function write() {
+    for (const [eslintrcFolderPath, suppressionsConfig] of (0, bulk_suppressions_file_1.getAllBulkSuppressionsConfigsByEslintConfigFolderPath)()) {
+        if (suppressionsConfig) {
+            (0, bulk_suppressions_file_1.writeSuppressionsJsonToFile)(eslintrcFolderPath, suppressionsConfig);
+        }
+    }
+}
+// utility function for linter-patch.js to make require statements that use relative paths in linter.js work in linter-patch.js
+function requireFromPathToLinterJS(importPath) {
+    if (!_patch_base_1.eslintFolder) {
+        return require(importPath);
+    }
+    const pathToLinterFolder = `${_patch_base_1.eslintFolder}/lib/linter`;
+    const moduleAbsolutePath = require.resolve(importPath, { paths: [pathToLinterFolder] });
+    return require(moduleAbsolutePath);
+}
+function patchClass(originalClass, patchedClass) {
+    // Get all the property names of the patched class prototype
+    const patchedProperties = Object.getOwnPropertyNames(patchedClass.prototype);
+    // Loop through all the properties
+    for (const prop of patchedProperties) {
+        // Override the property in the original class
+        originalClass.prototype[prop] = patchedClass.prototype[prop];
+    }
+    // Handle getters and setters
+    for (const [prop, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(patchedClass.prototype))) {
+        if (descriptor.get || descriptor.set) {
+            Object.defineProperty(originalClass.prototype, prop, descriptor);
+        }
+    }
+}
+/**
+ * This returns a wrapped version of the "verify" function from ESLint's Linter class
+ * that postprocesses rule violations that weren't suppressed by comments. This postprocessing
+ * records suppressions that weren't otherwise suppressed by comments to be used
+ * by the "suppress" and "prune" commands.
+ */
+function extendVerifyFunction(originalFn) {
+    return function (...args) {
+        const problems = originalFn.apply(this, args);
+        if (problems) {
+            for (const problem of problems) {
+                if (problem[SUPPRESSION_SYMBOL]) {
+                    const { serializedSuppression, suppression, config: { newSerializedSuppressions, jsonObject: { suppressions }, newJsonObject: { suppressions: newSuppressions } } } = problem[SUPPRESSION_SYMBOL];
+                    if (!newSerializedSuppressions.has(serializedSuppression)) {
+                        newSerializedSuppressions.add(serializedSuppression);
+                        newSuppressions.push(suppression);
+                        suppressions.push(suppression);
+                    }
+                }
+            }
+        }
+        return problems;
+    };
+}
+//# sourceMappingURL=bulk-suppressions-patch.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-patch.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-patch.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/bulk-suppressions-patch.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"bulk-suppressions-patch.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-patch.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport type { TSESTree } from '@typescript-eslint/types';\n\nimport * as Guards from './ast-guards';\nimport { eslintFolder } from '../_patch-base';\nimport {\n  ESLINT_BULK_ENABLE_ENV_VAR_NAME,\n  ESLINT_BULK_PRUNE_ENV_VAR_NAME,\n  ESLINT_BULK_SUPPRESS_ENV_VAR_NAME\n} from './constants';\nimport {\n  getSuppressionsConfigForEslintConfigFolderPath,\n  serializeSuppression,\n  type IBulkSuppressionsConfig,\n  type ISuppression,\n  writeSuppressionsJsonToFile,\n  getAllBulkSuppressionsConfigsByEslintConfigFolderPath\n} from './bulk-suppressions-file';\n\nconst ESLINT_CONFIG_FILENAMES: string[] = [\n  'eslint.config.js',\n  'eslint.config.cjs',\n  'eslint.config.mjs',\n  '.eslintrc.js',\n  '.eslintrc.cjs'\n  // Several other filenames are allowed, but this patch requires that it be loaded via a JS config file,\n  // so we only need to check for the JS-based filenames\n];\nconst SUPPRESSION_SYMBOL: unique symbol = Symbol('suppression');\nconst ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE: string | undefined = process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME];\nconst SUPPRESS_ALL_RULES: boolean = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE === '*';\nconst RULES_TO_SUPPRESS: Set<string> | undefined = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE\n  ? new Set(ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE.split(','))\n  : undefined;\n\ninterface IProblem {\n  [SUPPRESSION_SYMBOL]?: {\n    config: IBulkSuppressionsConfig;\n    suppression: ISuppression;\n    serializedSuppression: string;\n  };\n}\n\nfunction getNodeName(node: TSESTree.Node): string | undefined {\n  if (Guards.isClassDeclarationWithName(node)) {\n    return node.id.name;\n  } else if (Guards.isFunctionDeclarationWithName(node)) {\n    return node.id.name;\n  } else if (Guards.isClassExpressionWithName(node)) {\n    return node.id.name;\n  } else if (Guards.isFunctionExpressionWithName(node)) {\n    return node.id.name;\n  } else if (Guards.isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node)) {\n    return node.id.name;\n  } else if (Guards.isNormalObjectPropertyWithAnonymousExpressionAssigned(node)) {\n    return node.key.name;\n  } else if (Guards.isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node)) {\n    return node.key.name;\n  } else if (Guards.isNormalAssignmentPatternWithAnonymousExpressionAssigned(node)) {\n    return node.left.name;\n  } else if (Guards.isNormalMethodDefinition(node)) {\n    return node.key.name;\n  } else if (Guards.isTSEnumDeclaration(node)) {\n    return node.id.name;\n  } else if (Guards.isTSInterfaceDeclaration(node)) {\n    return node.id.name;\n  } else if (Guards.isTSTypeAliasDeclaration(node)) {\n    return node.id.name;\n  }\n}\n\ntype NodeWithParent = TSESTree.Node & { parent?: TSESTree.Node };\n\nfunction calculateScopeId(node: NodeWithParent | undefined): string {\n  const scopeIds: string[] = [];\n  for (let current: NodeWithParent | undefined = node; current; current = current.parent) {\n    const scopeIdForASTNode: string | undefined = getNodeName(current);\n    if (scopeIdForASTNode !== undefined) {\n      scopeIds.unshift(scopeIdForASTNode);\n    }\n  }\n\n  if (scopeIds.length === 0) {\n    return '.';\n  } else {\n    return '.' + scopeIds.join('.');\n  }\n}\n\nconst eslintConfigPathByFileOrFolderPath: Map<string, string> = new Map();\n\nfunction findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFilePath: string): string {\n  const cachedFolderPathForFilePath: string | undefined =\n    eslintConfigPathByFileOrFolderPath.get(normalizedFilePath);\n  if (cachedFolderPathForFilePath) {\n    return cachedFolderPathForFilePath;\n  }\n  const normalizedFileFolderPath: string = normalizedFilePath.substring(\n    0,\n    normalizedFilePath.lastIndexOf('/')\n  );\n\n  const pathsToCache: string[] = [normalizedFilePath];\n  let eslintConfigFolderPath: string | undefined;\n  findEslintConfigFileLoop: for (\n    let currentFolder: string = normalizedFileFolderPath;\n    currentFolder; // 'something'.substring(0, -1) is ''\n    currentFolder = currentFolder.substring(0, currentFolder.lastIndexOf('/'))\n  ) {\n    const cachedEslintrcFolderPath: string | undefined =\n      eslintConfigPathByFileOrFolderPath.get(currentFolder);\n    if (cachedEslintrcFolderPath) {\n      // Need to cache this result into the intermediate paths\n      eslintConfigFolderPath = cachedEslintrcFolderPath;\n      break;\n    }\n\n    pathsToCache.push(currentFolder);\n    for (const eslintConfigFilename of ESLINT_CONFIG_FILENAMES) {\n      if (fs.existsSync(`${currentFolder}/${eslintConfigFilename}`)) {\n        eslintConfigFolderPath = currentFolder;\n        break findEslintConfigFileLoop;\n      }\n    }\n  }\n\n  if (eslintConfigFolderPath) {\n    for (const checkedFolder of pathsToCache) {\n      eslintConfigPathByFileOrFolderPath.set(checkedFolder, eslintConfigFolderPath);\n    }\n\n    return eslintConfigFolderPath;\n  } else {\n    throw new Error(`Cannot locate an ESLint configuration file for ${normalizedFilePath}`);\n  }\n}\n\n// One-line insert into the ruleContext report method to prematurely exit if the ESLint problem has been suppressed\nexport function shouldBulkSuppress(params: {\n  filename: string;\n  currentNode: TSESTree.Node;\n  ruleId: string;\n  problem: IProblem;\n}): boolean {\n  // Use this ENV variable to turn off eslint-bulk-suppressions functionality, default behavior is on\n  if (process.env[ESLINT_BULK_ENABLE_ENV_VAR_NAME] === 'false') {\n    return false;\n  }\n\n  const { filename: fileAbsolutePath, currentNode, ruleId: rule, problem } = params;\n  const normalizedFileAbsolutePath: string = fileAbsolutePath.replace(/\\\\/g, '/');\n  const eslintConfigDirectory: string =\n    findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFileAbsolutePath);\n  const fileRelativePath: string = normalizedFileAbsolutePath.substring(eslintConfigDirectory.length + 1);\n  const scopeId: string = calculateScopeId(currentNode);\n  const suppression: ISuppression = { file: fileRelativePath, scopeId, rule };\n\n  const config: IBulkSuppressionsConfig =\n    getSuppressionsConfigForEslintConfigFolderPath(eslintConfigDirectory);\n  const serializedSuppression: string = serializeSuppression(suppression);\n  const currentNodeIsSuppressed: boolean = config.serializedSuppressions.has(serializedSuppression);\n\n  if (currentNodeIsSuppressed || SUPPRESS_ALL_RULES || RULES_TO_SUPPRESS?.has(suppression.rule)) {\n    problem[SUPPRESSION_SYMBOL] = {\n      suppression,\n      serializedSuppression,\n      config\n    };\n  }\n\n  return process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] !== '1' && currentNodeIsSuppressed;\n}\n\nexport function prune(): void {\n  for (const [\n    eslintConfigFolderPath,\n    suppressionsConfig\n  ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {\n    if (suppressionsConfig) {\n      const { newSerializedSuppressions, newJsonObject } = suppressionsConfig;\n      const newSuppressionsConfig: IBulkSuppressionsConfig = {\n        serializedSuppressions: newSerializedSuppressions,\n        jsonObject: newJsonObject,\n        newSerializedSuppressions: new Set(),\n        newJsonObject: { suppressions: [] }\n      };\n\n      writeSuppressionsJsonToFile(eslintConfigFolderPath, newSuppressionsConfig);\n    }\n  }\n}\n\nexport function write(): void {\n  for (const [\n    eslintrcFolderPath,\n    suppressionsConfig\n  ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {\n    if (suppressionsConfig) {\n      writeSuppressionsJsonToFile(eslintrcFolderPath, suppressionsConfig);\n    }\n  }\n}\n\n// utility function for linter-patch.js to make require statements that use relative paths in linter.js work in linter-patch.js\nexport function requireFromPathToLinterJS(\n  importPath: string\n): import('eslint-9').Linter | import('eslint-8').Linter {\n  if (!eslintFolder) {\n    return require(importPath);\n  }\n\n  const pathToLinterFolder: string = `${eslintFolder}/lib/linter`;\n  const moduleAbsolutePath: string = require.resolve(importPath, { paths: [pathToLinterFolder] });\n  return require(moduleAbsolutePath);\n}\n\nexport function patchClass<T, U extends T>(originalClass: new () => T, patchedClass: new () => U): void {\n  // Get all the property names of the patched class prototype\n  const patchedProperties: string[] = Object.getOwnPropertyNames(patchedClass.prototype);\n\n  // Loop through all the properties\n  for (const prop of patchedProperties) {\n    // Override the property in the original class\n    originalClass.prototype[prop] = patchedClass.prototype[prop];\n  }\n\n  // Handle getters and setters\n  for (const [prop, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(patchedClass.prototype))) {\n    if (descriptor.get || descriptor.set) {\n      Object.defineProperty(originalClass.prototype, prop, descriptor);\n    }\n  }\n}\n\n/**\n * This returns a wrapped version of the \"verify\" function from ESLint's Linter class\n * that postprocesses rule violations that weren't suppressed by comments. This postprocessing\n * records suppressions that weren't otherwise suppressed by comments to be used\n * by the \"suppress\" and \"prune\" commands.\n */\nexport function extendVerifyFunction(\n  originalFn: (this: unknown, ...args: unknown[]) => IProblem[] | undefined\n): (this: unknown, ...args: unknown[]) => IProblem[] | undefined {\n  return function (this: unknown, ...args: unknown[]): IProblem[] | undefined {\n    const problems: IProblem[] | undefined = originalFn.apply(this, args);\n    if (problems) {\n      for (const problem of problems) {\n        if (problem[SUPPRESSION_SYMBOL]) {\n          const {\n            serializedSuppression,\n            suppression,\n            config: {\n              newSerializedSuppressions,\n              jsonObject: { suppressions },\n              newJsonObject: { suppressions: newSuppressions }\n            }\n          } = problem[SUPPRESSION_SYMBOL];\n          if (!newSerializedSuppressions.has(serializedSuppression)) {\n            newSerializedSuppressions.add(serializedSuppression);\n            newSuppressions.push(suppression);\n            suppressions.push(suppression);\n          }\n        }\n      }\n    }\n\n    return problems;\n  };\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/prune.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/prune.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/prune.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,60 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.pruneAsync = pruneAsync;
+const node_fs_1 = __importDefault(require("node:fs"));
+const print_help_1 = require("./utils/print-help");
+const runEslint_1 = require("./runEslint");
+const constants_1 = require("../constants");
+const bulk_suppressions_file_1 = require("../bulk-suppressions-file");
+async function pruneAsync() {
+    const args = process.argv.slice(3);
+    if (args.includes('--help') || args.includes('-h')) {
+        (0, print_help_1.printPruneHelp)();
+        process.exit(0);
+    }
+    if (args.length > 0) {
+        throw new Error(`@rushstack/eslint-bulk: Unknown arguments: ${args.join(' ')}`);
+    }
+    const normalizedCwd = process.cwd().replace(/\\/g, '/');
+    const allFiles = await getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd);
+    if (allFiles.length > 0) {
+        process.env[constants_1.ESLINT_BULK_PRUNE_ENV_VAR_NAME] = '1';
+        console.log(`Pruning suppressions for ${allFiles.length} files...`);
+        await (0, runEslint_1.runEslintAsync)(allFiles, 'prune');
+    }
+    else {
+        console.log('No files with existing suppressions found.');
+        (0, bulk_suppressions_file_1.deleteBulkSuppressionsFileInEslintConfigFolder)(normalizedCwd);
+    }
+}
+async function getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd) {
+    const { jsonObject: bulkSuppressionsConfigJson } = (0, bulk_suppressions_file_1.getSuppressionsConfigForEslintConfigFolderPath)(normalizedCwd);
+    const allFiles = new Set();
+    for (const { file: filePath } of bulkSuppressionsConfigJson.suppressions) {
+        allFiles.add(filePath);
+    }
+    const allFilesArray = Array.from(allFiles);
+    const allExistingFiles = [];
+    // TODO: limit parallelism here with something similar to `Async.forEachAsync` from `node-core-library`.
+    await Promise.all(allFilesArray.map(async (filePath) => {
+        try {
+            await node_fs_1.default.promises.access(filePath, node_fs_1.default.constants.F_OK);
+            allExistingFiles.push(filePath);
+        }
+        catch (_a) {
+            // Doesn't exist - ignore
+        }
+    }));
+    console.log(`Found ${allExistingFiles.length} files with existing suppressions.`);
+    const deletedCount = allFilesArray.length - allExistingFiles.length;
+    if (deletedCount > 0) {
+        console.log(`${deletedCount} files with suppressions were deleted.`);
+    }
+    return allExistingFiles;
+}
+//# sourceMappingURL=prune.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/prune.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/prune.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/prune.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/prune.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAY3D,gCAsBC;AAhCD,sDAAyB;AAEzB,mDAAoD;AACpD,2CAA6C;AAC7C,4CAA8D;AAC9D,sEAGmC;AAE5B,KAAK,UAAU,UAAU;IAC9B,MAAM,IAAI,GAAa,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,IAAA,2BAAc,GAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,aAAa,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAa,MAAM,8CAA8C,CAAC,aAAa,CAAC,CAAC;IAC/F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0CAA8B,CAAC,GAAG,GAAG,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;QACpE,MAAM,IAAA,0BAAc,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,IAAA,uEAA8C,EAAC,aAAa,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8CAA8C,CAAC,aAAqB;IACjF,MAAM,EAAE,UAAU,EAAE,0BAA0B,EAAE,GAC9C,IAAA,uEAA8C,EAAC,aAAa,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,0BAA0B,CAAC,YAAY,EAAE,CAAC;QACzE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,aAAa,GAAa,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErD,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,wGAAwG;IACxG,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,iBAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,WAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,SAAS,gBAAgB,CAAC,MAAM,oCAAoC,CAAC,CAAC;IAClF,MAAM,YAAY,GAAW,aAAa,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAC5E,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,wCAAwC,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport { printPruneHelp } from './utils/print-help';\nimport { runEslintAsync } from './runEslint';\nimport { ESLINT_BULK_PRUNE_ENV_VAR_NAME } from '../constants';\nimport {\n  deleteBulkSuppressionsFileInEslintConfigFolder,\n  getSuppressionsConfigForEslintConfigFolderPath\n} from '../bulk-suppressions-file';\n\nexport async function pruneAsync(): Promise<void> {\n  const args: string[] = process.argv.slice(3);\n\n  if (args.includes('--help') || args.includes('-h')) {\n    printPruneHelp();\n    process.exit(0);\n  }\n\n  if (args.length > 0) {\n    throw new Error(`@rushstack/eslint-bulk: Unknown arguments: ${args.join(' ')}`);\n  }\n\n  const normalizedCwd: string = process.cwd().replace(/\\\\/g, '/');\n  const allFiles: string[] = await getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd);\n  if (allFiles.length > 0) {\n    process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] = '1';\n    console.log(`Pruning suppressions for ${allFiles.length} files...`);\n    await runEslintAsync(allFiles, 'prune');\n  } else {\n    console.log('No files with existing suppressions found.');\n    deleteBulkSuppressionsFileInEslintConfigFolder(normalizedCwd);\n  }\n}\n\nasync function getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd: string): Promise<string[]> {\n  const { jsonObject: bulkSuppressionsConfigJson } =\n    getSuppressionsConfigForEslintConfigFolderPath(normalizedCwd);\n  const allFiles: Set<string> = new Set();\n  for (const { file: filePath } of bulkSuppressionsConfigJson.suppressions) {\n    allFiles.add(filePath);\n  }\n\n  const allFilesArray: string[] = Array.from(allFiles);\n\n  const allExistingFiles: string[] = [];\n  // TODO: limit parallelism here with something similar to `Async.forEachAsync` from `node-core-library`.\n  await Promise.all(\n    allFilesArray.map(async (filePath: string) => {\n      try {\n        await fs.promises.access(filePath, fs.constants.F_OK);\n        allExistingFiles.push(filePath);\n      } catch {\n        // Doesn't exist - ignore\n      }\n    })\n  );\n\n  console.log(`Found ${allExistingFiles.length} files with existing suppressions.`);\n  const deletedCount: number = allFilesArray.length - allExistingFiles.length;\n  if (deletedCount > 0) {\n    console.log(`${deletedCount} files with suppressions were deleted.`);\n  }\n\n  return allExistingFiles;\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/runEslint.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/runEslint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/runEslint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,79 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || (function () {
+    var ownKeys = function(o) {
+        ownKeys = Object.getOwnPropertyNames || function (o) {
+            var ar = [];
+            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+            return ar;
+        };
+        return ownKeys(o);
+    };
+    return function (mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        __setModuleDefault(result, mod);
+        return result;
+    };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.runEslintAsync = runEslintAsync;
+const get_eslint_cli_1 = require("./utils/get-eslint-cli");
+async function runEslintAsync(files, mode) {
+    const cwd = process.cwd();
+    const [eslintPath, eslintVersion] = (0, get_eslint_cli_1.getEslintPathAndVersion)(cwd);
+    const { ESLint } = require(eslintPath);
+    let eslint;
+    const majorVersion = parseInt(eslintVersion, 10);
+    if (majorVersion < 9) {
+        eslint = new ESLint({ cwd, useEslintrc: true });
+    }
+    else {
+        eslint = new ESLint({ cwd });
+    }
+    let results;
+    try {
+        results = await eslint.lintFiles(files);
+    }
+    catch (e) {
+        throw new Error(`@rushstack/eslint-bulk execution error: ${e.message}`);
+    }
+    const { write, prune } = await Promise.resolve().then(() => __importStar(require('../bulk-suppressions-patch')));
+    switch (mode) {
+        case 'suppress': {
+            await write();
+            break;
+        }
+        case 'prune': {
+            await prune();
+            break;
+        }
+    }
+    if (results.length > 0) {
+        const stylishFormatter = await eslint.loadFormatter();
+        // eslint-disable-next-line @typescript-eslint/no-explicit-any
+        const formattedResults = await Promise.resolve(stylishFormatter.format(results));
+        console.log(formattedResults);
+    }
+    console.log('@rushstack/eslint-bulk: Successfully pruned unused suppressions in all .eslint-bulk-suppressions.json ' +
+        `files under directory ${cwd}`);
+}
+//# sourceMappingURL=runEslint.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/runEslint.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/runEslint.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/runEslint.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"runEslint.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/runEslint.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAO3D,wCA4CC;AA9CD,2DAAiE;AAE1D,KAAK,UAAU,cAAc,CAAC,KAAe,EAAE,IAA0B;IAC9E,MAAM,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,wCAAuB,EAAC,GAAG,CAAC,CAAC;IACjE,MAAM,EAAE,MAAM,EAAE,GAA0D,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9F,IAAI,MAA+B,CAAC;IACpC,MAAM,YAAY,GAAW,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,OAA0D,CAAC;IAC/D,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,wDAAa,4BAA4B,GAAC,CAAC;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAgD,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QACnG,8DAA8D;QAC9D,MAAM,gBAAgB,GAAW,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAc,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,CACT,wGAAwG;QACtG,yBAAyB,GAAG,EAAE,CACjC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { ESLint as TEslintLegacy } from 'eslint-8';\nimport type { ESLint as TEslint } from 'eslint-9';\n\nimport { getEslintPathAndVersion } from './utils/get-eslint-cli';\n\nexport async function runEslintAsync(files: string[], mode: 'suppress' | 'prune'): Promise<void> {\n  const cwd: string = process.cwd();\n  const [eslintPath, eslintVersion] = getEslintPathAndVersion(cwd);\n  const { ESLint }: typeof import('eslint-9') | typeof import('eslint-8') = require(eslintPath);\n\n  let eslint: TEslint | TEslintLegacy;\n  const majorVersion: number = parseInt(eslintVersion, 10);\n  if (majorVersion < 9) {\n    eslint = new ESLint({ cwd, useEslintrc: true });\n  } else {\n    eslint = new ESLint({ cwd });\n  }\n\n  let results: (TEslint.LintResult | TEslintLegacy.LintResult)[];\n  try {\n    results = await eslint.lintFiles(files);\n  } catch (e) {\n    throw new Error(`@rushstack/eslint-bulk execution error: ${e.message}`);\n  }\n\n  const { write, prune } = await import('../bulk-suppressions-patch');\n  switch (mode) {\n    case 'suppress': {\n      await write();\n      break;\n    }\n\n    case 'prune': {\n      await prune();\n      break;\n    }\n  }\n\n  if (results.length > 0) {\n    const stylishFormatter: TEslint.Formatter | TEslintLegacy.Formatter = await eslint.loadFormatter();\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const formattedResults: string = await Promise.resolve(stylishFormatter.format(results as any));\n    console.log(formattedResults);\n  }\n\n  console.log(\n    '@rushstack/eslint-bulk: Successfully pruned unused suppressions in all .eslint-bulk-suppressions.json ' +\n      `files under directory ${cwd}`\n  );\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/start.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/start.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/start.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,44 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+const prune_1 = require("./prune");
+const suppress_1 = require("./suppress");
+const is_correct_cwd_1 = require("./utils/is-correct-cwd");
+const print_help_1 = require("./utils/print-help");
+if (process.argv.includes('-h') || process.argv.includes('-H') || process.argv.includes('--help')) {
+    (0, print_help_1.printHelp)();
+    process.exit(0);
+}
+if (process.argv.length < 3) {
+    (0, print_help_1.printHelp)();
+    process.exit(1);
+}
+if (!(0, is_correct_cwd_1.isCorrectCwd)(process.cwd())) {
+    console.error('@rushstack/eslint-bulk: Please call this command from the directory that contains .eslintrc.js or .eslintrc.cjs');
+    process.exit(1);
+}
+const subcommand = process.argv[2];
+let processPromise;
+switch (subcommand) {
+    case 'suppress': {
+        processPromise = (0, suppress_1.suppressAsync)();
+        break;
+    }
+    case 'prune': {
+        processPromise = (0, prune_1.pruneAsync)();
+        break;
+    }
+    default: {
+        console.error('@rushstack/eslint-bulk: Unknown subcommand: ' + subcommand);
+        process.exit(1);
+    }
+}
+processPromise.catch((e) => {
+    if (e instanceof Error) {
+        console.error(e.message);
+        process.exit(1);
+    }
+    throw e;
+});
+//# sourceMappingURL=start.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/start.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/start.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/start.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/start.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,mCAAqC;AACrC,yCAA2C;AAC3C,2DAAsD;AACtD,mDAA+C;AAE/C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClG,IAAA,sBAAS,GAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC5B,IAAA,sBAAS,GAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,IAAA,6BAAY,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IACjC,OAAO,CAAC,KAAK,CACX,iHAAiH,CAClH,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,GAAW,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,cAA6B,CAAC;AAClC,QAAQ,UAAU,EAAE,CAAC;IACnB,KAAK,UAAU,CAAC,CAAC,CAAC;QAChB,cAAc,GAAG,IAAA,wBAAa,GAAE,CAAC;QACjC,MAAM;IACR,CAAC;IAED,KAAK,OAAO,CAAC,CAAC,CAAC;QACb,cAAc,GAAG,IAAA,kBAAU,GAAE,CAAC;QAC9B,MAAM;IACR,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,8CAA8C,GAAG,UAAU,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACzB,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,CAAC;AACV,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { pruneAsync } from './prune';\nimport { suppressAsync } from './suppress';\nimport { isCorrectCwd } from './utils/is-correct-cwd';\nimport { printHelp } from './utils/print-help';\n\nif (process.argv.includes('-h') || process.argv.includes('-H') || process.argv.includes('--help')) {\n  printHelp();\n  process.exit(0);\n}\n\nif (process.argv.length < 3) {\n  printHelp();\n  process.exit(1);\n}\n\nif (!isCorrectCwd(process.cwd())) {\n  console.error(\n    '@rushstack/eslint-bulk: Please call this command from the directory that contains .eslintrc.js or .eslintrc.cjs'\n  );\n  process.exit(1);\n}\n\nconst subcommand: string = process.argv[2];\nlet processPromise: Promise<void>;\nswitch (subcommand) {\n  case 'suppress': {\n    processPromise = suppressAsync();\n    break;\n  }\n\n  case 'prune': {\n    processPromise = pruneAsync();\n    break;\n  }\n\n  default: {\n    console.error('@rushstack/eslint-bulk: Unknown subcommand: ' + subcommand);\n    process.exit(1);\n  }\n}\n\nprocessPromise.catch((e) => {\n  if (e instanceof Error) {\n    console.error(e.message);\n    process.exit(1);\n  }\n\n  throw e;\n});\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/suppress.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/suppress.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/suppress.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,63 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.suppressAsync = suppressAsync;
+const print_help_1 = require("./utils/print-help");
+const runEslint_1 = require("./runEslint");
+const constants_1 = require("../constants");
+async function suppressAsync() {
+    const args = process.argv.slice(3);
+    if (args.includes('--help') || args.includes('-h')) {
+        (0, print_help_1.printSuppressHelp)();
+        process.exit(0);
+    }
+    // Use reduce to create an object with all the parsed arguments
+    const parsedArgs = args.reduce((acc, arg, index, arr) => {
+        if (arg === '--rule') {
+            // continue because next arg should be the rule
+        }
+        else if (index > 0 && arr[index - 1] === '--rule' && arr[index + 1]) {
+            acc.rules.push(arg);
+        }
+        else if (arg === '--all') {
+            acc.all = true;
+        }
+        else if (arg.startsWith('--')) {
+            throw new Error(`@rushstack/eslint-bulk: Unknown option: ${arg}`);
+        }
+        else {
+            acc.files.push(arg);
+        }
+        return acc;
+    }, { rules: [], all: false, files: [] });
+    if (parsedArgs.files.length === 0) {
+        throw new Error('@rushstack/eslint-bulk: Files argument is required. Use glob patterns to specify files or use ' +
+            '`.` to suppress all files for the specified rules.');
+    }
+    if (parsedArgs.rules.length === 0 && !parsedArgs.all) {
+        throw new Error('@rushstack/eslint-bulk: Please specify at least one rule to suppress. Use --all to suppress all rules.');
+    }
+    // Find the index of the last argument that starts with '--'
+    const lastOptionIndex = args
+        .map((arg, i) => (arg.startsWith('--') ? i : -1))
+        .reduce((lastIndex, currentIndex) => Math.max(lastIndex, currentIndex), -1);
+    // Check if options come before files
+    if (parsedArgs.files.some((file) => args.indexOf(file) < lastOptionIndex)) {
+        throw new Error('@rushstack/eslint-bulk: Unable to parse command line arguments. All options should come before files argument.');
+    }
+    if (parsedArgs.all) {
+        process.env[constants_1.ESLINT_BULK_SUPPRESS_ENV_VAR_NAME] = '*';
+    }
+    else if (parsedArgs.rules.length > 0) {
+        process.env[constants_1.ESLINT_BULK_SUPPRESS_ENV_VAR_NAME] = parsedArgs.rules.join(',');
+    }
+    await (0, runEslint_1.runEslintAsync)(parsedArgs.files, 'suppress');
+    if (parsedArgs.all) {
+        console.log(`@rushstack/eslint-bulk: Successfully suppressed all rules for file(s) ${parsedArgs.files}`);
+    }
+    else if (parsedArgs.rules.length > 0) {
+        console.log(`@rushstack/eslint-bulk: Successfully suppressed rules ${parsedArgs.rules} for file(s) ${parsedArgs.files}`);
+    }
+}
+//# sourceMappingURL=suppress.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/suppress.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/suppress.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/suppress.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"suppress.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/suppress.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { printSuppressHelp } from './utils/print-help';\nimport { runEslintAsync } from './runEslint';\nimport { ESLINT_BULK_SUPPRESS_ENV_VAR_NAME } from '../constants';\n\ninterface IParsedArgs {\n  rules: string[];\n  all: boolean;\n  files: string[];\n}\n\nexport async function suppressAsync(): Promise<void> {\n  const args: string[] = process.argv.slice(3);\n\n  if (args.includes('--help') || args.includes('-h')) {\n    printSuppressHelp();\n    process.exit(0);\n  }\n\n  // Use reduce to create an object with all the parsed arguments\n  const parsedArgs: IParsedArgs = args.reduce<{\n    rules: string[];\n    all: boolean;\n    files: string[];\n  }>(\n    (acc, arg, index, arr) => {\n      if (arg === '--rule') {\n        // continue because next arg should be the rule\n      } else if (index > 0 && arr[index - 1] === '--rule' && arr[index + 1]) {\n        acc.rules.push(arg);\n      } else if (arg === '--all') {\n        acc.all = true;\n      } else if (arg.startsWith('--')) {\n        throw new Error(`@rushstack/eslint-bulk: Unknown option: ${arg}`);\n      } else {\n        acc.files.push(arg);\n      }\n      return acc;\n    },\n    { rules: [], all: false, files: [] }\n  );\n\n  if (parsedArgs.files.length === 0) {\n    throw new Error(\n      '@rushstack/eslint-bulk: Files argument is required. Use glob patterns to specify files or use ' +\n        '`.` to suppress all files for the specified rules.'\n    );\n  }\n\n  if (parsedArgs.rules.length === 0 && !parsedArgs.all) {\n    throw new Error(\n      '@rushstack/eslint-bulk: Please specify at least one rule to suppress. Use --all to suppress all rules.'\n    );\n  }\n\n  // Find the index of the last argument that starts with '--'\n  const lastOptionIndex: number = args\n    .map((arg, i) => (arg.startsWith('--') ? i : -1))\n    .reduce((lastIndex, currentIndex) => Math.max(lastIndex, currentIndex), -1);\n\n  // Check if options come before files\n  if (parsedArgs.files.some((file) => args.indexOf(file) < lastOptionIndex)) {\n    throw new Error(\n      '@rushstack/eslint-bulk: Unable to parse command line arguments. All options should come before files argument.'\n    );\n  }\n\n  if (parsedArgs.all) {\n    process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME] = '*';\n  } else if (parsedArgs.rules.length > 0) {\n    process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME] = parsedArgs.rules.join(',');\n  }\n\n  await runEslintAsync(parsedArgs.files, 'suppress');\n\n  if (parsedArgs.all) {\n    console.log(`@rushstack/eslint-bulk: Successfully suppressed all rules for file(s) ${parsedArgs.files}`);\n  } else if (parsedArgs.rules.length > 0) {\n    console.log(\n      `@rushstack/eslint-bulk: Successfully suppressed rules ${parsedArgs.rules} for file(s) ${parsedArgs.files}`\n    );\n  }\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,58 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getEslintPathAndVersion = getEslintPathAndVersion;
+const node_path_1 = __importDefault(require("node:path"));
+const constants_1 = require("../../constants");
+// When this list is updated, update the `eslint-bulk-suppressions-newest-test`
+// and/or the `eslint-bulk-suppressions-newest-test` projects' eslint dependencies.
+const TESTED_VERSIONS = new Set([
+    '8.6.0',
+    '8.7.0',
+    '8.21.0',
+    '8.22.0',
+    '8.23.0',
+    '8.23.1',
+    '8.57.0',
+    '9.25.1',
+    '9.37.0'
+]);
+function getEslintPathAndVersion(packagePath) {
+    // Try to find a local ESLint installation, the one that should be listed as a dev dependency in package.json
+    // and installed in node_modules
+    try {
+        const localEslintApiPath = require.resolve(constants_1.BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME, {
+            paths: [packagePath]
+        });
+        const localEslintPath = node_path_1.default.dirname(node_path_1.default.dirname(localEslintApiPath));
+        const { version: localEslintVersion } = require(`${localEslintPath}/package.json`);
+        if (!TESTED_VERSIONS.has(localEslintVersion)) {
+            console.warn('@rushstack/eslint-bulk: Be careful, the installed ESLint version has not been tested with eslint-bulk.');
+        }
+        return [localEslintApiPath, localEslintVersion];
+    }
+    catch (e1) {
+        try {
+            const { dependencies, devDependencies } = require(`${packagePath}/package.json`);
+            if (devDependencies === null || devDependencies === void 0 ? void 0 : devDependencies.eslint) {
+                throw new Error('@rushstack/eslint-bulk: eslint is specified as a dev dependency in package.json, ' +
+                    'but eslint-bulk cannot find it in node_modules.');
+            }
+            else if (dependencies === null || dependencies === void 0 ? void 0 : dependencies.eslint) {
+                throw new Error('@rushstack/eslint-bulk: eslint is specified as a dependency in package.json, ' +
+                    'but eslint-bulk cannot find it in node_modules.');
+            }
+            else {
+                throw new Error('@rushstack/eslint-bulk: eslint is not specified as a dependency in package.json.');
+            }
+        }
+        catch (e2) {
+            throw new Error("@rushstack/eslint-bulk: This command must be run in the same folder as a project's package.json file.");
+        }
+    }
+}
+//# sourceMappingURL=get-eslint-cli.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"get-eslint-cli.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAoB3D,0DA8CC;AAhED,0DAA6B;AAE7B,+CAA4E;AAE5E,+EAA+E;AAC/E,mFAAmF;AACnF,MAAM,eAAe,GAAgB,IAAI,GAAG,CAAC;IAC3C,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH,SAAgB,uBAAuB,CAAC,WAAmB;IACzD,6GAA6G;IAC7G,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAW,OAAO,CAAC,OAAO,CAAC,qDAAyC,EAAE;YAC5F,KAAK,EAAE,CAAC,WAAW,CAAC;SACrB,CAAC,CAAC;QACH,MAAM,eAAe,GAAW,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC/E,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,eAAe,eAAe,CAAC,CAAC;QAEnF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CACV,wGAAwG,CACzG,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,EACJ,YAAY,EACZ,eAAe,EAChB,GAGG,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;YAE3C,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,mFAAmF;oBACjF,iDAAiD,CACpD,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,+EAA+E;oBAC7E,iDAAiD,CACpD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport path from 'node:path';\n\nimport { BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME } from '../../constants';\n\n// When this list is updated, update the `eslint-bulk-suppressions-newest-test`\n// and/or the `eslint-bulk-suppressions-newest-test` projects' eslint dependencies.\nconst TESTED_VERSIONS: Set<string> = new Set([\n  '8.6.0',\n  '8.7.0',\n  '8.21.0',\n  '8.22.0',\n  '8.23.0',\n  '8.23.1',\n  '8.57.0',\n  '9.25.1',\n  '9.37.0'\n]);\n\nexport function getEslintPathAndVersion(packagePath: string): [string, string] {\n  // Try to find a local ESLint installation, the one that should be listed as a dev dependency in package.json\n  // and installed in node_modules\n  try {\n    const localEslintApiPath: string = require.resolve(BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME, {\n      paths: [packagePath]\n    });\n    const localEslintPath: string = path.dirname(path.dirname(localEslintApiPath));\n    const { version: localEslintVersion } = require(`${localEslintPath}/package.json`);\n\n    if (!TESTED_VERSIONS.has(localEslintVersion)) {\n      console.warn(\n        '@rushstack/eslint-bulk: Be careful, the installed ESLint version has not been tested with eslint-bulk.'\n      );\n    }\n\n    return [localEslintApiPath, localEslintVersion];\n  } catch (e1) {\n    try {\n      const {\n        dependencies,\n        devDependencies\n      }: {\n        dependencies: Record<string, string> | undefined;\n        devDependencies: Record<string, string> | undefined;\n      } = require(`${packagePath}/package.json`);\n\n      if (devDependencies?.eslint) {\n        throw new Error(\n          '@rushstack/eslint-bulk: eslint is specified as a dev dependency in package.json, ' +\n            'but eslint-bulk cannot find it in node_modules.'\n        );\n      } else if (dependencies?.eslint) {\n        throw new Error(\n          '@rushstack/eslint-bulk: eslint is specified as a dependency in package.json, ' +\n            'but eslint-bulk cannot find it in node_modules.'\n        );\n      } else {\n        throw new Error('@rushstack/eslint-bulk: eslint is not specified as a dependency in package.json.');\n      }\n    } catch (e2) {\n      throw new Error(\n        \"@rushstack/eslint-bulk: This command must be run in the same folder as a project's package.json file.\"\n      );\n    }\n  }\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,17 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isCorrectCwd = isCorrectCwd;
+const node_fs_1 = __importDefault(require("node:fs"));
+function isCorrectCwd(cwd) {
+    return (node_fs_1.default.existsSync(`${cwd}/eslint.config.js`) ||
+        node_fs_1.default.existsSync(`${cwd}/eslint.config.cjs`) ||
+        node_fs_1.default.existsSync(`${cwd}/eslint.config.mjs`) ||
+        node_fs_1.default.existsSync(`${cwd}/.eslintrc.js`) ||
+        node_fs_1.default.existsSync(`${cwd}/.eslintrc.cjs`));
+}
+//# sourceMappingURL=is-correct-cwd.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"is-correct-cwd.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAI3D,oCAQC;AAVD,sDAAyB;AAEzB,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,CACL,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,mBAAmB,CAAC;QACxC,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC;QACzC,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC;QACzC,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,eAAe,CAAC;QACpC,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,gBAAgB,CAAC,CACtC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nexport function isCorrectCwd(cwd: string): boolean {\n  return (\n    fs.existsSync(`${cwd}/eslint.config.js`) ||\n    fs.existsSync(`${cwd}/eslint.config.cjs`) ||\n    fs.existsSync(`${cwd}/eslint.config.mjs`) ||\n    fs.existsSync(`${cwd}/.eslintrc.js`) ||\n    fs.existsSync(`${cwd}/.eslintrc.cjs`)\n  );\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/print-help.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/print-help.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/print-help.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,81 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.printPruneHelp = printPruneHelp;
+exports.printHelp = printHelp;
+exports.printSuppressHelp = printSuppressHelp;
+const wrap_words_to_lines_1 = require("./wrap-words-to-lines");
+function printPruneHelp() {
+    const help = `eslint-bulk prune
+
+Usage:
+
+eslint-bulk prune
+
+This command is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to delete all unused suppression entries in all .eslint-bulk-suppressions.json files under the current working directory.`;
+    const wrapped = (0, wrap_words_to_lines_1.wrapWordsToLines)(help);
+    for (const line of wrapped) {
+        console.log(line);
+    }
+}
+function printHelp() {
+    const help = `eslint-bulk <command>
+
+Usage:
+
+eslint-bulk suppress --rule RULENAME1 [--rule RULENAME2...] PATH1 [PATH2...]
+eslint-bulk suppress --all PATH1 [PATH2...]
+eslint-bulk suppress --help
+
+eslint-bulk prune
+eslint-bulk prune --help
+
+eslint-bulk --help
+
+This command line tool is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to suppress or prune unused suppressions in the local .eslint-bulk-suppressions.json file.
+
+Commands:
+  eslint-bulk suppress [options] <path...>
+    Use this command to generate a new .eslint-bulk-suppressions.json file or add suppression entries to the existing file. Specify the files and rules you want to suppress.
+    Please run "eslint-bulk suppress --help" to learn more.
+
+  eslint-bulk prune
+    Use this command to delete all unused suppression entries in all .eslint-bulk-suppressions.json files under the current working directory.
+    Please run "eslint-bulk prune --help" to learn more.
+`;
+    const wrapped = (0, wrap_words_to_lines_1.wrapWordsToLines)(help);
+    for (const line of wrapped) {
+        console.log(line);
+    }
+}
+function printSuppressHelp() {
+    const help = `eslint-bulk suppress [options] <path...>
+
+Usage:
+
+eslint-bulk suppress --rule RULENAME1 [--rule RULENAME2...] PATH1 [PATH2...]
+eslint-bulk suppress --all PATH1 [PATH2...]
+eslint-bulk suppress --help
+
+This command is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to either generate a new .eslint-bulk-suppressions.json file or add suppression entries to the existing file. Specify the files and rules you want to suppress.
+
+Argument:
+  <path...>
+    Glob patterns for paths to suppress, same as eslint files argument. Should be relative to the project root.
+
+Options:
+  -h, -H, --help
+    Display this help message.
+
+  -R, --rule
+    The full name of the ESLint rule you want to bulk-suppress. Specify multiple rules with --rule NAME1 --rule RULENAME2.
+
+  -A, --all
+    Bulk-suppress all rules in the specified file patterns.`;
+    const wrapped = (0, wrap_words_to_lines_1.wrapWordsToLines)(help);
+    for (const line of wrapped) {
+        console.log(line);
+    }
+}
+//# sourceMappingURL=print-help.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/print-help.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/print-help.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/print-help.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"print-help.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/print-help.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAI3D,wCAaC;AAED,8BA8BC;AAED,8CA6BC;AA9ED,+DAAyD;AAEzD,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAW;;;;;;sNAM+L,CAAC;IAErN,MAAM,OAAO,GAAa,IAAA,sCAAgB,EAAC,IAAI,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAgB,SAAS;IACvB,MAAM,IAAI,GAAW;;;;;;;;;;;;;;;;;;;;;;;CAuBtB,CAAC;IAEA,MAAM,OAAO,GAAa,IAAA,sCAAgB,EAAC,IAAI,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,IAAI,GAAW;;;;;;;;;;;;;;;;;;;;;;4DAsBqC,CAAC;IAE3D,MAAM,OAAO,GAAa,IAAA,sCAAgB,EAAC,IAAI,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { wrapWordsToLines } from './wrap-words-to-lines';\n\nexport function printPruneHelp(): void {\n  const help: string = `eslint-bulk prune\n\nUsage:\n\neslint-bulk prune\n\nThis command is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to delete all unused suppression entries in all .eslint-bulk-suppressions.json files under the current working directory.`;\n\n  const wrapped: string[] = wrapWordsToLines(help);\n  for (const line of wrapped) {\n    console.log(line);\n  }\n}\n\nexport function printHelp(): void {\n  const help: string = `eslint-bulk <command>\n\nUsage:\n\neslint-bulk suppress --rule RULENAME1 [--rule RULENAME2...] PATH1 [PATH2...]\neslint-bulk suppress --all PATH1 [PATH2...]\neslint-bulk suppress --help\n\neslint-bulk prune\neslint-bulk prune --help\n\neslint-bulk --help\n\nThis command line tool is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to suppress or prune unused suppressions in the local .eslint-bulk-suppressions.json file.\n\nCommands:\n  eslint-bulk suppress [options] <path...>\n    Use this command to generate a new .eslint-bulk-suppressions.json file or add suppression entries to the existing file. Specify the files and rules you want to suppress.\n    Please run \"eslint-bulk suppress --help\" to learn more.\n\n  eslint-bulk prune\n    Use this command to delete all unused suppression entries in all .eslint-bulk-suppressions.json files under the current working directory.\n    Please run \"eslint-bulk prune --help\" to learn more.\n`;\n\n  const wrapped: string[] = wrapWordsToLines(help);\n  for (const line of wrapped) {\n    console.log(line);\n  }\n}\n\nexport function printSuppressHelp(): void {\n  const help: string = `eslint-bulk suppress [options] <path...>\n\nUsage:\n\neslint-bulk suppress --rule RULENAME1 [--rule RULENAME2...] PATH1 [PATH2...]\neslint-bulk suppress --all PATH1 [PATH2...]\neslint-bulk suppress --help\n\nThis command is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to either generate a new .eslint-bulk-suppressions.json file or add suppression entries to the existing file. Specify the files and rules you want to suppress.\n\nArgument:\n  <path...>\n    Glob patterns for paths to suppress, same as eslint files argument. Should be relative to the project root.\n\nOptions:\n  -h, -H, --help\n    Display this help message.\n\n  -R, --rule\n    The full name of the ESLint rule you want to bulk-suppress. Specify multiple rules with --rule NAME1 --rule RULENAME2.\n\n  -A, --all\n    Bulk-suppress all rules in the specified file patterns.`;\n\n  const wrapped: string[] = wrapWordsToLines(help);\n  for (const line of wrapped) {\n    console.log(line);\n  }\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,68 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.wrapWordsToLines = wrapWordsToLines;
+function wrapWordsToLines(text, maxLineLength, indentOrLinePrefix) {
+    var _a;
+    let linePrefix;
+    switch (typeof indentOrLinePrefix) {
+        case 'number':
+            linePrefix = ' '.repeat(indentOrLinePrefix);
+            break;
+        case 'string':
+            linePrefix = indentOrLinePrefix;
+            break;
+        default:
+            linePrefix = '';
+            break;
+    }
+    const linePrefixLength = linePrefix.length;
+    if (!maxLineLength) {
+        maxLineLength = process.stdout.getWindowSize()[0];
+    }
+    // Apply word wrapping and the provided line prefix, while also respecting existing newlines
+    // and prefix spaces that may exist in the text string already.
+    const lines = text.split(/\r?\n/);
+    const wrappedLines = [];
+    for (const line of lines) {
+        if (line.length + linePrefixLength <= maxLineLength) {
+            wrappedLines.push(linePrefix + line);
+        }
+        else {
+            const lineAdditionalPrefix = ((_a = line.match(/^\s*/)) === null || _a === void 0 ? void 0 : _a[0]) || '';
+            const whitespaceRegexp = /\s+/g;
+            let currentWhitespaceMatch = null;
+            let previousWhitespaceMatch;
+            let currentLineStartIndex = lineAdditionalPrefix.length;
+            let previousBreakRanOver = false;
+            while ((currentWhitespaceMatch = whitespaceRegexp.exec(line)) !== null) {
+                if (currentWhitespaceMatch.index + linePrefixLength - currentLineStartIndex > maxLineLength) {
+                    let whitespaceToSplitAt;
+                    if (!previousWhitespaceMatch ||
+                        // Handle the case where there are two words longer than the maxLineLength in a row
+                        previousBreakRanOver) {
+                        whitespaceToSplitAt = currentWhitespaceMatch;
+                    }
+                    else {
+                        whitespaceToSplitAt = previousWhitespaceMatch;
+                    }
+                    wrappedLines.push(linePrefix +
+                        lineAdditionalPrefix +
+                        line.substring(currentLineStartIndex, whitespaceToSplitAt.index));
+                    previousBreakRanOver = whitespaceToSplitAt.index - currentLineStartIndex > maxLineLength;
+                    currentLineStartIndex = whitespaceToSplitAt.index + whitespaceToSplitAt[0].length;
+                }
+                else {
+                    previousBreakRanOver = false;
+                }
+                previousWhitespaceMatch = currentWhitespaceMatch;
+            }
+            if (currentLineStartIndex < line.length) {
+                wrappedLines.push(linePrefix + lineAdditionalPrefix + line.substring(currentLineStartIndex));
+            }
+        }
+    }
+    return wrappedLines;
+}
+//# sourceMappingURL=wrap-words-to-lines.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"wrap-words-to-lines.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAuC3D,4CAyEC;AAzED,SAAgB,gBAAgB,CAC9B,IAAY,EACZ,aAAsB,EACtB,kBAAoC;;IAEpC,IAAI,UAAkB,CAAC;IACvB,QAAQ,OAAO,kBAAkB,EAAE,CAAC;QAClC,KAAK,QAAQ;YACX,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5C,MAAM;QACR,KAAK,QAAQ;YACX,UAAU,GAAG,kBAAkB,CAAC;YAChC,MAAM;QACR;YACE,UAAU,GAAG,EAAE,CAAC;YAChB,MAAM;IACV,CAAC;IAED,MAAM,gBAAgB,GAAW,UAAU,CAAC,MAAM,CAAC;IAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,4FAA4F;IAC5F,+DAA+D;IAC/D,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE5C,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,GAAG,gBAAgB,IAAI,aAAa,EAAE,CAAC;YACpD,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,oBAAoB,GAAW,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAG,CAAC,CAAC,KAAI,EAAE,CAAC;YACnE,MAAM,gBAAgB,GAAW,MAAM,CAAC;YACxC,IAAI,sBAAsB,GAA2B,IAAI,CAAC;YAC1D,IAAI,uBAAoD,CAAC;YACzD,IAAI,qBAAqB,GAAW,oBAAoB,CAAC,MAAM,CAAC;YAChE,IAAI,oBAAoB,GAAY,KAAK,CAAC;YAC1C,OAAO,CAAC,sBAAsB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvE,IAAI,sBAAsB,CAAC,KAAK,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,aAAa,EAAE,CAAC;oBAC5F,IAAI,mBAAgD,CAAC;oBACrD,IACE,CAAC,uBAAuB;wBACxB,mFAAmF;wBACnF,oBAAoB,EACpB,CAAC;wBACD,mBAAmB,GAAG,sBAAsB,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,mBAAmB,GAAG,uBAAuB,CAAC;oBAChD,CAAC;oBAED,YAAY,CAAC,IAAI,CACf,UAAU;wBACR,oBAAoB;wBACpB,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,KAAK,CAAC,CACnE,CAAC;oBACF,oBAAoB,GAAG,mBAAmB,CAAC,KAAK,GAAG,qBAAqB,GAAG,aAAa,CAAC;oBACzF,qBAAqB,GAAG,mBAAmB,CAAC,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,oBAAoB,GAAG,KAAK,CAAC;gBAC/B,CAAC;gBAED,uBAAuB,GAAG,sBAAsB,CAAC;YACnD,CAAC;YAED,IAAI,qBAAqB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACxC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// ----------------------------------------------------------------------------------------------------------\n// TO AVOID EXTRA DEPENDENCIES, THE CODE IN THIS FILE WAS BORROWED FROM:\n//\n// rushstack/libraries/terminal/src/PrintUtilities.ts\n//\n// KEEP IT IN SYNC WITH THAT FILE.\n// ----------------------------------------------------------------------------------------------------------\n\n/**\n * Applies word wrapping and returns an array of lines.\n *\n * @param text - The text to wrap\n * @param maxLineLength - The maximum length of a line, defaults to the console width\n * @param indent - The number of spaces to indent the wrapped lines, defaults to 0\n */\nexport function wrapWordsToLines(text: string, maxLineLength?: number, indent?: number): string[];\n/**\n * Applies word wrapping and returns an array of lines.\n *\n * @param text - The text to wrap\n * @param maxLineLength - The maximum length of a line, defaults to the console width\n * @param linePrefix - The string to prefix each line with, defaults to ''\n */\nexport function wrapWordsToLines(text: string, maxLineLength?: number, linePrefix?: string): string[];\n/**\n * Applies word wrapping and returns an array of lines.\n *\n * @param text - The text to wrap\n * @param maxLineLength - The maximum length of a line, defaults to the console width\n * @param indentOrLinePrefix - The number of spaces to indent the wrapped lines or the string to prefix\n * each line with, defaults to no prefix\n */\nexport function wrapWordsToLines(\n  text: string,\n  maxLineLength?: number,\n  indentOrLinePrefix?: number | string\n): string[];\nexport function wrapWordsToLines(\n  text: string,\n  maxLineLength?: number,\n  indentOrLinePrefix?: number | string\n): string[] {\n  let linePrefix: string;\n  switch (typeof indentOrLinePrefix) {\n    case 'number':\n      linePrefix = ' '.repeat(indentOrLinePrefix);\n      break;\n    case 'string':\n      linePrefix = indentOrLinePrefix;\n      break;\n    default:\n      linePrefix = '';\n      break;\n  }\n\n  const linePrefixLength: number = linePrefix.length;\n\n  if (!maxLineLength) {\n    maxLineLength = process.stdout.getWindowSize()[0];\n  }\n\n  // Apply word wrapping and the provided line prefix, while also respecting existing newlines\n  // and prefix spaces that may exist in the text string already.\n  const lines: string[] = text.split(/\\r?\\n/);\n\n  const wrappedLines: string[] = [];\n  for (const line of lines) {\n    if (line.length + linePrefixLength <= maxLineLength) {\n      wrappedLines.push(linePrefix + line);\n    } else {\n      const lineAdditionalPrefix: string = line.match(/^\\s*/)?.[0] || '';\n      const whitespaceRegexp: RegExp = /\\s+/g;\n      let currentWhitespaceMatch: RegExpExecArray | null = null;\n      let previousWhitespaceMatch: RegExpExecArray | undefined;\n      let currentLineStartIndex: number = lineAdditionalPrefix.length;\n      let previousBreakRanOver: boolean = false;\n      while ((currentWhitespaceMatch = whitespaceRegexp.exec(line)) !== null) {\n        if (currentWhitespaceMatch.index + linePrefixLength - currentLineStartIndex > maxLineLength) {\n          let whitespaceToSplitAt: RegExpExecArray | undefined;\n          if (\n            !previousWhitespaceMatch ||\n            // Handle the case where there are two words longer than the maxLineLength in a row\n            previousBreakRanOver\n          ) {\n            whitespaceToSplitAt = currentWhitespaceMatch;\n          } else {\n            whitespaceToSplitAt = previousWhitespaceMatch;\n          }\n\n          wrappedLines.push(\n            linePrefix +\n              lineAdditionalPrefix +\n              line.substring(currentLineStartIndex, whitespaceToSplitAt.index)\n          );\n          previousBreakRanOver = whitespaceToSplitAt.index - currentLineStartIndex > maxLineLength;\n          currentLineStartIndex = whitespaceToSplitAt.index + whitespaceToSplitAt[0].length;\n        } else {\n          previousBreakRanOver = false;\n        }\n\n        previousWhitespaceMatch = currentWhitespaceMatch;\n      }\n\n      if (currentLineStartIndex < line.length) {\n        wrappedLines.push(linePrefix + lineAdditionalPrefix + line.substring(currentLineStartIndex));\n      }\n    }\n  }\n\n  return wrappedLines;\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/constants.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/constants.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/constants.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME = exports.ESLINT_PACKAGE_NAME_ENV_VAR_NAME = exports.ESLINT_BULK_STDOUT_END_DELIMETER = exports.ESLINT_BULK_STDOUT_START_DELIMETER = exports.VSCODE_PID_ENV_VAR_NAME = exports.ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME = exports.ESLINT_BULK_DETECT_ENV_VAR_NAME = exports.ESLINT_BULK_PRUNE_ENV_VAR_NAME = exports.ESLINT_BULK_ENABLE_ENV_VAR_NAME = exports.ESLINT_BULK_SUPPRESS_ENV_VAR_NAME = exports.ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME = void 0;
+exports.ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME = 'RUSHSTACK_ESLINT_BULK_PATCH_PATH';
+exports.ESLINT_BULK_SUPPRESS_ENV_VAR_NAME = 'RUSHSTACK_ESLINT_BULK_SUPPRESS';
+exports.ESLINT_BULK_ENABLE_ENV_VAR_NAME = 'ESLINT_BULK_ENABLE';
+exports.ESLINT_BULK_PRUNE_ENV_VAR_NAME = 'ESLINT_BULK_PRUNE';
+exports.ESLINT_BULK_DETECT_ENV_VAR_NAME = '_RUSHSTACK_ESLINT_BULK_DETECT';
+exports.ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME = 'RUSHSTACK_ESLINT_BULK_FORCE_REGENERATE_PATCH';
+exports.VSCODE_PID_ENV_VAR_NAME = 'VSCODE_PID';
+exports.ESLINT_BULK_STDOUT_START_DELIMETER = 'RUSHSTACK_ESLINT_BULK_START';
+exports.ESLINT_BULK_STDOUT_END_DELIMETER = 'RUSHSTACK_ESLINT_BULK_END';
+exports.ESLINT_PACKAGE_NAME_ENV_VAR_NAME = '_RUSHSTACK_ESLINT_PACKAGE_NAME';
+exports.BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME = (_a = process.env[exports.ESLINT_PACKAGE_NAME_ENV_VAR_NAME]) !== null && _a !== void 0 ? _a : 'eslint';
+//# sourceMappingURL=constants.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/constants.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/constants.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/constants.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/constants.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;AAE9C,QAAA,mCAAmC,GAC9C,kCAAkC,CAAC;AACxB,QAAA,iCAAiC,GAC5C,gCAAgC,CAAC;AACtB,QAAA,+BAA+B,GAAyB,oBAAoB,CAAC;AAC7E,QAAA,8BAA8B,GAAwB,mBAAmB,CAAC;AAC1E,QAAA,+BAA+B,GAC1C,+BAA+B,CAAC;AACrB,QAAA,+CAA+C,GAC1D,8CAA8C,CAAC;AACpC,QAAA,uBAAuB,GAAiB,YAAY,CAAC;AAErD,QAAA,kCAAkC,GAC7C,6BAA6B,CAAC;AACnB,QAAA,gCAAgC,GAAgC,2BAA2B,CAAC;AAE5F,QAAA,gCAAgC,GAC3C,gCAAgC,CAAC;AAEtB,QAAA,yCAAyC,GACpD,MAAA,OAAO,CAAC,GAAG,CAAC,wCAAgC,CAAC,mCAAI,QAAQ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nexport const ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_PATCH_PATH' =\n  'RUSHSTACK_ESLINT_BULK_PATCH_PATH';\nexport const ESLINT_BULK_SUPPRESS_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_SUPPRESS' =\n  'RUSHSTACK_ESLINT_BULK_SUPPRESS';\nexport const ESLINT_BULK_ENABLE_ENV_VAR_NAME: 'ESLINT_BULK_ENABLE' = 'ESLINT_BULK_ENABLE';\nexport const ESLINT_BULK_PRUNE_ENV_VAR_NAME: 'ESLINT_BULK_PRUNE' = 'ESLINT_BULK_PRUNE';\nexport const ESLINT_BULK_DETECT_ENV_VAR_NAME: '_RUSHSTACK_ESLINT_BULK_DETECT' =\n  '_RUSHSTACK_ESLINT_BULK_DETECT';\nexport const ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_FORCE_REGENERATE_PATCH' =\n  'RUSHSTACK_ESLINT_BULK_FORCE_REGENERATE_PATCH';\nexport const VSCODE_PID_ENV_VAR_NAME: 'VSCODE_PID' = 'VSCODE_PID';\n\nexport const ESLINT_BULK_STDOUT_START_DELIMETER: 'RUSHSTACK_ESLINT_BULK_START' =\n  'RUSHSTACK_ESLINT_BULK_START';\nexport const ESLINT_BULK_STDOUT_END_DELIMETER: 'RUSHSTACK_ESLINT_BULK_END' = 'RUSHSTACK_ESLINT_BULK_END';\n\nexport const ESLINT_PACKAGE_NAME_ENV_VAR_NAME: '_RUSHSTACK_ESLINT_PACKAGE_NAME' =\n  '_RUSHSTACK_ESLINT_PACKAGE_NAME';\n\nexport const BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME: string =\n  process.env[ESLINT_PACKAGE_NAME_ENV_VAR_NAME] ?? 'eslint';\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/generate-patched-file.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/generate-patched-file.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/generate-patched-file.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,356 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.generatePatchedLinterJsFileIfDoesNotExist = generatePatchedLinterJsFileIfDoesNotExist;
+const node_fs_1 = __importDefault(require("node:fs"));
+const constants_1 = require("./constants");
+/**
+ * Dynamically generate file to properly patch many versions of ESLint
+ * @param inputFilePath - Must be an iteration of https://github.com/eslint/eslint/blob/main/lib/linter/linter.js
+ * @param outputFilePath - Some small changes to linter.js
+ */
+function generatePatchedLinterJsFileIfDoesNotExist(inputFilePath, outputFilePath, eslintPackageVersion) {
+    const generateEnvVarValue = process.env[constants_1.ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME];
+    if (generateEnvVarValue !== 'true' && generateEnvVarValue !== '1' && node_fs_1.default.existsSync(outputFilePath)) {
+        return;
+    }
+    const [majorVersionString, minorVersionString] = eslintPackageVersion.split('.');
+    const majorVersion = parseInt(majorVersionString, 10);
+    const minorVersion = parseInt(minorVersionString, 10);
+    const inputFile = node_fs_1.default.readFileSync(inputFilePath).toString();
+    let inputIndex = 0;
+    /**
+     * Extract from the stream until marker is reached.  When matching marker,
+     * ignore whitespace in the stream and in the marker.  Return the extracted text.
+     */
+    function scanUntilMarker(marker) {
+        const trimmedMarker = marker.replace(/\s/g, '');
+        let output = '';
+        let trimmed = '';
+        while (inputIndex < inputFile.length) {
+            const char = inputFile[inputIndex++];
+            output += char;
+            if (!/^\s$/.test(char)) {
+                trimmed += char;
+            }
+            if (trimmed.endsWith(trimmedMarker)) {
+                return output;
+            }
+        }
+        throw new Error('Unexpected end of input while looking for ' + JSON.stringify(marker));
+    }
+    function scanUntilNewline() {
+        let output = '';
+        while (inputIndex < inputFile.length) {
+            const char = inputFile[inputIndex++];
+            output += char;
+            if (char === '\n') {
+                return output;
+            }
+        }
+        throw new Error('Unexpected end of input while looking for new line');
+    }
+    function scanUntilEnd() {
+        const output = inputFile.substring(inputIndex);
+        inputIndex = inputFile.length;
+        return output;
+    }
+    const markerForStartOfClassMethodSpaces = '\n     */\n    ';
+    const markerForStartOfClassMethodTabs = '\n\t */\n\t';
+    function indexOfStartOfClassMethod(input, position) {
+        let startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodSpaces, position);
+        if (startOfClassMethodIndex === -1) {
+            startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodTabs, position);
+            if (startOfClassMethodIndex === -1) {
+                return { index: startOfClassMethodIndex };
+            }
+            return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodTabs };
+        }
+        return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodSpaces };
+    }
+    /**
+     * Returns index of next public method
+     * @param fromIndex - index of inputFile to search if public method still exists
+     * @returns -1 if public method does not exist or index of next public method
+     */
+    function getIndexOfNextMethod(fromIndex) {
+        const rest = inputFile.substring(fromIndex);
+        const endOfClassIndex = rest.indexOf('\n}');
+        const { index: startOfClassMethodIndex, marker: startOfClassMethodMarker } = indexOfStartOfClassMethod(rest);
+        if (startOfClassMethodIndex === -1 ||
+            !startOfClassMethodMarker ||
+            startOfClassMethodIndex > endOfClassIndex) {
+            return { index: -1 };
+        }
+        const afterMarkerIndex = startOfClassMethodIndex + startOfClassMethodMarker.length;
+        const isPublicMethod = rest[afterMarkerIndex] !== '_' &&
+            rest[afterMarkerIndex] !== '#' &&
+            !rest.substring(afterMarkerIndex, rest.indexOf('\n', afterMarkerIndex)).includes('static') &&
+            !rest.substring(afterMarkerIndex, rest.indexOf('\n', afterMarkerIndex)).includes('constructor');
+        return { index: fromIndex + afterMarkerIndex, isPublic: isPublicMethod };
+    }
+    function scanUntilIndex(indexToScanTo) {
+        const output = inputFile.substring(inputIndex, indexToScanTo);
+        inputIndex = indexToScanTo;
+        return output;
+    }
+    let outputFile = '';
+    // Match this:
+    //    //------------------------------------------------------------------------------
+    //    // Requirements
+    //    //------------------------------------------------------------------------------
+    outputFile += scanUntilMarker('// Requirements');
+    outputFile += scanUntilMarker('//--');
+    outputFile += scanUntilNewline();
+    outputFile += `
+// --- BEGIN MONKEY PATCH ---
+const bulkSuppressionsPatch = require(process.env.${constants_1.ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME});
+const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJS;
+`;
+    // Match this:
+    //    //------------------------------------------------------------------------------
+    //    // Typedefs
+    //    //------------------------------------------------------------------------------
+    const requireSection = scanUntilMarker('// Typedefs');
+    // Match something like this:
+    //
+    //    const path = require('path'),
+    //    eslintScope = require('eslint-scope'),
+    //    evk = require('eslint-visitor-keys'),
+    //
+    // Convert to something like this:
+    //
+    //    const path = require('path'),
+    //    eslintScope = requireFromPathToLinterJS('eslint-scope'),
+    //    evk = requireFromPathToLinterJS('eslint-visitor-keys'),
+    //
+    outputFile += requireSection.replace(/require\s*\((?:'([^']+)'|"([^"]+)")\)/g, (match, p1, p2) => {
+        var _a;
+        const importPath = (_a = p1 !== null && p1 !== void 0 ? p1 : p2) !== null && _a !== void 0 ? _a : '';
+        if (importPath !== 'path') {
+            if (p1) {
+                return `requireFromPathToLinterJS('${p1}')`;
+            }
+            if (p2) {
+                return `requireFromPathToLinterJS("${p2}")`;
+            }
+        }
+        // Keep as-is
+        return match;
+    });
+    outputFile += `--- END MONKEY PATCH ---
+`;
+    if (majorVersion >= 9) {
+        if (minorVersion >= 37) {
+            outputFile += scanUntilMarker('const visitor = new SourceCodeVisitor();');
+        }
+        else {
+            outputFile += scanUntilMarker('const emitter = createEmitter();');
+        }
+        outputFile += `
+      // --- BEGIN MONKEY PATCH ---
+      let currentNode = undefined;
+      // --- END MONKEY PATCH ---`;
+    }
+    // Match this (9.25.1):
+    // ```
+    //      if (reportTranslator === null) {
+    //        reportTranslator = createReportTranslator({
+    //            ruleId,
+    //            severity,
+    //            sourceCode,
+    //            messageIds,
+    //            disableFixes
+    //        });
+    //    }
+    //    const problem = reportTranslator(...args);
+    //
+    //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {
+    //        throw new Error("Fixable rules must set the `meta.fixable` property to \"code\" or \"whitespace\".");
+    //    }
+    // ```
+    // Or this (9.37.0):
+    // ```
+    //    const problem = report.addRuleMessage(
+    //      ruleId,
+    //      severity,
+    //      ...args,
+    //    );
+    //
+    //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {
+    //      throw new Error(
+    //        'Fixable rules must set the `meta.fixable` property to "code" or "whitespace".',
+    //      );
+    //    }
+    // ```
+    //
+    // Convert to something like this (9.25.1):
+    // ```
+    //      if (reportTranslator === null) {
+    //        reportTranslator = createReportTranslator({
+    //            ruleId,
+    //            severity,
+    //            sourceCode,
+    //            messageIds,
+    //            disableFixes
+    //        });
+    //    }
+    //    const problem = reportTranslator(...args);
+    //    // --- BEGIN MONKEY PATCH ---
+    //    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;
+    //    // --- END MONKEY PATCH ---
+    //
+    //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {
+    //        throw new Error("Fixable rules must set the `meta.fixable` property to \"code\" or \"whitespace\".");
+    //    }
+    // ```
+    // Or this (9.37.0):
+    // ```
+    //    const problem = report.addRuleMessage(
+    //      ruleId,
+    //      severity,
+    //      ...args,
+    //    );
+    //    // --- BEGIN MONKEY PATCH ---
+    //    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;
+    //    // --- END MONKEY PATCH ---
+    //
+    //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {
+    //      throw new Error(
+    //        'Fixable rules must set the `meta.fixable` property to "code" or "whitespace".',
+    //      );
+    //    }
+    // ```
+    if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) {
+        outputFile += scanUntilMarker('const problem = report.addRuleMessage(');
+        outputFile += scanUntilMarker('ruleId,');
+        outputFile += scanUntilMarker('severity,');
+        outputFile += scanUntilMarker('...args,');
+        outputFile += scanUntilMarker(');');
+    }
+    else {
+        outputFile += scanUntilMarker('const problem = reportTranslator(...args);');
+    }
+    outputFile += `
+    // --- BEGIN MONKEY PATCH ---`;
+    if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) {
+        outputFile += `
+    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) {
+      problem.suppressions ??= []; problem.suppressions.push({kind:"bulk",justification:""});
+    }`;
+    }
+    else {
+        outputFile += `
+    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;`;
+    }
+    outputFile += `
+    // --- END MONKEY PATCH ---`;
+    //
+    // Match this:
+    // ```
+    //    Object.keys(ruleListeners).forEach(selector => {
+    //      ...
+    //    });
+    // ```
+    //
+    // Convert to something like this (9.25.1):
+    // ```
+    //    Object.keys(ruleListeners).forEach(selector => {
+    //      // --- BEGIN MONKEY PATCH ---
+    //      emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });
+    //      // --- END MONKEY PATCH ---
+    //      ...
+    //    });
+    // ```
+    // Or this (9.37.0):
+    // ```
+    //    Object.keys(ruleListeners).forEach(selector => {
+    //      // --- BEGIN MONKEY PATCH ---
+    //      visitor.add(selector, (...args) => { currentNode = args[args.length - 1]; });
+    //      // --- END MONKEY PATCH ---
+    //      ...
+    //    });
+    // ```
+    if (majorVersion >= 9) {
+        outputFile += scanUntilMarker('Object.keys(ruleListeners).forEach(selector => {');
+        outputFile += `
+      // --- BEGIN MONKEY PATCH ---
+`;
+        if (minorVersion >= 37) {
+            outputFile += `visitor.add(selector, (...args) => { currentNode = args[args.length - 1]; });`;
+        }
+        else {
+            outputFile += `emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });`;
+        }
+        outputFile += `
+      // --- END MONKEY PATCH ---`;
+    }
+    outputFile += scanUntilMarker('class Linter {');
+    outputFile += scanUntilNewline();
+    outputFile += `
+    // --- BEGIN MONKEY PATCH ---
+    /**
+     * We intercept ESLint execution at the .eslintrc.js file, but unfortunately the Linter class is
+     * initialized before the .eslintrc.js file is executed. This means the internalSlotsMap that all
+     * the patched methods refer to is not initialized. This method checks if the internalSlotsMap is
+     * initialized, and if not, initializes it.
+     */
+    _conditionallyReinitialize({ cwd, configType } = {}) {
+        if (internalSlotsMap.get(this) === undefined) {
+            internalSlotsMap.set(this, {
+              cwd: normalizeCwd(cwd),
+              flags: [],
+              lastConfigArray: null,
+              lastSourceCode: null,
+              lastSuppressedMessages: [],
+              configType, // TODO: Remove after flat config conversion
+              parserMap: new Map([['espree', espree]]),
+              ruleMap: new Rules()
+            });
+
+            this.version = pkg.version;
+        }
+    }
+    // --- END MONKEY PATCH ---
+`;
+    const privateMethodNames = [];
+    let { index: indexOfNextMethod, isPublic } = getIndexOfNextMethod(inputIndex);
+    while (indexOfNextMethod !== -1) {
+        outputFile += scanUntilIndex(indexOfNextMethod);
+        if (isPublic) {
+            // Inject the monkey patch at the start of the public method
+            outputFile += scanUntilNewline();
+            outputFile += `        // --- BEGIN MONKEY PATCH ---
+        this._conditionallyReinitialize();
+        // --- END MONKEY PATCH ---
+`;
+        }
+        else if (inputFile[inputIndex] === '#') {
+            // Replace the '#' private method with a '_' private method, so that our monkey patch
+            // can still call it. Otherwise, we get the following error during execution:
+            // TypeError: Receiver must be an instance of class Linter
+            const privateMethodName = scanUntilMarker('(');
+            // Remove the '(' at the end and stash it, since we need to escape it for the regex later
+            privateMethodNames.push(privateMethodName.slice(0, -1));
+            outputFile += `_${privateMethodName.slice(1)}`;
+        }
+        const indexResult = getIndexOfNextMethod(inputIndex);
+        indexOfNextMethod = indexResult.index;
+        isPublic = indexResult.isPublic;
+    }
+    outputFile += scanUntilEnd();
+    // Do a second pass to find and replace all calls to private methods with the patched versions.
+    if (privateMethodNames.length) {
+        const privateMethodCallRegex = new RegExp(`\.(${privateMethodNames.join('|')})\\(`, 'g');
+        outputFile = outputFile.replace(privateMethodCallRegex, (match, privateMethodName) => {
+            // Replace the leading '#' with a leading '_'
+            return `._${privateMethodName.slice(1)}(`;
+        });
+    }
+    node_fs_1.default.writeFileSync(outputFilePath, outputFile);
+}
+//# sourceMappingURL=generate-patched-file.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/generate-patched-file.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/generate-patched-file.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/generate-patched-file.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"generate-patched-file.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/generate-patched-file.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport {\n  ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME,\n  ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME\n} from './constants';\n\n/**\n * Dynamically generate file to properly patch many versions of ESLint\n * @param inputFilePath - Must be an iteration of https://github.com/eslint/eslint/blob/main/lib/linter/linter.js\n * @param outputFilePath - Some small changes to linter.js\n */\nexport function generatePatchedLinterJsFileIfDoesNotExist(\n  inputFilePath: string,\n  outputFilePath: string,\n  eslintPackageVersion: string\n): void {\n  const generateEnvVarValue: string | undefined =\n    process.env[ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME];\n  if (generateEnvVarValue !== 'true' && generateEnvVarValue !== '1' && fs.existsSync(outputFilePath)) {\n    return;\n  }\n\n  const [majorVersionString, minorVersionString] = eslintPackageVersion.split('.');\n  const majorVersion: number = parseInt(majorVersionString, 10);\n  const minorVersion: number = parseInt(minorVersionString, 10);\n\n  const inputFile: string = fs.readFileSync(inputFilePath).toString();\n\n  let inputIndex: number = 0;\n\n  /**\n   * Extract from the stream until marker is reached.  When matching marker,\n   * ignore whitespace in the stream and in the marker.  Return the extracted text.\n   */\n  function scanUntilMarker(marker: string): string {\n    const trimmedMarker: string = marker.replace(/\\s/g, '');\n\n    let output: string = '';\n    let trimmed: string = '';\n\n    while (inputIndex < inputFile.length) {\n      const char: string = inputFile[inputIndex++];\n      output += char;\n      if (!/^\\s$/.test(char)) {\n        trimmed += char;\n      }\n      if (trimmed.endsWith(trimmedMarker)) {\n        return output;\n      }\n    }\n\n    throw new Error('Unexpected end of input while looking for ' + JSON.stringify(marker));\n  }\n\n  function scanUntilNewline(): string {\n    let output: string = '';\n\n    while (inputIndex < inputFile.length) {\n      const char: string = inputFile[inputIndex++];\n      output += char;\n      if (char === '\\n') {\n        return output;\n      }\n    }\n\n    throw new Error('Unexpected end of input while looking for new line');\n  }\n\n  function scanUntilEnd(): string {\n    const output: string = inputFile.substring(inputIndex);\n    inputIndex = inputFile.length;\n    return output;\n  }\n\n  const markerForStartOfClassMethodSpaces: string = '\\n     */\\n    ';\n  const markerForStartOfClassMethodTabs: string = '\\n\\t */\\n\\t';\n  function indexOfStartOfClassMethod(input: string, position?: number): { index: number; marker?: string } {\n    let startOfClassMethodIndex: number = input.indexOf(markerForStartOfClassMethodSpaces, position);\n    if (startOfClassMethodIndex === -1) {\n      startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodTabs, position);\n      if (startOfClassMethodIndex === -1) {\n        return { index: startOfClassMethodIndex };\n      }\n      return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodTabs };\n    }\n    return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodSpaces };\n  }\n\n  /**\n   * Returns index of next public method\n   * @param fromIndex - index of inputFile to search if public method still exists\n   * @returns -1 if public method does not exist or index of next public method\n   */\n  function getIndexOfNextMethod(fromIndex: number): { index: number; isPublic?: boolean } {\n    const rest: string = inputFile.substring(fromIndex);\n\n    const endOfClassIndex: number = rest.indexOf('\\n}');\n\n    const { index: startOfClassMethodIndex, marker: startOfClassMethodMarker } =\n      indexOfStartOfClassMethod(rest);\n\n    if (\n      startOfClassMethodIndex === -1 ||\n      !startOfClassMethodMarker ||\n      startOfClassMethodIndex > endOfClassIndex\n    ) {\n      return { index: -1 };\n    }\n\n    const afterMarkerIndex: number = startOfClassMethodIndex + startOfClassMethodMarker.length;\n\n    const isPublicMethod: boolean =\n      rest[afterMarkerIndex] !== '_' &&\n      rest[afterMarkerIndex] !== '#' &&\n      !rest.substring(afterMarkerIndex, rest.indexOf('\\n', afterMarkerIndex)).includes('static') &&\n      !rest.substring(afterMarkerIndex, rest.indexOf('\\n', afterMarkerIndex)).includes('constructor');\n\n    return { index: fromIndex + afterMarkerIndex, isPublic: isPublicMethod };\n  }\n\n  function scanUntilIndex(indexToScanTo: number): string {\n    const output: string = inputFile.substring(inputIndex, indexToScanTo);\n    inputIndex = indexToScanTo;\n    return output;\n  }\n\n  let outputFile: string = '';\n\n  // Match this:\n  //    //------------------------------------------------------------------------------\n  //    // Requirements\n  //    //------------------------------------------------------------------------------\n  outputFile += scanUntilMarker('// Requirements');\n  outputFile += scanUntilMarker('//--');\n  outputFile += scanUntilNewline();\n\n  outputFile += `\n// --- BEGIN MONKEY PATCH ---\nconst bulkSuppressionsPatch = require(process.env.${ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME});\nconst requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJS;\n`;\n\n  // Match this:\n  //    //------------------------------------------------------------------------------\n  //    // Typedefs\n  //    //------------------------------------------------------------------------------\n  const requireSection: string = scanUntilMarker('// Typedefs');\n\n  // Match something like this:\n  //\n  //    const path = require('path'),\n  //    eslintScope = require('eslint-scope'),\n  //    evk = require('eslint-visitor-keys'),\n  //\n  // Convert to something like this:\n  //\n  //    const path = require('path'),\n  //    eslintScope = requireFromPathToLinterJS('eslint-scope'),\n  //    evk = requireFromPathToLinterJS('eslint-visitor-keys'),\n  //\n  outputFile += requireSection.replace(/require\\s*\\((?:'([^']+)'|\"([^\"]+)\")\\)/g, (match, p1, p2) => {\n    const importPath: string = p1 ?? p2 ?? '';\n\n    if (importPath !== 'path') {\n      if (p1) {\n        return `requireFromPathToLinterJS('${p1}')`;\n      }\n      if (p2) {\n        return `requireFromPathToLinterJS(\"${p2}\")`;\n      }\n    }\n\n    // Keep as-is\n    return match;\n  });\n  outputFile += `--- END MONKEY PATCH ---\n`;\n\n  if (majorVersion >= 9) {\n    if (minorVersion >= 37) {\n      outputFile += scanUntilMarker('const visitor = new SourceCodeVisitor();');\n    } else {\n      outputFile += scanUntilMarker('const emitter = createEmitter();');\n    }\n\n    outputFile += `\n      // --- BEGIN MONKEY PATCH ---\n      let currentNode = undefined;\n      // --- END MONKEY PATCH ---`;\n  }\n\n  // Match this (9.25.1):\n  // ```\n  //      if (reportTranslator === null) {\n  //        reportTranslator = createReportTranslator({\n  //            ruleId,\n  //            severity,\n  //            sourceCode,\n  //            messageIds,\n  //            disableFixes\n  //        });\n  //    }\n  //    const problem = reportTranslator(...args);\n  //\n  //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n  //        throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n  //    }\n  // ```\n  // Or this (9.37.0):\n  // ```\n  //    const problem = report.addRuleMessage(\n  //      ruleId,\n  //      severity,\n  //      ...args,\n  //    );\n  //\n  //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n  //      throw new Error(\n  //        'Fixable rules must set the `meta.fixable` property to \"code\" or \"whitespace\".',\n  //      );\n  //    }\n  // ```\n  //\n  // Convert to something like this (9.25.1):\n  // ```\n  //      if (reportTranslator === null) {\n  //        reportTranslator = createReportTranslator({\n  //            ruleId,\n  //            severity,\n  //            sourceCode,\n  //            messageIds,\n  //            disableFixes\n  //        });\n  //    }\n  //    const problem = reportTranslator(...args);\n  //    // --- BEGIN MONKEY PATCH ---\n  //    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;\n  //    // --- END MONKEY PATCH ---\n  //\n  //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n  //        throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n  //    }\n  // ```\n  // Or this (9.37.0):\n  // ```\n  //    const problem = report.addRuleMessage(\n  //      ruleId,\n  //      severity,\n  //      ...args,\n  //    );\n  //    // --- BEGIN MONKEY PATCH ---\n  //    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;\n  //    // --- END MONKEY PATCH ---\n  //\n  //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n  //      throw new Error(\n  //        'Fixable rules must set the `meta.fixable` property to \"code\" or \"whitespace\".',\n  //      );\n  //    }\n  // ```\n  if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) {\n    outputFile += scanUntilMarker('const problem = report.addRuleMessage(');\n    outputFile += scanUntilMarker('ruleId,');\n    outputFile += scanUntilMarker('severity,');\n    outputFile += scanUntilMarker('...args,');\n    outputFile += scanUntilMarker(');');\n  } else {\n    outputFile += scanUntilMarker('const problem = reportTranslator(...args);');\n  }\n\n  outputFile += `\n    // --- BEGIN MONKEY PATCH ---`;\n  if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) {\n    outputFile += `\n    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) {\n      problem.suppressions ??= []; problem.suppressions.push({kind:\"bulk\",justification:\"\"});\n    }`;\n  } else {\n    outputFile += `\n    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;`;\n  }\n\n  outputFile += `\n    // --- END MONKEY PATCH ---`;\n\n  //\n  // Match this:\n  // ```\n  //    Object.keys(ruleListeners).forEach(selector => {\n  //      ...\n  //    });\n  // ```\n  //\n  // Convert to something like this (9.25.1):\n  // ```\n  //    Object.keys(ruleListeners).forEach(selector => {\n  //      // --- BEGIN MONKEY PATCH ---\n  //      emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });\n  //      // --- END MONKEY PATCH ---\n  //      ...\n  //    });\n  // ```\n  // Or this (9.37.0):\n  // ```\n  //    Object.keys(ruleListeners).forEach(selector => {\n  //      // --- BEGIN MONKEY PATCH ---\n  //      visitor.add(selector, (...args) => { currentNode = args[args.length - 1]; });\n  //      // --- END MONKEY PATCH ---\n  //      ...\n  //    });\n  // ```\n  if (majorVersion >= 9) {\n    outputFile += scanUntilMarker('Object.keys(ruleListeners).forEach(selector => {');\n    outputFile += `\n      // --- BEGIN MONKEY PATCH ---\n`;\n    if (minorVersion >= 37) {\n      outputFile += `visitor.add(selector, (...args) => { currentNode = args[args.length - 1]; });`;\n    } else {\n      outputFile += `emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });`;\n    }\n\n    outputFile += `\n      // --- END MONKEY PATCH ---`;\n  }\n\n  outputFile += scanUntilMarker('class Linter {');\n  outputFile += scanUntilNewline();\n  outputFile += `\n    // --- BEGIN MONKEY PATCH ---\n    /**\n     * We intercept ESLint execution at the .eslintrc.js file, but unfortunately the Linter class is\n     * initialized before the .eslintrc.js file is executed. This means the internalSlotsMap that all\n     * the patched methods refer to is not initialized. This method checks if the internalSlotsMap is\n     * initialized, and if not, initializes it.\n     */\n    _conditionallyReinitialize({ cwd, configType } = {}) {\n        if (internalSlotsMap.get(this) === undefined) {\n            internalSlotsMap.set(this, {\n              cwd: normalizeCwd(cwd),\n              flags: [],\n              lastConfigArray: null,\n              lastSourceCode: null,\n              lastSuppressedMessages: [],\n              configType, // TODO: Remove after flat config conversion\n              parserMap: new Map([['espree', espree]]),\n              ruleMap: new Rules()\n            });\n\n            this.version = pkg.version;\n        }\n    }\n    // --- END MONKEY PATCH ---\n`;\n\n  const privateMethodNames: string[] = [];\n  let { index: indexOfNextMethod, isPublic } = getIndexOfNextMethod(inputIndex);\n\n  while (indexOfNextMethod !== -1) {\n    outputFile += scanUntilIndex(indexOfNextMethod);\n    if (isPublic) {\n      // Inject the monkey patch at the start of the public method\n      outputFile += scanUntilNewline();\n      outputFile += `        // --- BEGIN MONKEY PATCH ---\n        this._conditionallyReinitialize();\n        // --- END MONKEY PATCH ---\n`;\n    } else if (inputFile[inputIndex] === '#') {\n      // Replace the '#' private method with a '_' private method, so that our monkey patch\n      // can still call it. Otherwise, we get the following error during execution:\n      // TypeError: Receiver must be an instance of class Linter\n      const privateMethodName: string = scanUntilMarker('(');\n      // Remove the '(' at the end and stash it, since we need to escape it for the regex later\n      privateMethodNames.push(privateMethodName.slice(0, -1));\n      outputFile += `_${privateMethodName.slice(1)}`;\n    }\n\n    const indexResult: { index: number; isPublic?: boolean } = getIndexOfNextMethod(inputIndex);\n    indexOfNextMethod = indexResult.index;\n    isPublic = indexResult.isPublic;\n  }\n\n  outputFile += scanUntilEnd();\n\n  // Do a second pass to find and replace all calls to private methods with the patched versions.\n  if (privateMethodNames.length) {\n    const privateMethodCallRegex: RegExp = new RegExp(`\\.(${privateMethodNames.join('|')})\\\\(`, 'g');\n    outputFile = outputFile.replace(privateMethodCallRegex, (match, privateMethodName) => {\n      // Replace the leading '#' with a leading '_'\n      return `._${privateMethodName.slice(1)}(`;\n    });\n  }\n\n  fs.writeFileSync(outputFilePath, outputFile);\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/index.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+const _patch_base_1 = require("../_patch-base");
+const path_utils_1 = require("./path-utils");
+const bulk_suppressions_patch_1 = require("./bulk-suppressions-patch");
+const generate_patched_file_1 = require("./generate-patched-file");
+const constants_1 = require("./constants");
+if (!_patch_base_1.eslintFolder) {
+    console.error('@rushstack/eslint-patch/eslint-bulk-suppressions: Could not find ESLint installation to patch.');
+    process.exit(1);
+}
+const eslintBulkDetectEnvVarValue = process.env[constants_1.ESLINT_BULK_DETECT_ENV_VAR_NAME];
+if (eslintBulkDetectEnvVarValue === 'true' || eslintBulkDetectEnvVarValue === '1') {
+    (0, path_utils_1.findAndConsoleLogPatchPathCli)();
+    process.exit(0);
+}
+const pathToLinterJS = (0, path_utils_1.getPathToLinterJS)();
+process.env[constants_1.ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME] = require.resolve('./bulk-suppressions-patch');
+const pathToGeneratedPatch = (0, path_utils_1.ensurePathToGeneratedPatch)();
+(0, generate_patched_file_1.generatePatchedLinterJsFileIfDoesNotExist)(pathToLinterJS, pathToGeneratedPatch, _patch_base_1.eslintPackageVersion);
+const { Linter: LinterPatch } = require(pathToGeneratedPatch);
+LinterPatch.prototype.verify = (0, bulk_suppressions_patch_1.extendVerifyFunction)(LinterPatch.prototype.verify);
+const { Linter } = require(pathToLinterJS);
+(0, bulk_suppressions_patch_1.patchClass)(Linter, LinterPatch);
+//# sourceMappingURL=index.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/index.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,gDAAoE;AACpE,6CAA4G;AAC5G,uEAA6E;AAC7E,mEAAoF;AACpF,2CAAmG;AAEnG,IAAI,CAAC,0BAAY,EAAE,CAAC;IAClB,OAAO,CAAC,KAAK,CACX,gGAAgG,CACjG,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,2BAA2B,GAAuB,OAAO,CAAC,GAAG,CAAC,2CAA+B,CAAC,CAAC;AACrG,IAAI,2BAA2B,KAAK,MAAM,IAAI,2BAA2B,KAAK,GAAG,EAAE,CAAC;IAClF,IAAA,0CAA6B,GAAE,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,cAAc,GAAW,IAAA,8BAAiB,GAAE,CAAC;AAEnD,OAAO,CAAC,GAAG,CAAC,+CAAmC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAEhG,MAAM,oBAAoB,GAAW,IAAA,uCAA0B,GAAE,CAAC;AAClE,IAAA,iEAAyC,EAAC,cAAc,EAAE,oBAAoB,EAAE,kCAAoB,CAAC,CAAC;AACtG,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC9D,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,IAAA,8CAAoB,EAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAElF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE3C,IAAA,oCAAU,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { eslintFolder, eslintPackageVersion } from '../_patch-base';\nimport { findAndConsoleLogPatchPathCli, getPathToLinterJS, ensurePathToGeneratedPatch } from './path-utils';\nimport { patchClass, extendVerifyFunction } from './bulk-suppressions-patch';\nimport { generatePatchedLinterJsFileIfDoesNotExist } from './generate-patched-file';\nimport { ESLINT_BULK_DETECT_ENV_VAR_NAME, ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME } from './constants';\n\nif (!eslintFolder) {\n  console.error(\n    '@rushstack/eslint-patch/eslint-bulk-suppressions: Could not find ESLint installation to patch.'\n  );\n\n  process.exit(1);\n}\n\nconst eslintBulkDetectEnvVarValue: string | undefined = process.env[ESLINT_BULK_DETECT_ENV_VAR_NAME];\nif (eslintBulkDetectEnvVarValue === 'true' || eslintBulkDetectEnvVarValue === '1') {\n  findAndConsoleLogPatchPathCli();\n  process.exit(0);\n}\n\nconst pathToLinterJS: string = getPathToLinterJS();\n\nprocess.env[ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME] = require.resolve('./bulk-suppressions-patch');\n\nconst pathToGeneratedPatch: string = ensurePathToGeneratedPatch();\ngeneratePatchedLinterJsFileIfDoesNotExist(pathToLinterJS, pathToGeneratedPatch, eslintPackageVersion);\nconst { Linter: LinterPatch } = require(pathToGeneratedPatch);\nLinterPatch.prototype.verify = extendVerifyFunction(LinterPatch.prototype.verify);\n\nconst { Linter } = require(pathToLinterJS);\n\npatchClass(Linter, LinterPatch);\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/path-utils.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/path-utils.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/path-utils.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,46 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.findAndConsoleLogPatchPathCli = findAndConsoleLogPatchPathCli;
+exports.getPathToLinterJS = getPathToLinterJS;
+exports.ensurePathToGeneratedPatch = ensurePathToGeneratedPatch;
+const node_fs_1 = __importDefault(require("node:fs"));
+const node_os_1 = __importDefault(require("node:os"));
+const _patch_base_1 = require("../_patch-base");
+const constants_1 = require("./constants");
+const package_json_1 = __importDefault(require("../../package.json"));
+const CURRENT_PACKAGE_VERSION = package_json_1.default.version;
+function findAndConsoleLogPatchPathCli() {
+    const eslintBulkDetectEnvVarValue = process.env[constants_1.ESLINT_BULK_DETECT_ENV_VAR_NAME];
+    if (eslintBulkDetectEnvVarValue !== 'true' && eslintBulkDetectEnvVarValue !== '1') {
+        return;
+    }
+    const configuration = {
+        /**
+         * `@rushstack/eslint-bulk` should report an error if its package.json is older than this number
+         */
+        minCliVersion: '0.0.0',
+        /**
+         * `@rushstack/eslint-bulk` will invoke this entry point
+         */
+        cliEntryPoint: require.resolve('../exports/eslint-bulk')
+    };
+    console.log(constants_1.ESLINT_BULK_STDOUT_START_DELIMETER + JSON.stringify(configuration) + constants_1.ESLINT_BULK_STDOUT_END_DELIMETER);
+}
+function getPathToLinterJS() {
+    if (!_patch_base_1.eslintFolder) {
+        throw new Error('Cannot find ESLint installation to patch.');
+    }
+    return `${_patch_base_1.eslintFolder}/lib/linter/linter.js`;
+}
+function ensurePathToGeneratedPatch() {
+    const patchesFolderPath = `${node_os_1.default.tmpdir()}/rushstack-eslint-bulk-${CURRENT_PACKAGE_VERSION}/patches`;
+    node_fs_1.default.mkdirSync(patchesFolderPath, { recursive: true });
+    const pathToGeneratedPatch = `${patchesFolderPath}/linter-patch-v${_patch_base_1.eslintPackageVersion}.js`;
+    return pathToGeneratedPatch;
+}
+//# sourceMappingURL=path-utils.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/path-utils.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/path-utils.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/eslint-bulk-suppressions/path-utils.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/path-utils.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAoB3D,sEAoBC;AAED,8CAMC;AAED,gEAKC;AArDD,sDAAyB;AACzB,sDAAyB;AAEzB,gDAAoE;AACpE,2CAIqB;AACrB,sEAAoD;AAOpD,MAAM,uBAAuB,GAAW,sBAAkB,CAAC,OAAO,CAAC;AAEnE,SAAgB,6BAA6B;IAC3C,MAAM,2BAA2B,GAAuB,OAAO,CAAC,GAAG,CAAC,2CAA+B,CAAC,CAAC;IACrG,IAAI,2BAA2B,KAAK,MAAM,IAAI,2BAA2B,KAAK,GAAG,EAAE,CAAC;QAClF,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAmB;QACpC;;WAEG;QACH,aAAa,EAAE,OAAO;QACtB;;WAEG;QACH,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC;KACzD,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,8CAAkC,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,4CAAgC,CACtG,CAAC;AACJ,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,CAAC,0BAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,GAAG,0BAAY,uBAAuB,CAAC;AAChD,CAAC;AAED,SAAgB,0BAA0B;IACxC,MAAM,iBAAiB,GAAW,GAAG,iBAAE,CAAC,MAAM,EAAE,0BAA0B,uBAAuB,UAAU,CAAC;IAC5G,iBAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAW,GAAG,iBAAiB,kBAAkB,kCAAoB,KAAK,CAAC;IACrG,OAAO,oBAAoB,CAAC;AAC9B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\nimport os from 'node:os';\n\nimport { eslintFolder, eslintPackageVersion } from '../_patch-base';\nimport {\n  ESLINT_BULK_DETECT_ENV_VAR_NAME,\n  ESLINT_BULK_STDOUT_END_DELIMETER,\n  ESLINT_BULK_STDOUT_START_DELIMETER\n} from './constants';\nimport currentPackageJson from '../../package.json';\n\ninterface IConfiguration {\n  minCliVersion: string;\n  cliEntryPoint: string;\n}\n\nconst CURRENT_PACKAGE_VERSION: string = currentPackageJson.version;\n\nexport function findAndConsoleLogPatchPathCli(): void {\n  const eslintBulkDetectEnvVarValue: string | undefined = process.env[ESLINT_BULK_DETECT_ENV_VAR_NAME];\n  if (eslintBulkDetectEnvVarValue !== 'true' && eslintBulkDetectEnvVarValue !== '1') {\n    return;\n  }\n\n  const configuration: IConfiguration = {\n    /**\n     * `@rushstack/eslint-bulk` should report an error if its package.json is older than this number\n     */\n    minCliVersion: '0.0.0',\n    /**\n     * `@rushstack/eslint-bulk` will invoke this entry point\n     */\n    cliEntryPoint: require.resolve('../exports/eslint-bulk')\n  };\n\n  console.log(\n    ESLINT_BULK_STDOUT_START_DELIMETER + JSON.stringify(configuration) + ESLINT_BULK_STDOUT_END_DELIMETER\n  );\n}\n\nexport function getPathToLinterJS(): string {\n  if (!eslintFolder) {\n    throw new Error('Cannot find ESLint installation to patch.');\n  }\n\n  return `${eslintFolder}/lib/linter/linter.js`;\n}\n\nexport function ensurePathToGeneratedPatch(): string {\n  const patchesFolderPath: string = `${os.tmpdir()}/rushstack-eslint-bulk-${CURRENT_PACKAGE_VERSION}/patches`;\n  fs.mkdirSync(patchesFolderPath, { recursive: true });\n  const pathToGeneratedPatch: string = `${patchesFolderPath}/linter-patch-v${eslintPackageVersion}.js`;\n  return pathToGeneratedPatch;\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/exports/eslint-bulk.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/exports/eslint-bulk.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/exports/eslint-bulk.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+// "lib/exports/eslint-bulk" is the entry point for the @rushstack/eslint-bulk command line front end.
+require("../eslint-bulk-suppressions/cli/start");
+//# sourceMappingURL=eslint-bulk.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/exports/eslint-bulk.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/exports/eslint-bulk.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/exports/eslint-bulk.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"eslint-bulk.js","sourceRoot":"","sources":["../../src/exports/eslint-bulk.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,sGAAsG;AAEtG,iDAA+C","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// \"lib/exports/eslint-bulk\" is the entry point for the @rushstack/eslint-bulk command line front end.\n\nimport '../eslint-bulk-suppressions/cli/start';\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/modern-module-resolution.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/modern-module-resolution.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/modern-module-resolution.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,69 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+// This is a workaround for https://github.com/eslint/eslint/issues/3458
+//
+// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:
+//
+//    require("@rushstack/eslint-patch/modern-module-resolution");
+//
+const _patch_base_1 = require("./_patch-base");
+// error: "The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received ''"
+const isInvalidImporterPath = (ex) => (ex === null || ex === void 0 ? void 0 : ex.code) === 'ERR_INVALID_ARG_VALUE';
+if (!_patch_base_1.configArrayFactory.__loadPluginPatched) {
+    _patch_base_1.configArrayFactory.__loadPluginPatched = true;
+    // eslint-disable-next-line @typescript-eslint/typedef
+    const originalLoadPlugin = _patch_base_1.configArrayFactory.prototype._loadPlugin;
+    if (_patch_base_1.ESLINT_MAJOR_VERSION === 6) {
+        // ESLint 6.x
+        // https://github.com/eslint/eslint/blob/9738f8cc864d769988ccf42bb70f524444df1349/lib/cli-engine/config-array-factory.js#L915
+        _patch_base_1.configArrayFactory.prototype._loadPlugin = function (name, importerPath, importerName) {
+            const originalResolve = _patch_base_1.ModuleResolver.resolve;
+            try {
+                _patch_base_1.ModuleResolver.resolve = function (moduleName, relativeToPath) {
+                    try {
+                        // resolve using importerPath instead of relativeToPath
+                        return originalResolve.call(this, moduleName, importerPath);
+                    }
+                    catch (e) {
+                        if ((0, _patch_base_1.isModuleResolutionError)(e) || isInvalidImporterPath(e)) {
+                            return originalResolve.call(this, moduleName, relativeToPath);
+                        }
+                        throw e;
+                    }
+                };
+                return originalLoadPlugin.apply(this, arguments);
+            }
+            finally {
+                _patch_base_1.ModuleResolver.resolve = originalResolve;
+            }
+        };
+    }
+    else {
+        // ESLint 7.x || 8.x
+        // https://github.com/eslint/eslintrc/blob/242d569020dfe4f561e4503787b99ec016337457/lib/config-array-factory.js#L1023
+        _patch_base_1.configArrayFactory.prototype._loadPlugin = function (name, ctx) {
+            const originalResolve = _patch_base_1.ModuleResolver.resolve;
+            try {
+                _patch_base_1.ModuleResolver.resolve = function (moduleName, relativeToPath) {
+                    try {
+                        // resolve using ctx.filePath instead of relativeToPath
+                        return originalResolve.call(this, moduleName, ctx.filePath);
+                    }
+                    catch (e) {
+                        if ((0, _patch_base_1.isModuleResolutionError)(e) || isInvalidImporterPath(e)) {
+                            return originalResolve.call(this, moduleName, relativeToPath);
+                        }
+                        throw e;
+                    }
+                };
+                return originalLoadPlugin.apply(this, arguments);
+            }
+            finally {
+                _patch_base_1.ModuleResolver.resolve = originalResolve;
+            }
+        };
+    }
+}
+//# sourceMappingURL=modern-module-resolution.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/modern-module-resolution.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/modern-module-resolution.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/modern-module-resolution.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"modern-module-resolution.js","sourceRoot":"","sources":["../src/modern-module-resolution.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,wEAAwE;AACxE,EAAE;AACF,oHAAoH;AACpH,EAAE;AACF,kEAAkE;AAClE,EAAE;AAEF,+CAKuB;AAEvB,oHAAoH;AACpH,MAAM,qBAAqB,GAA6B,CAAC,EAAE,EAAE,EAAE,CAC7D,CAAC,EAAoC,aAApC,EAAE,uBAAF,EAAE,CAAoC,IAAI,MAAK,uBAAuB,CAAC;AAE1E,IAAI,CAAC,gCAAkB,CAAC,mBAAmB,EAAE,CAAC;IAC5C,gCAAkB,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAC9C,sDAAsD;IACtD,MAAM,kBAAkB,GAAG,gCAAkB,CAAC,SAAS,CAAC,WAAW,CAAC;IAEpE,IAAI,kCAAoB,KAAK,CAAC,EAAE,CAAC;QAC/B,aAAa;QACb,6HAA6H;QAC7H,gCAAkB,CAAC,SAAS,CAAC,WAAW,GAAG,UACzC,IAAY,EACZ,YAAoB,EACpB,YAAoB;YAEpB,MAAM,eAAe,GAA2D,4BAAc,CAAC,OAAO,CAAC;YACvG,IAAI,CAAC;gBACH,4BAAc,CAAC,OAAO,GAAG,UAAU,UAAkB,EAAE,cAAsB;oBAC3E,IAAI,CAAC;wBACH,uDAAuD;wBACvD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;oBAC9D,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,IAAI,IAAA,qCAAuB,EAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3D,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;wBAChE,CAAC;wBACD,MAAM,CAAC,CAAC;oBACV,CAAC;gBACH,CAAC,CAAC;gBACF,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;oBAAS,CAAC;gBACT,4BAAc,CAAC,OAAO,GAAG,eAAe,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,oBAAoB;QACpB,qHAAqH;QACrH,gCAAkB,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,IAAY,EAAE,GAA4B;YAC7F,MAAM,eAAe,GACnB,4BAAc,CAAC,OAAO,CAAC;YACzB,IAAI,CAAC;gBACH,4BAAc,CAAC,OAAO,GAAG,UAAU,UAAkB,EAAE,cAAsB;oBAC3E,IAAI,CAAC;wBACH,uDAAuD;wBACvD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC9D,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,IAAI,IAAA,qCAAuB,EAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3D,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;wBAChE,CAAC;wBACD,MAAM,CAAC,CAAC;oBACV,CAAC;gBACH,CAAC,CAAC;gBACF,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;oBAAS,CAAC;gBACT,4BAAc,CAAC,OAAO,GAAG,eAAe,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This is a workaround for https://github.com/eslint/eslint/issues/3458\n//\n// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:\n//\n//    require(\"@rushstack/eslint-patch/modern-module-resolution\");\n//\n\nimport {\n  configArrayFactory,\n  ModuleResolver,\n  isModuleResolutionError,\n  ESLINT_MAJOR_VERSION\n} from './_patch-base';\n\n// error: \"The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received ''\"\nconst isInvalidImporterPath: (ex: unknown) => boolean = (ex) =>\n  (ex as { code: unknown } | undefined)?.code === 'ERR_INVALID_ARG_VALUE';\n\nif (!configArrayFactory.__loadPluginPatched) {\n  configArrayFactory.__loadPluginPatched = true;\n  // eslint-disable-next-line @typescript-eslint/typedef\n  const originalLoadPlugin = configArrayFactory.prototype._loadPlugin;\n\n  if (ESLINT_MAJOR_VERSION === 6) {\n    // ESLint 6.x\n    // https://github.com/eslint/eslint/blob/9738f8cc864d769988ccf42bb70f524444df1349/lib/cli-engine/config-array-factory.js#L915\n    configArrayFactory.prototype._loadPlugin = function (\n      name: string,\n      importerPath: string,\n      importerName: string\n    ) {\n      const originalResolve: (moduleName: string, relativeToPath: string) => string = ModuleResolver.resolve;\n      try {\n        ModuleResolver.resolve = function (moduleName: string, relativeToPath: string) {\n          try {\n            // resolve using importerPath instead of relativeToPath\n            return originalResolve.call(this, moduleName, importerPath);\n          } catch (e) {\n            if (isModuleResolutionError(e) || isInvalidImporterPath(e)) {\n              return originalResolve.call(this, moduleName, relativeToPath);\n            }\n            throw e;\n          }\n        };\n        return originalLoadPlugin.apply(this, arguments);\n      } finally {\n        ModuleResolver.resolve = originalResolve;\n      }\n    };\n  } else {\n    // ESLint 7.x || 8.x\n    // https://github.com/eslint/eslintrc/blob/242d569020dfe4f561e4503787b99ec016337457/lib/config-array-factory.js#L1023\n    configArrayFactory.prototype._loadPlugin = function (name: string, ctx: Record<string, unknown>) {\n      const originalResolve: (moduleName: string, relativeToPath: string | unknown) => string =\n        ModuleResolver.resolve;\n      try {\n        ModuleResolver.resolve = function (moduleName: string, relativeToPath: string) {\n          try {\n            // resolve using ctx.filePath instead of relativeToPath\n            return originalResolve.call(this, moduleName, ctx.filePath);\n          } catch (e) {\n            if (isModuleResolutionError(e) || isInvalidImporterPath(e)) {\n              return originalResolve.call(this, moduleName, relativeToPath);\n            }\n            throw e;\n          }\n        };\n        return originalLoadPlugin.apply(this, arguments);\n      } finally {\n        ModuleResolver.resolve = originalResolve;\n      }\n    };\n  }\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/usage.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/usage.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/usage.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+"use strict";
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+Object.defineProperty(exports, "__esModule", { value: true });
+throw new Error('The @rushstack/eslint-patch package does not have a default entry point.' +
+    ' See README.md for usage instructions.');
+//# sourceMappingURL=usage.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/usage.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/usage.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-commonjs/usage.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,MAAM,IAAI,KAAK,CACb,0EAA0E;IACxE,wCAAwC,CAC3C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nthrow new Error(\n  'The @rushstack/eslint-patch package does not have a default entry point.' +\n    ' See README.md for usage instructions.'\n);\n\nexport {};\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/_patch-base.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/_patch-base.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/_patch-base.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+declare const isModuleResolutionError: (ex: unknown) => boolean;
+declare let eslintFolder: string | undefined;
+export declare const eslintPackageVersion: string;
+declare const ESLINT_MAJOR_VERSION: number;
+declare let configArrayFactory: any;
+declare let ModuleResolver: {
+    resolve: any;
+};
+declare let Naming: {
+    normalizePackageName: any;
+};
+export { eslintFolder, configArrayFactory, ModuleResolver, Naming, ESLINT_MAJOR_VERSION, isModuleResolutionError };
+//# sourceMappingURL=_patch-base.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/_patch-base.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/_patch-base.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/_patch-base.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"_patch-base.d.ts","sourceRoot":"","sources":["../src/_patch-base.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,uBAAuB,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OACyD,CAAC;AAuE1G,QAAA,IAAI,YAAY,EAAE,MAAM,GAAG,SAAqB,CAAC;AAqNjD,eAAO,MAAM,oBAAoB,EAAE,MAAoC,CAAC;AACxE,QAAA,MAAM,oBAAoB,EAAE,MAA2C,CAAC;AAiBxE,QAAA,IAAI,kBAAkB,EAAE,GAAG,CAAC;AAQ5B,QAAA,IAAI,cAAc,EAAE;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC;AAErC,QAAA,IAAI,MAAM,EAAE;IAAE,oBAAoB,EAAE,GAAG,CAAA;CAAE,CAAC;AAS1C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,oBAAoB,EACpB,uBAAuB,EACxB,CAAC"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/custom-config-package-names.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/custom-config-package-names.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/custom-config-package-names.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export {};
+//# sourceMappingURL=custom-config-package-names.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/custom-config-package-names.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/custom-config-package-names.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/custom-config-package-names.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"custom-config-package-names.d.ts","sourceRoot":"","sources":["../src/custom-config-package-names.ts"],"names":[],"mappings":""}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/ast-guards.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/ast-guards.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/ast-guards.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,81 @@
+import type { TSESTree } from '@typescript-eslint/types';
+export declare function isArrayExpression(node: TSESTree.Node): node is TSESTree.ArrayExpression;
+export declare function isArrowFunctionExpression(node: TSESTree.Node): node is TSESTree.ArrowFunctionExpression;
+/** default parameters */
+export declare function isAssignmentPattern(node: TSESTree.Node): node is TSESTree.AssignmentPattern;
+export declare function isClassDeclaration(node: TSESTree.Node): node is TSESTree.ClassDeclaration;
+export declare function isClassExpression(node: TSESTree.Node): node is TSESTree.ClassExpression;
+export declare function isExportDefaultDeclaration(node: TSESTree.Node): node is TSESTree.ExportDefaultDeclaration;
+export declare function isExpression(node: TSESTree.Node): node is TSESTree.Expression;
+export declare function isFunctionDeclaration(node: TSESTree.Node): node is TSESTree.FunctionDeclaration;
+export declare function isFunctionExpression(node: TSESTree.Node): node is TSESTree.FunctionExpression;
+export declare function isIdentifier(node: TSESTree.Node): node is TSESTree.Identifier;
+export declare function isLiteral(node: TSESTree.Node): node is TSESTree.Literal;
+export declare function isMethodDefinition(node: TSESTree.Node): node is TSESTree.MethodDefinition;
+export declare function isObjectExpression(node: TSESTree.Node): node is TSESTree.ObjectExpression;
+export declare function isPrivateIdentifier(node: TSESTree.Node): node is TSESTree.PrivateIdentifier;
+export declare function isProperty(node: TSESTree.Node): node is TSESTree.Property;
+export declare function isPropertyDefinition(node: TSESTree.Node): node is TSESTree.PropertyDefinition;
+export declare function isTSEnumDeclaration(node: TSESTree.Node): node is TSESTree.TSEnumDeclaration;
+export declare function isTSInterfaceDeclaration(node: TSESTree.Node): node is TSESTree.TSInterfaceDeclaration;
+export declare function isTSModuleDeclaration(node: TSESTree.Node): node is TSESTree.TSModuleDeclaration;
+export declare function isTSQualifiedName(node: TSESTree.Node): node is TSESTree.TSQualifiedName;
+export declare function isTSTypeAliasDeclaration(node: TSESTree.Node): node is TSESTree.TSTypeAliasDeclaration;
+export declare function isVariableDeclarator(node: TSESTree.Node): node is TSESTree.VariableDeclarator;
+export declare function isClassDeclarationWithName(node: TSESTree.Node): node is TSESTree.ClassDeclarationWithName;
+export declare function isClassPropertyNameNonComputed(node: TSESTree.Node): node is TSESTree.ClassPropertyNameNonComputed;
+export declare function isFunctionDeclarationWithName(node: TSESTree.Node): node is TSESTree.FunctionDeclarationWithName;
+export declare function isNumberLiteral(node: TSESTree.Node): node is TSESTree.NumberLiteral;
+export declare function isPropertyNameNonComputed(node: TSESTree.Node): node is TSESTree.PropertyNameNonComputed;
+export declare function isStringLiteral(node: TSESTree.Node): node is TSESTree.StringLiteral;
+export interface IClassExpressionWithName extends TSESTree.ClassExpression {
+    id: TSESTree.Identifier;
+}
+export declare function isClassExpressionWithName(node: TSESTree.Node): node is IClassExpressionWithName;
+export interface IFunctionExpressionWithName extends TSESTree.FunctionExpression {
+    id: TSESTree.Identifier;
+}
+export declare function isFunctionExpressionWithName(node: TSESTree.Node): node is IFunctionExpressionWithName;
+export type NormalAnonymousExpression = TSESTree.ArrowFunctionExpression | TSESTree.ClassExpression | TSESTree.FunctionExpression | TSESTree.ObjectExpression;
+export declare function isNormalAnonymousExpression(node: TSESTree.Node): node is NormalAnonymousExpression;
+export interface INormalAssignmentPattern extends TSESTree.AssignmentPattern {
+    left: TSESTree.Identifier;
+}
+export declare function isNormalAssignmentPattern(node: TSESTree.Node): node is INormalAssignmentPattern;
+export interface INormalClassPropertyDefinition extends TSESTree.PropertyDefinitionNonComputedName {
+    key: TSESTree.PrivateIdentifier | TSESTree.Identifier;
+    value: TSESTree.Expression;
+}
+export declare function isNormalClassPropertyDefinition(node: TSESTree.Node): node is INormalClassPropertyDefinition;
+export interface INormalMethodDefinition extends TSESTree.MethodDefinitionNonComputedName {
+    key: TSESTree.PrivateIdentifier | TSESTree.Identifier;
+}
+export declare function isNormalMethodDefinition(node: TSESTree.Node): node is INormalMethodDefinition;
+export interface INormalObjectProperty extends TSESTree.PropertyNonComputedName {
+    key: TSESTree.Identifier;
+}
+export declare function isNormalObjectProperty(node: TSESTree.Node): node is INormalObjectProperty;
+export type INormalVariableDeclarator = TSESTree.LetOrConstOrVarDeclaration & {
+    id: TSESTree.Identifier;
+    init: TSESTree.Expression;
+};
+export declare function isNormalVariableDeclarator(node: TSESTree.Node): node is INormalVariableDeclarator;
+export interface INormalAssignmentPatternWithAnonymousExpressionAssigned extends INormalAssignmentPattern {
+    right: NormalAnonymousExpression;
+}
+export declare function isNormalAssignmentPatternWithAnonymousExpressionAssigned(node: TSESTree.Node): node is INormalAssignmentPatternWithAnonymousExpressionAssigned;
+export type INormalVariableDeclaratorWithAnonymousExpressionAssigned = INormalVariableDeclarator & {
+    init: NormalAnonymousExpression;
+};
+export declare function isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node: TSESTree.Node): node is INormalVariableDeclaratorWithAnonymousExpressionAssigned;
+export interface INormalObjectPropertyWithAnonymousExpressionAssigned extends INormalObjectProperty {
+    value: NormalAnonymousExpression;
+}
+export declare function isNormalObjectPropertyWithAnonymousExpressionAssigned(node: TSESTree.Node): node is INormalObjectPropertyWithAnonymousExpressionAssigned;
+export interface INormalClassPropertyDefinitionWithAnonymousExpressionAssigned extends INormalClassPropertyDefinition {
+    value: NormalAnonymousExpression;
+}
+export declare function isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node: TSESTree.Node): node is INormalClassPropertyDefinitionWithAnonymousExpressionAssigned;
+export type NodeWithName = TSESTree.ClassDeclarationWithName | TSESTree.FunctionDeclarationWithName | IClassExpressionWithName | IFunctionExpressionWithName | INormalVariableDeclaratorWithAnonymousExpressionAssigned | INormalObjectPropertyWithAnonymousExpressionAssigned | INormalClassPropertyDefinitionWithAnonymousExpressionAssigned | INormalAssignmentPatternWithAnonymousExpressionAssigned | INormalMethodDefinition | TSESTree.TSEnumDeclaration | TSESTree.TSInterfaceDeclaration | TSESTree.TSTypeAliasDeclaration;
+export declare function isNodeWithName(node: TSESTree.Node): node is NodeWithName;
+//# sourceMappingURL=ast-guards.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/ast-guards.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/ast-guards.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/ast-guards.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"ast-guards.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/ast-guards.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-file.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-file.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-file.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+export interface ISuppression {
+    file: string;
+    scopeId: string;
+    rule: string;
+}
+export interface IBulkSuppressionsConfig {
+    serializedSuppressions: Set<string>;
+    jsonObject: IBulkSuppressionsJson;
+    newSerializedSuppressions: Set<string>;
+    newJsonObject: IBulkSuppressionsJson;
+}
+export interface IBulkSuppressionsJson {
+    suppressions: ISuppression[];
+}
+export declare function getSuppressionsConfigForEslintConfigFolderPath(eslintConfigFolderPath: string): IBulkSuppressionsConfig;
+export declare function getAllBulkSuppressionsConfigsByEslintConfigFolderPath(): [string, IBulkSuppressionsConfig][];
+export declare function writeSuppressionsJsonToFile(eslintConfigFolderPath: string, suppressionsConfig: IBulkSuppressionsConfig): void;
+export declare function deleteBulkSuppressionsFileInEslintConfigFolder(eslintConfigFolderPath: string): void;
+export declare function serializeSuppression({ file, scopeId, rule }: ISuppression): string;
+//# sourceMappingURL=bulk-suppressions-file.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-file.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-file.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-file.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"bulk-suppressions-file.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-file.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,qBAAqB,CAAC;IAClC,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAkBD,wBAAgB,8CAA8C,CAC5D,sBAAsB,EAAE,MAAM,GAC7B,uBAAuB,CAkDzB;AAED,wBAAgB,qDAAqD,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAAE,CAO3G;AAED,wBAAgB,2BAA2B,CACzC,sBAAsB,EAAE,MAAM,EAC9B,kBAAkB,EAAE,uBAAuB,GAC1C,IAAI,CASN;AAED,wBAAgB,8CAA8C,CAAC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAGnG;AAUD,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,YAAY,GAAG,MAAM,CAElF"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-patch.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-patch.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-patch.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+import type { TSESTree } from '@typescript-eslint/types';
+import { type IBulkSuppressionsConfig, type ISuppression } from './bulk-suppressions-file';
+declare const SUPPRESSION_SYMBOL: unique symbol;
+interface IProblem {
+    [SUPPRESSION_SYMBOL]?: {
+        config: IBulkSuppressionsConfig;
+        suppression: ISuppression;
+        serializedSuppression: string;
+    };
+}
+export declare function shouldBulkSuppress(params: {
+    filename: string;
+    currentNode: TSESTree.Node;
+    ruleId: string;
+    problem: IProblem;
+}): boolean;
+export declare function prune(): void;
+export declare function write(): void;
+export declare function requireFromPathToLinterJS(importPath: string): import('eslint-9').Linter | import('eslint-8').Linter;
+export declare function patchClass<T, U extends T>(originalClass: new () => T, patchedClass: new () => U): void;
+/**
+ * This returns a wrapped version of the "verify" function from ESLint's Linter class
+ * that postprocesses rule violations that weren't suppressed by comments. This postprocessing
+ * records suppressions that weren't otherwise suppressed by comments to be used
+ * by the "suppress" and "prune" commands.
+ */
+export declare function extendVerifyFunction(originalFn: (this: unknown, ...args: unknown[]) => IProblem[] | undefined): (this: unknown, ...args: unknown[]) => IProblem[] | undefined;
+export {};
+//# sourceMappingURL=bulk-suppressions-patch.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-patch.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-patch.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/bulk-suppressions-patch.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"bulk-suppressions-patch.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-patch.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AASzD,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAGlB,MAAM,0BAA0B,CAAC;AAWlC,QAAA,MAAM,kBAAkB,EAAE,OAAO,MAA8B,CAAC;AAOhE,UAAU,QAAQ;IAChB,CAAC,kBAAkB,CAAC,CAAC,EAAE;QACrB,MAAM,EAAE,uBAAuB,CAAC;QAChC,WAAW,EAAE,YAAY,CAAC;QAC1B,qBAAqB,EAAE,MAAM,CAAC;KAC/B,CAAC;CACH;AAiGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,QAAQ,CAAC;CACnB,GAAG,OAAO,CA4BV;AAED,wBAAgB,KAAK,IAAI,IAAI,CAiB5B;AAED,wBAAgB,KAAK,IAAI,IAAI,CAS5B;AAGD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,UAAU,EAAE,MAAM,GAAG,OAAO,UAAU,EAAE,MAAM,CAQvD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,IAAI,CAgBtG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,GAAG,SAAS,GACxE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,GAAG,SAAS,CA0B/D"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/prune.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/prune.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/prune.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export declare function pruneAsync(): Promise<void>;
+//# sourceMappingURL=prune.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/prune.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/prune.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/prune.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/prune.ts"],"names":[],"mappings":"AAaA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBhD"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/runEslint.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/runEslint.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/runEslint.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export declare function runEslintAsync(files: string[], mode: 'suppress' | 'prune'): Promise<void>;
+//# sourceMappingURL=runEslint.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/runEslint.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/runEslint.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/runEslint.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"runEslint.d.ts","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/runEslint.ts"],"names":[],"mappings":"AAQA,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C/F"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/start.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/start.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/start.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export {};
+//# sourceMappingURL=start.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/start.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/start.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/start.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/start.ts"],"names":[],"mappings":""}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/suppress.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/suppress.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/suppress.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export declare function suppressAsync(): Promise<void>;
+//# sourceMappingURL=suppress.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/suppress.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/suppress.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/suppress.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"suppress.d.ts","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/suppress.ts"],"names":[],"mappings":"AAaA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAuEnD"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/get-eslint-cli.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/get-eslint-cli.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/get-eslint-cli.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export declare function getEslintPathAndVersion(packagePath: string): [string, string];
+//# sourceMappingURL=get-eslint-cli.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/get-eslint-cli.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/get-eslint-cli.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/get-eslint-cli.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"get-eslint-cli.d.ts","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts"],"names":[],"mappings":"AAqBA,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA8C7E"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/is-correct-cwd.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/is-correct-cwd.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/is-correct-cwd.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export declare function isCorrectCwd(cwd: string): boolean;
+//# sourceMappingURL=is-correct-cwd.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/is-correct-cwd.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/is-correct-cwd.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/is-correct-cwd.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"is-correct-cwd.d.ts","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQjD"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/print-help.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/print-help.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/print-help.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+export declare function printPruneHelp(): void;
+export declare function printHelp(): void;
+export declare function printSuppressHelp(): void;
+//# sourceMappingURL=print-help.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/print-help.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/print-help.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/print-help.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"print-help.d.ts","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/print-help.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,IAAI,IAAI,CAarC;AAED,wBAAgB,SAAS,IAAI,IAAI,CA8BhC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CA6BxC"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+/**
+ * Applies word wrapping and returns an array of lines.
+ *
+ * @param text - The text to wrap
+ * @param maxLineLength - The maximum length of a line, defaults to the console width
+ * @param indent - The number of spaces to indent the wrapped lines, defaults to 0
+ */
+export declare function wrapWordsToLines(text: string, maxLineLength?: number, indent?: number): string[];
+/**
+ * Applies word wrapping and returns an array of lines.
+ *
+ * @param text - The text to wrap
+ * @param maxLineLength - The maximum length of a line, defaults to the console width
+ * @param linePrefix - The string to prefix each line with, defaults to ''
+ */
+export declare function wrapWordsToLines(text: string, maxLineLength?: number, linePrefix?: string): string[];
+/**
+ * Applies word wrapping and returns an array of lines.
+ *
+ * @param text - The text to wrap
+ * @param maxLineLength - The maximum length of a line, defaults to the console width
+ * @param indentOrLinePrefix - The number of spaces to indent the wrapped lines or the string to prefix
+ * each line with, defaults to no prefix
+ */
+export declare function wrapWordsToLines(text: string, maxLineLength?: number, indentOrLinePrefix?: number | string): string[];
+//# sourceMappingURL=wrap-words-to-lines.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"wrap-words-to-lines.d.ts","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.ts"],"names":[],"mappings":"AAWA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;AAClG;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;AACtG;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,EACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,GACnC,MAAM,EAAE,CAAC"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/constants.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/constants.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/constants.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+export declare const ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_PATCH_PATH';
+export declare const ESLINT_BULK_SUPPRESS_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_SUPPRESS';
+export declare const ESLINT_BULK_ENABLE_ENV_VAR_NAME: 'ESLINT_BULK_ENABLE';
+export declare const ESLINT_BULK_PRUNE_ENV_VAR_NAME: 'ESLINT_BULK_PRUNE';
+export declare const ESLINT_BULK_DETECT_ENV_VAR_NAME: '_RUSHSTACK_ESLINT_BULK_DETECT';
+export declare const ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_FORCE_REGENERATE_PATCH';
+export declare const VSCODE_PID_ENV_VAR_NAME: 'VSCODE_PID';
+export declare const ESLINT_BULK_STDOUT_START_DELIMETER: 'RUSHSTACK_ESLINT_BULK_START';
+export declare const ESLINT_BULK_STDOUT_END_DELIMETER: 'RUSHSTACK_ESLINT_BULK_END';
+export declare const ESLINT_PACKAGE_NAME_ENV_VAR_NAME: '_RUSHSTACK_ESLINT_PACKAGE_NAME';
+export declare const BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME: string;
+//# sourceMappingURL=constants.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/constants.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/constants.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/constants.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mCAAmC,EAAE,kCACd,CAAC;AACrC,eAAO,MAAM,iCAAiC,EAAE,gCACd,CAAC;AACnC,eAAO,MAAM,+BAA+B,EAAE,oBAA2C,CAAC;AAC1F,eAAO,MAAM,8BAA8B,EAAE,mBAAyC,CAAC;AACvF,eAAO,MAAM,+BAA+B,EAAE,+BACb,CAAC;AAClC,eAAO,MAAM,+CAA+C,EAAE,8CACd,CAAC;AACjD,eAAO,MAAM,uBAAuB,EAAE,YAA2B,CAAC;AAElE,eAAO,MAAM,kCAAkC,EAAE,6BAClB,CAAC;AAChC,eAAO,MAAM,gCAAgC,EAAE,2BAAyD,CAAC;AAEzG,eAAO,MAAM,gCAAgC,EAAE,gCACb,CAAC;AAEnC,eAAO,MAAM,yCAAyC,EAAE,MACG,CAAC"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/generate-patched-file.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/generate-patched-file.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/generate-patched-file.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+/**
+ * Dynamically generate file to properly patch many versions of ESLint
+ * @param inputFilePath - Must be an iteration of https://github.com/eslint/eslint/blob/main/lib/linter/linter.js
+ * @param outputFilePath - Some small changes to linter.js
+ */
+export declare function generatePatchedLinterJsFileIfDoesNotExist(inputFilePath: string, outputFilePath: string, eslintPackageVersion: string): void;
+//# sourceMappingURL=generate-patched-file.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/generate-patched-file.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/generate-patched-file.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/generate-patched-file.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"generate-patched-file.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/generate-patched-file.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAAgB,yCAAyC,CACvD,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,MAAM,GAC3B,IAAI,CA2XN"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/index.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export {};
+//# sourceMappingURL=index.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/index.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/index.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/index.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/index.ts"],"names":[],"mappings":""}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/path-utils.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/path-utils.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/path-utils.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+export declare function findAndConsoleLogPatchPathCli(): void;
+export declare function getPathToLinterJS(): string;
+export declare function ensurePathToGeneratedPatch(): string;
+//# sourceMappingURL=path-utils.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/path-utils.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/path-utils.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/eslint-bulk-suppressions/path-utils.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/path-utils.ts"],"names":[],"mappings":"AAqBA,wBAAgB,6BAA6B,IAAI,IAAI,CAoBpD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAKnD"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/exports/eslint-bulk.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/exports/eslint-bulk.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/exports/eslint-bulk.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+import '../eslint-bulk-suppressions/cli/start';
+//# sourceMappingURL=eslint-bulk.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/exports/eslint-bulk.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/exports/eslint-bulk.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/exports/eslint-bulk.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"eslint-bulk.d.ts","sourceRoot":"","sources":["../../src/exports/eslint-bulk.ts"],"names":[],"mappings":"AAKA,OAAO,uCAAuC,CAAC"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/modern-module-resolution.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/modern-module-resolution.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/modern-module-resolution.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export {};
+//# sourceMappingURL=modern-module-resolution.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/modern-module-resolution.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/modern-module-resolution.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/modern-module-resolution.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"modern-module-resolution.d.ts","sourceRoot":"","sources":["../src/modern-module-resolution.ts"],"names":[],"mappings":""}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/usage.d.ts
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/usage.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/usage.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+export {};
+//# sourceMappingURL=usage.d.ts.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-dts/usage.d.ts.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-dts/usage.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-dts/usage.d.ts.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC"}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/_patch-base.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/_patch-base.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/_patch-base.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,278 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+// This is a workaround for https://github.com/eslint/eslint/issues/3458
+//
+// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:
+//
+//    require("@rushstack/eslint-patch/modern-module-resolution");
+//
+import path from 'node:path';
+const isModuleResolutionError = (ex) => typeof ex === 'object' && !!ex && 'code' in ex && ex.code === 'MODULE_NOT_FOUND';
+const FLAT_CONFIG_REGEX = /eslint\.config\.(cjs|mjs|js)$/i;
+// Ex:
+//     at async ESLint.lintFiles (C:\\path\\to\\\\eslint\\lib\\eslint\\eslint.js:720:21)
+const NODE_STACK_REGEX = /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?)(?::(\d+)| (\d+))(?::(\d+))?\)?\s*$/i;
+function parseNodeStack(stack) {
+    const stackTraceMatch = NODE_STACK_REGEX.exec(stack);
+    if (!stackTraceMatch) {
+        return undefined;
+    }
+    return {
+        file: stackTraceMatch[2],
+        method: stackTraceMatch[1],
+        lineNumber: parseInt(stackTraceMatch[3], 10),
+        column: stackTraceMatch[4] ? parseInt(stackTraceMatch[4], 10) : undefined
+    };
+}
+function getStackTrace() {
+    const stackObj = {};
+    const originalStackTraceLimit = Error.stackTraceLimit;
+    Error.stackTraceLimit = Infinity;
+    Error.captureStackTrace(stackObj, getStackTrace);
+    Error.stackTraceLimit = originalStackTraceLimit;
+    if (!stackObj.stack) {
+        throw new Error('Unable to capture stack trace');
+    }
+    const { stack } = stackObj;
+    const stackLines = stack.split('\n');
+    const frames = [];
+    for (const line of stackLines) {
+        const frame = parseNodeStack(line);
+        if (frame) {
+            frames.push(frame);
+        }
+    }
+    return frames;
+}
+// Module path for eslintrc.cjs
+// Example: ".../@eslint/eslintrc/dist/eslintrc.cjs"
+let eslintrcBundlePath = undefined;
+// Module path for config-array-factory.js
+// Example: ".../@eslint/eslintrc/lib/config-array-factory"
+let configArrayFactoryPath = undefined;
+// Module path for relative-module-resolver.js
+// Example: ".../@eslint/eslintrc/lib/shared/relative-module-resolver"
+let moduleResolverPath = undefined;
+// Module path for naming.js
+// Example: ".../@eslint/eslintrc/lib/shared/naming"
+let namingPath = undefined;
+// Folder path where ESLint's package.json can be found
+// Example: ".../node_modules/eslint"
+let eslintFolder = undefined;
+// Probe for the ESLint >=9.0.0 flat config layout:
+for (let currentModule = module;;) {
+    if (FLAT_CONFIG_REGEX.test(currentModule.filename)) {
+        // Obtain the stack trace of the current module, since the
+        // parent module of a flat config is undefined. From the
+        // stack trace, we can find the ESLint folder.
+        const stackTrace = getStackTrace();
+        const targetFrame = stackTrace.find((frame) => frame.file && frame.file.endsWith('eslint.js'));
+        if (targetFrame) {
+            // Walk up the path and continuously attempt to resolve the ESLint folder
+            let currentPath = targetFrame.file;
+            while (currentPath) {
+                const potentialPath = path.dirname(currentPath);
+                if (potentialPath === currentPath) {
+                    break;
+                }
+                currentPath = potentialPath;
+                try {
+                    eslintFolder = path.dirname(require.resolve('eslint/package.json', { paths: [currentPath] }));
+                    break;
+                }
+                catch (ex) {
+                    if (!isModuleResolutionError(ex)) {
+                        throw ex;
+                    }
+                }
+            }
+        }
+        if (eslintFolder) {
+            const eslintrcFolderPath = path.dirname(require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] }));
+            eslintrcBundlePath = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');
+        }
+        break;
+    }
+    if (!currentModule.parent) {
+        break;
+    }
+    currentModule = currentModule.parent;
+}
+if (!eslintFolder) {
+    // Probe for the ESLint >=8.0.0 layout:
+    for (let currentModule = module;;) {
+        if (!eslintrcBundlePath) {
+            if (currentModule.filename.endsWith('eslintrc.cjs')) {
+                // For ESLint >=8.0.0, all @eslint/eslintrc code is bundled at this path:
+                //   .../@eslint/eslintrc/dist/eslintrc.cjs
+                try {
+                    const eslintrcFolderPath = path.dirname(require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] }));
+                    // Make sure we actually resolved the module in our call path
+                    // and not some other spurious dependency.
+                    const resolvedEslintrcBundlePath = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');
+                    if (resolvedEslintrcBundlePath === currentModule.filename) {
+                        eslintrcBundlePath = resolvedEslintrcBundlePath;
+                    }
+                }
+                catch (ex) {
+                    // Module resolution failures are expected, as we're walking
+                    // up our require stack to look for eslint. All other errors
+                    // are re-thrown.
+                    if (!isModuleResolutionError(ex)) {
+                        throw ex;
+                    }
+                }
+            }
+        }
+        else {
+            // Next look for a file in ESLint's folder
+            //   .../eslint/lib/cli-engine/cli-engine.js
+            try {
+                const eslintCandidateFolder = path.dirname(require.resolve('eslint/package.json', {
+                    paths: [currentModule.path]
+                }));
+                // Make sure we actually resolved the module in our call path
+                // and not some other spurious dependency.
+                if (currentModule.filename.startsWith(eslintCandidateFolder + path.sep)) {
+                    eslintFolder = eslintCandidateFolder;
+                    break;
+                }
+            }
+            catch (ex) {
+                // Module resolution failures are expected, as we're walking
+                // up our require stack to look for eslint. All other errors
+                // are re-thrown.
+                if (!isModuleResolutionError(ex)) {
+                    throw ex;
+                }
+            }
+        }
+        if (!currentModule.parent) {
+            break;
+        }
+        currentModule = currentModule.parent;
+    }
+}
+if (!eslintFolder) {
+    // Probe for the ESLint >=7.12.0 layout:
+    for (let currentModule = module;;) {
+        if (!configArrayFactoryPath) {
+            // For ESLint >=7.12.0, config-array-factory.js is at this path:
+            //   .../@eslint/eslintrc/lib/config-array-factory.js
+            try {
+                const eslintrcFolder = path.dirname(require.resolve('@eslint/eslintrc/package.json', {
+                    paths: [currentModule.path]
+                }));
+                const resolvedConfigArrayFactoryPath = path.join(eslintrcFolder, '/lib/config-array-factory.js');
+                if (resolvedConfigArrayFactoryPath === currentModule.filename) {
+                    configArrayFactoryPath = resolvedConfigArrayFactoryPath;
+                    moduleResolverPath = `${eslintrcFolder}/lib/shared/relative-module-resolver`;
+                    namingPath = `${eslintrcFolder}/lib/shared/naming`;
+                }
+            }
+            catch (ex) {
+                // Module resolution failures are expected, as we're walking
+                // up our require stack to look for eslint. All other errors
+                // are re-thrown.
+                if (!isModuleResolutionError(ex)) {
+                    throw ex;
+                }
+            }
+        }
+        else if (currentModule.filename.endsWith('cli-engine.js')) {
+            // Next look for a file in ESLint's folder
+            //   .../eslint/lib/cli-engine/cli-engine.js
+            try {
+                const eslintCandidateFolder = path.dirname(require.resolve('eslint/package.json', {
+                    paths: [currentModule.path]
+                }));
+                if (path.join(eslintCandidateFolder, 'lib/cli-engine/cli-engine.js') === currentModule.filename) {
+                    eslintFolder = eslintCandidateFolder;
+                    break;
+                }
+            }
+            catch (ex) {
+                // Module resolution failures are expected, as we're walking
+                // up our require stack to look for eslint. All other errors
+                // are rethrown.
+                if (!isModuleResolutionError(ex)) {
+                    throw ex;
+                }
+            }
+        }
+        if (!currentModule.parent) {
+            break;
+        }
+        currentModule = currentModule.parent;
+    }
+}
+if (!eslintFolder) {
+    // Probe for the <7.12.0 layout:
+    for (let currentModule = module;;) {
+        // For ESLint <7.12.0, config-array-factory.js was at this path:
+        //   .../eslint/lib/cli-engine/config-array-factory.js
+        if (/[\\/]eslint[\\/]lib[\\/]cli-engine[\\/]config-array-factory\.js$/i.test(currentModule.filename)) {
+            eslintFolder = path.join(path.dirname(currentModule.filename), '../..');
+            configArrayFactoryPath = `${eslintFolder}/lib/cli-engine/config-array-factory`;
+            moduleResolverPath = `${eslintFolder}/lib/shared/relative-module-resolver`;
+            // The naming module was moved to @eslint/eslintrc in ESLint 7.8.0, which is also when the @eslint/eslintrc
+            // package was created and added to ESLint, so we need to probe for whether it's in the old or new location.
+            let eslintrcFolder;
+            try {
+                eslintrcFolder = path.dirname(require.resolve('@eslint/eslintrc/package.json', {
+                    paths: [currentModule.path]
+                }));
+            }
+            catch (ex) {
+                if (!isModuleResolutionError(ex)) {
+                    throw ex;
+                }
+            }
+            namingPath = `${eslintrcFolder !== null && eslintrcFolder !== void 0 ? eslintrcFolder : eslintFolder}/lib/shared/naming`;
+            break;
+        }
+        if (!currentModule.parent) {
+            // This was tested with ESLint 6.1.0 .. 7.12.1.
+            throw new Error('Failed to patch ESLint because the calling module was not recognized.\n' +
+                'If you are using a newer ESLint version that may be unsupported, please create a GitHub issue:\n' +
+                'https://github.com/microsoft/rushstack/issues');
+        }
+        currentModule = currentModule.parent;
+    }
+}
+// Detect the ESLint package version
+const eslintPackageJsonPath = `${eslintFolder}/package.json`;
+const eslintPackageObject = require(eslintPackageJsonPath);
+export const eslintPackageVersion = eslintPackageObject.version;
+const ESLINT_MAJOR_VERSION = parseInt(eslintPackageVersion, 10);
+if (isNaN(ESLINT_MAJOR_VERSION)) {
+    throw new Error(`Unable to parse ESLint version "${eslintPackageVersion}" in file "${eslintPackageJsonPath}"`);
+}
+if (!(ESLINT_MAJOR_VERSION >= 6 && ESLINT_MAJOR_VERSION <= 9)) {
+    throw new Error('The ESLint patch script has only been tested with ESLint version 6.x, 7.x, 8.x, and 9.x.' +
+        ` (Your version: ${eslintPackageVersion})\n` +
+        'Consider reporting a GitHub issue:\n' +
+        'https://github.com/microsoft/rushstack/issues');
+}
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+let configArrayFactory;
+if (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {
+    configArrayFactory = require(eslintrcBundlePath).Legacy.ConfigArrayFactory;
+}
+else if (configArrayFactoryPath) {
+    configArrayFactory = require(configArrayFactoryPath).ConfigArrayFactory;
+}
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+let ModuleResolver;
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+let Naming;
+if (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {
+    ModuleResolver = require(eslintrcBundlePath).Legacy.ModuleResolver;
+    Naming = require(eslintrcBundlePath).Legacy.naming;
+}
+else if (moduleResolverPath && namingPath) {
+    ModuleResolver = require(moduleResolverPath);
+    Naming = require(namingPath);
+}
+export { eslintFolder, configArrayFactory, ModuleResolver, Naming, ESLINT_MAJOR_VERSION, isModuleResolutionError };
+//# sourceMappingURL=_patch-base.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/_patch-base.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/_patch-base.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/_patch-base.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"_patch-base.js","sourceRoot":"","sources":["../src/_patch-base.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This is a workaround for https://github.com/eslint/eslint/issues/3458\n//\n// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:\n//\n//    require(\"@rushstack/eslint-patch/modern-module-resolution\");\n//\n\nimport path from 'node:path';\n\nconst isModuleResolutionError: (ex: unknown) => boolean = (ex) =>\n  typeof ex === 'object' && !!ex && 'code' in ex && (ex as { code: unknown }).code === 'MODULE_NOT_FOUND';\n\nconst FLAT_CONFIG_REGEX: RegExp = /eslint\\.config\\.(cjs|mjs|js)$/i;\n\n// Ex:\n//     at async ESLint.lintFiles (C:\\\\path\\\\to\\\\\\\\eslint\\\\lib\\\\eslint\\\\eslint.js:720:21)\nconst NODE_STACK_REGEX: RegExp =\n  /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?)(?::(\\d+)| (\\d+))(?::(\\d+))?\\)?\\s*$/i;\n\ninterface INodeStackFrame {\n  file: string;\n  method?: string;\n  lineNumber: number;\n  column?: number;\n}\n\nfunction parseNodeStack(stack: string): INodeStackFrame | undefined {\n  const stackTraceMatch: RegExpExecArray | null = NODE_STACK_REGEX.exec(stack);\n  if (!stackTraceMatch) {\n    return undefined;\n  }\n\n  return {\n    file: stackTraceMatch[2],\n    method: stackTraceMatch[1],\n    lineNumber: parseInt(stackTraceMatch[3], 10),\n    column: stackTraceMatch[4] ? parseInt(stackTraceMatch[4], 10) : undefined\n  };\n}\n\nfunction getStackTrace(): INodeStackFrame[] {\n  const stackObj: { stack?: string } = {};\n  const originalStackTraceLimit: number = Error.stackTraceLimit;\n  Error.stackTraceLimit = Infinity;\n  Error.captureStackTrace(stackObj, getStackTrace);\n  Error.stackTraceLimit = originalStackTraceLimit;\n  if (!stackObj.stack) {\n    throw new Error('Unable to capture stack trace');\n  }\n\n  const { stack } = stackObj;\n  const stackLines: string[] = stack.split('\\n');\n  const frames: INodeStackFrame[] = [];\n  for (const line of stackLines) {\n    const frame: INodeStackFrame | undefined = parseNodeStack(line);\n    if (frame) {\n      frames.push(frame);\n    }\n  }\n\n  return frames;\n}\n\n// Module path for eslintrc.cjs\n// Example: \".../@eslint/eslintrc/dist/eslintrc.cjs\"\nlet eslintrcBundlePath: string | undefined = undefined;\n\n// Module path for config-array-factory.js\n// Example: \".../@eslint/eslintrc/lib/config-array-factory\"\nlet configArrayFactoryPath: string | undefined = undefined;\n\n// Module path for relative-module-resolver.js\n// Example: \".../@eslint/eslintrc/lib/shared/relative-module-resolver\"\nlet moduleResolverPath: string | undefined = undefined;\n\n// Module path for naming.js\n// Example: \".../@eslint/eslintrc/lib/shared/naming\"\nlet namingPath: string | undefined = undefined;\n\n// Folder path where ESLint's package.json can be found\n// Example: \".../node_modules/eslint\"\nlet eslintFolder: string | undefined = undefined;\n\n// Probe for the ESLint >=9.0.0 flat config layout:\nfor (let currentModule: NodeModule = module; ; ) {\n  if (FLAT_CONFIG_REGEX.test(currentModule.filename)) {\n    // Obtain the stack trace of the current module, since the\n    // parent module of a flat config is undefined. From the\n    // stack trace, we can find the ESLint folder.\n    const stackTrace: INodeStackFrame[] = getStackTrace();\n    const targetFrame: INodeStackFrame | undefined = stackTrace.find(\n      (frame: INodeStackFrame) => frame.file && frame.file.endsWith('eslint.js')\n    );\n    if (targetFrame) {\n      // Walk up the path and continuously attempt to resolve the ESLint folder\n      let currentPath: string | undefined = targetFrame.file;\n      while (currentPath) {\n        const potentialPath: string = path.dirname(currentPath);\n        if (potentialPath === currentPath) {\n          break;\n        }\n        currentPath = potentialPath;\n        try {\n          eslintFolder = path.dirname(require.resolve('eslint/package.json', { paths: [currentPath] }));\n          break;\n        } catch (ex: unknown) {\n          if (!isModuleResolutionError(ex)) {\n            throw ex;\n          }\n        }\n      }\n    }\n\n    if (eslintFolder) {\n      const eslintrcFolderPath: string = path.dirname(\n        require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] })\n      );\n      eslintrcBundlePath = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');\n    }\n\n    break;\n  }\n\n  if (!currentModule.parent) {\n    break;\n  }\n  currentModule = currentModule.parent;\n}\n\nif (!eslintFolder) {\n  // Probe for the ESLint >=8.0.0 layout:\n  for (let currentModule: NodeModule = module; ; ) {\n    if (!eslintrcBundlePath) {\n      if (currentModule.filename.endsWith('eslintrc.cjs')) {\n        // For ESLint >=8.0.0, all @eslint/eslintrc code is bundled at this path:\n        //   .../@eslint/eslintrc/dist/eslintrc.cjs\n        try {\n          const eslintrcFolderPath: string = path.dirname(\n            require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] })\n          );\n\n          // Make sure we actually resolved the module in our call path\n          // and not some other spurious dependency.\n          const resolvedEslintrcBundlePath: string = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');\n          if (resolvedEslintrcBundlePath === currentModule.filename) {\n            eslintrcBundlePath = resolvedEslintrcBundlePath;\n          }\n        } catch (ex: unknown) {\n          // Module resolution failures are expected, as we're walking\n          // up our require stack to look for eslint. All other errors\n          // are re-thrown.\n          if (!isModuleResolutionError(ex)) {\n            throw ex;\n          }\n        }\n      }\n    } else {\n      // Next look for a file in ESLint's folder\n      //   .../eslint/lib/cli-engine/cli-engine.js\n      try {\n        const eslintCandidateFolder: string = path.dirname(\n          require.resolve('eslint/package.json', {\n            paths: [currentModule.path]\n          })\n        );\n\n        // Make sure we actually resolved the module in our call path\n        // and not some other spurious dependency.\n        if (currentModule.filename.startsWith(eslintCandidateFolder + path.sep)) {\n          eslintFolder = eslintCandidateFolder;\n          break;\n        }\n      } catch (ex: unknown) {\n        // Module resolution failures are expected, as we're walking\n        // up our require stack to look for eslint. All other errors\n        // are re-thrown.\n        if (!isModuleResolutionError(ex)) {\n          throw ex;\n        }\n      }\n    }\n\n    if (!currentModule.parent) {\n      break;\n    }\n    currentModule = currentModule.parent;\n  }\n}\n\nif (!eslintFolder) {\n  // Probe for the ESLint >=7.12.0 layout:\n  for (let currentModule: NodeModule = module; ; ) {\n    if (!configArrayFactoryPath) {\n      // For ESLint >=7.12.0, config-array-factory.js is at this path:\n      //   .../@eslint/eslintrc/lib/config-array-factory.js\n      try {\n        const eslintrcFolder: string = path.dirname(\n          require.resolve('@eslint/eslintrc/package.json', {\n            paths: [currentModule.path]\n          })\n        );\n\n        const resolvedConfigArrayFactoryPath: string = path.join(\n          eslintrcFolder,\n          '/lib/config-array-factory.js'\n        );\n        if (resolvedConfigArrayFactoryPath === currentModule.filename) {\n          configArrayFactoryPath = resolvedConfigArrayFactoryPath;\n          moduleResolverPath = `${eslintrcFolder}/lib/shared/relative-module-resolver`;\n          namingPath = `${eslintrcFolder}/lib/shared/naming`;\n        }\n      } catch (ex: unknown) {\n        // Module resolution failures are expected, as we're walking\n        // up our require stack to look for eslint. All other errors\n        // are re-thrown.\n        if (!isModuleResolutionError(ex)) {\n          throw ex;\n        }\n      }\n    } else if (currentModule.filename.endsWith('cli-engine.js')) {\n      // Next look for a file in ESLint's folder\n      //   .../eslint/lib/cli-engine/cli-engine.js\n      try {\n        const eslintCandidateFolder: string = path.dirname(\n          require.resolve('eslint/package.json', {\n            paths: [currentModule.path]\n          })\n        );\n\n        if (path.join(eslintCandidateFolder, 'lib/cli-engine/cli-engine.js') === currentModule.filename) {\n          eslintFolder = eslintCandidateFolder;\n          break;\n        }\n      } catch (ex: unknown) {\n        // Module resolution failures are expected, as we're walking\n        // up our require stack to look for eslint. All other errors\n        // are rethrown.\n        if (!isModuleResolutionError(ex)) {\n          throw ex;\n        }\n      }\n    }\n\n    if (!currentModule.parent) {\n      break;\n    }\n    currentModule = currentModule.parent;\n  }\n}\n\nif (!eslintFolder) {\n  // Probe for the <7.12.0 layout:\n  for (let currentModule: NodeModule = module; ; ) {\n    // For ESLint <7.12.0, config-array-factory.js was at this path:\n    //   .../eslint/lib/cli-engine/config-array-factory.js\n    if (/[\\\\/]eslint[\\\\/]lib[\\\\/]cli-engine[\\\\/]config-array-factory\\.js$/i.test(currentModule.filename)) {\n      eslintFolder = path.join(path.dirname(currentModule.filename), '../..');\n      configArrayFactoryPath = `${eslintFolder}/lib/cli-engine/config-array-factory`;\n      moduleResolverPath = `${eslintFolder}/lib/shared/relative-module-resolver`;\n\n      // The naming module was moved to @eslint/eslintrc in ESLint 7.8.0, which is also when the @eslint/eslintrc\n      // package was created and added to ESLint, so we need to probe for whether it's in the old or new location.\n      let eslintrcFolder: string | undefined;\n      try {\n        eslintrcFolder = path.dirname(\n          require.resolve('@eslint/eslintrc/package.json', {\n            paths: [currentModule.path]\n          })\n        );\n      } catch (ex: unknown) {\n        if (!isModuleResolutionError(ex)) {\n          throw ex;\n        }\n      }\n\n      namingPath = `${eslintrcFolder ?? eslintFolder}/lib/shared/naming`;\n      break;\n    }\n\n    if (!currentModule.parent) {\n      // This was tested with ESLint 6.1.0 .. 7.12.1.\n      throw new Error(\n        'Failed to patch ESLint because the calling module was not recognized.\\n' +\n          'If you are using a newer ESLint version that may be unsupported, please create a GitHub issue:\\n' +\n          'https://github.com/microsoft/rushstack/issues'\n      );\n    }\n    currentModule = currentModule.parent;\n  }\n}\n\n// Detect the ESLint package version\nconst eslintPackageJsonPath: string = `${eslintFolder}/package.json`;\nconst eslintPackageObject: { version: string } = require(eslintPackageJsonPath);\nexport const eslintPackageVersion: string = eslintPackageObject.version;\nconst ESLINT_MAJOR_VERSION: number = parseInt(eslintPackageVersion, 10);\nif (isNaN(ESLINT_MAJOR_VERSION)) {\n  throw new Error(\n    `Unable to parse ESLint version \"${eslintPackageVersion}\" in file \"${eslintPackageJsonPath}\"`\n  );\n}\n\nif (!(ESLINT_MAJOR_VERSION >= 6 && ESLINT_MAJOR_VERSION <= 9)) {\n  throw new Error(\n    'The ESLint patch script has only been tested with ESLint version 6.x, 7.x, 8.x, and 9.x.' +\n      ` (Your version: ${eslintPackageVersion})\\n` +\n      'Consider reporting a GitHub issue:\\n' +\n      'https://github.com/microsoft/rushstack/issues'\n  );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet configArrayFactory: any;\nif (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {\n  configArrayFactory = require(eslintrcBundlePath).Legacy.ConfigArrayFactory;\n} else if (configArrayFactoryPath) {\n  configArrayFactory = require(configArrayFactoryPath).ConfigArrayFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet ModuleResolver: { resolve: any };\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Naming: { normalizePackageName: any };\nif (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {\n  ModuleResolver = require(eslintrcBundlePath).Legacy.ModuleResolver;\n  Naming = require(eslintrcBundlePath).Legacy.naming;\n} else if (moduleResolverPath && namingPath) {\n  ModuleResolver = require(moduleResolverPath);\n  Naming = require(namingPath);\n}\n\nexport {\n  eslintFolder,\n  configArrayFactory,\n  ModuleResolver,\n  Naming,\n  ESLINT_MAJOR_VERSION,\n  isModuleResolutionError\n};\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/custom-config-package-names.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/custom-config-package-names.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/custom-config-package-names.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,45 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+// This is a workaround for ESLint's requirement to consume shareable configurations from package names prefixed
+// with "eslint-config".
+//
+// To remove this requirement, add this line to the top of your project's .eslintrc.js file:
+//
+//    require("@rushstack/eslint-patch/custom-config-package-names");
+//
+import { configArrayFactory, ModuleResolver, Naming } from './_patch-base';
+if (!configArrayFactory.__loadExtendedShareableConfigPatched) {
+    configArrayFactory.__loadExtendedShareableConfigPatched = true;
+    // eslint-disable-next-line @typescript-eslint/typedef
+    const originalLoadExtendedShareableConfig = configArrayFactory.prototype._loadExtendedShareableConfig;
+    // Common between ESLint versions
+    // https://github.com/eslint/eslintrc/blob/242d569020dfe4f561e4503787b99ec016337457/lib/config-array-factory.js#L910
+    configArrayFactory.prototype._loadExtendedShareableConfig = function (extendName) {
+        const originalResolve = ModuleResolver.resolve;
+        try {
+            ModuleResolver.resolve = function (moduleName, relativeToPath) {
+                try {
+                    return originalResolve.call(this, moduleName, relativeToPath);
+                }
+                catch (e) {
+                    // Only change the name we resolve if we cannot find the normalized module, since it is
+                    // valid to rely on the normalized package name. Use the originally provided module path
+                    // instead of the normalized module path.
+                    if ((e === null || e === void 0 ? void 0 : e.code) === 'MODULE_NOT_FOUND' &&
+                        moduleName !== extendName &&
+                        moduleName === Naming.normalizePackageName(extendName, 'eslint-config')) {
+                        return originalResolve.call(this, extendName, relativeToPath);
+                    }
+                    else {
+                        throw e;
+                    }
+                }
+            };
+            return originalLoadExtendedShareableConfig.apply(this, arguments);
+        }
+        finally {
+            ModuleResolver.resolve = originalResolve;
+        }
+    };
+}
+//# sourceMappingURL=custom-config-package-names.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/custom-config-package-names.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/custom-config-package-names.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/custom-config-package-names.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"custom-config-package-names.js","sourceRoot":"","sources":["../src/custom-config-package-names.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,gHAAgH;AAChH,wBAAwB;AACxB,EAAE;AACF,4FAA4F;AAC5F,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE3E,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,EAAE,CAAC;IAC7D,kBAAkB,CAAC,oCAAoC,GAAG,IAAI,CAAC;IAC/D,sDAAsD;IACtD,MAAM,mCAAmC,GAAG,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC;IAEtG,iCAAiC;IACjC,oHAAoH;IACpH,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,GAAG,UAAU,UAAkB;QACtF,MAAM,eAAe,GAA2D,cAAc,CAAC,OAAO,CAAC;QACvG,IAAI,CAAC;YACH,cAAc,CAAC,OAAO,GAAG,UAAU,UAAkB,EAAE,cAAsB;gBAC3E,IAAI,CAAC;oBACH,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;gBAChE,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,uFAAuF;oBACvF,wFAAwF;oBACxF,yCAAyC;oBACzC,IACE,CAAC,CAA2B,aAA3B,CAAC,uBAAD,CAAC,CAA4B,IAAI,MAAK,kBAAkB;wBACzD,UAAU,KAAK,UAAU;wBACzB,UAAU,KAAK,MAAM,CAAC,oBAAoB,CAAC,UAAU,EAAE,eAAe,CAAC,EACvE,CAAC;wBACD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;oBAChE,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,CAAC;oBACV,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YACF,OAAO,mCAAmC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpE,CAAC;gBAAS,CAAC;YACT,cAAc,CAAC,OAAO,GAAG,eAAe,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This is a workaround for ESLint's requirement to consume shareable configurations from package names prefixed\n// with \"eslint-config\".\n//\n// To remove this requirement, add this line to the top of your project's .eslintrc.js file:\n//\n//    require(\"@rushstack/eslint-patch/custom-config-package-names\");\n//\nimport { configArrayFactory, ModuleResolver, Naming } from './_patch-base';\n\nif (!configArrayFactory.__loadExtendedShareableConfigPatched) {\n  configArrayFactory.__loadExtendedShareableConfigPatched = true;\n  // eslint-disable-next-line @typescript-eslint/typedef\n  const originalLoadExtendedShareableConfig = configArrayFactory.prototype._loadExtendedShareableConfig;\n\n  // Common between ESLint versions\n  // https://github.com/eslint/eslintrc/blob/242d569020dfe4f561e4503787b99ec016337457/lib/config-array-factory.js#L910\n  configArrayFactory.prototype._loadExtendedShareableConfig = function (extendName: string): unknown {\n    const originalResolve: (moduleName: string, relativeToPath: string) => string = ModuleResolver.resolve;\n    try {\n      ModuleResolver.resolve = function (moduleName: string, relativeToPath: string): string {\n        try {\n          return originalResolve.call(this, moduleName, relativeToPath);\n        } catch (e) {\n          // Only change the name we resolve if we cannot find the normalized module, since it is\n          // valid to rely on the normalized package name. Use the originally provided module path\n          // instead of the normalized module path.\n          if (\n            (e as NodeJS.ErrnoException)?.code === 'MODULE_NOT_FOUND' &&\n            moduleName !== extendName &&\n            moduleName === Naming.normalizePackageName(extendName, 'eslint-config')\n          ) {\n            return originalResolve.call(this, extendName, relativeToPath);\n          } else {\n            throw e;\n          }\n        }\n      };\n      return originalLoadExtendedShareableConfig.apply(this, arguments);\n    } finally {\n      ModuleResolver.resolve = originalResolve;\n    }\n  };\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/ast-guards.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/ast-guards.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/ast-guards.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,147 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+export function isArrayExpression(node) {
+    return node.type === 'ArrayExpression';
+}
+export function isArrowFunctionExpression(node) {
+    return node.type === 'ArrowFunctionExpression';
+}
+/** default parameters */
+export function isAssignmentPattern(node) {
+    return node.type === 'AssignmentPattern';
+}
+export function isClassDeclaration(node) {
+    return node.type === 'ClassDeclaration';
+}
+export function isClassExpression(node) {
+    return node.type === 'ClassExpression';
+}
+export function isExportDefaultDeclaration(node) {
+    return node.type === 'ExportDefaultDeclaration';
+}
+export function isExpression(node) {
+    return node.type.includes('Expression');
+}
+export function isFunctionDeclaration(node) {
+    return node.type === 'FunctionDeclaration';
+}
+export function isFunctionExpression(node) {
+    return node.type === 'FunctionExpression';
+}
+export function isIdentifier(node) {
+    return node.type === 'Identifier';
+}
+export function isLiteral(node) {
+    return node.type === 'Literal';
+}
+export function isMethodDefinition(node) {
+    return node.type === 'MethodDefinition';
+}
+export function isObjectExpression(node) {
+    return node.type === 'ObjectExpression';
+}
+export function isPrivateIdentifier(node) {
+    return node.type === 'PrivateIdentifier';
+}
+export function isProperty(node) {
+    return node.type === 'Property';
+}
+export function isPropertyDefinition(node) {
+    return node.type === 'PropertyDefinition';
+}
+export function isTSEnumDeclaration(node) {
+    return node.type === 'TSEnumDeclaration';
+}
+export function isTSInterfaceDeclaration(node) {
+    return node.type === 'TSInterfaceDeclaration';
+}
+export function isTSModuleDeclaration(node) {
+    return node.type === 'TSModuleDeclaration';
+}
+export function isTSQualifiedName(node) {
+    return node.type === 'TSQualifiedName';
+}
+export function isTSTypeAliasDeclaration(node) {
+    return node.type === 'TSTypeAliasDeclaration';
+}
+export function isVariableDeclarator(node) {
+    return node.type === 'VariableDeclarator';
+}
+// Compound Type Guards for @typescript-eslint/types ast-spec compound types
+export function isClassDeclarationWithName(node) {
+    return isClassDeclaration(node) && node.id !== null;
+}
+export function isClassPropertyNameNonComputed(node) {
+    return isPrivateIdentifier(node) || isPropertyNameNonComputed(node);
+}
+export function isFunctionDeclarationWithName(node) {
+    return isFunctionDeclaration(node) && node.id !== null;
+}
+export function isNumberLiteral(node) {
+    return isLiteral(node) && typeof node.value === 'number';
+}
+export function isPropertyNameNonComputed(node) {
+    return isIdentifier(node) || isNumberLiteral(node) || isStringLiteral(node);
+}
+export function isStringLiteral(node) {
+    return isLiteral(node) && typeof node.value === 'string';
+}
+export function isClassExpressionWithName(node) {
+    return isClassExpression(node) && node.id !== null;
+}
+export function isFunctionExpressionWithName(node) {
+    return isFunctionExpression(node) && node.id !== null;
+}
+export function isNormalAnonymousExpression(node) {
+    const ANONYMOUS_EXPRESSION_GUARDS = [
+        isArrowFunctionExpression,
+        isClassExpression,
+        isFunctionExpression,
+        isObjectExpression
+    ];
+    return ANONYMOUS_EXPRESSION_GUARDS.some((guard) => guard(node));
+}
+export function isNormalAssignmentPattern(node) {
+    return isAssignmentPattern(node) && isIdentifier(node.left);
+}
+export function isNormalClassPropertyDefinition(node) {
+    return (isPropertyDefinition(node) &&
+        (isIdentifier(node.key) || isPrivateIdentifier(node.key)) &&
+        node.value !== null);
+}
+export function isNormalMethodDefinition(node) {
+    return isMethodDefinition(node) && (isIdentifier(node.key) || isPrivateIdentifier(node.key));
+}
+export function isNormalObjectProperty(node) {
+    return isProperty(node) && (isIdentifier(node.key) || isPrivateIdentifier(node.key));
+}
+export function isNormalVariableDeclarator(node) {
+    return isVariableDeclarator(node) && isIdentifier(node.id) && node.init !== null;
+}
+export function isNormalAssignmentPatternWithAnonymousExpressionAssigned(node) {
+    return isNormalAssignmentPattern(node) && isNormalAnonymousExpression(node.right);
+}
+export function isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node) {
+    return isNormalVariableDeclarator(node) && isNormalAnonymousExpression(node.init);
+}
+export function isNormalObjectPropertyWithAnonymousExpressionAssigned(node) {
+    return isNormalObjectProperty(node) && isNormalAnonymousExpression(node.value);
+}
+export function isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node) {
+    return isNormalClassPropertyDefinition(node) && isNormalAnonymousExpression(node.value);
+}
+export function isNodeWithName(node) {
+    return (isClassDeclarationWithName(node) ||
+        isFunctionDeclarationWithName(node) ||
+        isClassExpressionWithName(node) ||
+        isFunctionExpressionWithName(node) ||
+        isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node) ||
+        isNormalObjectPropertyWithAnonymousExpressionAssigned(node) ||
+        isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node) ||
+        isNormalAssignmentPatternWithAnonymousExpressionAssigned(node) ||
+        isNormalMethodDefinition(node) ||
+        isTSEnumDeclaration(node) ||
+        isTSInterfaceDeclaration(node) ||
+        isTSTypeAliasDeclaration(node));
+}
+//# sourceMappingURL=ast-guards.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/ast-guards.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/ast-guards.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/ast-guards.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"ast-guards.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/ast-guards.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { TSESTree } from '@typescript-eslint/types';\n\nexport function isArrayExpression(node: TSESTree.Node): node is TSESTree.ArrayExpression {\n  return node.type === 'ArrayExpression';\n}\n\nexport function isArrowFunctionExpression(node: TSESTree.Node): node is TSESTree.ArrowFunctionExpression {\n  return node.type === 'ArrowFunctionExpression';\n}\n\n/** default parameters */\nexport function isAssignmentPattern(node: TSESTree.Node): node is TSESTree.AssignmentPattern {\n  return node.type === 'AssignmentPattern';\n}\n\nexport function isClassDeclaration(node: TSESTree.Node): node is TSESTree.ClassDeclaration {\n  return node.type === 'ClassDeclaration';\n}\n\nexport function isClassExpression(node: TSESTree.Node): node is TSESTree.ClassExpression {\n  return node.type === 'ClassExpression';\n}\n\nexport function isExportDefaultDeclaration(node: TSESTree.Node): node is TSESTree.ExportDefaultDeclaration {\n  return node.type === 'ExportDefaultDeclaration';\n}\n\nexport function isExpression(node: TSESTree.Node): node is TSESTree.Expression {\n  return node.type.includes('Expression');\n}\n\nexport function isFunctionDeclaration(node: TSESTree.Node): node is TSESTree.FunctionDeclaration {\n  return node.type === 'FunctionDeclaration';\n}\n\nexport function isFunctionExpression(node: TSESTree.Node): node is TSESTree.FunctionExpression {\n  return node.type === 'FunctionExpression';\n}\n\nexport function isIdentifier(node: TSESTree.Node): node is TSESTree.Identifier {\n  return node.type === 'Identifier';\n}\n\nexport function isLiteral(node: TSESTree.Node): node is TSESTree.Literal {\n  return node.type === 'Literal';\n}\n\nexport function isMethodDefinition(node: TSESTree.Node): node is TSESTree.MethodDefinition {\n  return node.type === 'MethodDefinition';\n}\n\nexport function isObjectExpression(node: TSESTree.Node): node is TSESTree.ObjectExpression {\n  return node.type === 'ObjectExpression';\n}\n\nexport function isPrivateIdentifier(node: TSESTree.Node): node is TSESTree.PrivateIdentifier {\n  return node.type === 'PrivateIdentifier';\n}\n\nexport function isProperty(node: TSESTree.Node): node is TSESTree.Property {\n  return node.type === 'Property';\n}\n\nexport function isPropertyDefinition(node: TSESTree.Node): node is TSESTree.PropertyDefinition {\n  return node.type === 'PropertyDefinition';\n}\n\nexport function isTSEnumDeclaration(node: TSESTree.Node): node is TSESTree.TSEnumDeclaration {\n  return node.type === 'TSEnumDeclaration';\n}\n\nexport function isTSInterfaceDeclaration(node: TSESTree.Node): node is TSESTree.TSInterfaceDeclaration {\n  return node.type === 'TSInterfaceDeclaration';\n}\n\nexport function isTSModuleDeclaration(node: TSESTree.Node): node is TSESTree.TSModuleDeclaration {\n  return node.type === 'TSModuleDeclaration';\n}\n\nexport function isTSQualifiedName(node: TSESTree.Node): node is TSESTree.TSQualifiedName {\n  return node.type === 'TSQualifiedName';\n}\n\nexport function isTSTypeAliasDeclaration(node: TSESTree.Node): node is TSESTree.TSTypeAliasDeclaration {\n  return node.type === 'TSTypeAliasDeclaration';\n}\n\nexport function isVariableDeclarator(node: TSESTree.Node): node is TSESTree.VariableDeclarator {\n  return node.type === 'VariableDeclarator';\n}\n\n// Compound Type Guards for @typescript-eslint/types ast-spec compound types\nexport function isClassDeclarationWithName(node: TSESTree.Node): node is TSESTree.ClassDeclarationWithName {\n  return isClassDeclaration(node) && node.id !== null;\n}\n\nexport function isClassPropertyNameNonComputed(\n  node: TSESTree.Node\n): node is TSESTree.ClassPropertyNameNonComputed {\n  return isPrivateIdentifier(node) || isPropertyNameNonComputed(node);\n}\n\nexport function isFunctionDeclarationWithName(\n  node: TSESTree.Node\n): node is TSESTree.FunctionDeclarationWithName {\n  return isFunctionDeclaration(node) && node.id !== null;\n}\n\nexport function isNumberLiteral(node: TSESTree.Node): node is TSESTree.NumberLiteral {\n  return isLiteral(node) && typeof node.value === 'number';\n}\n\nexport function isPropertyNameNonComputed(node: TSESTree.Node): node is TSESTree.PropertyNameNonComputed {\n  return isIdentifier(node) || isNumberLiteral(node) || isStringLiteral(node);\n}\n\nexport function isStringLiteral(node: TSESTree.Node): node is TSESTree.StringLiteral {\n  return isLiteral(node) && typeof node.value === 'string';\n}\n\n// Custom compound types\nexport interface IClassExpressionWithName extends TSESTree.ClassExpression {\n  id: TSESTree.Identifier;\n}\n\nexport function isClassExpressionWithName(node: TSESTree.Node): node is IClassExpressionWithName {\n  return isClassExpression(node) && node.id !== null;\n}\nexport interface IFunctionExpressionWithName extends TSESTree.FunctionExpression {\n  id: TSESTree.Identifier;\n}\n\nexport function isFunctionExpressionWithName(node: TSESTree.Node): node is IFunctionExpressionWithName {\n  return isFunctionExpression(node) && node.id !== null;\n}\n\nexport type NormalAnonymousExpression =\n  | TSESTree.ArrowFunctionExpression\n  | TSESTree.ClassExpression\n  | TSESTree.FunctionExpression\n  | TSESTree.ObjectExpression;\n\nexport function isNormalAnonymousExpression(node: TSESTree.Node): node is NormalAnonymousExpression {\n  const ANONYMOUS_EXPRESSION_GUARDS: ((node: TSESTree.Node) => boolean)[] = [\n    isArrowFunctionExpression,\n    isClassExpression,\n    isFunctionExpression,\n    isObjectExpression\n  ];\n  return ANONYMOUS_EXPRESSION_GUARDS.some((guard) => guard(node));\n}\n\nexport interface INormalAssignmentPattern extends TSESTree.AssignmentPattern {\n  left: TSESTree.Identifier;\n}\n\nexport function isNormalAssignmentPattern(node: TSESTree.Node): node is INormalAssignmentPattern {\n  return isAssignmentPattern(node) && isIdentifier(node.left);\n}\n\nexport interface INormalClassPropertyDefinition extends TSESTree.PropertyDefinitionNonComputedName {\n  key: TSESTree.PrivateIdentifier | TSESTree.Identifier;\n  value: TSESTree.Expression;\n}\n\nexport function isNormalClassPropertyDefinition(node: TSESTree.Node): node is INormalClassPropertyDefinition {\n  return (\n    isPropertyDefinition(node) &&\n    (isIdentifier(node.key) || isPrivateIdentifier(node.key)) &&\n    node.value !== null\n  );\n}\n\nexport interface INormalMethodDefinition extends TSESTree.MethodDefinitionNonComputedName {\n  key: TSESTree.PrivateIdentifier | TSESTree.Identifier;\n}\n\nexport function isNormalMethodDefinition(node: TSESTree.Node): node is INormalMethodDefinition {\n  return isMethodDefinition(node) && (isIdentifier(node.key) || isPrivateIdentifier(node.key));\n}\n\nexport interface INormalObjectProperty extends TSESTree.PropertyNonComputedName {\n  key: TSESTree.Identifier;\n}\n\nexport function isNormalObjectProperty(node: TSESTree.Node): node is INormalObjectProperty {\n  return isProperty(node) && (isIdentifier(node.key) || isPrivateIdentifier(node.key));\n}\n\nexport type INormalVariableDeclarator = TSESTree.LetOrConstOrVarDeclaration & {\n  id: TSESTree.Identifier;\n  init: TSESTree.Expression;\n};\n\nexport function isNormalVariableDeclarator(node: TSESTree.Node): node is INormalVariableDeclarator {\n  return isVariableDeclarator(node) && isIdentifier(node.id) && node.init !== null;\n}\n\nexport interface INormalAssignmentPatternWithAnonymousExpressionAssigned extends INormalAssignmentPattern {\n  right: NormalAnonymousExpression;\n}\n\nexport function isNormalAssignmentPatternWithAnonymousExpressionAssigned(\n  node: TSESTree.Node\n): node is INormalAssignmentPatternWithAnonymousExpressionAssigned {\n  return isNormalAssignmentPattern(node) && isNormalAnonymousExpression(node.right);\n}\n\nexport type INormalVariableDeclaratorWithAnonymousExpressionAssigned = INormalVariableDeclarator & {\n  init: NormalAnonymousExpression;\n};\n\nexport function isNormalVariableDeclaratorWithAnonymousExpressionAssigned(\n  node: TSESTree.Node\n): node is INormalVariableDeclaratorWithAnonymousExpressionAssigned {\n  return isNormalVariableDeclarator(node) && isNormalAnonymousExpression(node.init);\n}\n\nexport interface INormalObjectPropertyWithAnonymousExpressionAssigned extends INormalObjectProperty {\n  value: NormalAnonymousExpression;\n}\n\nexport function isNormalObjectPropertyWithAnonymousExpressionAssigned(\n  node: TSESTree.Node\n): node is INormalObjectPropertyWithAnonymousExpressionAssigned {\n  return isNormalObjectProperty(node) && isNormalAnonymousExpression(node.value);\n}\n\nexport interface INormalClassPropertyDefinitionWithAnonymousExpressionAssigned\n  extends INormalClassPropertyDefinition {\n  value: NormalAnonymousExpression;\n}\n\nexport function isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(\n  node: TSESTree.Node\n): node is INormalClassPropertyDefinitionWithAnonymousExpressionAssigned {\n  return isNormalClassPropertyDefinition(node) && isNormalAnonymousExpression(node.value);\n}\n\nexport type NodeWithName =\n  | TSESTree.ClassDeclarationWithName\n  | TSESTree.FunctionDeclarationWithName\n  | IClassExpressionWithName\n  | IFunctionExpressionWithName\n  | INormalVariableDeclaratorWithAnonymousExpressionAssigned\n  | INormalObjectPropertyWithAnonymousExpressionAssigned\n  | INormalClassPropertyDefinitionWithAnonymousExpressionAssigned\n  | INormalAssignmentPatternWithAnonymousExpressionAssigned\n  | INormalMethodDefinition\n  | TSESTree.TSEnumDeclaration\n  | TSESTree.TSInterfaceDeclaration\n  | TSESTree.TSTypeAliasDeclaration;\n\nexport function isNodeWithName(node: TSESTree.Node): node is NodeWithName {\n  return (\n    isClassDeclarationWithName(node) ||\n    isFunctionDeclarationWithName(node) ||\n    isClassExpressionWithName(node) ||\n    isFunctionExpressionWithName(node) ||\n    isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node) ||\n    isNormalObjectPropertyWithAnonymousExpressionAssigned(node) ||\n    isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node) ||\n    isNormalAssignmentPatternWithAnonymousExpressionAssigned(node) ||\n    isNormalMethodDefinition(node) ||\n    isTSEnumDeclaration(node) ||\n    isTSInterfaceDeclaration(node) ||\n    isTSTypeAliasDeclaration(node)\n  );\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-file.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-file.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-file.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,161 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import fs from 'node:fs';
+import { VSCODE_PID_ENV_VAR_NAME } from './constants';
+const IS_RUNNING_IN_VSCODE = process.env[VSCODE_PID_ENV_VAR_NAME] !== undefined;
+const TEN_SECONDS_MS = 10 * 1000;
+const SUPPRESSIONS_JSON_FILENAME = '.eslint-bulk-suppressions.json';
+function throwIfAnythingOtherThanNotExistError(e) {
+    if ((e === null || e === void 0 ? void 0 : e.code) !== 'ENOENT') {
+        // Throw an error if any other error than file not found
+        throw e;
+    }
+}
+const suppressionsJsonByFolderPath = new Map();
+export function getSuppressionsConfigForEslintConfigFolderPath(eslintConfigFolderPath) {
+    const cachedSuppressionsConfig = suppressionsJsonByFolderPath.get(eslintConfigFolderPath);
+    let shouldLoad;
+    let suppressionsConfig;
+    if (cachedSuppressionsConfig) {
+        shouldLoad = IS_RUNNING_IN_VSCODE && cachedSuppressionsConfig.readTime < Date.now() - TEN_SECONDS_MS;
+        suppressionsConfig = cachedSuppressionsConfig.suppressionsConfig;
+    }
+    else {
+        shouldLoad = true;
+    }
+    if (shouldLoad) {
+        const suppressionsPath = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;
+        let rawJsonFile;
+        try {
+            rawJsonFile = fs.readFileSync(suppressionsPath).toString();
+        }
+        catch (e) {
+            throwIfAnythingOtherThanNotExistError(e);
+        }
+        if (!rawJsonFile) {
+            suppressionsConfig = {
+                serializedSuppressions: new Set(),
+                jsonObject: { suppressions: [] },
+                newSerializedSuppressions: new Set(),
+                newJsonObject: { suppressions: [] }
+            };
+        }
+        else {
+            const jsonObject = JSON.parse(rawJsonFile);
+            validateSuppressionsJson(jsonObject);
+            const serializedSuppressions = new Set();
+            for (const suppression of jsonObject.suppressions) {
+                serializedSuppressions.add(serializeSuppression(suppression));
+            }
+            suppressionsConfig = {
+                serializedSuppressions,
+                jsonObject,
+                newSerializedSuppressions: new Set(),
+                newJsonObject: { suppressions: [] }
+            };
+        }
+        suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });
+    }
+    return suppressionsConfig;
+}
+export function getAllBulkSuppressionsConfigsByEslintConfigFolderPath() {
+    const result = [];
+    for (const [eslintConfigFolderPath, { suppressionsConfig }] of suppressionsJsonByFolderPath) {
+        result.push([eslintConfigFolderPath, suppressionsConfig]);
+    }
+    return result;
+}
+export function writeSuppressionsJsonToFile(eslintConfigFolderPath, suppressionsConfig) {
+    suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });
+    const suppressionsPath = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;
+    if (suppressionsConfig.jsonObject.suppressions.length === 0) {
+        deleteFile(suppressionsPath);
+    }
+    else {
+        suppressionsConfig.jsonObject.suppressions.sort(compareSuppressions);
+        fs.writeFileSync(suppressionsPath, JSON.stringify(suppressionsConfig.jsonObject, undefined, 2));
+    }
+}
+export function deleteBulkSuppressionsFileInEslintConfigFolder(eslintConfigFolderPath) {
+    const suppressionsPath = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;
+    deleteFile(suppressionsPath);
+}
+function deleteFile(filePath) {
+    try {
+        fs.unlinkSync(filePath);
+    }
+    catch (e) {
+        throwIfAnythingOtherThanNotExistError(e);
+    }
+}
+export function serializeSuppression({ file, scopeId, rule }) {
+    return `${file}|${scopeId}|${rule}`;
+}
+function compareSuppressions(a, b) {
+    if (a.file < b.file) {
+        return -1;
+    }
+    else if (a.file > b.file) {
+        return 1;
+    }
+    else if (a.scopeId < b.scopeId) {
+        return -1;
+    }
+    else if (a.scopeId > b.scopeId) {
+        return 1;
+    }
+    else if (a.rule < b.rule) {
+        return -1;
+    }
+    else if (a.rule > b.rule) {
+        return 1;
+    }
+    else {
+        return 0;
+    }
+}
+function validateSuppressionsJson(json) {
+    if (typeof json !== 'object') {
+        throw new Error(`Invalid JSON object: ${JSON.stringify(json, null, 2)}`);
+    }
+    if (!json) {
+        throw new Error('JSON object is null.');
+    }
+    const EXPECTED_ROOT_PROPERTY_NAMES = new Set(['suppressions']);
+    for (const propertyName of Object.getOwnPropertyNames(json)) {
+        if (!EXPECTED_ROOT_PROPERTY_NAMES.has(propertyName)) {
+            throw new Error(`Unexpected property name: ${propertyName}`);
+        }
+    }
+    const { suppressions } = json;
+    if (!suppressions) {
+        throw new Error('Missing "suppressions" property.');
+    }
+    if (!Array.isArray(suppressions)) {
+        throw new Error('"suppressions" property is not an array.');
+    }
+    const EXPECTED_SUPPRESSION_PROPERTY_NAMES = new Set(['file', 'scopeId', 'rule']);
+    for (const suppression of suppressions) {
+        if (typeof suppression !== 'object') {
+            throw new Error(`Invalid suppression: ${JSON.stringify(suppression, null, 2)}`);
+        }
+        if (!suppression) {
+            throw new Error(`Suppression is null: ${JSON.stringify(suppression, null, 2)}`);
+        }
+        for (const propertyName of Object.getOwnPropertyNames(suppression)) {
+            if (!EXPECTED_SUPPRESSION_PROPERTY_NAMES.has(propertyName)) {
+                throw new Error(`Unexpected property name: ${propertyName}`);
+            }
+        }
+        for (const propertyName of EXPECTED_SUPPRESSION_PROPERTY_NAMES) {
+            if (!suppression.hasOwnProperty(propertyName)) {
+                throw new Error(`Missing "${propertyName}" property in suppression: ${JSON.stringify(suppression, null, 2)}`);
+            }
+            else if (typeof suppression[propertyName] !== 'string') {
+                throw new Error(`"${propertyName}" property in suppression is not a string: ${JSON.stringify(suppression, null, 2)}`);
+            }
+        }
+    }
+    return true;
+}
+//# sourceMappingURL=bulk-suppressions-file.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-file.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-file.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-file.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"bulk-suppressions-file.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-file.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport { VSCODE_PID_ENV_VAR_NAME } from './constants';\n\nexport interface ISuppression {\n  file: string;\n  scopeId: string;\n  rule: string;\n}\n\nexport interface IBulkSuppressionsConfig {\n  serializedSuppressions: Set<string>;\n  jsonObject: IBulkSuppressionsJson;\n  newSerializedSuppressions: Set<string>;\n  newJsonObject: IBulkSuppressionsJson;\n}\n\nexport interface IBulkSuppressionsJson {\n  suppressions: ISuppression[];\n}\n\nconst IS_RUNNING_IN_VSCODE: boolean = process.env[VSCODE_PID_ENV_VAR_NAME] !== undefined;\nconst TEN_SECONDS_MS: number = 10 * 1000;\nconst SUPPRESSIONS_JSON_FILENAME: string = '.eslint-bulk-suppressions.json';\n\nfunction throwIfAnythingOtherThanNotExistError(e: NodeJS.ErrnoException): void | never {\n  if (e?.code !== 'ENOENT') {\n    // Throw an error if any other error than file not found\n    throw e;\n  }\n}\n\ninterface ICachedBulkSuppressionsConfig {\n  readTime: number;\n  suppressionsConfig: IBulkSuppressionsConfig;\n}\nconst suppressionsJsonByFolderPath: Map<string, ICachedBulkSuppressionsConfig> = new Map();\nexport function getSuppressionsConfigForEslintConfigFolderPath(\n  eslintConfigFolderPath: string\n): IBulkSuppressionsConfig {\n  const cachedSuppressionsConfig: ICachedBulkSuppressionsConfig | undefined =\n    suppressionsJsonByFolderPath.get(eslintConfigFolderPath);\n\n  let shouldLoad: boolean;\n  let suppressionsConfig: IBulkSuppressionsConfig;\n  if (cachedSuppressionsConfig) {\n    shouldLoad = IS_RUNNING_IN_VSCODE && cachedSuppressionsConfig.readTime < Date.now() - TEN_SECONDS_MS;\n    suppressionsConfig = cachedSuppressionsConfig.suppressionsConfig;\n  } else {\n    shouldLoad = true;\n  }\n\n  if (shouldLoad) {\n    const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n    let rawJsonFile: string | undefined;\n    try {\n      rawJsonFile = fs.readFileSync(suppressionsPath).toString();\n    } catch (e) {\n      throwIfAnythingOtherThanNotExistError(e);\n    }\n\n    if (!rawJsonFile) {\n      suppressionsConfig = {\n        serializedSuppressions: new Set(),\n        jsonObject: { suppressions: [] },\n        newSerializedSuppressions: new Set(),\n        newJsonObject: { suppressions: [] }\n      };\n    } else {\n      const jsonObject: IBulkSuppressionsJson = JSON.parse(rawJsonFile);\n      validateSuppressionsJson(jsonObject);\n\n      const serializedSuppressions: Set<string> = new Set();\n      for (const suppression of jsonObject.suppressions) {\n        serializedSuppressions.add(serializeSuppression(suppression));\n      }\n\n      suppressionsConfig = {\n        serializedSuppressions,\n        jsonObject,\n        newSerializedSuppressions: new Set(),\n        newJsonObject: { suppressions: [] }\n      };\n    }\n\n    suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });\n  }\n\n  return suppressionsConfig!;\n}\n\nexport function getAllBulkSuppressionsConfigsByEslintConfigFolderPath(): [string, IBulkSuppressionsConfig][] {\n  const result: [string, IBulkSuppressionsConfig][] = [];\n  for (const [eslintConfigFolderPath, { suppressionsConfig }] of suppressionsJsonByFolderPath) {\n    result.push([eslintConfigFolderPath, suppressionsConfig]);\n  }\n\n  return result;\n}\n\nexport function writeSuppressionsJsonToFile(\n  eslintConfigFolderPath: string,\n  suppressionsConfig: IBulkSuppressionsConfig\n): void {\n  suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });\n  const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n  if (suppressionsConfig.jsonObject.suppressions.length === 0) {\n    deleteFile(suppressionsPath);\n  } else {\n    suppressionsConfig.jsonObject.suppressions.sort(compareSuppressions);\n    fs.writeFileSync(suppressionsPath, JSON.stringify(suppressionsConfig.jsonObject, undefined, 2));\n  }\n}\n\nexport function deleteBulkSuppressionsFileInEslintConfigFolder(eslintConfigFolderPath: string): void {\n  const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n  deleteFile(suppressionsPath);\n}\n\nfunction deleteFile(filePath: string): void {\n  try {\n    fs.unlinkSync(filePath);\n  } catch (e) {\n    throwIfAnythingOtherThanNotExistError(e);\n  }\n}\n\nexport function serializeSuppression({ file, scopeId, rule }: ISuppression): string {\n  return `${file}|${scopeId}|${rule}`;\n}\n\nfunction compareSuppressions(a: ISuppression, b: ISuppression): -1 | 0 | 1 {\n  if (a.file < b.file) {\n    return -1;\n  } else if (a.file > b.file) {\n    return 1;\n  } else if (a.scopeId < b.scopeId) {\n    return -1;\n  } else if (a.scopeId > b.scopeId) {\n    return 1;\n  } else if (a.rule < b.rule) {\n    return -1;\n  } else if (a.rule > b.rule) {\n    return 1;\n  } else {\n    return 0;\n  }\n}\n\nfunction validateSuppressionsJson(json: IBulkSuppressionsJson): json is IBulkSuppressionsJson {\n  if (typeof json !== 'object') {\n    throw new Error(`Invalid JSON object: ${JSON.stringify(json, null, 2)}`);\n  }\n\n  if (!json) {\n    throw new Error('JSON object is null.');\n  }\n\n  const EXPECTED_ROOT_PROPERTY_NAMES: Set<keyof IBulkSuppressionsJson> = new Set(['suppressions']);\n\n  for (const propertyName of Object.getOwnPropertyNames(json)) {\n    if (!EXPECTED_ROOT_PROPERTY_NAMES.has(propertyName as keyof IBulkSuppressionsJson)) {\n      throw new Error(`Unexpected property name: ${propertyName}`);\n    }\n  }\n\n  const { suppressions } = json;\n  if (!suppressions) {\n    throw new Error('Missing \"suppressions\" property.');\n  }\n\n  if (!Array.isArray(suppressions)) {\n    throw new Error('\"suppressions\" property is not an array.');\n  }\n\n  const EXPECTED_SUPPRESSION_PROPERTY_NAMES: Set<keyof ISuppression> = new Set(['file', 'scopeId', 'rule']);\n  for (const suppression of suppressions) {\n    if (typeof suppression !== 'object') {\n      throw new Error(`Invalid suppression: ${JSON.stringify(suppression, null, 2)}`);\n    }\n\n    if (!suppression) {\n      throw new Error(`Suppression is null: ${JSON.stringify(suppression, null, 2)}`);\n    }\n\n    for (const propertyName of Object.getOwnPropertyNames(suppression)) {\n      if (!EXPECTED_SUPPRESSION_PROPERTY_NAMES.has(propertyName as keyof ISuppression)) {\n        throw new Error(`Unexpected property name: ${propertyName}`);\n      }\n    }\n\n    for (const propertyName of EXPECTED_SUPPRESSION_PROPERTY_NAMES) {\n      if (!suppression.hasOwnProperty(propertyName)) {\n        throw new Error(\n          `Missing \"${propertyName}\" property in suppression: ${JSON.stringify(suppression, null, 2)}`\n        );\n      } else if (typeof suppression[propertyName] !== 'string') {\n        throw new Error(\n          `\"${propertyName}\" property in suppression is not a string: ${JSON.stringify(suppression, null, 2)}`\n        );\n      }\n    }\n  }\n\n  return true;\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-patch.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-patch.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-patch.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,204 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import fs from 'node:fs';
+import * as Guards from './ast-guards';
+import { eslintFolder } from '../_patch-base';
+import { ESLINT_BULK_ENABLE_ENV_VAR_NAME, ESLINT_BULK_PRUNE_ENV_VAR_NAME, ESLINT_BULK_SUPPRESS_ENV_VAR_NAME } from './constants';
+import { getSuppressionsConfigForEslintConfigFolderPath, serializeSuppression, writeSuppressionsJsonToFile, getAllBulkSuppressionsConfigsByEslintConfigFolderPath } from './bulk-suppressions-file';
+const ESLINT_CONFIG_FILENAMES = [
+    'eslint.config.js',
+    'eslint.config.cjs',
+    'eslint.config.mjs',
+    '.eslintrc.js',
+    '.eslintrc.cjs'
+    // Several other filenames are allowed, but this patch requires that it be loaded via a JS config file,
+    // so we only need to check for the JS-based filenames
+];
+const SUPPRESSION_SYMBOL = Symbol('suppression');
+const ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE = process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME];
+const SUPPRESS_ALL_RULES = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE === '*';
+const RULES_TO_SUPPRESS = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE
+    ? new Set(ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE.split(','))
+    : undefined;
+function getNodeName(node) {
+    if (Guards.isClassDeclarationWithName(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isFunctionDeclarationWithName(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isClassExpressionWithName(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isFunctionExpressionWithName(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isNormalObjectPropertyWithAnonymousExpressionAssigned(node)) {
+        return node.key.name;
+    }
+    else if (Guards.isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node)) {
+        return node.key.name;
+    }
+    else if (Guards.isNormalAssignmentPatternWithAnonymousExpressionAssigned(node)) {
+        return node.left.name;
+    }
+    else if (Guards.isNormalMethodDefinition(node)) {
+        return node.key.name;
+    }
+    else if (Guards.isTSEnumDeclaration(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isTSInterfaceDeclaration(node)) {
+        return node.id.name;
+    }
+    else if (Guards.isTSTypeAliasDeclaration(node)) {
+        return node.id.name;
+    }
+}
+function calculateScopeId(node) {
+    const scopeIds = [];
+    for (let current = node; current; current = current.parent) {
+        const scopeIdForASTNode = getNodeName(current);
+        if (scopeIdForASTNode !== undefined) {
+            scopeIds.unshift(scopeIdForASTNode);
+        }
+    }
+    if (scopeIds.length === 0) {
+        return '.';
+    }
+    else {
+        return '.' + scopeIds.join('.');
+    }
+}
+const eslintConfigPathByFileOrFolderPath = new Map();
+function findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFilePath) {
+    const cachedFolderPathForFilePath = eslintConfigPathByFileOrFolderPath.get(normalizedFilePath);
+    if (cachedFolderPathForFilePath) {
+        return cachedFolderPathForFilePath;
+    }
+    const normalizedFileFolderPath = normalizedFilePath.substring(0, normalizedFilePath.lastIndexOf('/'));
+    const pathsToCache = [normalizedFilePath];
+    let eslintConfigFolderPath;
+    findEslintConfigFileLoop: for (let currentFolder = normalizedFileFolderPath; currentFolder; // 'something'.substring(0, -1) is ''
+     currentFolder = currentFolder.substring(0, currentFolder.lastIndexOf('/'))) {
+        const cachedEslintrcFolderPath = eslintConfigPathByFileOrFolderPath.get(currentFolder);
+        if (cachedEslintrcFolderPath) {
+            // Need to cache this result into the intermediate paths
+            eslintConfigFolderPath = cachedEslintrcFolderPath;
+            break;
+        }
+        pathsToCache.push(currentFolder);
+        for (const eslintConfigFilename of ESLINT_CONFIG_FILENAMES) {
+            if (fs.existsSync(`${currentFolder}/${eslintConfigFilename}`)) {
+                eslintConfigFolderPath = currentFolder;
+                break findEslintConfigFileLoop;
+            }
+        }
+    }
+    if (eslintConfigFolderPath) {
+        for (const checkedFolder of pathsToCache) {
+            eslintConfigPathByFileOrFolderPath.set(checkedFolder, eslintConfigFolderPath);
+        }
+        return eslintConfigFolderPath;
+    }
+    else {
+        throw new Error(`Cannot locate an ESLint configuration file for ${normalizedFilePath}`);
+    }
+}
+// One-line insert into the ruleContext report method to prematurely exit if the ESLint problem has been suppressed
+export function shouldBulkSuppress(params) {
+    // Use this ENV variable to turn off eslint-bulk-suppressions functionality, default behavior is on
+    if (process.env[ESLINT_BULK_ENABLE_ENV_VAR_NAME] === 'false') {
+        return false;
+    }
+    const { filename: fileAbsolutePath, currentNode, ruleId: rule, problem } = params;
+    const normalizedFileAbsolutePath = fileAbsolutePath.replace(/\\/g, '/');
+    const eslintConfigDirectory = findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFileAbsolutePath);
+    const fileRelativePath = normalizedFileAbsolutePath.substring(eslintConfigDirectory.length + 1);
+    const scopeId = calculateScopeId(currentNode);
+    const suppression = { file: fileRelativePath, scopeId, rule };
+    const config = getSuppressionsConfigForEslintConfigFolderPath(eslintConfigDirectory);
+    const serializedSuppression = serializeSuppression(suppression);
+    const currentNodeIsSuppressed = config.serializedSuppressions.has(serializedSuppression);
+    if (currentNodeIsSuppressed || SUPPRESS_ALL_RULES || (RULES_TO_SUPPRESS === null || RULES_TO_SUPPRESS === void 0 ? void 0 : RULES_TO_SUPPRESS.has(suppression.rule))) {
+        problem[SUPPRESSION_SYMBOL] = {
+            suppression,
+            serializedSuppression,
+            config
+        };
+    }
+    return process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] !== '1' && currentNodeIsSuppressed;
+}
+export function prune() {
+    for (const [eslintConfigFolderPath, suppressionsConfig] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {
+        if (suppressionsConfig) {
+            const { newSerializedSuppressions, newJsonObject } = suppressionsConfig;
+            const newSuppressionsConfig = {
+                serializedSuppressions: newSerializedSuppressions,
+                jsonObject: newJsonObject,
+                newSerializedSuppressions: new Set(),
+                newJsonObject: { suppressions: [] }
+            };
+            writeSuppressionsJsonToFile(eslintConfigFolderPath, newSuppressionsConfig);
+        }
+    }
+}
+export function write() {
+    for (const [eslintrcFolderPath, suppressionsConfig] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {
+        if (suppressionsConfig) {
+            writeSuppressionsJsonToFile(eslintrcFolderPath, suppressionsConfig);
+        }
+    }
+}
+// utility function for linter-patch.js to make require statements that use relative paths in linter.js work in linter-patch.js
+export function requireFromPathToLinterJS(importPath) {
+    if (!eslintFolder) {
+        return require(importPath);
+    }
+    const pathToLinterFolder = `${eslintFolder}/lib/linter`;
+    const moduleAbsolutePath = require.resolve(importPath, { paths: [pathToLinterFolder] });
+    return require(moduleAbsolutePath);
+}
+export function patchClass(originalClass, patchedClass) {
+    // Get all the property names of the patched class prototype
+    const patchedProperties = Object.getOwnPropertyNames(patchedClass.prototype);
+    // Loop through all the properties
+    for (const prop of patchedProperties) {
+        // Override the property in the original class
+        originalClass.prototype[prop] = patchedClass.prototype[prop];
+    }
+    // Handle getters and setters
+    for (const [prop, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(patchedClass.prototype))) {
+        if (descriptor.get || descriptor.set) {
+            Object.defineProperty(originalClass.prototype, prop, descriptor);
+        }
+    }
+}
+/**
+ * This returns a wrapped version of the "verify" function from ESLint's Linter class
+ * that postprocesses rule violations that weren't suppressed by comments. This postprocessing
+ * records suppressions that weren't otherwise suppressed by comments to be used
+ * by the "suppress" and "prune" commands.
+ */
+export function extendVerifyFunction(originalFn) {
+    return function (...args) {
+        const problems = originalFn.apply(this, args);
+        if (problems) {
+            for (const problem of problems) {
+                if (problem[SUPPRESSION_SYMBOL]) {
+                    const { serializedSuppression, suppression, config: { newSerializedSuppressions, jsonObject: { suppressions }, newJsonObject: { suppressions: newSuppressions } } } = problem[SUPPRESSION_SYMBOL];
+                    if (!newSerializedSuppressions.has(serializedSuppression)) {
+                        newSerializedSuppressions.add(serializedSuppression);
+                        newSuppressions.push(suppression);
+                        suppressions.push(suppression);
+                    }
+                }
+            }
+        }
+        return problems;
+    };
+}
+//# sourceMappingURL=bulk-suppressions-patch.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-patch.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-patch.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/bulk-suppressions-patch.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"bulk-suppressions-patch.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-patch.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport type { TSESTree } from '@typescript-eslint/types';\n\nimport * as Guards from './ast-guards';\nimport { eslintFolder } from '../_patch-base';\nimport {\n  ESLINT_BULK_ENABLE_ENV_VAR_NAME,\n  ESLINT_BULK_PRUNE_ENV_VAR_NAME,\n  ESLINT_BULK_SUPPRESS_ENV_VAR_NAME\n} from './constants';\nimport {\n  getSuppressionsConfigForEslintConfigFolderPath,\n  serializeSuppression,\n  type IBulkSuppressionsConfig,\n  type ISuppression,\n  writeSuppressionsJsonToFile,\n  getAllBulkSuppressionsConfigsByEslintConfigFolderPath\n} from './bulk-suppressions-file';\n\nconst ESLINT_CONFIG_FILENAMES: string[] = [\n  'eslint.config.js',\n  'eslint.config.cjs',\n  'eslint.config.mjs',\n  '.eslintrc.js',\n  '.eslintrc.cjs'\n  // Several other filenames are allowed, but this patch requires that it be loaded via a JS config file,\n  // so we only need to check for the JS-based filenames\n];\nconst SUPPRESSION_SYMBOL: unique symbol = Symbol('suppression');\nconst ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE: string | undefined = process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME];\nconst SUPPRESS_ALL_RULES: boolean = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE === '*';\nconst RULES_TO_SUPPRESS: Set<string> | undefined = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE\n  ? new Set(ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE.split(','))\n  : undefined;\n\ninterface IProblem {\n  [SUPPRESSION_SYMBOL]?: {\n    config: IBulkSuppressionsConfig;\n    suppression: ISuppression;\n    serializedSuppression: string;\n  };\n}\n\nfunction getNodeName(node: TSESTree.Node): string | undefined {\n  if (Guards.isClassDeclarationWithName(node)) {\n    return node.id.name;\n  } else if (Guards.isFunctionDeclarationWithName(node)) {\n    return node.id.name;\n  } else if (Guards.isClassExpressionWithName(node)) {\n    return node.id.name;\n  } else if (Guards.isFunctionExpressionWithName(node)) {\n    return node.id.name;\n  } else if (Guards.isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node)) {\n    return node.id.name;\n  } else if (Guards.isNormalObjectPropertyWithAnonymousExpressionAssigned(node)) {\n    return node.key.name;\n  } else if (Guards.isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node)) {\n    return node.key.name;\n  } else if (Guards.isNormalAssignmentPatternWithAnonymousExpressionAssigned(node)) {\n    return node.left.name;\n  } else if (Guards.isNormalMethodDefinition(node)) {\n    return node.key.name;\n  } else if (Guards.isTSEnumDeclaration(node)) {\n    return node.id.name;\n  } else if (Guards.isTSInterfaceDeclaration(node)) {\n    return node.id.name;\n  } else if (Guards.isTSTypeAliasDeclaration(node)) {\n    return node.id.name;\n  }\n}\n\ntype NodeWithParent = TSESTree.Node & { parent?: TSESTree.Node };\n\nfunction calculateScopeId(node: NodeWithParent | undefined): string {\n  const scopeIds: string[] = [];\n  for (let current: NodeWithParent | undefined = node; current; current = current.parent) {\n    const scopeIdForASTNode: string | undefined = getNodeName(current);\n    if (scopeIdForASTNode !== undefined) {\n      scopeIds.unshift(scopeIdForASTNode);\n    }\n  }\n\n  if (scopeIds.length === 0) {\n    return '.';\n  } else {\n    return '.' + scopeIds.join('.');\n  }\n}\n\nconst eslintConfigPathByFileOrFolderPath: Map<string, string> = new Map();\n\nfunction findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFilePath: string): string {\n  const cachedFolderPathForFilePath: string | undefined =\n    eslintConfigPathByFileOrFolderPath.get(normalizedFilePath);\n  if (cachedFolderPathForFilePath) {\n    return cachedFolderPathForFilePath;\n  }\n  const normalizedFileFolderPath: string = normalizedFilePath.substring(\n    0,\n    normalizedFilePath.lastIndexOf('/')\n  );\n\n  const pathsToCache: string[] = [normalizedFilePath];\n  let eslintConfigFolderPath: string | undefined;\n  findEslintConfigFileLoop: for (\n    let currentFolder: string = normalizedFileFolderPath;\n    currentFolder; // 'something'.substring(0, -1) is ''\n    currentFolder = currentFolder.substring(0, currentFolder.lastIndexOf('/'))\n  ) {\n    const cachedEslintrcFolderPath: string | undefined =\n      eslintConfigPathByFileOrFolderPath.get(currentFolder);\n    if (cachedEslintrcFolderPath) {\n      // Need to cache this result into the intermediate paths\n      eslintConfigFolderPath = cachedEslintrcFolderPath;\n      break;\n    }\n\n    pathsToCache.push(currentFolder);\n    for (const eslintConfigFilename of ESLINT_CONFIG_FILENAMES) {\n      if (fs.existsSync(`${currentFolder}/${eslintConfigFilename}`)) {\n        eslintConfigFolderPath = currentFolder;\n        break findEslintConfigFileLoop;\n      }\n    }\n  }\n\n  if (eslintConfigFolderPath) {\n    for (const checkedFolder of pathsToCache) {\n      eslintConfigPathByFileOrFolderPath.set(checkedFolder, eslintConfigFolderPath);\n    }\n\n    return eslintConfigFolderPath;\n  } else {\n    throw new Error(`Cannot locate an ESLint configuration file for ${normalizedFilePath}`);\n  }\n}\n\n// One-line insert into the ruleContext report method to prematurely exit if the ESLint problem has been suppressed\nexport function shouldBulkSuppress(params: {\n  filename: string;\n  currentNode: TSESTree.Node;\n  ruleId: string;\n  problem: IProblem;\n}): boolean {\n  // Use this ENV variable to turn off eslint-bulk-suppressions functionality, default behavior is on\n  if (process.env[ESLINT_BULK_ENABLE_ENV_VAR_NAME] === 'false') {\n    return false;\n  }\n\n  const { filename: fileAbsolutePath, currentNode, ruleId: rule, problem } = params;\n  const normalizedFileAbsolutePath: string = fileAbsolutePath.replace(/\\\\/g, '/');\n  const eslintConfigDirectory: string =\n    findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFileAbsolutePath);\n  const fileRelativePath: string = normalizedFileAbsolutePath.substring(eslintConfigDirectory.length + 1);\n  const scopeId: string = calculateScopeId(currentNode);\n  const suppression: ISuppression = { file: fileRelativePath, scopeId, rule };\n\n  const config: IBulkSuppressionsConfig =\n    getSuppressionsConfigForEslintConfigFolderPath(eslintConfigDirectory);\n  const serializedSuppression: string = serializeSuppression(suppression);\n  const currentNodeIsSuppressed: boolean = config.serializedSuppressions.has(serializedSuppression);\n\n  if (currentNodeIsSuppressed || SUPPRESS_ALL_RULES || RULES_TO_SUPPRESS?.has(suppression.rule)) {\n    problem[SUPPRESSION_SYMBOL] = {\n      suppression,\n      serializedSuppression,\n      config\n    };\n  }\n\n  return process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] !== '1' && currentNodeIsSuppressed;\n}\n\nexport function prune(): void {\n  for (const [\n    eslintConfigFolderPath,\n    suppressionsConfig\n  ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {\n    if (suppressionsConfig) {\n      const { newSerializedSuppressions, newJsonObject } = suppressionsConfig;\n      const newSuppressionsConfig: IBulkSuppressionsConfig = {\n        serializedSuppressions: newSerializedSuppressions,\n        jsonObject: newJsonObject,\n        newSerializedSuppressions: new Set(),\n        newJsonObject: { suppressions: [] }\n      };\n\n      writeSuppressionsJsonToFile(eslintConfigFolderPath, newSuppressionsConfig);\n    }\n  }\n}\n\nexport function write(): void {\n  for (const [\n    eslintrcFolderPath,\n    suppressionsConfig\n  ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {\n    if (suppressionsConfig) {\n      writeSuppressionsJsonToFile(eslintrcFolderPath, suppressionsConfig);\n    }\n  }\n}\n\n// utility function for linter-patch.js to make require statements that use relative paths in linter.js work in linter-patch.js\nexport function requireFromPathToLinterJS(\n  importPath: string\n): import('eslint-9').Linter | import('eslint-8').Linter {\n  if (!eslintFolder) {\n    return require(importPath);\n  }\n\n  const pathToLinterFolder: string = `${eslintFolder}/lib/linter`;\n  const moduleAbsolutePath: string = require.resolve(importPath, { paths: [pathToLinterFolder] });\n  return require(moduleAbsolutePath);\n}\n\nexport function patchClass<T, U extends T>(originalClass: new () => T, patchedClass: new () => U): void {\n  // Get all the property names of the patched class prototype\n  const patchedProperties: string[] = Object.getOwnPropertyNames(patchedClass.prototype);\n\n  // Loop through all the properties\n  for (const prop of patchedProperties) {\n    // Override the property in the original class\n    originalClass.prototype[prop] = patchedClass.prototype[prop];\n  }\n\n  // Handle getters and setters\n  for (const [prop, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(patchedClass.prototype))) {\n    if (descriptor.get || descriptor.set) {\n      Object.defineProperty(originalClass.prototype, prop, descriptor);\n    }\n  }\n}\n\n/**\n * This returns a wrapped version of the \"verify\" function from ESLint's Linter class\n * that postprocesses rule violations that weren't suppressed by comments. This postprocessing\n * records suppressions that weren't otherwise suppressed by comments to be used\n * by the \"suppress\" and \"prune\" commands.\n */\nexport function extendVerifyFunction(\n  originalFn: (this: unknown, ...args: unknown[]) => IProblem[] | undefined\n): (this: unknown, ...args: unknown[]) => IProblem[] | undefined {\n  return function (this: unknown, ...args: unknown[]): IProblem[] | undefined {\n    const problems: IProblem[] | undefined = originalFn.apply(this, args);\n    if (problems) {\n      for (const problem of problems) {\n        if (problem[SUPPRESSION_SYMBOL]) {\n          const {\n            serializedSuppression,\n            suppression,\n            config: {\n              newSerializedSuppressions,\n              jsonObject: { suppressions },\n              newJsonObject: { suppressions: newSuppressions }\n            }\n          } = problem[SUPPRESSION_SYMBOL];\n          if (!newSerializedSuppressions.has(serializedSuppression)) {\n            newSerializedSuppressions.add(serializedSuppression);\n            newSuppressions.push(suppression);\n            suppressions.push(suppression);\n          }\n        }\n      }\n    }\n\n    return problems;\n  };\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/prune.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/prune.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/prune.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,54 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import fs from 'node:fs';
+import { printPruneHelp } from './utils/print-help';
+import { runEslintAsync } from './runEslint';
+import { ESLINT_BULK_PRUNE_ENV_VAR_NAME } from '../constants';
+import { deleteBulkSuppressionsFileInEslintConfigFolder, getSuppressionsConfigForEslintConfigFolderPath } from '../bulk-suppressions-file';
+export async function pruneAsync() {
+    const args = process.argv.slice(3);
+    if (args.includes('--help') || args.includes('-h')) {
+        printPruneHelp();
+        process.exit(0);
+    }
+    if (args.length > 0) {
+        throw new Error(`@rushstack/eslint-bulk: Unknown arguments: ${args.join(' ')}`);
+    }
+    const normalizedCwd = process.cwd().replace(/\\/g, '/');
+    const allFiles = await getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd);
+    if (allFiles.length > 0) {
+        process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] = '1';
+        console.log(`Pruning suppressions for ${allFiles.length} files...`);
+        await runEslintAsync(allFiles, 'prune');
+    }
+    else {
+        console.log('No files with existing suppressions found.');
+        deleteBulkSuppressionsFileInEslintConfigFolder(normalizedCwd);
+    }
+}
+async function getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd) {
+    const { jsonObject: bulkSuppressionsConfigJson } = getSuppressionsConfigForEslintConfigFolderPath(normalizedCwd);
+    const allFiles = new Set();
+    for (const { file: filePath } of bulkSuppressionsConfigJson.suppressions) {
+        allFiles.add(filePath);
+    }
+    const allFilesArray = Array.from(allFiles);
+    const allExistingFiles = [];
+    // TODO: limit parallelism here with something similar to `Async.forEachAsync` from `node-core-library`.
+    await Promise.all(allFilesArray.map(async (filePath) => {
+        try {
+            await fs.promises.access(filePath, fs.constants.F_OK);
+            allExistingFiles.push(filePath);
+        }
+        catch (_a) {
+            // Doesn't exist - ignore
+        }
+    }));
+    console.log(`Found ${allExistingFiles.length} files with existing suppressions.`);
+    const deletedCount = allFilesArray.length - allExistingFiles.length;
+    if (deletedCount > 0) {
+        console.log(`${deletedCount} files with suppressions were deleted.`);
+    }
+    return allExistingFiles;
+}
+//# sourceMappingURL=prune.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/prune.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/prune.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/prune.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/prune.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport { printPruneHelp } from './utils/print-help';\nimport { runEslintAsync } from './runEslint';\nimport { ESLINT_BULK_PRUNE_ENV_VAR_NAME } from '../constants';\nimport {\n  deleteBulkSuppressionsFileInEslintConfigFolder,\n  getSuppressionsConfigForEslintConfigFolderPath\n} from '../bulk-suppressions-file';\n\nexport async function pruneAsync(): Promise<void> {\n  const args: string[] = process.argv.slice(3);\n\n  if (args.includes('--help') || args.includes('-h')) {\n    printPruneHelp();\n    process.exit(0);\n  }\n\n  if (args.length > 0) {\n    throw new Error(`@rushstack/eslint-bulk: Unknown arguments: ${args.join(' ')}`);\n  }\n\n  const normalizedCwd: string = process.cwd().replace(/\\\\/g, '/');\n  const allFiles: string[] = await getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd);\n  if (allFiles.length > 0) {\n    process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] = '1';\n    console.log(`Pruning suppressions for ${allFiles.length} files...`);\n    await runEslintAsync(allFiles, 'prune');\n  } else {\n    console.log('No files with existing suppressions found.');\n    deleteBulkSuppressionsFileInEslintConfigFolder(normalizedCwd);\n  }\n}\n\nasync function getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd: string): Promise<string[]> {\n  const { jsonObject: bulkSuppressionsConfigJson } =\n    getSuppressionsConfigForEslintConfigFolderPath(normalizedCwd);\n  const allFiles: Set<string> = new Set();\n  for (const { file: filePath } of bulkSuppressionsConfigJson.suppressions) {\n    allFiles.add(filePath);\n  }\n\n  const allFilesArray: string[] = Array.from(allFiles);\n\n  const allExistingFiles: string[] = [];\n  // TODO: limit parallelism here with something similar to `Async.forEachAsync` from `node-core-library`.\n  await Promise.all(\n    allFilesArray.map(async (filePath: string) => {\n      try {\n        await fs.promises.access(filePath, fs.constants.F_OK);\n        allExistingFiles.push(filePath);\n      } catch {\n        // Doesn't exist - ignore\n      }\n    })\n  );\n\n  console.log(`Found ${allExistingFiles.length} files with existing suppressions.`);\n  const deletedCount: number = allFilesArray.length - allExistingFiles.length;\n  if (deletedCount > 0) {\n    console.log(`${deletedCount} files with suppressions were deleted.`);\n  }\n\n  return allExistingFiles;\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/runEslint.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/runEslint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/runEslint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import { getEslintPathAndVersion } from './utils/get-eslint-cli';
+export async function runEslintAsync(files, mode) {
+    const cwd = process.cwd();
+    const [eslintPath, eslintVersion] = getEslintPathAndVersion(cwd);
+    const { ESLint } = require(eslintPath);
+    let eslint;
+    const majorVersion = parseInt(eslintVersion, 10);
+    if (majorVersion < 9) {
+        eslint = new ESLint({ cwd, useEslintrc: true });
+    }
+    else {
+        eslint = new ESLint({ cwd });
+    }
+    let results;
+    try {
+        results = await eslint.lintFiles(files);
+    }
+    catch (e) {
+        throw new Error(`@rushstack/eslint-bulk execution error: ${e.message}`);
+    }
+    const { write, prune } = await import('../bulk-suppressions-patch');
+    switch (mode) {
+        case 'suppress': {
+            await write();
+            break;
+        }
+        case 'prune': {
+            await prune();
+            break;
+        }
+    }
+    if (results.length > 0) {
+        const stylishFormatter = await eslint.loadFormatter();
+        // eslint-disable-next-line @typescript-eslint/no-explicit-any
+        const formattedResults = await Promise.resolve(stylishFormatter.format(results));
+        console.log(formattedResults);
+    }
+    console.log('@rushstack/eslint-bulk: Successfully pruned unused suppressions in all .eslint-bulk-suppressions.json ' +
+        `files under directory ${cwd}`);
+}
+//# sourceMappingURL=runEslint.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/runEslint.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/runEslint.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/runEslint.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"runEslint.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/runEslint.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAK3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAe,EAAE,IAA0B;IAC9E,MAAM,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,EAAE,MAAM,EAAE,GAA0D,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9F,IAAI,MAA+B,CAAC;IACpC,MAAM,YAAY,GAAW,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,OAA0D,CAAC;IAC/D,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAgD,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QACnG,8DAA8D;QAC9D,MAAM,gBAAgB,GAAW,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAc,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,CACT,wGAAwG;QACtG,yBAAyB,GAAG,EAAE,CACjC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { ESLint as TEslintLegacy } from 'eslint-8';\nimport type { ESLint as TEslint } from 'eslint-9';\n\nimport { getEslintPathAndVersion } from './utils/get-eslint-cli';\n\nexport async function runEslintAsync(files: string[], mode: 'suppress' | 'prune'): Promise<void> {\n  const cwd: string = process.cwd();\n  const [eslintPath, eslintVersion] = getEslintPathAndVersion(cwd);\n  const { ESLint }: typeof import('eslint-9') | typeof import('eslint-8') = require(eslintPath);\n\n  let eslint: TEslint | TEslintLegacy;\n  const majorVersion: number = parseInt(eslintVersion, 10);\n  if (majorVersion < 9) {\n    eslint = new ESLint({ cwd, useEslintrc: true });\n  } else {\n    eslint = new ESLint({ cwd });\n  }\n\n  let results: (TEslint.LintResult | TEslintLegacy.LintResult)[];\n  try {\n    results = await eslint.lintFiles(files);\n  } catch (e) {\n    throw new Error(`@rushstack/eslint-bulk execution error: ${e.message}`);\n  }\n\n  const { write, prune } = await import('../bulk-suppressions-patch');\n  switch (mode) {\n    case 'suppress': {\n      await write();\n      break;\n    }\n\n    case 'prune': {\n      await prune();\n      break;\n    }\n  }\n\n  if (results.length > 0) {\n    const stylishFormatter: TEslint.Formatter | TEslintLegacy.Formatter = await eslint.loadFormatter();\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const formattedResults: string = await Promise.resolve(stylishFormatter.format(results as any));\n    console.log(formattedResults);\n  }\n\n  console.log(\n    '@rushstack/eslint-bulk: Successfully pruned unused suppressions in all .eslint-bulk-suppressions.json ' +\n      `files under directory ${cwd}`\n  );\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/start.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/start.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/start.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,42 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import { pruneAsync } from './prune';
+import { suppressAsync } from './suppress';
+import { isCorrectCwd } from './utils/is-correct-cwd';
+import { printHelp } from './utils/print-help';
+if (process.argv.includes('-h') || process.argv.includes('-H') || process.argv.includes('--help')) {
+    printHelp();
+    process.exit(0);
+}
+if (process.argv.length < 3) {
+    printHelp();
+    process.exit(1);
+}
+if (!isCorrectCwd(process.cwd())) {
+    console.error('@rushstack/eslint-bulk: Please call this command from the directory that contains .eslintrc.js or .eslintrc.cjs');
+    process.exit(1);
+}
+const subcommand = process.argv[2];
+let processPromise;
+switch (subcommand) {
+    case 'suppress': {
+        processPromise = suppressAsync();
+        break;
+    }
+    case 'prune': {
+        processPromise = pruneAsync();
+        break;
+    }
+    default: {
+        console.error('@rushstack/eslint-bulk: Unknown subcommand: ' + subcommand);
+        process.exit(1);
+    }
+}
+processPromise.catch((e) => {
+    if (e instanceof Error) {
+        console.error(e.message);
+        process.exit(1);
+    }
+    throw e;
+});
+//# sourceMappingURL=start.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/start.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/start.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/start.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/start.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClG,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IACjC,OAAO,CAAC,KAAK,CACX,iHAAiH,CAClH,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,GAAW,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,cAA6B,CAAC;AAClC,QAAQ,UAAU,EAAE,CAAC;IACnB,KAAK,UAAU,CAAC,CAAC,CAAC;QAChB,cAAc,GAAG,aAAa,EAAE,CAAC;QACjC,MAAM;IACR,CAAC;IAED,KAAK,OAAO,CAAC,CAAC,CAAC;QACb,cAAc,GAAG,UAAU,EAAE,CAAC;QAC9B,MAAM;IACR,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,8CAA8C,GAAG,UAAU,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACzB,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,CAAC;AACV,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { pruneAsync } from './prune';\nimport { suppressAsync } from './suppress';\nimport { isCorrectCwd } from './utils/is-correct-cwd';\nimport { printHelp } from './utils/print-help';\n\nif (process.argv.includes('-h') || process.argv.includes('-H') || process.argv.includes('--help')) {\n  printHelp();\n  process.exit(0);\n}\n\nif (process.argv.length < 3) {\n  printHelp();\n  process.exit(1);\n}\n\nif (!isCorrectCwd(process.cwd())) {\n  console.error(\n    '@rushstack/eslint-bulk: Please call this command from the directory that contains .eslintrc.js or .eslintrc.cjs'\n  );\n  process.exit(1);\n}\n\nconst subcommand: string = process.argv[2];\nlet processPromise: Promise<void>;\nswitch (subcommand) {\n  case 'suppress': {\n    processPromise = suppressAsync();\n    break;\n  }\n\n  case 'prune': {\n    processPromise = pruneAsync();\n    break;\n  }\n\n  default: {\n    console.error('@rushstack/eslint-bulk: Unknown subcommand: ' + subcommand);\n    process.exit(1);\n  }\n}\n\nprocessPromise.catch((e) => {\n  if (e instanceof Error) {\n    console.error(e.message);\n    process.exit(1);\n  }\n\n  throw e;\n});\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/suppress.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/suppress.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/suppress.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,60 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import { printSuppressHelp } from './utils/print-help';
+import { runEslintAsync } from './runEslint';
+import { ESLINT_BULK_SUPPRESS_ENV_VAR_NAME } from '../constants';
+export async function suppressAsync() {
+    const args = process.argv.slice(3);
+    if (args.includes('--help') || args.includes('-h')) {
+        printSuppressHelp();
+        process.exit(0);
+    }
+    // Use reduce to create an object with all the parsed arguments
+    const parsedArgs = args.reduce((acc, arg, index, arr) => {
+        if (arg === '--rule') {
+            // continue because next arg should be the rule
+        }
+        else if (index > 0 && arr[index - 1] === '--rule' && arr[index + 1]) {
+            acc.rules.push(arg);
+        }
+        else if (arg === '--all') {
+            acc.all = true;
+        }
+        else if (arg.startsWith('--')) {
+            throw new Error(`@rushstack/eslint-bulk: Unknown option: ${arg}`);
+        }
+        else {
+            acc.files.push(arg);
+        }
+        return acc;
+    }, { rules: [], all: false, files: [] });
+    if (parsedArgs.files.length === 0) {
+        throw new Error('@rushstack/eslint-bulk: Files argument is required. Use glob patterns to specify files or use ' +
+            '`.` to suppress all files for the specified rules.');
+    }
+    if (parsedArgs.rules.length === 0 && !parsedArgs.all) {
+        throw new Error('@rushstack/eslint-bulk: Please specify at least one rule to suppress. Use --all to suppress all rules.');
+    }
+    // Find the index of the last argument that starts with '--'
+    const lastOptionIndex = args
+        .map((arg, i) => (arg.startsWith('--') ? i : -1))
+        .reduce((lastIndex, currentIndex) => Math.max(lastIndex, currentIndex), -1);
+    // Check if options come before files
+    if (parsedArgs.files.some((file) => args.indexOf(file) < lastOptionIndex)) {
+        throw new Error('@rushstack/eslint-bulk: Unable to parse command line arguments. All options should come before files argument.');
+    }
+    if (parsedArgs.all) {
+        process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME] = '*';
+    }
+    else if (parsedArgs.rules.length > 0) {
+        process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME] = parsedArgs.rules.join(',');
+    }
+    await runEslintAsync(parsedArgs.files, 'suppress');
+    if (parsedArgs.all) {
+        console.log(`@rushstack/eslint-bulk: Successfully suppressed all rules for file(s) ${parsedArgs.files}`);
+    }
+    else if (parsedArgs.rules.length > 0) {
+        console.log(`@rushstack/eslint-bulk: Successfully suppressed rules ${parsedArgs.rules} for file(s) ${parsedArgs.files}`);
+    }
+}
+//# sourceMappingURL=suppress.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/suppress.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/suppress.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/suppress.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"suppress.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/suppress.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { printSuppressHelp } from './utils/print-help';\nimport { runEslintAsync } from './runEslint';\nimport { ESLINT_BULK_SUPPRESS_ENV_VAR_NAME } from '../constants';\n\ninterface IParsedArgs {\n  rules: string[];\n  all: boolean;\n  files: string[];\n}\n\nexport async function suppressAsync(): Promise<void> {\n  const args: string[] = process.argv.slice(3);\n\n  if (args.includes('--help') || args.includes('-h')) {\n    printSuppressHelp();\n    process.exit(0);\n  }\n\n  // Use reduce to create an object with all the parsed arguments\n  const parsedArgs: IParsedArgs = args.reduce<{\n    rules: string[];\n    all: boolean;\n    files: string[];\n  }>(\n    (acc, arg, index, arr) => {\n      if (arg === '--rule') {\n        // continue because next arg should be the rule\n      } else if (index > 0 && arr[index - 1] === '--rule' && arr[index + 1]) {\n        acc.rules.push(arg);\n      } else if (arg === '--all') {\n        acc.all = true;\n      } else if (arg.startsWith('--')) {\n        throw new Error(`@rushstack/eslint-bulk: Unknown option: ${arg}`);\n      } else {\n        acc.files.push(arg);\n      }\n      return acc;\n    },\n    { rules: [], all: false, files: [] }\n  );\n\n  if (parsedArgs.files.length === 0) {\n    throw new Error(\n      '@rushstack/eslint-bulk: Files argument is required. Use glob patterns to specify files or use ' +\n        '`.` to suppress all files for the specified rules.'\n    );\n  }\n\n  if (parsedArgs.rules.length === 0 && !parsedArgs.all) {\n    throw new Error(\n      '@rushstack/eslint-bulk: Please specify at least one rule to suppress. Use --all to suppress all rules.'\n    );\n  }\n\n  // Find the index of the last argument that starts with '--'\n  const lastOptionIndex: number = args\n    .map((arg, i) => (arg.startsWith('--') ? i : -1))\n    .reduce((lastIndex, currentIndex) => Math.max(lastIndex, currentIndex), -1);\n\n  // Check if options come before files\n  if (parsedArgs.files.some((file) => args.indexOf(file) < lastOptionIndex)) {\n    throw new Error(\n      '@rushstack/eslint-bulk: Unable to parse command line arguments. All options should come before files argument.'\n    );\n  }\n\n  if (parsedArgs.all) {\n    process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME] = '*';\n  } else if (parsedArgs.rules.length > 0) {\n    process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME] = parsedArgs.rules.join(',');\n  }\n\n  await runEslintAsync(parsedArgs.files, 'suppress');\n\n  if (parsedArgs.all) {\n    console.log(`@rushstack/eslint-bulk: Successfully suppressed all rules for file(s) ${parsedArgs.files}`);\n  } else if (parsedArgs.rules.length > 0) {\n    console.log(\n      `@rushstack/eslint-bulk: Successfully suppressed rules ${parsedArgs.rules} for file(s) ${parsedArgs.files}`\n    );\n  }\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,52 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import path from 'node:path';
+import { BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME } from '../../constants';
+// When this list is updated, update the `eslint-bulk-suppressions-newest-test`
+// and/or the `eslint-bulk-suppressions-newest-test` projects' eslint dependencies.
+const TESTED_VERSIONS = new Set([
+    '8.6.0',
+    '8.7.0',
+    '8.21.0',
+    '8.22.0',
+    '8.23.0',
+    '8.23.1',
+    '8.57.0',
+    '9.25.1',
+    '9.37.0'
+]);
+export function getEslintPathAndVersion(packagePath) {
+    // Try to find a local ESLint installation, the one that should be listed as a dev dependency in package.json
+    // and installed in node_modules
+    try {
+        const localEslintApiPath = require.resolve(BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME, {
+            paths: [packagePath]
+        });
+        const localEslintPath = path.dirname(path.dirname(localEslintApiPath));
+        const { version: localEslintVersion } = require(`${localEslintPath}/package.json`);
+        if (!TESTED_VERSIONS.has(localEslintVersion)) {
+            console.warn('@rushstack/eslint-bulk: Be careful, the installed ESLint version has not been tested with eslint-bulk.');
+        }
+        return [localEslintApiPath, localEslintVersion];
+    }
+    catch (e1) {
+        try {
+            const { dependencies, devDependencies } = require(`${packagePath}/package.json`);
+            if (devDependencies === null || devDependencies === void 0 ? void 0 : devDependencies.eslint) {
+                throw new Error('@rushstack/eslint-bulk: eslint is specified as a dev dependency in package.json, ' +
+                    'but eslint-bulk cannot find it in node_modules.');
+            }
+            else if (dependencies === null || dependencies === void 0 ? void 0 : dependencies.eslint) {
+                throw new Error('@rushstack/eslint-bulk: eslint is specified as a dependency in package.json, ' +
+                    'but eslint-bulk cannot find it in node_modules.');
+            }
+            else {
+                throw new Error('@rushstack/eslint-bulk: eslint is not specified as a dependency in package.json.');
+            }
+        }
+        catch (e2) {
+            throw new Error("@rushstack/eslint-bulk: This command must be run in the same folder as a project's package.json file.");
+        }
+    }
+}
+//# sourceMappingURL=get-eslint-cli.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/get-eslint-cli.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"get-eslint-cli.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,yCAAyC,EAAE,MAAM,iBAAiB,CAAC;AAE5E,+EAA+E;AAC/E,mFAAmF;AACnF,MAAM,eAAe,GAAgB,IAAI,GAAG,CAAC;IAC3C,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,6GAA6G;IAC7G,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAW,OAAO,CAAC,OAAO,CAAC,yCAAyC,EAAE;YAC5F,KAAK,EAAE,CAAC,WAAW,CAAC;SACrB,CAAC,CAAC;QACH,MAAM,eAAe,GAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC/E,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,eAAe,eAAe,CAAC,CAAC;QAEnF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CACV,wGAAwG,CACzG,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,EACJ,YAAY,EACZ,eAAe,EAChB,GAGG,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;YAE3C,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,mFAAmF;oBACjF,iDAAiD,CACpD,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,+EAA+E;oBAC7E,iDAAiD,CACpD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport path from 'node:path';\n\nimport { BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME } from '../../constants';\n\n// When this list is updated, update the `eslint-bulk-suppressions-newest-test`\n// and/or the `eslint-bulk-suppressions-newest-test` projects' eslint dependencies.\nconst TESTED_VERSIONS: Set<string> = new Set([\n  '8.6.0',\n  '8.7.0',\n  '8.21.0',\n  '8.22.0',\n  '8.23.0',\n  '8.23.1',\n  '8.57.0',\n  '9.25.1',\n  '9.37.0'\n]);\n\nexport function getEslintPathAndVersion(packagePath: string): [string, string] {\n  // Try to find a local ESLint installation, the one that should be listed as a dev dependency in package.json\n  // and installed in node_modules\n  try {\n    const localEslintApiPath: string = require.resolve(BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME, {\n      paths: [packagePath]\n    });\n    const localEslintPath: string = path.dirname(path.dirname(localEslintApiPath));\n    const { version: localEslintVersion } = require(`${localEslintPath}/package.json`);\n\n    if (!TESTED_VERSIONS.has(localEslintVersion)) {\n      console.warn(\n        '@rushstack/eslint-bulk: Be careful, the installed ESLint version has not been tested with eslint-bulk.'\n      );\n    }\n\n    return [localEslintApiPath, localEslintVersion];\n  } catch (e1) {\n    try {\n      const {\n        dependencies,\n        devDependencies\n      }: {\n        dependencies: Record<string, string> | undefined;\n        devDependencies: Record<string, string> | undefined;\n      } = require(`${packagePath}/package.json`);\n\n      if (devDependencies?.eslint) {\n        throw new Error(\n          '@rushstack/eslint-bulk: eslint is specified as a dev dependency in package.json, ' +\n            'but eslint-bulk cannot find it in node_modules.'\n        );\n      } else if (dependencies?.eslint) {\n        throw new Error(\n          '@rushstack/eslint-bulk: eslint is specified as a dependency in package.json, ' +\n            'but eslint-bulk cannot find it in node_modules.'\n        );\n      } else {\n        throw new Error('@rushstack/eslint-bulk: eslint is not specified as a dependency in package.json.');\n      }\n    } catch (e2) {\n      throw new Error(\n        \"@rushstack/eslint-bulk: This command must be run in the same folder as a project's package.json file.\"\n      );\n    }\n  }\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import fs from 'node:fs';
+export function isCorrectCwd(cwd) {
+    return (fs.existsSync(`${cwd}/eslint.config.js`) ||
+        fs.existsSync(`${cwd}/eslint.config.cjs`) ||
+        fs.existsSync(`${cwd}/eslint.config.mjs`) ||
+        fs.existsSync(`${cwd}/.eslintrc.js`) ||
+        fs.existsSync(`${cwd}/.eslintrc.cjs`));
+}
+//# sourceMappingURL=is-correct-cwd.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/is-correct-cwd.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"is-correct-cwd.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,CACL,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,mBAAmB,CAAC;QACxC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC;QACzC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC;QACzC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,eAAe,CAAC;QACpC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,gBAAgB,CAAC,CACtC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nexport function isCorrectCwd(cwd: string): boolean {\n  return (\n    fs.existsSync(`${cwd}/eslint.config.js`) ||\n    fs.existsSync(`${cwd}/eslint.config.cjs`) ||\n    fs.existsSync(`${cwd}/eslint.config.mjs`) ||\n    fs.existsSync(`${cwd}/.eslintrc.js`) ||\n    fs.existsSync(`${cwd}/.eslintrc.cjs`)\n  );\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/print-help.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/print-help.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/print-help.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,76 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import { wrapWordsToLines } from './wrap-words-to-lines';
+export function printPruneHelp() {
+    const help = `eslint-bulk prune
+
+Usage:
+
+eslint-bulk prune
+
+This command is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to delete all unused suppression entries in all .eslint-bulk-suppressions.json files under the current working directory.`;
+    const wrapped = wrapWordsToLines(help);
+    for (const line of wrapped) {
+        console.log(line);
+    }
+}
+export function printHelp() {
+    const help = `eslint-bulk <command>
+
+Usage:
+
+eslint-bulk suppress --rule RULENAME1 [--rule RULENAME2...] PATH1 [PATH2...]
+eslint-bulk suppress --all PATH1 [PATH2...]
+eslint-bulk suppress --help
+
+eslint-bulk prune
+eslint-bulk prune --help
+
+eslint-bulk --help
+
+This command line tool is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to suppress or prune unused suppressions in the local .eslint-bulk-suppressions.json file.
+
+Commands:
+  eslint-bulk suppress [options] <path...>
+    Use this command to generate a new .eslint-bulk-suppressions.json file or add suppression entries to the existing file. Specify the files and rules you want to suppress.
+    Please run "eslint-bulk suppress --help" to learn more.
+
+  eslint-bulk prune
+    Use this command to delete all unused suppression entries in all .eslint-bulk-suppressions.json files under the current working directory.
+    Please run "eslint-bulk prune --help" to learn more.
+`;
+    const wrapped = wrapWordsToLines(help);
+    for (const line of wrapped) {
+        console.log(line);
+    }
+}
+export function printSuppressHelp() {
+    const help = `eslint-bulk suppress [options] <path...>
+
+Usage:
+
+eslint-bulk suppress --rule RULENAME1 [--rule RULENAME2...] PATH1 [PATH2...]
+eslint-bulk suppress --all PATH1 [PATH2...]
+eslint-bulk suppress --help
+
+This command is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to either generate a new .eslint-bulk-suppressions.json file or add suppression entries to the existing file. Specify the files and rules you want to suppress.
+
+Argument:
+  <path...>
+    Glob patterns for paths to suppress, same as eslint files argument. Should be relative to the project root.
+
+Options:
+  -h, -H, --help
+    Display this help message.
+
+  -R, --rule
+    The full name of the ESLint rule you want to bulk-suppress. Specify multiple rules with --rule NAME1 --rule RULENAME2.
+
+  -A, --all
+    Bulk-suppress all rules in the specified file patterns.`;
+    const wrapped = wrapWordsToLines(help);
+    for (const line of wrapped) {
+        console.log(line);
+    }
+}
+//# sourceMappingURL=print-help.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/print-help.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/print-help.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/print-help.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"print-help.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/print-help.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAW;;;;;;sNAM+L,CAAC;IAErN,MAAM,OAAO,GAAa,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,IAAI,GAAW;;;;;;;;;;;;;;;;;;;;;;;CAuBtB,CAAC;IAEA,MAAM,OAAO,GAAa,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAW;;;;;;;;;;;;;;;;;;;;;;4DAsBqC,CAAC;IAE3D,MAAM,OAAO,GAAa,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { wrapWordsToLines } from './wrap-words-to-lines';\n\nexport function printPruneHelp(): void {\n  const help: string = `eslint-bulk prune\n\nUsage:\n\neslint-bulk prune\n\nThis command is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to delete all unused suppression entries in all .eslint-bulk-suppressions.json files under the current working directory.`;\n\n  const wrapped: string[] = wrapWordsToLines(help);\n  for (const line of wrapped) {\n    console.log(line);\n  }\n}\n\nexport function printHelp(): void {\n  const help: string = `eslint-bulk <command>\n\nUsage:\n\neslint-bulk suppress --rule RULENAME1 [--rule RULENAME2...] PATH1 [PATH2...]\neslint-bulk suppress --all PATH1 [PATH2...]\neslint-bulk suppress --help\n\neslint-bulk prune\neslint-bulk prune --help\n\neslint-bulk --help\n\nThis command line tool is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to suppress or prune unused suppressions in the local .eslint-bulk-suppressions.json file.\n\nCommands:\n  eslint-bulk suppress [options] <path...>\n    Use this command to generate a new .eslint-bulk-suppressions.json file or add suppression entries to the existing file. Specify the files and rules you want to suppress.\n    Please run \"eslint-bulk suppress --help\" to learn more.\n\n  eslint-bulk prune\n    Use this command to delete all unused suppression entries in all .eslint-bulk-suppressions.json files under the current working directory.\n    Please run \"eslint-bulk prune --help\" to learn more.\n`;\n\n  const wrapped: string[] = wrapWordsToLines(help);\n  for (const line of wrapped) {\n    console.log(line);\n  }\n}\n\nexport function printSuppressHelp(): void {\n  const help: string = `eslint-bulk suppress [options] <path...>\n\nUsage:\n\neslint-bulk suppress --rule RULENAME1 [--rule RULENAME2...] PATH1 [PATH2...]\neslint-bulk suppress --all PATH1 [PATH2...]\neslint-bulk suppress --help\n\nThis command is a thin wrapper around ESLint that communicates with @rushstack/eslint-patch to either generate a new .eslint-bulk-suppressions.json file or add suppression entries to the existing file. Specify the files and rules you want to suppress.\n\nArgument:\n  <path...>\n    Glob patterns for paths to suppress, same as eslint files argument. Should be relative to the project root.\n\nOptions:\n  -h, -H, --help\n    Display this help message.\n\n  -R, --rule\n    The full name of the ESLint rule you want to bulk-suppress. Specify multiple rules with --rule NAME1 --rule RULENAME2.\n\n  -A, --all\n    Bulk-suppress all rules in the specified file patterns.`;\n\n  const wrapped: string[] = wrapWordsToLines(help);\n  for (const line of wrapped) {\n    console.log(line);\n  }\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,65 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+export function wrapWordsToLines(text, maxLineLength, indentOrLinePrefix) {
+    var _a;
+    let linePrefix;
+    switch (typeof indentOrLinePrefix) {
+        case 'number':
+            linePrefix = ' '.repeat(indentOrLinePrefix);
+            break;
+        case 'string':
+            linePrefix = indentOrLinePrefix;
+            break;
+        default:
+            linePrefix = '';
+            break;
+    }
+    const linePrefixLength = linePrefix.length;
+    if (!maxLineLength) {
+        maxLineLength = process.stdout.getWindowSize()[0];
+    }
+    // Apply word wrapping and the provided line prefix, while also respecting existing newlines
+    // and prefix spaces that may exist in the text string already.
+    const lines = text.split(/\r?\n/);
+    const wrappedLines = [];
+    for (const line of lines) {
+        if (line.length + linePrefixLength <= maxLineLength) {
+            wrappedLines.push(linePrefix + line);
+        }
+        else {
+            const lineAdditionalPrefix = ((_a = line.match(/^\s*/)) === null || _a === void 0 ? void 0 : _a[0]) || '';
+            const whitespaceRegexp = /\s+/g;
+            let currentWhitespaceMatch = null;
+            let previousWhitespaceMatch;
+            let currentLineStartIndex = lineAdditionalPrefix.length;
+            let previousBreakRanOver = false;
+            while ((currentWhitespaceMatch = whitespaceRegexp.exec(line)) !== null) {
+                if (currentWhitespaceMatch.index + linePrefixLength - currentLineStartIndex > maxLineLength) {
+                    let whitespaceToSplitAt;
+                    if (!previousWhitespaceMatch ||
+                        // Handle the case where there are two words longer than the maxLineLength in a row
+                        previousBreakRanOver) {
+                        whitespaceToSplitAt = currentWhitespaceMatch;
+                    }
+                    else {
+                        whitespaceToSplitAt = previousWhitespaceMatch;
+                    }
+                    wrappedLines.push(linePrefix +
+                        lineAdditionalPrefix +
+                        line.substring(currentLineStartIndex, whitespaceToSplitAt.index));
+                    previousBreakRanOver = whitespaceToSplitAt.index - currentLineStartIndex > maxLineLength;
+                    currentLineStartIndex = whitespaceToSplitAt.index + whitespaceToSplitAt[0].length;
+                }
+                else {
+                    previousBreakRanOver = false;
+                }
+                previousWhitespaceMatch = currentWhitespaceMatch;
+            }
+            if (currentLineStartIndex < line.length) {
+                wrappedLines.push(linePrefix + lineAdditionalPrefix + line.substring(currentLineStartIndex));
+            }
+        }
+    }
+    return wrappedLines;
+}
+//# sourceMappingURL=wrap-words-to-lines.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"wrap-words-to-lines.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/wrap-words-to-lines.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAuC3D,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,aAAsB,EACtB,kBAAoC;;IAEpC,IAAI,UAAkB,CAAC;IACvB,QAAQ,OAAO,kBAAkB,EAAE,CAAC;QAClC,KAAK,QAAQ;YACX,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5C,MAAM;QACR,KAAK,QAAQ;YACX,UAAU,GAAG,kBAAkB,CAAC;YAChC,MAAM;QACR;YACE,UAAU,GAAG,EAAE,CAAC;YAChB,MAAM;IACV,CAAC;IAED,MAAM,gBAAgB,GAAW,UAAU,CAAC,MAAM,CAAC;IAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,4FAA4F;IAC5F,+DAA+D;IAC/D,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE5C,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,GAAG,gBAAgB,IAAI,aAAa,EAAE,CAAC;YACpD,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,oBAAoB,GAAW,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAG,CAAC,CAAC,KAAI,EAAE,CAAC;YACnE,MAAM,gBAAgB,GAAW,MAAM,CAAC;YACxC,IAAI,sBAAsB,GAA2B,IAAI,CAAC;YAC1D,IAAI,uBAAoD,CAAC;YACzD,IAAI,qBAAqB,GAAW,oBAAoB,CAAC,MAAM,CAAC;YAChE,IAAI,oBAAoB,GAAY,KAAK,CAAC;YAC1C,OAAO,CAAC,sBAAsB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvE,IAAI,sBAAsB,CAAC,KAAK,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,aAAa,EAAE,CAAC;oBAC5F,IAAI,mBAAgD,CAAC;oBACrD,IACE,CAAC,uBAAuB;wBACxB,mFAAmF;wBACnF,oBAAoB,EACpB,CAAC;wBACD,mBAAmB,GAAG,sBAAsB,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,mBAAmB,GAAG,uBAAuB,CAAC;oBAChD,CAAC;oBAED,YAAY,CAAC,IAAI,CACf,UAAU;wBACR,oBAAoB;wBACpB,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,KAAK,CAAC,CACnE,CAAC;oBACF,oBAAoB,GAAG,mBAAmB,CAAC,KAAK,GAAG,qBAAqB,GAAG,aAAa,CAAC;oBACzF,qBAAqB,GAAG,mBAAmB,CAAC,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,oBAAoB,GAAG,KAAK,CAAC;gBAC/B,CAAC;gBAED,uBAAuB,GAAG,sBAAsB,CAAC;YACnD,CAAC;YAED,IAAI,qBAAqB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACxC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// ----------------------------------------------------------------------------------------------------------\n// TO AVOID EXTRA DEPENDENCIES, THE CODE IN THIS FILE WAS BORROWED FROM:\n//\n// rushstack/libraries/terminal/src/PrintUtilities.ts\n//\n// KEEP IT IN SYNC WITH THAT FILE.\n// ----------------------------------------------------------------------------------------------------------\n\n/**\n * Applies word wrapping and returns an array of lines.\n *\n * @param text - The text to wrap\n * @param maxLineLength - The maximum length of a line, defaults to the console width\n * @param indent - The number of spaces to indent the wrapped lines, defaults to 0\n */\nexport function wrapWordsToLines(text: string, maxLineLength?: number, indent?: number): string[];\n/**\n * Applies word wrapping and returns an array of lines.\n *\n * @param text - The text to wrap\n * @param maxLineLength - The maximum length of a line, defaults to the console width\n * @param linePrefix - The string to prefix each line with, defaults to ''\n */\nexport function wrapWordsToLines(text: string, maxLineLength?: number, linePrefix?: string): string[];\n/**\n * Applies word wrapping and returns an array of lines.\n *\n * @param text - The text to wrap\n * @param maxLineLength - The maximum length of a line, defaults to the console width\n * @param indentOrLinePrefix - The number of spaces to indent the wrapped lines or the string to prefix\n * each line with, defaults to no prefix\n */\nexport function wrapWordsToLines(\n  text: string,\n  maxLineLength?: number,\n  indentOrLinePrefix?: number | string\n): string[];\nexport function wrapWordsToLines(\n  text: string,\n  maxLineLength?: number,\n  indentOrLinePrefix?: number | string\n): string[] {\n  let linePrefix: string;\n  switch (typeof indentOrLinePrefix) {\n    case 'number':\n      linePrefix = ' '.repeat(indentOrLinePrefix);\n      break;\n    case 'string':\n      linePrefix = indentOrLinePrefix;\n      break;\n    default:\n      linePrefix = '';\n      break;\n  }\n\n  const linePrefixLength: number = linePrefix.length;\n\n  if (!maxLineLength) {\n    maxLineLength = process.stdout.getWindowSize()[0];\n  }\n\n  // Apply word wrapping and the provided line prefix, while also respecting existing newlines\n  // and prefix spaces that may exist in the text string already.\n  const lines: string[] = text.split(/\\r?\\n/);\n\n  const wrappedLines: string[] = [];\n  for (const line of lines) {\n    if (line.length + linePrefixLength <= maxLineLength) {\n      wrappedLines.push(linePrefix + line);\n    } else {\n      const lineAdditionalPrefix: string = line.match(/^\\s*/)?.[0] || '';\n      const whitespaceRegexp: RegExp = /\\s+/g;\n      let currentWhitespaceMatch: RegExpExecArray | null = null;\n      let previousWhitespaceMatch: RegExpExecArray | undefined;\n      let currentLineStartIndex: number = lineAdditionalPrefix.length;\n      let previousBreakRanOver: boolean = false;\n      while ((currentWhitespaceMatch = whitespaceRegexp.exec(line)) !== null) {\n        if (currentWhitespaceMatch.index + linePrefixLength - currentLineStartIndex > maxLineLength) {\n          let whitespaceToSplitAt: RegExpExecArray | undefined;\n          if (\n            !previousWhitespaceMatch ||\n            // Handle the case where there are two words longer than the maxLineLength in a row\n            previousBreakRanOver\n          ) {\n            whitespaceToSplitAt = currentWhitespaceMatch;\n          } else {\n            whitespaceToSplitAt = previousWhitespaceMatch;\n          }\n\n          wrappedLines.push(\n            linePrefix +\n              lineAdditionalPrefix +\n              line.substring(currentLineStartIndex, whitespaceToSplitAt.index)\n          );\n          previousBreakRanOver = whitespaceToSplitAt.index - currentLineStartIndex > maxLineLength;\n          currentLineStartIndex = whitespaceToSplitAt.index + whitespaceToSplitAt[0].length;\n        } else {\n          previousBreakRanOver = false;\n        }\n\n        previousWhitespaceMatch = currentWhitespaceMatch;\n      }\n\n      if (currentLineStartIndex < line.length) {\n        wrappedLines.push(linePrefix + lineAdditionalPrefix + line.substring(currentLineStartIndex));\n      }\n    }\n  }\n\n  return wrappedLines;\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/constants.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/constants.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/constants.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+var _a;
+export const ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME = 'RUSHSTACK_ESLINT_BULK_PATCH_PATH';
+export const ESLINT_BULK_SUPPRESS_ENV_VAR_NAME = 'RUSHSTACK_ESLINT_BULK_SUPPRESS';
+export const ESLINT_BULK_ENABLE_ENV_VAR_NAME = 'ESLINT_BULK_ENABLE';
+export const ESLINT_BULK_PRUNE_ENV_VAR_NAME = 'ESLINT_BULK_PRUNE';
+export const ESLINT_BULK_DETECT_ENV_VAR_NAME = '_RUSHSTACK_ESLINT_BULK_DETECT';
+export const ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME = 'RUSHSTACK_ESLINT_BULK_FORCE_REGENERATE_PATCH';
+export const VSCODE_PID_ENV_VAR_NAME = 'VSCODE_PID';
+export const ESLINT_BULK_STDOUT_START_DELIMETER = 'RUSHSTACK_ESLINT_BULK_START';
+export const ESLINT_BULK_STDOUT_END_DELIMETER = 'RUSHSTACK_ESLINT_BULK_END';
+export const ESLINT_PACKAGE_NAME_ENV_VAR_NAME = '_RUSHSTACK_ESLINT_PACKAGE_NAME';
+export const BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME = (_a = process.env[ESLINT_PACKAGE_NAME_ENV_VAR_NAME]) !== null && _a !== void 0 ? _a : 'eslint';
+//# sourceMappingURL=constants.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/constants.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/constants.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/constants.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/constants.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;;AAE3D,MAAM,CAAC,MAAM,mCAAmC,GAC9C,kCAAkC,CAAC;AACrC,MAAM,CAAC,MAAM,iCAAiC,GAC5C,gCAAgC,CAAC;AACnC,MAAM,CAAC,MAAM,+BAA+B,GAAyB,oBAAoB,CAAC;AAC1F,MAAM,CAAC,MAAM,8BAA8B,GAAwB,mBAAmB,CAAC;AACvF,MAAM,CAAC,MAAM,+BAA+B,GAC1C,+BAA+B,CAAC;AAClC,MAAM,CAAC,MAAM,+CAA+C,GAC1D,8CAA8C,CAAC;AACjD,MAAM,CAAC,MAAM,uBAAuB,GAAiB,YAAY,CAAC;AAElE,MAAM,CAAC,MAAM,kCAAkC,GAC7C,6BAA6B,CAAC;AAChC,MAAM,CAAC,MAAM,gCAAgC,GAAgC,2BAA2B,CAAC;AAEzG,MAAM,CAAC,MAAM,gCAAgC,GAC3C,gCAAgC,CAAC;AAEnC,MAAM,CAAC,MAAM,yCAAyC,GACpD,MAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,mCAAI,QAAQ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nexport const ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_PATCH_PATH' =\n  'RUSHSTACK_ESLINT_BULK_PATCH_PATH';\nexport const ESLINT_BULK_SUPPRESS_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_SUPPRESS' =\n  'RUSHSTACK_ESLINT_BULK_SUPPRESS';\nexport const ESLINT_BULK_ENABLE_ENV_VAR_NAME: 'ESLINT_BULK_ENABLE' = 'ESLINT_BULK_ENABLE';\nexport const ESLINT_BULK_PRUNE_ENV_VAR_NAME: 'ESLINT_BULK_PRUNE' = 'ESLINT_BULK_PRUNE';\nexport const ESLINT_BULK_DETECT_ENV_VAR_NAME: '_RUSHSTACK_ESLINT_BULK_DETECT' =\n  '_RUSHSTACK_ESLINT_BULK_DETECT';\nexport const ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME: 'RUSHSTACK_ESLINT_BULK_FORCE_REGENERATE_PATCH' =\n  'RUSHSTACK_ESLINT_BULK_FORCE_REGENERATE_PATCH';\nexport const VSCODE_PID_ENV_VAR_NAME: 'VSCODE_PID' = 'VSCODE_PID';\n\nexport const ESLINT_BULK_STDOUT_START_DELIMETER: 'RUSHSTACK_ESLINT_BULK_START' =\n  'RUSHSTACK_ESLINT_BULK_START';\nexport const ESLINT_BULK_STDOUT_END_DELIMETER: 'RUSHSTACK_ESLINT_BULK_END' = 'RUSHSTACK_ESLINT_BULK_END';\n\nexport const ESLINT_PACKAGE_NAME_ENV_VAR_NAME: '_RUSHSTACK_ESLINT_PACKAGE_NAME' =\n  '_RUSHSTACK_ESLINT_PACKAGE_NAME';\n\nexport const BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME: string =\n  process.env[ESLINT_PACKAGE_NAME_ENV_VAR_NAME] ?? 'eslint';\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/generate-patched-file.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/generate-patched-file.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/generate-patched-file.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,350 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import fs from 'node:fs';
+import { ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME, ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME } from './constants';
+/**
+ * Dynamically generate file to properly patch many versions of ESLint
+ * @param inputFilePath - Must be an iteration of https://github.com/eslint/eslint/blob/main/lib/linter/linter.js
+ * @param outputFilePath - Some small changes to linter.js
+ */
+export function generatePatchedLinterJsFileIfDoesNotExist(inputFilePath, outputFilePath, eslintPackageVersion) {
+    const generateEnvVarValue = process.env[ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME];
+    if (generateEnvVarValue !== 'true' && generateEnvVarValue !== '1' && fs.existsSync(outputFilePath)) {
+        return;
+    }
+    const [majorVersionString, minorVersionString] = eslintPackageVersion.split('.');
+    const majorVersion = parseInt(majorVersionString, 10);
+    const minorVersion = parseInt(minorVersionString, 10);
+    const inputFile = fs.readFileSync(inputFilePath).toString();
+    let inputIndex = 0;
+    /**
+     * Extract from the stream until marker is reached.  When matching marker,
+     * ignore whitespace in the stream and in the marker.  Return the extracted text.
+     */
+    function scanUntilMarker(marker) {
+        const trimmedMarker = marker.replace(/\s/g, '');
+        let output = '';
+        let trimmed = '';
+        while (inputIndex < inputFile.length) {
+            const char = inputFile[inputIndex++];
+            output += char;
+            if (!/^\s$/.test(char)) {
+                trimmed += char;
+            }
+            if (trimmed.endsWith(trimmedMarker)) {
+                return output;
+            }
+        }
+        throw new Error('Unexpected end of input while looking for ' + JSON.stringify(marker));
+    }
+    function scanUntilNewline() {
+        let output = '';
+        while (inputIndex < inputFile.length) {
+            const char = inputFile[inputIndex++];
+            output += char;
+            if (char === '\n') {
+                return output;
+            }
+        }
+        throw new Error('Unexpected end of input while looking for new line');
+    }
+    function scanUntilEnd() {
+        const output = inputFile.substring(inputIndex);
+        inputIndex = inputFile.length;
+        return output;
+    }
+    const markerForStartOfClassMethodSpaces = '\n     */\n    ';
+    const markerForStartOfClassMethodTabs = '\n\t */\n\t';
+    function indexOfStartOfClassMethod(input, position) {
+        let startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodSpaces, position);
+        if (startOfClassMethodIndex === -1) {
+            startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodTabs, position);
+            if (startOfClassMethodIndex === -1) {
+                return { index: startOfClassMethodIndex };
+            }
+            return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodTabs };
+        }
+        return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodSpaces };
+    }
+    /**
+     * Returns index of next public method
+     * @param fromIndex - index of inputFile to search if public method still exists
+     * @returns -1 if public method does not exist or index of next public method
+     */
+    function getIndexOfNextMethod(fromIndex) {
+        const rest = inputFile.substring(fromIndex);
+        const endOfClassIndex = rest.indexOf('\n}');
+        const { index: startOfClassMethodIndex, marker: startOfClassMethodMarker } = indexOfStartOfClassMethod(rest);
+        if (startOfClassMethodIndex === -1 ||
+            !startOfClassMethodMarker ||
+            startOfClassMethodIndex > endOfClassIndex) {
+            return { index: -1 };
+        }
+        const afterMarkerIndex = startOfClassMethodIndex + startOfClassMethodMarker.length;
+        const isPublicMethod = rest[afterMarkerIndex] !== '_' &&
+            rest[afterMarkerIndex] !== '#' &&
+            !rest.substring(afterMarkerIndex, rest.indexOf('\n', afterMarkerIndex)).includes('static') &&
+            !rest.substring(afterMarkerIndex, rest.indexOf('\n', afterMarkerIndex)).includes('constructor');
+        return { index: fromIndex + afterMarkerIndex, isPublic: isPublicMethod };
+    }
+    function scanUntilIndex(indexToScanTo) {
+        const output = inputFile.substring(inputIndex, indexToScanTo);
+        inputIndex = indexToScanTo;
+        return output;
+    }
+    let outputFile = '';
+    // Match this:
+    //    //------------------------------------------------------------------------------
+    //    // Requirements
+    //    //------------------------------------------------------------------------------
+    outputFile += scanUntilMarker('// Requirements');
+    outputFile += scanUntilMarker('//--');
+    outputFile += scanUntilNewline();
+    outputFile += `
+// --- BEGIN MONKEY PATCH ---
+const bulkSuppressionsPatch = require(process.env.${ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME});
+const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJS;
+`;
+    // Match this:
+    //    //------------------------------------------------------------------------------
+    //    // Typedefs
+    //    //------------------------------------------------------------------------------
+    const requireSection = scanUntilMarker('// Typedefs');
+    // Match something like this:
+    //
+    //    const path = require('path'),
+    //    eslintScope = require('eslint-scope'),
+    //    evk = require('eslint-visitor-keys'),
+    //
+    // Convert to something like this:
+    //
+    //    const path = require('path'),
+    //    eslintScope = requireFromPathToLinterJS('eslint-scope'),
+    //    evk = requireFromPathToLinterJS('eslint-visitor-keys'),
+    //
+    outputFile += requireSection.replace(/require\s*\((?:'([^']+)'|"([^"]+)")\)/g, (match, p1, p2) => {
+        var _a;
+        const importPath = (_a = p1 !== null && p1 !== void 0 ? p1 : p2) !== null && _a !== void 0 ? _a : '';
+        if (importPath !== 'path') {
+            if (p1) {
+                return `requireFromPathToLinterJS('${p1}')`;
+            }
+            if (p2) {
+                return `requireFromPathToLinterJS("${p2}")`;
+            }
+        }
+        // Keep as-is
+        return match;
+    });
+    outputFile += `--- END MONKEY PATCH ---
+`;
+    if (majorVersion >= 9) {
+        if (minorVersion >= 37) {
+            outputFile += scanUntilMarker('const visitor = new SourceCodeVisitor();');
+        }
+        else {
+            outputFile += scanUntilMarker('const emitter = createEmitter();');
+        }
+        outputFile += `
+      // --- BEGIN MONKEY PATCH ---
+      let currentNode = undefined;
+      // --- END MONKEY PATCH ---`;
+    }
+    // Match this (9.25.1):
+    // ```
+    //      if (reportTranslator === null) {
+    //        reportTranslator = createReportTranslator({
+    //            ruleId,
+    //            severity,
+    //            sourceCode,
+    //            messageIds,
+    //            disableFixes
+    //        });
+    //    }
+    //    const problem = reportTranslator(...args);
+    //
+    //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {
+    //        throw new Error("Fixable rules must set the `meta.fixable` property to \"code\" or \"whitespace\".");
+    //    }
+    // ```
+    // Or this (9.37.0):
+    // ```
+    //    const problem = report.addRuleMessage(
+    //      ruleId,
+    //      severity,
+    //      ...args,
+    //    );
+    //
+    //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {
+    //      throw new Error(
+    //        'Fixable rules must set the `meta.fixable` property to "code" or "whitespace".',
+    //      );
+    //    }
+    // ```
+    //
+    // Convert to something like this (9.25.1):
+    // ```
+    //      if (reportTranslator === null) {
+    //        reportTranslator = createReportTranslator({
+    //            ruleId,
+    //            severity,
+    //            sourceCode,
+    //            messageIds,
+    //            disableFixes
+    //        });
+    //    }
+    //    const problem = reportTranslator(...args);
+    //    // --- BEGIN MONKEY PATCH ---
+    //    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;
+    //    // --- END MONKEY PATCH ---
+    //
+    //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {
+    //        throw new Error("Fixable rules must set the `meta.fixable` property to \"code\" or \"whitespace\".");
+    //    }
+    // ```
+    // Or this (9.37.0):
+    // ```
+    //    const problem = report.addRuleMessage(
+    //      ruleId,
+    //      severity,
+    //      ...args,
+    //    );
+    //    // --- BEGIN MONKEY PATCH ---
+    //    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;
+    //    // --- END MONKEY PATCH ---
+    //
+    //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {
+    //      throw new Error(
+    //        'Fixable rules must set the `meta.fixable` property to "code" or "whitespace".',
+    //      );
+    //    }
+    // ```
+    if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) {
+        outputFile += scanUntilMarker('const problem = report.addRuleMessage(');
+        outputFile += scanUntilMarker('ruleId,');
+        outputFile += scanUntilMarker('severity,');
+        outputFile += scanUntilMarker('...args,');
+        outputFile += scanUntilMarker(');');
+    }
+    else {
+        outputFile += scanUntilMarker('const problem = reportTranslator(...args);');
+    }
+    outputFile += `
+    // --- BEGIN MONKEY PATCH ---`;
+    if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) {
+        outputFile += `
+    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) {
+      problem.suppressions ??= []; problem.suppressions.push({kind:"bulk",justification:""});
+    }`;
+    }
+    else {
+        outputFile += `
+    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;`;
+    }
+    outputFile += `
+    // --- END MONKEY PATCH ---`;
+    //
+    // Match this:
+    // ```
+    //    Object.keys(ruleListeners).forEach(selector => {
+    //      ...
+    //    });
+    // ```
+    //
+    // Convert to something like this (9.25.1):
+    // ```
+    //    Object.keys(ruleListeners).forEach(selector => {
+    //      // --- BEGIN MONKEY PATCH ---
+    //      emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });
+    //      // --- END MONKEY PATCH ---
+    //      ...
+    //    });
+    // ```
+    // Or this (9.37.0):
+    // ```
+    //    Object.keys(ruleListeners).forEach(selector => {
+    //      // --- BEGIN MONKEY PATCH ---
+    //      visitor.add(selector, (...args) => { currentNode = args[args.length - 1]; });
+    //      // --- END MONKEY PATCH ---
+    //      ...
+    //    });
+    // ```
+    if (majorVersion >= 9) {
+        outputFile += scanUntilMarker('Object.keys(ruleListeners).forEach(selector => {');
+        outputFile += `
+      // --- BEGIN MONKEY PATCH ---
+`;
+        if (minorVersion >= 37) {
+            outputFile += `visitor.add(selector, (...args) => { currentNode = args[args.length - 1]; });`;
+        }
+        else {
+            outputFile += `emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });`;
+        }
+        outputFile += `
+      // --- END MONKEY PATCH ---`;
+    }
+    outputFile += scanUntilMarker('class Linter {');
+    outputFile += scanUntilNewline();
+    outputFile += `
+    // --- BEGIN MONKEY PATCH ---
+    /**
+     * We intercept ESLint execution at the .eslintrc.js file, but unfortunately the Linter class is
+     * initialized before the .eslintrc.js file is executed. This means the internalSlotsMap that all
+     * the patched methods refer to is not initialized. This method checks if the internalSlotsMap is
+     * initialized, and if not, initializes it.
+     */
+    _conditionallyReinitialize({ cwd, configType } = {}) {
+        if (internalSlotsMap.get(this) === undefined) {
+            internalSlotsMap.set(this, {
+              cwd: normalizeCwd(cwd),
+              flags: [],
+              lastConfigArray: null,
+              lastSourceCode: null,
+              lastSuppressedMessages: [],
+              configType, // TODO: Remove after flat config conversion
+              parserMap: new Map([['espree', espree]]),
+              ruleMap: new Rules()
+            });
+
+            this.version = pkg.version;
+        }
+    }
+    // --- END MONKEY PATCH ---
+`;
+    const privateMethodNames = [];
+    let { index: indexOfNextMethod, isPublic } = getIndexOfNextMethod(inputIndex);
+    while (indexOfNextMethod !== -1) {
+        outputFile += scanUntilIndex(indexOfNextMethod);
+        if (isPublic) {
+            // Inject the monkey patch at the start of the public method
+            outputFile += scanUntilNewline();
+            outputFile += `        // --- BEGIN MONKEY PATCH ---
+        this._conditionallyReinitialize();
+        // --- END MONKEY PATCH ---
+`;
+        }
+        else if (inputFile[inputIndex] === '#') {
+            // Replace the '#' private method with a '_' private method, so that our monkey patch
+            // can still call it. Otherwise, we get the following error during execution:
+            // TypeError: Receiver must be an instance of class Linter
+            const privateMethodName = scanUntilMarker('(');
+            // Remove the '(' at the end and stash it, since we need to escape it for the regex later
+            privateMethodNames.push(privateMethodName.slice(0, -1));
+            outputFile += `_${privateMethodName.slice(1)}`;
+        }
+        const indexResult = getIndexOfNextMethod(inputIndex);
+        indexOfNextMethod = indexResult.index;
+        isPublic = indexResult.isPublic;
+    }
+    outputFile += scanUntilEnd();
+    // Do a second pass to find and replace all calls to private methods with the patched versions.
+    if (privateMethodNames.length) {
+        const privateMethodCallRegex = new RegExp(`\.(${privateMethodNames.join('|')})\\(`, 'g');
+        outputFile = outputFile.replace(privateMethodCallRegex, (match, privateMethodName) => {
+            // Replace the leading '#' with a leading '_'
+            return `._${privateMethodName.slice(1)}(`;
+        });
+    }
+    fs.writeFileSync(outputFilePath, outputFile);
+}
+//# sourceMappingURL=generate-patched-file.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/generate-patched-file.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/generate-patched-file.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/generate-patched-file.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"generate-patched-file.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/generate-patched-file.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport {\n  ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME,\n  ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME\n} from './constants';\n\n/**\n * Dynamically generate file to properly patch many versions of ESLint\n * @param inputFilePath - Must be an iteration of https://github.com/eslint/eslint/blob/main/lib/linter/linter.js\n * @param outputFilePath - Some small changes to linter.js\n */\nexport function generatePatchedLinterJsFileIfDoesNotExist(\n  inputFilePath: string,\n  outputFilePath: string,\n  eslintPackageVersion: string\n): void {\n  const generateEnvVarValue: string | undefined =\n    process.env[ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME];\n  if (generateEnvVarValue !== 'true' && generateEnvVarValue !== '1' && fs.existsSync(outputFilePath)) {\n    return;\n  }\n\n  const [majorVersionString, minorVersionString] = eslintPackageVersion.split('.');\n  const majorVersion: number = parseInt(majorVersionString, 10);\n  const minorVersion: number = parseInt(minorVersionString, 10);\n\n  const inputFile: string = fs.readFileSync(inputFilePath).toString();\n\n  let inputIndex: number = 0;\n\n  /**\n   * Extract from the stream until marker is reached.  When matching marker,\n   * ignore whitespace in the stream and in the marker.  Return the extracted text.\n   */\n  function scanUntilMarker(marker: string): string {\n    const trimmedMarker: string = marker.replace(/\\s/g, '');\n\n    let output: string = '';\n    let trimmed: string = '';\n\n    while (inputIndex < inputFile.length) {\n      const char: string = inputFile[inputIndex++];\n      output += char;\n      if (!/^\\s$/.test(char)) {\n        trimmed += char;\n      }\n      if (trimmed.endsWith(trimmedMarker)) {\n        return output;\n      }\n    }\n\n    throw new Error('Unexpected end of input while looking for ' + JSON.stringify(marker));\n  }\n\n  function scanUntilNewline(): string {\n    let output: string = '';\n\n    while (inputIndex < inputFile.length) {\n      const char: string = inputFile[inputIndex++];\n      output += char;\n      if (char === '\\n') {\n        return output;\n      }\n    }\n\n    throw new Error('Unexpected end of input while looking for new line');\n  }\n\n  function scanUntilEnd(): string {\n    const output: string = inputFile.substring(inputIndex);\n    inputIndex = inputFile.length;\n    return output;\n  }\n\n  const markerForStartOfClassMethodSpaces: string = '\\n     */\\n    ';\n  const markerForStartOfClassMethodTabs: string = '\\n\\t */\\n\\t';\n  function indexOfStartOfClassMethod(input: string, position?: number): { index: number; marker?: string } {\n    let startOfClassMethodIndex: number = input.indexOf(markerForStartOfClassMethodSpaces, position);\n    if (startOfClassMethodIndex === -1) {\n      startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodTabs, position);\n      if (startOfClassMethodIndex === -1) {\n        return { index: startOfClassMethodIndex };\n      }\n      return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodTabs };\n    }\n    return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodSpaces };\n  }\n\n  /**\n   * Returns index of next public method\n   * @param fromIndex - index of inputFile to search if public method still exists\n   * @returns -1 if public method does not exist or index of next public method\n   */\n  function getIndexOfNextMethod(fromIndex: number): { index: number; isPublic?: boolean } {\n    const rest: string = inputFile.substring(fromIndex);\n\n    const endOfClassIndex: number = rest.indexOf('\\n}');\n\n    const { index: startOfClassMethodIndex, marker: startOfClassMethodMarker } =\n      indexOfStartOfClassMethod(rest);\n\n    if (\n      startOfClassMethodIndex === -1 ||\n      !startOfClassMethodMarker ||\n      startOfClassMethodIndex > endOfClassIndex\n    ) {\n      return { index: -1 };\n    }\n\n    const afterMarkerIndex: number = startOfClassMethodIndex + startOfClassMethodMarker.length;\n\n    const isPublicMethod: boolean =\n      rest[afterMarkerIndex] !== '_' &&\n      rest[afterMarkerIndex] !== '#' &&\n      !rest.substring(afterMarkerIndex, rest.indexOf('\\n', afterMarkerIndex)).includes('static') &&\n      !rest.substring(afterMarkerIndex, rest.indexOf('\\n', afterMarkerIndex)).includes('constructor');\n\n    return { index: fromIndex + afterMarkerIndex, isPublic: isPublicMethod };\n  }\n\n  function scanUntilIndex(indexToScanTo: number): string {\n    const output: string = inputFile.substring(inputIndex, indexToScanTo);\n    inputIndex = indexToScanTo;\n    return output;\n  }\n\n  let outputFile: string = '';\n\n  // Match this:\n  //    //------------------------------------------------------------------------------\n  //    // Requirements\n  //    //------------------------------------------------------------------------------\n  outputFile += scanUntilMarker('// Requirements');\n  outputFile += scanUntilMarker('//--');\n  outputFile += scanUntilNewline();\n\n  outputFile += `\n// --- BEGIN MONKEY PATCH ---\nconst bulkSuppressionsPatch = require(process.env.${ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME});\nconst requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJS;\n`;\n\n  // Match this:\n  //    //------------------------------------------------------------------------------\n  //    // Typedefs\n  //    //------------------------------------------------------------------------------\n  const requireSection: string = scanUntilMarker('// Typedefs');\n\n  // Match something like this:\n  //\n  //    const path = require('path'),\n  //    eslintScope = require('eslint-scope'),\n  //    evk = require('eslint-visitor-keys'),\n  //\n  // Convert to something like this:\n  //\n  //    const path = require('path'),\n  //    eslintScope = requireFromPathToLinterJS('eslint-scope'),\n  //    evk = requireFromPathToLinterJS('eslint-visitor-keys'),\n  //\n  outputFile += requireSection.replace(/require\\s*\\((?:'([^']+)'|\"([^\"]+)\")\\)/g, (match, p1, p2) => {\n    const importPath: string = p1 ?? p2 ?? '';\n\n    if (importPath !== 'path') {\n      if (p1) {\n        return `requireFromPathToLinterJS('${p1}')`;\n      }\n      if (p2) {\n        return `requireFromPathToLinterJS(\"${p2}\")`;\n      }\n    }\n\n    // Keep as-is\n    return match;\n  });\n  outputFile += `--- END MONKEY PATCH ---\n`;\n\n  if (majorVersion >= 9) {\n    if (minorVersion >= 37) {\n      outputFile += scanUntilMarker('const visitor = new SourceCodeVisitor();');\n    } else {\n      outputFile += scanUntilMarker('const emitter = createEmitter();');\n    }\n\n    outputFile += `\n      // --- BEGIN MONKEY PATCH ---\n      let currentNode = undefined;\n      // --- END MONKEY PATCH ---`;\n  }\n\n  // Match this (9.25.1):\n  // ```\n  //      if (reportTranslator === null) {\n  //        reportTranslator = createReportTranslator({\n  //            ruleId,\n  //            severity,\n  //            sourceCode,\n  //            messageIds,\n  //            disableFixes\n  //        });\n  //    }\n  //    const problem = reportTranslator(...args);\n  //\n  //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n  //        throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n  //    }\n  // ```\n  // Or this (9.37.0):\n  // ```\n  //    const problem = report.addRuleMessage(\n  //      ruleId,\n  //      severity,\n  //      ...args,\n  //    );\n  //\n  //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n  //      throw new Error(\n  //        'Fixable rules must set the `meta.fixable` property to \"code\" or \"whitespace\".',\n  //      );\n  //    }\n  // ```\n  //\n  // Convert to something like this (9.25.1):\n  // ```\n  //      if (reportTranslator === null) {\n  //        reportTranslator = createReportTranslator({\n  //            ruleId,\n  //            severity,\n  //            sourceCode,\n  //            messageIds,\n  //            disableFixes\n  //        });\n  //    }\n  //    const problem = reportTranslator(...args);\n  //    // --- BEGIN MONKEY PATCH ---\n  //    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;\n  //    // --- END MONKEY PATCH ---\n  //\n  //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n  //        throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n  //    }\n  // ```\n  // Or this (9.37.0):\n  // ```\n  //    const problem = report.addRuleMessage(\n  //      ruleId,\n  //      severity,\n  //      ...args,\n  //    );\n  //    // --- BEGIN MONKEY PATCH ---\n  //    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;\n  //    // --- END MONKEY PATCH ---\n  //\n  //    if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n  //      throw new Error(\n  //        'Fixable rules must set the `meta.fixable` property to \"code\" or \"whitespace\".',\n  //      );\n  //    }\n  // ```\n  if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) {\n    outputFile += scanUntilMarker('const problem = report.addRuleMessage(');\n    outputFile += scanUntilMarker('ruleId,');\n    outputFile += scanUntilMarker('severity,');\n    outputFile += scanUntilMarker('...args,');\n    outputFile += scanUntilMarker(');');\n  } else {\n    outputFile += scanUntilMarker('const problem = reportTranslator(...args);');\n  }\n\n  outputFile += `\n    // --- BEGIN MONKEY PATCH ---`;\n  if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) {\n    outputFile += `\n    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) {\n      problem.suppressions ??= []; problem.suppressions.push({kind:\"bulk\",justification:\"\"});\n    }`;\n  } else {\n    outputFile += `\n    if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;`;\n  }\n\n  outputFile += `\n    // --- END MONKEY PATCH ---`;\n\n  //\n  // Match this:\n  // ```\n  //    Object.keys(ruleListeners).forEach(selector => {\n  //      ...\n  //    });\n  // ```\n  //\n  // Convert to something like this (9.25.1):\n  // ```\n  //    Object.keys(ruleListeners).forEach(selector => {\n  //      // --- BEGIN MONKEY PATCH ---\n  //      emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });\n  //      // --- END MONKEY PATCH ---\n  //      ...\n  //    });\n  // ```\n  // Or this (9.37.0):\n  // ```\n  //    Object.keys(ruleListeners).forEach(selector => {\n  //      // --- BEGIN MONKEY PATCH ---\n  //      visitor.add(selector, (...args) => { currentNode = args[args.length - 1]; });\n  //      // --- END MONKEY PATCH ---\n  //      ...\n  //    });\n  // ```\n  if (majorVersion >= 9) {\n    outputFile += scanUntilMarker('Object.keys(ruleListeners).forEach(selector => {');\n    outputFile += `\n      // --- BEGIN MONKEY PATCH ---\n`;\n    if (minorVersion >= 37) {\n      outputFile += `visitor.add(selector, (...args) => { currentNode = args[args.length - 1]; });`;\n    } else {\n      outputFile += `emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });`;\n    }\n\n    outputFile += `\n      // --- END MONKEY PATCH ---`;\n  }\n\n  outputFile += scanUntilMarker('class Linter {');\n  outputFile += scanUntilNewline();\n  outputFile += `\n    // --- BEGIN MONKEY PATCH ---\n    /**\n     * We intercept ESLint execution at the .eslintrc.js file, but unfortunately the Linter class is\n     * initialized before the .eslintrc.js file is executed. This means the internalSlotsMap that all\n     * the patched methods refer to is not initialized. This method checks if the internalSlotsMap is\n     * initialized, and if not, initializes it.\n     */\n    _conditionallyReinitialize({ cwd, configType } = {}) {\n        if (internalSlotsMap.get(this) === undefined) {\n            internalSlotsMap.set(this, {\n              cwd: normalizeCwd(cwd),\n              flags: [],\n              lastConfigArray: null,\n              lastSourceCode: null,\n              lastSuppressedMessages: [],\n              configType, // TODO: Remove after flat config conversion\n              parserMap: new Map([['espree', espree]]),\n              ruleMap: new Rules()\n            });\n\n            this.version = pkg.version;\n        }\n    }\n    // --- END MONKEY PATCH ---\n`;\n\n  const privateMethodNames: string[] = [];\n  let { index: indexOfNextMethod, isPublic } = getIndexOfNextMethod(inputIndex);\n\n  while (indexOfNextMethod !== -1) {\n    outputFile += scanUntilIndex(indexOfNextMethod);\n    if (isPublic) {\n      // Inject the monkey patch at the start of the public method\n      outputFile += scanUntilNewline();\n      outputFile += `        // --- BEGIN MONKEY PATCH ---\n        this._conditionallyReinitialize();\n        // --- END MONKEY PATCH ---\n`;\n    } else if (inputFile[inputIndex] === '#') {\n      // Replace the '#' private method with a '_' private method, so that our monkey patch\n      // can still call it. Otherwise, we get the following error during execution:\n      // TypeError: Receiver must be an instance of class Linter\n      const privateMethodName: string = scanUntilMarker('(');\n      // Remove the '(' at the end and stash it, since we need to escape it for the regex later\n      privateMethodNames.push(privateMethodName.slice(0, -1));\n      outputFile += `_${privateMethodName.slice(1)}`;\n    }\n\n    const indexResult: { index: number; isPublic?: boolean } = getIndexOfNextMethod(inputIndex);\n    indexOfNextMethod = indexResult.index;\n    isPublic = indexResult.isPublic;\n  }\n\n  outputFile += scanUntilEnd();\n\n  // Do a second pass to find and replace all calls to private methods with the patched versions.\n  if (privateMethodNames.length) {\n    const privateMethodCallRegex: RegExp = new RegExp(`\\.(${privateMethodNames.join('|')})\\\\(`, 'g');\n    outputFile = outputFile.replace(privateMethodCallRegex, (match, privateMethodName) => {\n      // Replace the leading '#' with a leading '_'\n      return `._${privateMethodName.slice(1)}(`;\n    });\n  }\n\n  fs.writeFileSync(outputFilePath, outputFile);\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/index.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import { eslintFolder, eslintPackageVersion } from '../_patch-base';
+import { findAndConsoleLogPatchPathCli, getPathToLinterJS, ensurePathToGeneratedPatch } from './path-utils';
+import { patchClass, extendVerifyFunction } from './bulk-suppressions-patch';
+import { generatePatchedLinterJsFileIfDoesNotExist } from './generate-patched-file';
+import { ESLINT_BULK_DETECT_ENV_VAR_NAME, ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME } from './constants';
+if (!eslintFolder) {
+    console.error('@rushstack/eslint-patch/eslint-bulk-suppressions: Could not find ESLint installation to patch.');
+    process.exit(1);
+}
+const eslintBulkDetectEnvVarValue = process.env[ESLINT_BULK_DETECT_ENV_VAR_NAME];
+if (eslintBulkDetectEnvVarValue === 'true' || eslintBulkDetectEnvVarValue === '1') {
+    findAndConsoleLogPatchPathCli();
+    process.exit(0);
+}
+const pathToLinterJS = getPathToLinterJS();
+process.env[ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME] = require.resolve('./bulk-suppressions-patch');
+const pathToGeneratedPatch = ensurePathToGeneratedPatch();
+generatePatchedLinterJsFileIfDoesNotExist(pathToLinterJS, pathToGeneratedPatch, eslintPackageVersion);
+const { Linter: LinterPatch } = require(pathToGeneratedPatch);
+LinterPatch.prototype.verify = extendVerifyFunction(LinterPatch.prototype.verify);
+const { Linter } = require(pathToLinterJS);
+patchClass(Linter, LinterPatch);
+//# sourceMappingURL=index.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/index.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,yCAAyC,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,+BAA+B,EAAE,mCAAmC,EAAE,MAAM,aAAa,CAAC;AAEnG,IAAI,CAAC,YAAY,EAAE,CAAC;IAClB,OAAO,CAAC,KAAK,CACX,gGAAgG,CACjG,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,2BAA2B,GAAuB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AACrG,IAAI,2BAA2B,KAAK,MAAM,IAAI,2BAA2B,KAAK,GAAG,EAAE,CAAC;IAClF,6BAA6B,EAAE,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,cAAc,GAAW,iBAAiB,EAAE,CAAC;AAEnD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAEhG,MAAM,oBAAoB,GAAW,0BAA0B,EAAE,CAAC;AAClE,yCAAyC,CAAC,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AACtG,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC9D,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAElF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE3C,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { eslintFolder, eslintPackageVersion } from '../_patch-base';\nimport { findAndConsoleLogPatchPathCli, getPathToLinterJS, ensurePathToGeneratedPatch } from './path-utils';\nimport { patchClass, extendVerifyFunction } from './bulk-suppressions-patch';\nimport { generatePatchedLinterJsFileIfDoesNotExist } from './generate-patched-file';\nimport { ESLINT_BULK_DETECT_ENV_VAR_NAME, ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME } from './constants';\n\nif (!eslintFolder) {\n  console.error(\n    '@rushstack/eslint-patch/eslint-bulk-suppressions: Could not find ESLint installation to patch.'\n  );\n\n  process.exit(1);\n}\n\nconst eslintBulkDetectEnvVarValue: string | undefined = process.env[ESLINT_BULK_DETECT_ENV_VAR_NAME];\nif (eslintBulkDetectEnvVarValue === 'true' || eslintBulkDetectEnvVarValue === '1') {\n  findAndConsoleLogPatchPathCli();\n  process.exit(0);\n}\n\nconst pathToLinterJS: string = getPathToLinterJS();\n\nprocess.env[ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME] = require.resolve('./bulk-suppressions-patch');\n\nconst pathToGeneratedPatch: string = ensurePathToGeneratedPatch();\ngeneratePatchedLinterJsFileIfDoesNotExist(pathToLinterJS, pathToGeneratedPatch, eslintPackageVersion);\nconst { Linter: LinterPatch } = require(pathToGeneratedPatch);\nLinterPatch.prototype.verify = extendVerifyFunction(LinterPatch.prototype.verify);\n\nconst { Linter } = require(pathToLinterJS);\n\npatchClass(Linter, LinterPatch);\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/path-utils.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/path-utils.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/path-utils.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+import fs from 'node:fs';
+import os from 'node:os';
+import { eslintFolder, eslintPackageVersion } from '../_patch-base';
+import { ESLINT_BULK_DETECT_ENV_VAR_NAME, ESLINT_BULK_STDOUT_END_DELIMETER, ESLINT_BULK_STDOUT_START_DELIMETER } from './constants';
+import currentPackageJson from '../../package.json';
+const CURRENT_PACKAGE_VERSION = currentPackageJson.version;
+export function findAndConsoleLogPatchPathCli() {
+    const eslintBulkDetectEnvVarValue = process.env[ESLINT_BULK_DETECT_ENV_VAR_NAME];
+    if (eslintBulkDetectEnvVarValue !== 'true' && eslintBulkDetectEnvVarValue !== '1') {
+        return;
+    }
+    const configuration = {
+        /**
+         * `@rushstack/eslint-bulk` should report an error if its package.json is older than this number
+         */
+        minCliVersion: '0.0.0',
+        /**
+         * `@rushstack/eslint-bulk` will invoke this entry point
+         */
+        cliEntryPoint: require.resolve('../exports/eslint-bulk')
+    };
+    console.log(ESLINT_BULK_STDOUT_START_DELIMETER + JSON.stringify(configuration) + ESLINT_BULK_STDOUT_END_DELIMETER);
+}
+export function getPathToLinterJS() {
+    if (!eslintFolder) {
+        throw new Error('Cannot find ESLint installation to patch.');
+    }
+    return `${eslintFolder}/lib/linter/linter.js`;
+}
+export function ensurePathToGeneratedPatch() {
+    const patchesFolderPath = `${os.tmpdir()}/rushstack-eslint-bulk-${CURRENT_PACKAGE_VERSION}/patches`;
+    fs.mkdirSync(patchesFolderPath, { recursive: true });
+    const pathToGeneratedPatch = `${patchesFolderPath}/linter-patch-v${eslintPackageVersion}.js`;
+    return pathToGeneratedPatch;
+}
+//# sourceMappingURL=path-utils.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/path-utils.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/path-utils.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/eslint-bulk-suppressions/path-utils.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/path-utils.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,+BAA+B,EAC/B,gCAAgC,EAChC,kCAAkC,EACnC,MAAM,aAAa,CAAC;AACrB,OAAO,kBAAkB,MAAM,oBAAoB,CAAC;AAOpD,MAAM,uBAAuB,GAAW,kBAAkB,CAAC,OAAO,CAAC;AAEnE,MAAM,UAAU,6BAA6B;IAC3C,MAAM,2BAA2B,GAAuB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACrG,IAAI,2BAA2B,KAAK,MAAM,IAAI,2BAA2B,KAAK,GAAG,EAAE,CAAC;QAClF,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAmB;QACpC;;WAEG;QACH,aAAa,EAAE,OAAO;QACtB;;WAEG;QACH,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC;KACzD,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,kCAAkC,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,gCAAgC,CACtG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,GAAG,YAAY,uBAAuB,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,iBAAiB,GAAW,GAAG,EAAE,CAAC,MAAM,EAAE,0BAA0B,uBAAuB,UAAU,CAAC;IAC5G,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAW,GAAG,iBAAiB,kBAAkB,oBAAoB,KAAK,CAAC;IACrG,OAAO,oBAAoB,CAAC;AAC9B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\nimport os from 'node:os';\n\nimport { eslintFolder, eslintPackageVersion } from '../_patch-base';\nimport {\n  ESLINT_BULK_DETECT_ENV_VAR_NAME,\n  ESLINT_BULK_STDOUT_END_DELIMETER,\n  ESLINT_BULK_STDOUT_START_DELIMETER\n} from './constants';\nimport currentPackageJson from '../../package.json';\n\ninterface IConfiguration {\n  minCliVersion: string;\n  cliEntryPoint: string;\n}\n\nconst CURRENT_PACKAGE_VERSION: string = currentPackageJson.version;\n\nexport function findAndConsoleLogPatchPathCli(): void {\n  const eslintBulkDetectEnvVarValue: string | undefined = process.env[ESLINT_BULK_DETECT_ENV_VAR_NAME];\n  if (eslintBulkDetectEnvVarValue !== 'true' && eslintBulkDetectEnvVarValue !== '1') {\n    return;\n  }\n\n  const configuration: IConfiguration = {\n    /**\n     * `@rushstack/eslint-bulk` should report an error if its package.json is older than this number\n     */\n    minCliVersion: '0.0.0',\n    /**\n     * `@rushstack/eslint-bulk` will invoke this entry point\n     */\n    cliEntryPoint: require.resolve('../exports/eslint-bulk')\n  };\n\n  console.log(\n    ESLINT_BULK_STDOUT_START_DELIMETER + JSON.stringify(configuration) + ESLINT_BULK_STDOUT_END_DELIMETER\n  );\n}\n\nexport function getPathToLinterJS(): string {\n  if (!eslintFolder) {\n    throw new Error('Cannot find ESLint installation to patch.');\n  }\n\n  return `${eslintFolder}/lib/linter/linter.js`;\n}\n\nexport function ensurePathToGeneratedPatch(): string {\n  const patchesFolderPath: string = `${os.tmpdir()}/rushstack-eslint-bulk-${CURRENT_PACKAGE_VERSION}/patches`;\n  fs.mkdirSync(patchesFolderPath, { recursive: true });\n  const pathToGeneratedPatch: string = `${patchesFolderPath}/linter-patch-v${eslintPackageVersion}.js`;\n  return pathToGeneratedPatch;\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/exports/eslint-bulk.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/exports/eslint-bulk.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/exports/eslint-bulk.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+// "lib/exports/eslint-bulk" is the entry point for the @rushstack/eslint-bulk command line front end.
+import '../eslint-bulk-suppressions/cli/start';
+//# sourceMappingURL=eslint-bulk.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/exports/eslint-bulk.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/exports/eslint-bulk.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/exports/eslint-bulk.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"eslint-bulk.js","sourceRoot":"","sources":["../../src/exports/eslint-bulk.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,sGAAsG;AAEtG,OAAO,uCAAuC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// \"lib/exports/eslint-bulk\" is the entry point for the @rushstack/eslint-bulk command line front end.\n\nimport '../eslint-bulk-suppressions/cli/start';\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/modern-module-resolution.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/modern-module-resolution.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/modern-module-resolution.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,67 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+// This is a workaround for https://github.com/eslint/eslint/issues/3458
+//
+// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:
+//
+//    require("@rushstack/eslint-patch/modern-module-resolution");
+//
+import { configArrayFactory, ModuleResolver, isModuleResolutionError, ESLINT_MAJOR_VERSION } from './_patch-base';
+// error: "The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received ''"
+const isInvalidImporterPath = (ex) => (ex === null || ex === void 0 ? void 0 : ex.code) === 'ERR_INVALID_ARG_VALUE';
+if (!configArrayFactory.__loadPluginPatched) {
+    configArrayFactory.__loadPluginPatched = true;
+    // eslint-disable-next-line @typescript-eslint/typedef
+    const originalLoadPlugin = configArrayFactory.prototype._loadPlugin;
+    if (ESLINT_MAJOR_VERSION === 6) {
+        // ESLint 6.x
+        // https://github.com/eslint/eslint/blob/9738f8cc864d769988ccf42bb70f524444df1349/lib/cli-engine/config-array-factory.js#L915
+        configArrayFactory.prototype._loadPlugin = function (name, importerPath, importerName) {
+            const originalResolve = ModuleResolver.resolve;
+            try {
+                ModuleResolver.resolve = function (moduleName, relativeToPath) {
+                    try {
+                        // resolve using importerPath instead of relativeToPath
+                        return originalResolve.call(this, moduleName, importerPath);
+                    }
+                    catch (e) {
+                        if (isModuleResolutionError(e) || isInvalidImporterPath(e)) {
+                            return originalResolve.call(this, moduleName, relativeToPath);
+                        }
+                        throw e;
+                    }
+                };
+                return originalLoadPlugin.apply(this, arguments);
+            }
+            finally {
+                ModuleResolver.resolve = originalResolve;
+            }
+        };
+    }
+    else {
+        // ESLint 7.x || 8.x
+        // https://github.com/eslint/eslintrc/blob/242d569020dfe4f561e4503787b99ec016337457/lib/config-array-factory.js#L1023
+        configArrayFactory.prototype._loadPlugin = function (name, ctx) {
+            const originalResolve = ModuleResolver.resolve;
+            try {
+                ModuleResolver.resolve = function (moduleName, relativeToPath) {
+                    try {
+                        // resolve using ctx.filePath instead of relativeToPath
+                        return originalResolve.call(this, moduleName, ctx.filePath);
+                    }
+                    catch (e) {
+                        if (isModuleResolutionError(e) || isInvalidImporterPath(e)) {
+                            return originalResolve.call(this, moduleName, relativeToPath);
+                        }
+                        throw e;
+                    }
+                };
+                return originalLoadPlugin.apply(this, arguments);
+            }
+            finally {
+                ModuleResolver.resolve = originalResolve;
+            }
+        };
+    }
+}
+//# sourceMappingURL=modern-module-resolution.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/modern-module-resolution.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/modern-module-resolution.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/modern-module-resolution.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"modern-module-resolution.js","sourceRoot":"","sources":["../src/modern-module-resolution.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,wEAAwE;AACxE,EAAE;AACF,oHAAoH;AACpH,EAAE;AACF,kEAAkE;AAClE,EAAE;AAEF,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,oHAAoH;AACpH,MAAM,qBAAqB,GAA6B,CAAC,EAAE,EAAE,EAAE,CAC7D,CAAC,EAAoC,aAApC,EAAE,uBAAF,EAAE,CAAoC,IAAI,MAAK,uBAAuB,CAAC;AAE1E,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,CAAC;IAC5C,kBAAkB,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAC9C,sDAAsD;IACtD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC;IAEpE,IAAI,oBAAoB,KAAK,CAAC,EAAE,CAAC;QAC/B,aAAa;QACb,6HAA6H;QAC7H,kBAAkB,CAAC,SAAS,CAAC,WAAW,GAAG,UACzC,IAAY,EACZ,YAAoB,EACpB,YAAoB;YAEpB,MAAM,eAAe,GAA2D,cAAc,CAAC,OAAO,CAAC;YACvG,IAAI,CAAC;gBACH,cAAc,CAAC,OAAO,GAAG,UAAU,UAAkB,EAAE,cAAsB;oBAC3E,IAAI,CAAC;wBACH,uDAAuD;wBACvD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;oBAC9D,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,IAAI,uBAAuB,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3D,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;wBAChE,CAAC;wBACD,MAAM,CAAC,CAAC;oBACV,CAAC;gBACH,CAAC,CAAC;gBACF,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;oBAAS,CAAC;gBACT,cAAc,CAAC,OAAO,GAAG,eAAe,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,oBAAoB;QACpB,qHAAqH;QACrH,kBAAkB,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,IAAY,EAAE,GAA4B;YAC7F,MAAM,eAAe,GACnB,cAAc,CAAC,OAAO,CAAC;YACzB,IAAI,CAAC;gBACH,cAAc,CAAC,OAAO,GAAG,UAAU,UAAkB,EAAE,cAAsB;oBAC3E,IAAI,CAAC;wBACH,uDAAuD;wBACvD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC9D,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,IAAI,uBAAuB,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3D,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;wBAChE,CAAC;wBACD,MAAM,CAAC,CAAC;oBACV,CAAC;gBACH,CAAC,CAAC;gBACF,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;oBAAS,CAAC;gBACT,cAAc,CAAC,OAAO,GAAG,eAAe,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This is a workaround for https://github.com/eslint/eslint/issues/3458\n//\n// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:\n//\n//    require(\"@rushstack/eslint-patch/modern-module-resolution\");\n//\n\nimport {\n  configArrayFactory,\n  ModuleResolver,\n  isModuleResolutionError,\n  ESLINT_MAJOR_VERSION\n} from './_patch-base';\n\n// error: \"The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received ''\"\nconst isInvalidImporterPath: (ex: unknown) => boolean = (ex) =>\n  (ex as { code: unknown } | undefined)?.code === 'ERR_INVALID_ARG_VALUE';\n\nif (!configArrayFactory.__loadPluginPatched) {\n  configArrayFactory.__loadPluginPatched = true;\n  // eslint-disable-next-line @typescript-eslint/typedef\n  const originalLoadPlugin = configArrayFactory.prototype._loadPlugin;\n\n  if (ESLINT_MAJOR_VERSION === 6) {\n    // ESLint 6.x\n    // https://github.com/eslint/eslint/blob/9738f8cc864d769988ccf42bb70f524444df1349/lib/cli-engine/config-array-factory.js#L915\n    configArrayFactory.prototype._loadPlugin = function (\n      name: string,\n      importerPath: string,\n      importerName: string\n    ) {\n      const originalResolve: (moduleName: string, relativeToPath: string) => string = ModuleResolver.resolve;\n      try {\n        ModuleResolver.resolve = function (moduleName: string, relativeToPath: string) {\n          try {\n            // resolve using importerPath instead of relativeToPath\n            return originalResolve.call(this, moduleName, importerPath);\n          } catch (e) {\n            if (isModuleResolutionError(e) || isInvalidImporterPath(e)) {\n              return originalResolve.call(this, moduleName, relativeToPath);\n            }\n            throw e;\n          }\n        };\n        return originalLoadPlugin.apply(this, arguments);\n      } finally {\n        ModuleResolver.resolve = originalResolve;\n      }\n    };\n  } else {\n    // ESLint 7.x || 8.x\n    // https://github.com/eslint/eslintrc/blob/242d569020dfe4f561e4503787b99ec016337457/lib/config-array-factory.js#L1023\n    configArrayFactory.prototype._loadPlugin = function (name: string, ctx: Record<string, unknown>) {\n      const originalResolve: (moduleName: string, relativeToPath: string | unknown) => string =\n        ModuleResolver.resolve;\n      try {\n        ModuleResolver.resolve = function (moduleName: string, relativeToPath: string) {\n          try {\n            // resolve using ctx.filePath instead of relativeToPath\n            return originalResolve.call(this, moduleName, ctx.filePath);\n          } catch (e) {\n            if (isModuleResolutionError(e) || isInvalidImporterPath(e)) {\n              return originalResolve.call(this, moduleName, relativeToPath);\n            }\n            throw e;\n          }\n        };\n        return originalLoadPlugin.apply(this, arguments);\n      } finally {\n        ModuleResolver.resolve = originalResolve;\n      }\n    };\n  }\n}\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/usage.js
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/usage.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/usage.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,6 @@
+// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
+// See LICENSE in the project root for license information.
+throw new Error('The @rushstack/eslint-patch package does not have a default entry point.' +
+    ' See README.md for usage instructions.');
+export {};
+//# sourceMappingURL=usage.js.map
Index: frontend/node_modules/@rushstack/eslint-patch/lib-esm/usage.js.map
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/lib-esm/usage.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/lib-esm/usage.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,MAAM,IAAI,KAAK,CACb,0EAA0E;IACxE,wCAAwC,CAC3C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nthrow new Error(\n  'The @rushstack/eslint-patch package does not have a default entry point.' +\n    ' See README.md for usage instructions.'\n);\n\nexport {};\n"]}
Index: frontend/node_modules/@rushstack/eslint-patch/package.json
===================================================================
--- frontend/node_modules/@rushstack/eslint-patch/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@rushstack/eslint-patch/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,88 @@
+{
+  "name": "@rushstack/eslint-patch",
+  "version": "1.16.1",
+  "description": "Enhance ESLint with better support for large scale monorepos",
+  "main": "./lib-commonjs/usage.js",
+  "module": "./lib-esm/usage.js",
+  "exports": {
+    ".": {
+      "node": "./lib-commonjs/usage.js",
+      "import": "./lib-esm/usage.js",
+      "require": "./lib-commonjs/usage.js"
+    },
+    "./modern-module-resolution": {
+      "node": "./lib-commonjs/modern-module-resolution.js",
+      "import": "./lib-esm/modern-module-resolution.js",
+      "require": "./lib-commonjs/modern-module-resolution.js"
+    },
+    "./custom-config-package-names": {
+      "node": "./lib-commonjs/custom-config-package-names.js",
+      "import": "./lib-esm/custom-config-package-names.js",
+      "require": "./lib-commonjs/custom-config-package-names.js"
+    },
+    "./eslint-bulk-suppressions": {
+      "node": "./lib-commonjs/eslint-bulk-suppressions/index.js",
+      "import": "./lib-esm/eslint-bulk-suppressions/index.js",
+      "require": "./lib-commonjs/eslint-bulk-suppressions/index.js"
+    },
+    "./lib/*": {
+      "types": "./lib-dts/*.d.ts",
+      "node": "./lib-commonjs/*.js",
+      "import": "./lib-esm/*.js",
+      "require": "./lib-commonjs/*.js"
+    },
+    "./package.json": "./package.json"
+  },
+  "typesVersions": {
+    "*": {
+      "lib/*": [
+        "lib-dts/*"
+      ]
+    }
+  },
+  "license": "MIT",
+  "repository": {
+    "url": "https://github.com/microsoft/rushstack.git",
+    "type": "git",
+    "directory": "eslint/eslint-patch"
+  },
+  "homepage": "https://rushstack.io",
+  "keywords": [
+    "eslintrc",
+    "config",
+    "module",
+    "resolve",
+    "resolver",
+    "plugin",
+    "relative",
+    "package",
+    "bulk",
+    "suppressions",
+    "monorepo",
+    "monkey",
+    "patch"
+  ],
+  "devDependencies": {
+    "@rushstack/heft": "1.2.0",
+    "@types/eslint-8": "npm:@types/eslint@8.56.10",
+    "@types/eslint-9": "npm:@types/eslint@9.6.1",
+    "@typescript-eslint/types": "~8.46.0",
+    "eslint-8": "npm:eslint@~8.57.0",
+    "eslint-9": "npm:eslint@~9.25.1",
+    "eslint": "~9.37.0",
+    "typescript": "~5.8.2",
+    "decoupled-local-node-rig": "1.0.0"
+  },
+  "sideEffects": [
+    "lib-esm/modern-module-resolution.js",
+    "lib-esm/custom-config-package-names.js",
+    "lib-esm/eslint-bulk-suppressions/index.js",
+    "lib-commonjs/modern-module-resolution.js",
+    "lib-commonjs/custom-config-package-names.js",
+    "lib-commonjs/eslint-bulk-suppressions/index.js"
+  ],
+  "scripts": {
+    "build": "heft build --clean",
+    "_phase:build": "heft run --only build -- --clean"
+  }
+}
