Repository: TheOdinProject/odin-bot-v2
Pull request #608 (2024-09-16 07:13:06)

Bump eslint-plugin-import from 2.29.1 to 2.30.0
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.29.1 to 2.30.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/import-js/eslint-plugin-import/releases">eslint-plugin-import's releases</a>.</em></p>
<blockquote>
<h2>v2.30.0</h2>
<h3>Added</h3>
<ul>
<li><a href="./docs/rules/dynamic-import-chunkname.md"><code>dynamic-import-chunkname</code></a>: add <code>allowEmpty</code> option to allow empty leading comments (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2942">#2942</a>, thanks [<a href="https://github.com/JiangWeixian"><code>@​JiangWeixian</code></a>])</li>
<li><a href="./docs/rules/dynamic-import-chunkname.md"><code>dynamic-import-chunkname</code></a>: Allow empty chunk name when webpackMode: 'eager' is set; add suggestions to remove name in eager mode (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3004">#3004</a>, thanks [<a href="https://github.com/amsardesai"><code>@​amsardesai</code></a>])</li>
<li>[<code>no-unused-modules</code>]: Add <code>ignoreUnusedTypeExports</code> option (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3011">#3011</a>, thanks [<a href="https://github.com/silverwind"><code>@​silverwind</code></a>])</li>
<li>add support for Flat Config (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3018">#3018</a>, thanks [<a href="https://github.com/michaelfaith"><code>@​michaelfaith</code></a>])</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>[<code>no-extraneous-dependencies</code>]: allow wrong path (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3012">#3012</a>, thanks [<a href="https://github.com/chabb"><code>@​chabb</code></a>])</li>
<li>[<code>no-cycle</code>]: use scc algorithm to optimize (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2998">#2998</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[<code>no-duplicates</code>]: Removing duplicates breaks in TypeScript (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3033">#3033</a>, thanks [<a href="https://github.com/yesl-kim"><code>@​yesl-kim</code></a>])</li>
<li><a href="./docs/rules/newline-after-import.md"><code>newline-after-import</code></a>: fix considerComments option when require (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2952">#2952</a>, thanks [<a href="https://github.com/developer-bandi"><code>@​developer-bandi</code></a>])</li>
<li>[<code>order</code>]: do not compare first path segment for relative paths (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2682">#2682</a>) (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2885">#2885</a>, thanks [<a href="https://github.com/mihkeleidast"><code>@​mihkeleidast</code></a>])</li>
</ul>
<h3>Changed</h3>
<ul>
<li>[Docs] <code>no-extraneous-dependencies</code>: Make glob pattern description more explicit (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2944">#2944</a>, thanks [<a href="https://github.com/mulztob"><code>@​mulztob</code></a>])</li>
<li>[<code>no-unused-modules</code>]: add console message to help debug <a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2866">#2866</a></li>
<li>[Refactor] <code>ExportMap</code>: make procedures static instead of monkeypatching exportmap (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2982">#2982</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[Refactor] <code>ExportMap</code>: separate ExportMap instance from its builder logic (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2985">#2985</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[Docs] <code>order</code>: Add a quick note on how unbound imports and --fix (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2640">#2640</a>, thanks [<a href="https://github.com/minervabot"><code>@​minervabot</code></a>])</li>
<li>[Tests] appveyor -&gt; GHA (run tests on Windows in both pwsh and WSL + Ubuntu) (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2987">#2987</a>, thanks [<a href="https://github.com/joeyguerra"><code>@​joeyguerra</code></a>])</li>
<li>[actions] migrate OSX tests to GHA ([ljharb#37], thanks [<a href="https://github.com/aks"><code>@​aks</code></a>-])</li>
<li>[Refactor] <code>exportMapBuilder</code>: avoid hoisting (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2989">#2989</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[Refactor] <code>ExportMap</code>: extract &quot;builder&quot; logic to separate files (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2991">#2991</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[Docs] [<code>order</code>]: update the description of the <code>pathGroupsExcludedImportTypes</code> option (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3036">#3036</a>, thanks [<a href="https://github.com/liby"><code>@​liby</code></a>])</li>
<li>[readme] Clarify how to install the plugin (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2993">#2993</a>, thanks [<a href="https://github.com/jwbth"><code>@​jwbth</code></a>])</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md">eslint-plugin-import's changelog</a>.</em></p>
<blockquote>
<h2>[2.30.0] - 2024-09-02</h2>
<h3>Added</h3>
<ul>
<li>[<code>dynamic-import-chunkname</code>]: add <code>allowEmpty</code> option to allow empty leading comments (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2942">#2942</a>, thanks [<a href="https://github.com/JiangWeixian"><code>@​JiangWeixian</code></a>])</li>
<li>[<code>dynamic-import-chunkname</code>]: Allow empty chunk name when webpackMode: 'eager' is set; add suggestions to remove name in eager mode (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3004">#3004</a>, thanks [<a href="https://github.com/amsardesai"><code>@​amsardesai</code></a>])</li>
<li>[<code>no-unused-modules</code>]: Add <code>ignoreUnusedTypeExports</code> option (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3011">#3011</a>, thanks [<a href="https://github.com/silverwind"><code>@​silverwind</code></a>])</li>
<li>add support for Flat Config (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3018">#3018</a>, thanks [<a href="https://github.com/michaelfaith"><code>@​michaelfaith</code></a>])</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>[<code>no-extraneous-dependencies</code>]: allow wrong path (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3012">#3012</a>, thanks [<a href="https://github.com/chabb"><code>@​chabb</code></a>])</li>
<li>[<code>no-cycle</code>]: use scc algorithm to optimize (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2998">#2998</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[<code>no-duplicates</code>]: Removing duplicates breaks in TypeScript (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3033">#3033</a>, thanks [<a href="https://github.com/yesl-kim"><code>@​yesl-kim</code></a>])</li>
<li>[<code>newline-after-import</code>]: fix considerComments option when require (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2952">#2952</a>, thanks [<a href="https://github.com/developer-bandi"><code>@​developer-bandi</code></a>])</li>
<li>[<code>order</code>]: do not compare first path segment for relative paths (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2682">#2682</a>) (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2885">#2885</a>, thanks [<a href="https://github.com/mihkeleidast"><code>@​mihkeleidast</code></a>])</li>
</ul>
<h3>Changed</h3>
<ul>
<li>[Docs] <code>no-extraneous-dependencies</code>: Make glob pattern description more explicit (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2944">#2944</a>, thanks [<a href="https://github.com/mulztob"><code>@​mulztob</code></a>])</li>
<li>[<code>no-unused-modules</code>]: add console message to help debug <a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2866">#2866</a></li>
<li>[Refactor] <code>ExportMap</code>: make procedures static instead of monkeypatching exportmap (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2982">#2982</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[Refactor] <code>ExportMap</code>: separate ExportMap instance from its builder logic (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2985">#2985</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[Docs] <code>order</code>: Add a quick note on how unbound imports and --fix (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2640">#2640</a>, thanks [<a href="https://github.com/minervabot"><code>@​minervabot</code></a>])</li>
<li>[Tests] appveyor -&gt; GHA (run tests on Windows in both pwsh and WSL + Ubuntu) (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2987">#2987</a>, thanks [<a href="https://github.com/joeyguerra"><code>@​joeyguerra</code></a>])</li>
<li>[actions] migrate OSX tests to GHA ([ljharb#37], thanks [<a href="https://github.com/aks"><code>@​aks</code></a>-])</li>
<li>[Refactor] <code>exportMapBuilder</code>: avoid hoisting (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2989">#2989</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[Refactor] <code>ExportMap</code>: extract &quot;builder&quot; logic to separate files (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2991">#2991</a>, thanks [<a href="https://github.com/soryy708"><code>@​soryy708</code></a>])</li>
<li>[Docs] [<code>order</code>]: update the description of the <code>pathGroupsExcludedImportTypes</code> option (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/3036">#3036</a>, thanks [<a href="https://github.com/liby"><code>@​liby</code></a>])</li>
<li>[readme] Clarify how to install the plugin (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2993">#2993</a>, thanks [<a href="https://github.com/jwbth"><code>@​jwbth</code></a>])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/18787d3e6966028983af81a878d1a505893932d4"><code>18787d3</code></a> Bump to 2.30.0</li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/990229879c6790d64f3673ac59b0c9a9736f79fe"><code>9902298</code></a> [Deps] update <code>eslint-module-utils</code></li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/9d194a6e4690cc8afed68cb7736a81dd3a919135"><code>9d194a6</code></a> [utils] v2.9.0</li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/0a58d7572c8267203182043608d56ead1c50f4ce"><code>0a58d75</code></a> [resolvers/webpack] v0.13.9</li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/a3015ebd1bb6251990aee79e292d7116e9f191ff"><code>a3015eb</code></a> [Test] <code>namespace</code>: ensure valid case is actually included</li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/8bdb32bc8be5364f4adeb781b2321ea62c9ab46e"><code>8bdb32b</code></a> [Test] add explicit marker for trailing whitespace in cases</li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/038c26cade3c85c823ba2eafd52bb91ae458f2b2"><code>038c26c</code></a> [readme] Clarify how to install the plugin</li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/32a2b8986961639cc9c19ebac1f1f0640fb78ef5"><code>32a2b89</code></a> [Fix] <code>order</code>: do not compare first path segment for relative paths (<a href="https://redirect.github.com/import-js/eslint-plugin-import/issues/2682">#2682</a>)</li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/ee1ea025a6843fe4380927832a31761f1f4ae339"><code>ee1ea02</code></a> [Fix] <code>newline-after-import</code>: fix considerComments option when require</li>
<li><a href="https://github.com/import-js/eslint-plugin-import/commit/806e3c2ccc65456a2d8532d575c9f443355bda82"><code>806e3c2</code></a> [New] add support for Flat Config</li>
<li>Additional commits viewable in <a href="https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.30.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint-plugin-import&package-manager=npm_and_yarn&previous-version=2.29.1&new-version=2.30.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>


Patch:
diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml
new file mode 100644
index 0000000..37b5226
--- /dev/null
+++ b/.github/workflows/prettier.yml
@@ -0,0 +1,28 @@
+name: Prettier
+on:
+  pull_request:
+    paths:
+      - '**/*.js'
+      - '**/*.json'
+      - '**/*.yml'
+      - '**/*.yaml'
+
+jobs:
+  format_check:
+    name: Check formatting
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - uses: tj-actions/changed-files@v41
+        id: changed-files
+        with:
+          files: |
+            **/*.js
+            **/*.json
+            **/*.yml
+            **/*.yaml
+          separator: ' '
+      - uses: creyD/prettier_action@v4.3
+        with:
+          dry: True
+          prettier_options: --check ${{ steps.changed-files.outputs.all_changed_files }}
diff --git a/botCommands/mockData.js b/botCommands/mockData.js
index a7cc74c..87fe126 100644
--- a/botCommands/mockData.js
+++ b/botCommands/mockData.js
@@ -6,13 +6,10 @@ const generateMentions = (number) => {
   for (let i = 0; i < number; i += 1) {
     collection.set(
       `User${i + 1}`,
-      new ClientUser(
-        'client',
-        {
-          id: i + 1,
-          username: `User${i + 1}`,
-        },
-      ),
+      new ClientUser('client', {
+        id: i + 1,
+        username: `User${i + 1}`,
+      }),
     );
   }
 
@@ -42,7 +39,36 @@ const generateLeaderData = (num) => {
   return arr;
 };
 
+const generateLeaderDataWithMarkdown = (num) => {
+  const exampleMarkdown = [
+    '||test||',
+    '*test*',
+    '**test**',
+    '`test`',
+    '```test```',
+  ];
+  let markdownPointer = 0;
+  const arr = [];
+  let id = 100;
+  let points = 1000;
+
+  for (let i = 0; i < num; i += 1) {
+    arr.push({
+      id,
+      discord_id: id,
+      points,
+      displayName: `user${id} ${exampleMarkdown[markdownPointer]}`,
+    });
+    id += 1;
+    points -= 1;
+    markdownPointer = markdownPointer + 1 > 3 ? 0 : markdownPointer + 1;
+  }
+
+  return arr;
+};
+
 module.exports = {
   generateMentions,
   generateLeaderData,
+  generateLeaderDataWithMarkdown,
 };
diff --git a/package-lock.json b/package-lock.json
index 27abb7b..3503d9e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -24,7 +24,7 @@
         "eslint": "^8.57.0",
         "eslint-config-airbnb-base": "^15.0.0",
         "eslint-config-prettier": "^9.1.0",
-        "eslint-plugin-import": "^2.29.1",
+        "eslint-plugin-import": "^2.30.0",
         "husky": "^9.1.6",
         "jest": "^29.7.0",
         "lint-staged": "^15.2.10",
@@ -2701,6 +2701,12 @@
         "node": ">=14"
       }
     },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true
+    },
     "node_modules/@sapphire/async-queue": {
       "version": "1.5.3",
       "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.3.tgz",
@@ -2999,28 +3005,32 @@
       }
     },
     "node_modules/array-buffer-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
-      "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+      "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "is-array-buffer": "^3.0.1"
+        "call-bind": "^1.0.5",
+        "is-array-buffer": "^3.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/array-includes": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
-      "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1",
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.4",
         "is-string": "^1.0.7"
       },
       "engines": {
@@ -3031,16 +3041,17 @@
       }
     },
     "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
-      "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0",
-        "get-intrinsic": "^1.2.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-shim-unscopables": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -3086,16 +3097,18 @@
       }
     },
     "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz",
-      "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
       "dev": true,
       "dependencies": {
-        "array-buffer-byte-length": "^1.0.0",
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "get-intrinsic": "^1.2.1",
-        "is-array-buffer": "^3.0.2",
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.2.1",
+        "get-intrinsic": "^1.2.3",
+        "is-array-buffer": "^3.0.4",
         "is-shared-array-buffer": "^1.0.2"
       },
       "engines": {
@@ -3111,10 +3124,13 @@
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
     },
     "node_modules/available-typed-arrays": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
-      "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
       "dev": true,
+      "dependencies": {
+        "possible-typed-array-names": "^1.0.0"
+      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -3393,13 +3409,19 @@
       "dev": true
     },
     "node_modules/call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+      "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
       "dev": true,
       "dependencies": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "set-function-length": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -3742,6 +3764,57 @@
         "node": ">= 8"
       }
     },
+    "node_modules/data-view-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+      "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/data-view-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+      "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/data-view-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/debug": {
       "version": "4.3.6",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
@@ -3787,12 +3860,30 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/define-data-property": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+      "dev": true,
+      "dependencies": {
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/define-properties": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
-      "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
       "dev": true,
       "dependencies": {
+        "define-data-property": "^1.0.1",
         "has-property-descriptors": "^1.0.0",
         "object-keys": "^1.1.1"
       },
@@ -3953,50 +4044,57 @@
       }
     },
     "node_modules/es-abstract": {
-      "version": "1.22.1",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz",
-      "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==",
-      "dev": true,
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.0",
-        "arraybuffer.prototype.slice": "^1.0.1",
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "es-set-tostringtag": "^2.0.1",
+      "version": "1.23.3",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+      "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+      "dev": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.1",
+        "arraybuffer.prototype.slice": "^1.0.3",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
+        "data-view-buffer": "^1.0.1",
+        "data-view-byte-length": "^1.0.1",
+        "data-view-byte-offset": "^1.0.0",
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-set-tostringtag": "^2.0.3",
         "es-to-primitive": "^1.2.1",
-        "function.prototype.name": "^1.1.5",
-        "get-intrinsic": "^1.2.1",
-        "get-symbol-description": "^1.0.0",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.4",
+        "get-symbol-description": "^1.0.2",
         "globalthis": "^1.0.3",
         "gopd": "^1.0.1",
-        "has": "^1.0.3",
-        "has-property-descriptors": "^1.0.0",
-        "has-proto": "^1.0.1",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.0.3",
         "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.5",
-        "is-array-buffer": "^3.0.2",
+        "hasown": "^2.0.2",
+        "internal-slot": "^1.0.7",
+        "is-array-buffer": "^3.0.4",
         "is-callable": "^1.2.7",
-        "is-negative-zero": "^2.0.2",
+        "is-data-view": "^1.0.1",
+        "is-negative-zero": "^2.0.3",
         "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
+        "is-shared-array-buffer": "^1.0.3",
         "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.10",
+        "is-typed-array": "^1.1.13",
         "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.3",
+        "object-inspect": "^1.13.1",
         "object-keys": "^1.1.1",
-        "object.assign": "^4.1.4",
-        "regexp.prototype.flags": "^1.5.0",
-        "safe-array-concat": "^1.0.0",
-        "safe-regex-test": "^1.0.0",
-        "string.prototype.trim": "^1.2.7",
-        "string.prototype.trimend": "^1.0.6",
-        "string.prototype.trimstart": "^1.0.6",
-        "typed-array-buffer": "^1.0.0",
-        "typed-array-byte-length": "^1.0.0",
-        "typed-array-byte-offset": "^1.0.0",
-        "typed-array-length": "^1.0.4",
+        "object.assign": "^4.1.5",
+        "regexp.prototype.flags": "^1.5.2",
+        "safe-array-concat": "^1.1.2",
+        "safe-regex-test": "^1.0.3",
+        "string.prototype.trim": "^1.2.9",
+        "string.prototype.trimend": "^1.0.8",
+        "string.prototype.trimstart": "^1.0.8",
+        "typed-array-buffer": "^1.0.2",
+        "typed-array-byte-length": "^1.0.1",
+        "typed-array-byte-offset": "^1.0.2",
+        "typed-array-length": "^1.0.6",
         "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.10"
+        "which-typed-array": "^1.1.15"
       },
       "engines": {
         "node": ">= 0.4"
@@ -4005,27 +4103,60 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/es-define-property": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+      "dev": true,
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/es-set-tostringtag": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
-      "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+      "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
       "dev": true,
       "dependencies": {
-        "get-intrinsic": "^1.1.3",
-        "has": "^1.0.3",
-        "has-tostringtag": "^1.0.0"
+        "get-intrinsic": "^1.2.4",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.1"
       },
       "engines": {
         "node": ">= 0.4"
       }
     },
     "node_modules/es-shim-unscopables": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
-      "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
       "dev": true,
       "dependencies": {
-        "has": "^1.0.3"
+        "hasown": "^2.0.0"
       }
     },
     "node_modules/es-to-primitive": {
@@ -4179,9 +4310,9 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
-      "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz",
+      "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==",
       "dev": true,
       "dependencies": {
         "debug": "^3.2.7"
@@ -4205,26 +4336,27 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.29.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
-      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+      "version": "2.30.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
+      "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
       "dev": true,
       "dependencies": {
-        "array-includes": "^3.1.7",
-        "array.prototype.findlastindex": "^1.2.3",
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.8",
+        "array.prototype.findlastindex": "^1.2.5",
         "array.prototype.flat": "^1.3.2",
         "array.prototype.flatmap": "^1.3.2",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.8.0",
-        "hasown": "^2.0.0",
-        "is-core-module": "^2.13.1",
+        "eslint-module-utils": "^2.9.0",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.7",
-        "object.groupby": "^1.0.1",
-        "object.values": "^1.1.7",
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.0",
         "semver": "^6.3.1",
         "tsconfig-paths": "^3.15.0"
       },
@@ -4845,15 +4977,15 @@
       }
     },
     "node_modules/function.prototype.name": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0",
-        "functions-have-names": "^1.2.2"
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
       },
       "engines": {
         "node": ">= 0.4"
@@ -4902,15 +5034,19 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
-      "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
       "dev": true,
       "dependencies": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
         "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3"
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -4938,13 +5074,14 @@
       }
     },
     "node_modules/get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
+        "call-bind": "^1.0.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4"
       },
       "engines": {
         "node": ">= 0.4"
@@ -5063,18 +5200,6 @@
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
       "dev": true
     },
-    "node_modules/has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
     "node_modules/has-bigints": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -5094,21 +5219,21 @@
       }
     },
     "node_modules/has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
       "dev": true,
       "dependencies": {
-        "get-intrinsic": "^1.1.1"
+        "es-define-property": "^1.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/has-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
-      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+      "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
       "dev": true,
       "engines": {
         "node": ">= 0.4"
@@ -5130,12 +5255,12 @@
       }
     },
     "node_modules/has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
       "dev": true,
       "dependencies": {
-        "has-symbols": "^1.0.2"
+        "has-symbols": "^1.0.3"
       },
       "engines": {
         "node": ">= 0.4"
@@ -5145,9 +5270,9 @@
       }
     },
     "node_modules/hasown": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
-      "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
       "dev": true,
       "dependencies": {
         "function-bind": "^1.1.2"
@@ -5262,13 +5387,13 @@
       "dev": true
     },
     "node_modules/internal-slot": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
-      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+      "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
       "dev": true,
       "dependencies": {
-        "get-intrinsic": "^1.2.0",
-        "has": "^1.0.3",
+        "es-errors": "^1.3.0",
+        "hasown": "^2.0.0",
         "side-channel": "^1.0.4"
       },
       "engines": {
@@ -5299,14 +5424,16 @@
       }
     },
     "node_modules/is-array-buffer": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
-      "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+      "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.0",
-        "is-typed-array": "^1.1.10"
+        "get-intrinsic": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -5370,12 +5497,30 @@
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
-      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
       "dev": true,
       "dependencies": {
-        "hasown": "^2.0.0"
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-data-view": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+      "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+      "dev": true,
+      "dependencies": {
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -5432,9 +5577,9 @@
       }
     },
     "node_modules/is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
       "dev": true,
       "engines": {
         "node": ">= 0.4"
@@ -5490,12 +5635,15 @@
       }
     },
     "node_modules/is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+      "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2"
+        "call-bind": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -5544,16 +5692,12 @@
       }
     },
     "node_modules/is-typed-array": {
-      "version": "1.1.10",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
-      "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+      "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
       "dev": true,
       "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
+        "which-typed-array": "^1.1.14"
       },
       "engines": {
         "node": ">= 0.4"
@@ -6966,10 +7110,13 @@
       }
     },
     "node_modules/object-inspect": {
-      "version": "1.12.3",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
-      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+      "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
       "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -6984,13 +7131,13 @@
       }
     },
     "node_modules/object.assign": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+      "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
         "has-symbols": "^1.0.3",
         "object-keys": "^1.1.1"
       },
@@ -7016,14 +7163,15 @@
       }
     },
     "node_modules/object.fromentries": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
-      "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -7033,26 +7181,28 @@
       }
     },
     "node_modules/object.groupby": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
-      "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/object.values": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
-      "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+      "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -7294,6 +7444,15 @@
         "node": ">=8"
       }
     },
+    "node_modules/possible-typed-array-names": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+      "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -7483,14 +7642,15 @@
       }
     },
     "node_modules/regexp.prototype.flags": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
-      "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "functions-have-names": "^1.2.3"
+        "call-bind": "^1.0.6",
+        "define-properties": "^1.2.1",
+        "es-errors": "^1.3.0",
+        "set-function-name": "^2.0.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -7720,13 +7880,13 @@
       }
     },
     "node_modules/safe-array-concat": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz",
-      "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+      "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.0",
+        "call-bind": "^1.0.7",
+        "get-intrinsic": "^1.2.4",
         "has-symbols": "^1.0.3",
         "isarray": "^2.0.5"
       },
@@ -7738,15 +7898,18 @@
       }
     },
     "node_modules/safe-regex-test": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
-      "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
         "is-regex": "^1.1.4"
       },
+      "engines": {
+        "node": ">= 0.4"
+      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -7766,6 +7929,38 @@
         "node": ">=10"
       }
     },
+    "node_modules/set-function-length": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+      "dev": true,
+      "dependencies": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/set-function-name": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+      "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+      "dev": true,
+      "dependencies": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -7786,14 +7981,18 @@
       }
     },
     "node_modules/side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+      "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -7964,14 +8163,15 @@
       }
     },
     "node_modules/string.prototype.trim": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
-      "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+      "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.0",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -7981,28 +8181,31 @@
       }
     },
     "node_modules/string.prototype.trimend": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
-      "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+      "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/string.prototype.trimstart": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
-      "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -8241,29 +8444,30 @@
       }
     },
     "node_modules/typed-array-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
-      "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.1",
-        "is-typed-array": "^1.1.10"
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.13"
       },
       "engines": {
         "node": ">= 0.4"
       }
     },
     "node_modules/typed-array-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
-      "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+      "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "has-proto": "^1.0.1",
-        "is-typed-array": "^1.1.10"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
       },
       "engines": {
         "node": ">= 0.4"
@@ -8273,16 +8477,17 @@
       }
     },
     "node_modules/typed-array-byte-offset": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
-      "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+      "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
       "dev": true,
       "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "has-proto": "^1.0.1",
-        "is-typed-array": "^1.1.10"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
       },
       "engines": {
         "node": ">= 0.4"
@@ -8292,14 +8497,20 @@
       }
     },
     "node_modules/typed-array-length": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
-      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+      "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "is-typed-array": "^1.1.9"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13",
+        "possible-typed-array-names": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -8467,16 +8678,16 @@
       }
     },
     "node_modules/which-typed-array": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
-      "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
+      "version": "1.1.15",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+      "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
       "dev": true,
       "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -10543,6 +10754,12 @@
       "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
       "optional": true
     },
+    "@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true
+    },
     "@sapphire/async-queue": {
       "version": "1.5.3",
       "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.3.tgz",
@@ -10792,39 +11009,41 @@
       }
     },
     "array-buffer-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
-      "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+      "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "is-array-buffer": "^3.0.1"
+        "call-bind": "^1.0.5",
+        "is-array-buffer": "^3.0.4"
       }
     },
     "array-includes": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
-      "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1",
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.4",
         "is-string": "^1.0.7"
       }
     },
     "array.prototype.findlastindex": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
-      "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0",
-        "get-intrinsic": "^1.2.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-shim-unscopables": "^1.0.2"
       }
     },
     "array.prototype.flat": {
@@ -10852,16 +11071,18 @@
       }
     },
     "arraybuffer.prototype.slice": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz",
-      "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
       "dev": true,
       "requires": {
-        "array-buffer-byte-length": "^1.0.0",
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "get-intrinsic": "^1.2.1",
-        "is-array-buffer": "^3.0.2",
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.2.1",
+        "get-intrinsic": "^1.2.3",
+        "is-array-buffer": "^3.0.4",
         "is-shared-array-buffer": "^1.0.2"
       }
     },
@@ -10871,10 +11092,13 @@
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
     },
     "available-typed-arrays": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
-      "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
-      "dev": true
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+      "dev": true,
+      "requires": {
+        "possible-typed-array-names": "^1.0.0"
+      }
     },
     "axios": {
       "version": "1.7.7",
@@ -11085,13 +11309,16 @@
       "dev": true
     },
     "call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+      "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
       "dev": true,
       "requires": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "set-function-length": "^1.2.1"
       }
     },
     "callsites": {
@@ -11322,6 +11549,39 @@
         "which": "^2.0.1"
       }
     },
+    "data-view-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+      "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      }
+    },
+    "data-view-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+      "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      }
+    },
+    "data-view-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      }
+    },
     "debug": {
       "version": "4.3.6",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
@@ -11349,12 +11609,24 @@
       "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
       "dev": true
     },
+    "define-data-property": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+      "dev": true,
+      "requires": {
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.0.1"
+      }
+    },
     "define-properties": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
-      "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
       "dev": true,
       "requires": {
+        "define-data-property": "^1.0.1",
         "has-property-descriptors": "^1.0.0",
         "object-keys": "^1.1.1"
       }
@@ -11469,70 +11741,101 @@
       }
     },
     "es-abstract": {
-      "version": "1.22.1",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz",
-      "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==",
-      "dev": true,
-      "requires": {
-        "array-buffer-byte-length": "^1.0.0",
-        "arraybuffer.prototype.slice": "^1.0.1",
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "es-set-tostringtag": "^2.0.1",
+      "version": "1.23.3",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+      "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+      "dev": true,
+      "requires": {
+        "array-buffer-byte-length": "^1.0.1",
+        "arraybuffer.prototype.slice": "^1.0.3",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
+        "data-view-buffer": "^1.0.1",
+        "data-view-byte-length": "^1.0.1",
+        "data-view-byte-offset": "^1.0.0",
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-set-tostringtag": "^2.0.3",
         "es-to-primitive": "^1.2.1",
-        "function.prototype.name": "^1.1.5",
-        "get-intrinsic": "^1.2.1",
-        "get-symbol-description": "^1.0.0",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.4",
+        "get-symbol-description": "^1.0.2",
         "globalthis": "^1.0.3",
         "gopd": "^1.0.1",
-        "has": "^1.0.3",
-        "has-property-descriptors": "^1.0.0",
-        "has-proto": "^1.0.1",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.0.3",
         "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.5",
-        "is-array-buffer": "^3.0.2",
+        "hasown": "^2.0.2",
+        "internal-slot": "^1.0.7",
+        "is-array-buffer": "^3.0.4",
         "is-callable": "^1.2.7",
-        "is-negative-zero": "^2.0.2",
+        "is-data-view": "^1.0.1",
+        "is-negative-zero": "^2.0.3",
         "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
+        "is-shared-array-buffer": "^1.0.3",
         "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.10",
+        "is-typed-array": "^1.1.13",
         "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.3",
+        "object-inspect": "^1.13.1",
         "object-keys": "^1.1.1",
-        "object.assign": "^4.1.4",
-        "regexp.prototype.flags": "^1.5.0",
-        "safe-array-concat": "^1.0.0",
-        "safe-regex-test": "^1.0.0",
-        "string.prototype.trim": "^1.2.7",
-        "string.prototype.trimend": "^1.0.6",
-        "string.prototype.trimstart": "^1.0.6",
-        "typed-array-buffer": "^1.0.0",
-        "typed-array-byte-length": "^1.0.0",
-        "typed-array-byte-offset": "^1.0.0",
-        "typed-array-length": "^1.0.4",
+        "object.assign": "^4.1.5",
+        "regexp.prototype.flags": "^1.5.2",
+        "safe-array-concat": "^1.1.2",
+        "safe-regex-test": "^1.0.3",
+        "string.prototype.trim": "^1.2.9",
+        "string.prototype.trimend": "^1.0.8",
+        "string.prototype.trimstart": "^1.0.8",
+        "typed-array-buffer": "^1.0.2",
+        "typed-array-byte-length": "^1.0.1",
+        "typed-array-byte-offset": "^1.0.2",
+        "typed-array-length": "^1.0.6",
         "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.10"
+        "which-typed-array": "^1.1.15"
+      }
+    },
+    "es-define-property": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+      "dev": true,
+      "requires": {
+        "get-intrinsic": "^1.2.4"
+      }
+    },
+    "es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "dev": true
+    },
+    "es-object-atoms": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+      "dev": true,
+      "requires": {
+        "es-errors": "^1.3.0"
       }
     },
     "es-set-tostringtag": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
-      "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+      "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
       "dev": true,
       "requires": {
-        "get-intrinsic": "^1.1.3",
-        "has": "^1.0.3",
-        "has-tostringtag": "^1.0.0"
+        "get-intrinsic": "^1.2.4",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.1"
       }
     },
     "es-shim-unscopables": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
-      "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
       "dev": true,
       "requires": {
-        "has": "^1.0.3"
+        "hasown": "^2.0.0"
       }
     },
     "es-to-primitive": {
@@ -11736,9 +12039,9 @@
       }
     },
     "eslint-module-utils": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
-      "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz",
+      "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==",
       "dev": true,
       "requires": {
         "debug": "^3.2.7"
@@ -11756,26 +12059,27 @@
       }
     },
     "eslint-plugin-import": {
-      "version": "2.29.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
-      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+      "version": "2.30.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
+      "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
       "dev": true,
       "requires": {
-        "array-includes": "^3.1.7",
-        "array.prototype.findlastindex": "^1.2.3",
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.8",
+        "array.prototype.findlastindex": "^1.2.5",
         "array.prototype.flat": "^1.3.2",
         "array.prototype.flatmap": "^1.3.2",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.8.0",
-        "hasown": "^2.0.0",
-        "is-core-module": "^2.13.1",
+        "eslint-module-utils": "^2.9.0",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.7",
-        "object.groupby": "^1.0.1",
-        "object.values": "^1.1.7",
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.0",
         "semver": "^6.3.1",
         "tsconfig-paths": "^3.15.0"
       },
@@ -12120,15 +12424,15 @@
       "dev": true
     },
     "function.prototype.name": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
       "dev": true,
       "requires": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0",
-        "functions-have-names": "^1.2.2"
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
       }
     },
     "functions-have-names": {
@@ -12156,15 +12460,16 @@
       "dev": true
     },
     "get-intrinsic": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
-      "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
       "dev": true,
       "requires": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
         "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3"
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
       }
     },
     "get-package-type": {
@@ -12180,13 +12485,14 @@
       "dev": true
     },
     "get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
+        "call-bind": "^1.0.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4"
       }
     },
     "glob": {
@@ -12268,15 +12574,6 @@
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
       "dev": true
     },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
-    },
     "has-bigints": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -12290,18 +12587,18 @@
       "dev": true
     },
     "has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
       "dev": true,
       "requires": {
-        "get-intrinsic": "^1.1.1"
+        "es-define-property": "^1.0.0"
       }
     },
     "has-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
-      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+      "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
       "dev": true
     },
     "has-symbols": {
@@ -12311,18 +12608,18 @@
       "dev": true
     },
     "has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
       "dev": true,
       "requires": {
-        "has-symbols": "^1.0.2"
+        "has-symbols": "^1.0.3"
       }
     },
     "hasown": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
-      "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
       "dev": true,
       "requires": {
         "function-bind": "^1.1.2"
@@ -12401,13 +12698,13 @@
       "dev": true
     },
     "internal-slot": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
-      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+      "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
       "dev": true,
       "requires": {
-        "get-intrinsic": "^1.2.0",
-        "has": "^1.0.3",
+        "es-errors": "^1.3.0",
+        "hasown": "^2.0.0",
         "side-channel": "^1.0.4"
       }
     },
@@ -12428,14 +12725,13 @@
       }
     },
     "is-array-buffer": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
-      "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+      "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
       "dev": true,
       "requires": {
         "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.0",
-        "is-typed-array": "^1.1.10"
+        "get-intrinsic": "^1.2.1"
       }
     },
     "is-arrayish": {
@@ -12478,12 +12774,21 @@
       "dev": true
     },
     "is-core-module": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
-      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
       "dev": true,
       "requires": {
-        "hasown": "^2.0.0"
+        "hasown": "^2.0.2"
+      }
+    },
+    "is-data-view": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+      "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+      "dev": true,
+      "requires": {
+        "is-typed-array": "^1.1.13"
       }
     },
     "is-date-object": {
@@ -12519,9 +12824,9 @@
       }
     },
     "is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
       "dev": true
     },
     "is-number": {
@@ -12553,12 +12858,12 @@
       }
     },
     "is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+      "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2"
+        "call-bind": "^1.0.7"
       }
     },
     "is-stream": {
@@ -12586,16 +12891,12 @@
       }
     },
     "is-typed-array": {
-      "version": "1.1.10",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
-      "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+      "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
       "dev": true,
       "requires": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
+        "which-typed-array": "^1.1.14"
       }
     },
     "is-weakref": {
@@ -13641,9 +13942,9 @@
       }
     },
     "object-inspect": {
-      "version": "1.12.3",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
-      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+      "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
       "dev": true
     },
     "object-keys": {
@@ -13653,13 +13954,13 @@
       "dev": true
     },
     "object.assign": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+      "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
         "has-symbols": "^1.0.3",
         "object-keys": "^1.1.1"
       }
@@ -13676,37 +13977,37 @@
       }
     },
     "object.fromentries": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
-      "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0"
       }
     },
     "object.groupby": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
-      "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2"
       }
     },
     "object.values": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
-      "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+      "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       }
     },
     "once": {
@@ -13874,6 +14175,12 @@
         "find-up": "^4.0.0"
       }
     },
+    "possible-typed-array-names": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+      "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+      "dev": true
+    },
     "prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -14002,14 +14309,15 @@
       }
     },
     "regexp.prototype.flags": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
-      "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "functions-have-names": "^1.2.3"
+        "call-bind": "^1.0.6",
+        "define-properties": "^1.2.1",
+        "es-errors": "^1.3.0",
+        "set-function-name": "^2.0.1"
       }
     },
     "regexpu-core": {
@@ -14163,25 +14471,25 @@
       }
     },
     "safe-array-concat": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz",
-      "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+      "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.0",
+        "call-bind": "^1.0.7",
+        "get-intrinsic": "^1.2.4",
         "has-symbols": "^1.0.3",
         "isarray": "^2.0.5"
       }
     },
     "safe-regex-test": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
-      "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
         "is-regex": "^1.1.4"
       }
     },
@@ -14194,6 +14502,32 @@
         "lru-cache": "^6.0.0"
       }
     },
+    "set-function-length": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+      "dev": true,
+      "requires": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.2"
+      }
+    },
+    "set-function-name": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+      "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+      "dev": true,
+      "requires": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.2"
+      }
+    },
     "shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -14208,14 +14542,15 @@
       "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
     },
     "side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+      "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
       }
     },
     "signal-exit": {
@@ -14342,36 +14677,37 @@
       }
     },
     "string.prototype.trim": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
-      "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+      "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.0",
+        "es-object-atoms": "^1.0.0"
       }
     },
     "string.prototype.trimend": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
-      "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+      "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       }
     },
     "string.prototype.trimstart": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
-      "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       }
     },
     "strip-ansi": {
@@ -14547,50 +14883,55 @@
       "dev": true
     },
     "typed-array-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
-      "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.1",
-        "is-typed-array": "^1.1.10"
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.13"
       }
     },
     "typed-array-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
-      "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+      "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "has-proto": "^1.0.1",
-        "is-typed-array": "^1.1.10"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
       }
     },
     "typed-array-byte-offset": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
-      "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+      "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
       "dev": true,
       "requires": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "has-proto": "^1.0.1",
-        "is-typed-array": "^1.1.10"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
       }
     },
     "typed-array-length": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
-      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+      "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
       "dev": true,
       "requires": {
-        "call-bind": "^1.0.2",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "is-typed-array": "^1.1.9"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13",
+        "possible-typed-array-names": "^1.0.0"
       }
     },
     "unbox-primitive": {
@@ -14705,16 +15046,16 @@
       }
     },
     "which-typed-array": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
-      "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
+      "version": "1.1.15",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+      "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
       "dev": true,
       "requires": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
+        "has-tostringtag": "^1.0.2"
       }
     },
     "wrap-ansi": {
diff --git a/package.json b/package.json
index 8e7ee94..6a7f4cc 100644
--- a/package.json
+++ b/package.json
@@ -28,7 +28,7 @@
     "eslint": "^8.57.0",
     "eslint-config-airbnb-base": "^15.0.0",
     "eslint-config-prettier": "^9.1.0",
-    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-import": "^2.30.0",
     "husky": "^9.1.6",
     "jest": "^29.7.0",
     "lint-staged": "^15.2.10",
diff --git a/services/points/points.service.js b/services/points/points.service.js
index a881b70..7f77abc 100644
--- a/services/points/points.service.js
+++ b/services/points/points.service.js
@@ -1,4 +1,4 @@
-const { EmbedBuilder } = require('discord.js');
+const { EmbedBuilder, escapeMarkdown } = require('discord.js');
 const axios = require('axios');
 const config = require('../../config');
 
@@ -20,8 +20,7 @@ class PointsService {
   static async displayInfo(interaction) {
     const pointsEmbed = new EmbedBuilder()
       .setColor('#cc9543')
-      .setTitle('Points in the TOP Discord server')
-      .setDescription(`
+      .setTitle('Points in the TOP Discord server').setDescription(`
 Want to give credit where it's due? Show your appreciation for helpful members in our server by giving them a point! Mention their \`@name\` and add \`++\` or \`:star:\`
 
 **Example:**
@@ -50,7 +49,9 @@ Our goal is to maintain a positive and supportive community, where help and cont
     const response = await axios.get(PointsService.API_URL);
 
     // eslint-disable-next-line
-    const data = response.data.filter((member) => interaction.guild.members.cache.get(member.discord_id));
+    const data = response.data.filter((member) =>
+      interaction.guild.members.cache.get(member.discord_id),
+    );
 
     let points = 0;
     let rank = 0;
@@ -59,7 +60,9 @@ Our goal is to maintain a positive and supportive community, where help and cont
     for (let i = 0; i < data.length; i += 1) {
       if (data[i].discord_id === user.id) {
         points = data[i].points;
-        name = interaction.guild.members.cache.get(user.id).displayName;
+        name = escapeMarkdown(
+          interaction.guild.members.cache.get(user.id).displayName,
+        );
         rank = i + 1;
         break;
       }
@@ -68,12 +71,27 @@ Our goal is to maintain a positive and supportive community, where help and cont
     const userRankReply = new EmbedBuilder()
       .setColor('#cc9543')
       .setTitle(`TOP Discord points for ${name}`)
-      .addFields([{ name: 'Points', value: `${name} has ${points === undefined ? 0 : points} point${points === 1 ? '' : 's'}` }]);
+      .addFields([
+        {
+          name: 'Points',
+          value: `${name} has ${points === undefined ? 0 : points} point${points === 1 ? '' : 's'}`,
+        },
+      ]);
 
     if (rank >= 1) {
-      userRankReply.addFields([{ name: 'Rank', value: `${name} is ranked number ${rank}${rank === 1 ? ' :tada:' : ''}` }]);
+      userRankReply.addFields([
+        {
+          name: 'Rank',
+          value: `${name} is ranked number ${rank}${rank === 1 ? ' :tada:' : ''}`,
+        },
+      ]);
     } else {
-      userRankReply.addFields([{ name: 'Rank', value: `${name} currently has no rank in the leaderboard` }]);
+      userRankReply.addFields([
+        {
+          name: 'Rank',
+          value: `${name} currently has no rank in the leaderboard`,
+        },
+      ]);
     }
 
     await interaction.reply({ embeds: [userRankReply] });
@@ -85,7 +103,7 @@ Our goal is to maintain a positive and supportive community, where help and cont
     for (let i = offset; i < limit + offset; i += 1) {
       const user = users[i];
       const member = interaction.guild.members.cache.get(user.discord_id);
-      const username = member ? member.displayName : 'Unknown';
+      const username = member ? escapeMarkdown(member.displayName) : 'Unknown';
       if (i === 0) {
         usersList += `${i + 1} - ${username} [${user.points} points] :tada: \n`;
       } else {
@@ -99,7 +117,9 @@ Our goal is to maintain a positive and supportive community, where help and cont
   static async displayLeaderboard(interaction) {
     const response = await axios.get(PointsService.API_URL);
     // eslint-disable-next-line max-len
-    const users = response.data.filter((user) => interaction.guild.members.cache.get(user.discord_id));
+    const users = response.data.filter((user) =>
+      interaction.guild.members.cache.get(user.discord_id),
+    );
 
     let limit = interaction.options.getInteger('limit');
     limit = limit > 0 ? limit : 5;
@@ -109,9 +129,17 @@ Our goal is to maintain a positive and supportive community, where help and cont
     let offset = interaction.options.getInteger('offset');
     offset = offset > 0 ? offset : 0;
     // Always show the last members if offset too high
-    offset = offset + limit < users.length ? offset : Math.max(0, users.length - limit);
-
-    const usersList = PointsService.getUsersList(users, limit, offset, interaction);
+    offset =
+      offset + limit < users.length
+        ? offset
+        : Math.max(0, users.length - limit);
+
+    const usersList = PointsService.getUsersList(
+      users,
+      limit,
+      offset,
+      interaction,
+    );
 
     const leaderboardReply = new EmbedBuilder()
       .setColor('#cc9543')
diff --git a/services/rotations/rotation.service.js b/services/rotations/rotation.service.js
index 7b84716..49a262a 100644
--- a/services/rotations/rotation.service.js
+++ b/services/rotations/rotation.service.js
@@ -1,4 +1,5 @@
-const RedisService = require("../redis");
+const { escapeMarkdown } = require('discord.js');
+const RedisService = require('../redis');
 
 class RotationService {
   constructor(keyName, rotationName) {
@@ -25,16 +26,13 @@ class RotationService {
   }
 
   static #getFormattedPings(memberIds) {
-    return memberIds.reduce((acc, id) => `${acc} <@${id}>`, "");
+    return memberIds.reduce((acc, id) => `${acc} <@${id}>`, '');
   }
 
   async #getDisplayNames(members, server) {
     this.displayNames = members.map(async (memberId) => {
       const member = await server.members.fetch(memberId);
-      if (member.nickname) {
-        return member.nickname;
-      }
-      return member.user.username;
+      return escapeMarkdown(member.nickname || member.user.username);
     });
 
     return Promise.all(this.displayNames);
@@ -44,20 +42,20 @@ class RotationService {
     const members = await this.#getQueue();
     const membersDisplayNames = await this.#getDisplayNames(
       members,
-      interaction.guild
+      interaction.guild,
     );
     const formattedQueue = membersDisplayNames.reduce(
       (acc, displayname) => `${acc} ${displayname} >`,
-      ""
+      '',
     );
     if (formattedQueue) {
       return `${this.rotationName} rotation queue order:${formattedQueue}`;
     }
-    return "No members";
+    return 'No members';
   }
 
   async #handleAddMembers(members, interaction) {
-    let reply = "";
+    let reply = '';
     const memberIds = members.map((member) => member?.id || member);
     const addedIds = await this.#addMembers(memberIds);
 
@@ -65,10 +63,10 @@ class RotationService {
       const nonAddedIds = memberIds.filter((id) => !addedIds.includes(id));
       const nonAddedNames = await this.#getDisplayNames(
         nonAddedIds,
-        interaction.guild
+        interaction.guild,
       );
       const formattedNonAddedNames = nonAddedNames
-        .reduce((acc, name) => `${acc} ${name},`, "")
+        .reduce((acc, name) => `${acc} ${name},`, '')
         .slice(0, -1);
       reply += `${formattedNonAddedNames} not added as they are already in the queue\n\n`;
     }
@@ -153,19 +151,33 @@ class RotationService {
   async handleInteraction(interaction) {
     const actionType = interaction.options.getSubcommand();
 
+    const currentQueue = await this.#getQueue();
+    const currentQueueLength = currentQueue?.length || 0;
+
+    if (
+      currentQueueLength < 2 &&
+      actionType !== 'add' &&
+      actionType !== 'remove'
+    ) {
+      await interaction.reply(
+        'Less than two members in the queue. Try adding some with `/triage add`!',
+      );
+      return;
+    }
+
     const members = this.#getMembers(interaction.options);
 
     switch (actionType) {
-      case "add":
+      case 'add':
         await this.#handleAddMembers(members, interaction);
         return;
-      case "swap":
+      case 'swap':
         await this.#handleSwapMembers(members, interaction);
         return;
-      case "remove":
+      case 'remove':
         await this.#handleRemoveMember(members[0], interaction);
         return;
-      case "rotate":
+      case 'rotate':
         await this.#handleRotateQueue(interaction);
         return;
       default:


Test patch:
diff --git a/services/points/__snapshots__/points.service.test.js.snap b/services/points/__snapshots__/points.service.test.js.snap
index 309d824..2253739 100644
--- a/services/points/__snapshots__/points.service.test.js.snap
+++ b/services/points/__snapshots__/points.service.test.js.snap
@@ -278,6 +278,44 @@ exports[`leaderboard subcommand Returns users starting from offset 1`] = `
 }
 `;
 
+exports[`leaderboard subcommand escapes markdown correctly 1`] = `
+{
+  "embeds": [
+    {
+      "color": 13407555,
+      "description": "1 - user100 \\|\\|test\\|\\| [1000 points] :tada: 
+2 - user101 \\*test\\* [999 points] 
+3 - user102 \\*\\*test\\*\\* [998 points] 
+4 - user103 \\\`test\\\` [997 points] 
+5 - user104 \\|\\|test\\|\\| [996 points] 
+",
+      "title": "TOP Discord points leaderboard",
+    },
+  ],
+}
+`;
+
+exports[`user subcommand Escapes markdown 1`] = `
+{
+  "embeds": [
+    {
+      "color": 13407555,
+      "fields": [
+        {
+          "name": "Points",
+          "value": "Mark \\*down\\* has 1 point",
+        },
+        {
+          "name": "Rank",
+          "value": "Mark \\*down\\* is ranked number 6",
+        },
+      ],
+      "title": "TOP Discord points for Mark \\*down\\*",
+    },
+  ],
+}
+`;
+
 exports[`user subcommand Format the points word properly for 1 point 1`] = `
 {
   "embeds": [
diff --git a/services/points/points.service.test.js b/services/points/points.service.test.js
index 611f664..3d241cc 100644
--- a/services/points/points.service.test.js
+++ b/services/points/points.service.test.js
@@ -1,6 +1,9 @@
 const axios = require('axios');
 const PointsService = require('./points.service');
-const { generateLeaderData } = require('../../botCommands/mockData');
+const {
+  generateLeaderData,
+  generateLeaderDataWithMarkdown,
+} = require('../../botCommands/mockData');
 
 /* eslint-disable */
 /* eslint max-classes-per-file: ["error", 2] */
@@ -37,24 +40,25 @@ describe('leaderboard subcommand', () => {
       getInteger: (string) => {
         if (string === 'limit') {
           return limit;
-        } else if (string === "offset") {
+        } else if (string === 'offset') {
           return offset;
         }
-      }
+      },
     },
-    reply: jest.fn((message) => reply = message)
-  }
+    reply: jest.fn((message) => (reply = message)),
+  };
 
-  const setUpAxiosMock = (data) => axios.get = jest.fn().mockResolvedValue({ data });
+  const setUpAxiosMock = (data) =>
+    (axios.get = jest.fn().mockResolvedValue({ data }));
 
   afterEach(() => {
     limit = null;
     offset = null;
     reply = '';
     axios.get.mockReset();
-  })
+  });
 
-  it("Returns be the first to earn points message if no user in database", async () => {
+  it('Returns be the first to earn points message if no user in database', async () => {
     const members = generateLeaderData(0);
     interactionMock.guild = new GuildMock(members);
     setUpAxiosMock(members);
@@ -62,10 +66,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
-
+  });
 
-  it("Returned users length matches limit", async () => {
+  it('Returned users length matches limit', async () => {
     limit = 8;
     const members = generateLeaderData(30);
     interactionMock.guild = new GuildMock(members);
@@ -74,7 +77,7 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
   it('Limit defaults to 5 if limit not provided', async () => {
     const members = generateLeaderData(30);
@@ -97,7 +100,7 @@ describe('leaderboard subcommand', () => {
     expect(reply).toMatchSnapshot();
   });
 
-  it("Limit defaults to 5 if limit provided lower than 1", async () => {
+  it('Limit defaults to 5 if limit provided lower than 1', async () => {
     limit = 0;
     const members = generateLeaderData(25);
     interactionMock.guild = new GuildMock(members);
@@ -106,9 +109,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Limit defaults to 25 if limit provided is higher than 25", async () => {
+  it('Limit defaults to 25 if limit provided is higher than 25', async () => {
     limit = 50;
     const members = generateLeaderData(70);
     interactionMock.guild = new GuildMock(members);
@@ -117,7 +120,7 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
   it('Limit does not exceed users length', async () => {
     limit = 10;
@@ -128,9 +131,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Members who left are filtered out", async () => {
+  it('Members who left are filtered out', async () => {
     const members = generateLeaderData(50);
     const limitMembers = members.slice(20, 40);
     interactionMock.guild = new GuildMock(limitMembers);
@@ -139,9 +142,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Returns users starting from offset", async () => {
+  it('Returns users starting from offset', async () => {
     offset = 5;
     const members = generateLeaderData(50);
     setUpAxiosMock(members);
@@ -150,9 +153,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Offset defaults to 0 if not provided", async () => {
+  it('Offset defaults to 0 if not provided', async () => {
     const members = generateLeaderData(25);
     setUpAxiosMock(members);
     interactionMock.guild = new GuildMock(members);
@@ -160,9 +163,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Offset defaults to 0 if invalid characters provided", async () => {
+  it('Offset defaults to 0 if invalid characters provided', async () => {
     offset = 'sdfs';
     const members = generateLeaderData(25);
     setUpAxiosMock(members);
@@ -171,9 +174,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Offset defaults to 0 if negative value provided", async () => {
+  it('Offset defaults to 0 if negative value provided', async () => {
     offset = -5;
     const members = generateLeaderData(25);
     setUpAxiosMock(members);
@@ -182,9 +185,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Offset cannot exceed max users length", async () => {
+  it('Offset cannot exceed max users length', async () => {
     offset = 70;
     const members = generateLeaderData(50);
     setUpAxiosMock(members);
@@ -193,9 +196,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Offset show the last users depending on limit if offset is too high", async () => {
+  it('Offset show the last users depending on limit if offset is too high', async () => {
     offset = 56;
     limit = 5;
     const members = generateLeaderData(50);
@@ -205,9 +208,9 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
+  });
 
-  it("Return the correct limit, moving offset backward if necessary", async () => {
+  it('Return the correct limit, moving offset backward if necessary', async () => {
     offset = 56;
     limit = 10;
     const members = generateLeaderData(60);
@@ -217,9 +220,18 @@ describe('leaderboard subcommand', () => {
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
-  })
-});
+  });
 
+  it('escapes markdown correctly', async () => {
+    const members = generateLeaderDataWithMarkdown(5);
+    setUpAxiosMock(members);
+    interactionMock.guild = new GuildMock(members);
+
+    await PointsService.handleInteraction(interactionMock);
+    expect(axios.get).toHaveBeenCalled();
+    expect(reply).toMatchSnapshot();
+  });
+});
 
 describe('user subcommand', () => {
   const apiData = [
@@ -230,19 +242,21 @@ describe('user subcommand', () => {
     { id: 2, discord_id: '2222', points: 20 }, // Someone
     { id: 4, discord_id: '4444', points: 15 }, // Tree
     { id: 1, discord_id: '1111', points: 1 }, // NotOdin
-  ]
+    { id: 8, discord_id: '8888', points: 1 }, // Mark *down*
+  ];
 
   const guildMock = new GuildMock([
     { displayName: 'NotOdin', discord_id: '1111' },
     { displayName: 'Someone', discord_id: '2222' },
     { displayName: 'Dog', discord_id: '3333' },
     { displayName: 'Tree', discord_id: '4444' },
-    { displayName: 'Cat', discord_id: '6666' }
-  ])
+    { displayName: 'Cat', discord_id: '6666' },
+    { displayName: 'Mark *down*', discord_id: '8888' },
+  ]);
 
   beforeEach(() => {
     axios.get = jest.fn().mockResolvedValue({ data: apiData });
-  })
+  });
 
   let user = {}; // created for each test each test
   let reply = '';
@@ -252,8 +266,8 @@ describe('user subcommand', () => {
       getSubcommand: () => 'user',
       getUser: () => user,
     },
-    reply: jest.fn((message) => reply = message)
-  }
+    reply: jest.fn((message) => (reply = message)),
+  };
 
   afterEach(() => {
     reply = '';
@@ -304,7 +318,7 @@ describe('user subcommand', () => {
     expect(reply).toMatchSnapshot();
   });
 
-  it("Formats the points word properly for 0 points", async () => {
+  it('Formats the points word properly for 0 points', async () => {
     user = { id: '9292', username: 'OldestUser' };
 
     await PointsService.handleInteraction(interactionMock);
@@ -312,11 +326,19 @@ describe('user subcommand', () => {
     expect(reply).toMatchSnapshot();
   });
 
-  it("Formats the points word correctly for more than 1 points", async () => {
+  it('Formats the points word correctly for more than 1 points', async () => {
     user = { id: '3333', username: 'Dog' };
 
     await PointsService.handleInteraction(interactionMock);
     expect(axios.get).toHaveBeenCalled();
     expect(reply).toMatchSnapshot();
   });
+
+  it('Escapes markdown', async () => {
+    user = { id: '8888', username: 'Mark *down*' };
+
+    await PointsService.handleInteraction(interactionMock);
+    expect(axios.get).toHaveBeenCalled();
+    expect(reply).toMatchSnapshot();
+  });
 });
diff --git a/services/rotations/rotation.service.test.js b/services/rotations/rotation.service.test.js
index 174e958..2f1f883 100644
--- a/services/rotations/rotation.service.test.js
+++ b/services/rotations/rotation.service.test.js
@@ -1,47 +1,47 @@
-const { RotationService } = require("./rotation.service");
+const { RotationService } = require('./rotation.service');
 const {
   buildInteraction,
   getUsers,
   initializeServer,
-} = require("../../utils/slash-command-helpers");
+} = require('../../utils/slash-command-helpers');
 
-jest.mock("../redis");
+jest.mock('../redis');
 
-describe("addition", () => {
-  it("creates a rotation and reports the inital queue order", async () => {
-    const rotation = new RotationService("test", "test");
+describe('addition', () => {
+  it('creates a rotation and reports the inital queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const reply = jest.fn();
     const users = getUsers(2);
     const server = initializeServer();
-    const interaction = buildInteraction("add", server, users, reply);
+    const interaction = buildInteraction('add', server, users, reply);
 
     await rotation.handleInteraction(interaction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@1234> <@5678> successfully added to the queue\n\ntest rotation queue order: Foo > Baz >"
+      '<@1234> <@5678> successfully added to the queue\n\ntest rotation queue order: Foo > Baz >',
     );
   });
 
-  it("adds one person to the queue and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+  it('adds one person to the queue and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(2);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const additionUsers = getUsers(1, 2);
     const additionInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       additionUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -49,29 +49,29 @@ describe("addition", () => {
     await rotation.handleInteraction(additionInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@9101> successfully added to the queue\n\ntest rotation queue order: Foo > Baz > Bang >"
+      '<@9101> successfully added to the queue\n\ntest rotation queue order: Foo > Baz > Bang >',
     );
   });
 
-  it("adds multiple people to the queue and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+  it('adds multiple people to the queue and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(2);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const additionUsers = getUsers(2, 2);
     const additionInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       additionUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -79,29 +79,29 @@ describe("addition", () => {
     await rotation.handleInteraction(additionInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@9101> <@1121> successfully added to the queue\n\ntest rotation queue order: Foo > Baz > Bang > Bing >"
+      '<@9101> <@1121> successfully added to the queue\n\ntest rotation queue order: Foo > Baz > Bang > Bing >',
     );
   });
 
-  it("does not add people to the queue multiple times", async () => {
-    const rotation = new RotationService("test", "test");
+  it('does not add people to the queue multiple times', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(2);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const additionUsers = getUsers(3, 1);
     const additionInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       additionUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -109,32 +109,32 @@ describe("addition", () => {
     await rotation.handleInteraction(additionInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "Baz not added as they are already in the queue\n\n <@9101> <@1121> successfully added to the queue\n\ntest rotation queue order: Foo > Baz > Bang > Bing >"
+      'Baz not added as they are already in the queue\n\n <@9101> <@1121> successfully added to the queue\n\ntest rotation queue order: Foo > Baz > Bang > Bing >',
     );
   });
 
-  it("addresses rejected users by nickname if they have one", async () => {
-    const rotation = new RotationService("test", "test");
+  it('addresses rejected users by nickname if they have one', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(2);
     const additionUsers = getUsers(1);
-    additionUsers[0].nickname = "Bar";
+    additionUsers[0].nickname = 'Bar';
     const server = initializeServer([...creationUsers, ...additionUsers]);
 
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
 
     const additionInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       additionUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -142,29 +142,29 @@ describe("addition", () => {
     await rotation.handleInteraction(additionInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "Bar not added as they are already in the queue\n\ntest rotation queue order: Bar > Baz >"
+      'Bar not added as they are already in the queue\n\ntest rotation queue order: Bar > Baz >',
     );
   });
 
-  it("only replies once", async () => {
-    const rotation = new RotationService("test", "test");
+  it('only replies once', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(2);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const additionUsers = getUsers(2, 2);
     const additionInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       additionUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -173,28 +173,47 @@ describe("addition", () => {
 
     expect(reply).toHaveBeenCalledTimes(1);
   });
+
+  it('escapes markdown in usernames and nicknames', async () => {
+    const rotation = new RotationService('test', 'test');
+
+    const users = getUsers(2);
+    users[0].nickname = 'Foo `test`';
+    users[1].username = 'Baz *test*';
+
+    const server = initializeServer(users);
+
+    const reply = jest.fn();
+    const interaction = buildInteraction('add', server, users, reply);
+
+    await rotation.handleInteraction(interaction);
+
+    expect(reply).toHaveBeenCalledWith(
+      '<@1234> <@5678> successfully added to the queue\n\ntest rotation queue order: Foo \\`test\\` > Baz \\*test\\* >',
+    );
+  });
 });
 
-describe("removal", () => {
-  it("removes one person from the start of the queue and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+describe('removal', () => {
+  it('removes one person from the start of the queue and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const removalusers = creationUsers.slice(0, 1);
     const removalInteraction = buildInteraction(
-      "remove",
+      'remove',
       server,
       removalusers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -202,29 +221,29 @@ describe("removal", () => {
     await rotation.handleInteraction(removalInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@1234> removed from the queue\n\ntest rotation queue order: Baz > Bang >"
+      '<@1234> removed from the queue\n\ntest rotation queue order: Baz > Bang >',
     );
   });
 
-  it("removes one person from the middle of the queue and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+  it('removes one person from the middle of the queue and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const removalusers = creationUsers.slice(1, 2);
     const removalInteraction = buildInteraction(
-      "remove",
+      'remove',
       server,
       removalusers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -232,29 +251,29 @@ describe("removal", () => {
     await rotation.handleInteraction(removalInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@5678> removed from the queue\n\ntest rotation queue order: Foo > Bang >"
+      '<@5678> removed from the queue\n\ntest rotation queue order: Foo > Bang >',
     );
   });
 
-  it("removes one person from the end of the queue and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+  it('removes one person from the end of the queue and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const removalusers = creationUsers.slice(2);
     const removalInteraction = buildInteraction(
-      "remove",
+      'remove',
       server,
       removalusers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -262,29 +281,29 @@ describe("removal", () => {
     await rotation.handleInteraction(removalInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@9101> removed from the queue\n\ntest rotation queue order: Foo > Baz >"
+      '<@9101> removed from the queue\n\ntest rotation queue order: Foo > Baz >',
     );
   });
 
-  it("only replies once", async () => {
-    const rotation = new RotationService("test", "test");
+  it('only replies once', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const removalusers = creationUsers.slice(2);
     const removalInteraction = buildInteraction(
-      "remove",
+      'remove',
       server,
       removalusers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -293,28 +312,62 @@ describe("removal", () => {
 
     expect(reply).toHaveBeenCalledTimes(1);
   });
+
+  it('escapes markdown in usernames and nicknames', async () => {
+    const rotation = new RotationService('test', 'test');
+
+    const users = getUsers(2);
+    users[0].nickname = 'Foo `test`';
+    users[1].username = 'Baz *test*';
+
+    const server = initializeServer(users);
+
+    const additionInteraction = buildInteraction(
+      'add',
+      server,
+      users,
+      () => {},
+    );
+
+    const reply = jest.fn();
+    const removalUsers = users.slice(1);
+    const removalInteraction = buildInteraction(
+      'remove',
+      server,
+      removalUsers,
+      reply,
+    );
+
+    await rotation.handleInteraction(additionInteraction);
+
+    await rotation.handleInteraction(removalInteraction);
+
+    expect(reply).toHaveBeenCalledWith(
+      '<@5678> removed from the queue\n\ntest rotation queue order: Foo \\`test\\` >',
+    );
+  });
 });
 
-describe("swapping", () => {
-  it("swaps one person from the start of the queue with one from the end of the queue and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+describe('swapping', () => {
+  it('swaps one person from the start of the queue with one from the end of the queue and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const swapUsers = [creationUsers[0], creationUsers[2]];
     const swappingInteraction = buildInteraction(
-      "swap",
+      'swap',
       server,
       swapUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -322,29 +375,29 @@ describe("swapping", () => {
     await rotation.handleInteraction(swappingInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@1234> <@9101> swapped position in the queue\n\ntest rotation queue order: Bang > Baz > Foo >"
+      '<@1234> <@9101> swapped position in the queue\n\ntest rotation queue order: Bang > Baz > Foo >',
     );
   });
 
-  it("swaps one person from the start of the queue with one from the middle of the queue and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+  it('swaps one person from the start of the queue with one from the middle of the queue and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const swapUsers = [creationUsers[0], creationUsers[1]];
     const swappingInteraction = buildInteraction(
-      "swap",
+      'swap',
       server,
       swapUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -352,29 +405,29 @@ describe("swapping", () => {
     await rotation.handleInteraction(swappingInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@1234> <@5678> swapped position in the queue\n\ntest rotation queue order: Baz > Foo > Bang >"
+      '<@1234> <@5678> swapped position in the queue\n\ntest rotation queue order: Baz > Foo > Bang >',
     );
   });
 
-  it("swaps one person from the middle of the queue with one from the end of the queue and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+  it('swaps one person from the middle of the queue with one from the end of the queue and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const swapUsers = [creationUsers[1], creationUsers[2]];
     const swappingInteraction = buildInteraction(
-      "swap",
+      'swap',
       server,
       swapUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -382,29 +435,29 @@ describe("swapping", () => {
     await rotation.handleInteraction(swappingInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@5678> <@9101> swapped position in the queue\n\ntest rotation queue order: Foo > Bang > Baz >"
+      '<@5678> <@9101> swapped position in the queue\n\ntest rotation queue order: Foo > Bang > Baz >',
     );
   });
 
-  it("only replies once", async () => {
-    const rotation = new RotationService("test", "test");
+  it('only replies once', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
     const swapUsers = [creationUsers[0], creationUsers[2]];
     const swappingInteraction = buildInteraction(
-      "swap",
+      'swap',
       server,
       swapUsers,
-      reply
+      reply,
     );
 
     await rotation.handleInteraction(creationInteraction);
@@ -413,47 +466,75 @@ describe("swapping", () => {
 
     expect(reply).toHaveBeenCalledTimes(1);
   });
+
+  it('escapes markdown in usernames and nicknames', async () => {
+    const rotation = new RotationService('test', 'test');
+
+    const users = getUsers(2);
+    users[0].nickname = 'Foo `test`';
+    users[1].username = 'Baz *test*';
+
+    const server = initializeServer(users);
+
+    const additionInteraction = buildInteraction(
+      'add',
+      server,
+      users,
+      () => {},
+    );
+
+    const reply = jest.fn();
+    const swapInteraction = buildInteraction('swap', server, users, reply);
+
+    await rotation.handleInteraction(additionInteraction);
+
+    await rotation.handleInteraction(swapInteraction);
+
+    expect(reply).toHaveBeenCalledWith(
+      '<@1234> <@5678> swapped position in the queue\n\ntest rotation queue order: Baz \\*test\\* > Foo \\`test\\` >',
+    );
+  });
 });
 
-describe("reading", () => {
-  it("reports the queue order", async () => {
-    const rotation = new RotationService("test", "test");
+describe('reading', () => {
+  it('reports the queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
-    const readInteraction = buildInteraction("read", server, [], reply);
+    const readInteraction = buildInteraction('read', server, [], reply);
 
     await rotation.handleInteraction(creationInteraction);
 
     await rotation.handleInteraction(readInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "test rotation queue order: Foo > Baz > Bang >"
+      'test rotation queue order: Foo > Baz > Bang >',
     );
   });
 
-  it("only replies once", async () => {
-    const rotation = new RotationService("test", "test");
+  it('only replies once', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
-    const readInteraction = buildInteraction("read", server, [], reply);
+    const readInteraction = buildInteraction('read', server, [], reply);
 
     await rotation.handleInteraction(creationInteraction);
 
@@ -461,47 +542,75 @@ describe("reading", () => {
 
     expect(reply).toHaveBeenCalledTimes(1);
   });
+
+  it('escapes markdown in usernames and nicknames', async () => {
+    const rotation = new RotationService('test', 'test');
+
+    const users = getUsers(2);
+    users[0].nickname = 'Foo `test`';
+    users[1].username = 'Baz *test*';
+
+    const server = initializeServer(users);
+
+    const additionInteraction = buildInteraction(
+      'add',
+      server,
+      users,
+      () => {},
+    );
+
+    const reply = jest.fn();
+    const readInteraction = buildInteraction('read', server, [], reply);
+
+    await rotation.handleInteraction(additionInteraction);
+
+    await rotation.handleInteraction(readInteraction);
+
+    expect(reply).toHaveBeenCalledWith(
+      'test rotation queue order: Foo \\`test\\` > Baz \\*test\\* >',
+    );
+  });
 });
 
-describe("rotation", () => {
-  it("pings the user up in the rotation, rotates the queue, and reports the new queue order", async () => {
-    const rotation = new RotationService("test", "test");
+describe('rotation', () => {
+  it('pings the user up in the rotation, rotates the queue, and reports the new queue order', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
-    const rotationInteraction = buildInteraction("rotate", server, [], reply);
+    const rotationInteraction = buildInteraction('rotate', server, [], reply);
 
     await rotation.handleInteraction(creationInteraction);
 
     await rotation.handleInteraction(rotationInteraction);
 
     expect(reply).toHaveBeenCalledWith(
-      "<@1234> it's your turn for the test rotation.\n\ntest rotation queue order: Baz > Bang > Foo >"
+      "<@1234> it's your turn for the test rotation.\n\ntest rotation queue order: Baz > Bang > Foo >",
     );
   });
 
-  it("only replies once", async () => {
-    const rotation = new RotationService("test", "test");
+  it('only replies once', async () => {
+    const rotation = new RotationService('test', 'test');
 
     const creationUsers = getUsers(3);
     const server = initializeServer();
     const creationInteraction = buildInteraction(
-      "add",
+      'add',
       server,
       creationUsers,
-      () => {}
+      () => {},
     );
 
     const reply = jest.fn();
-    const rotationInteraction = buildInteraction("rotate", server, [], reply);
+    const rotationInteraction = buildInteraction('rotate', server, [], reply);
 
     await rotation.handleInteraction(creationInteraction);
 
@@ -509,4 +618,32 @@ describe("rotation", () => {
 
     expect(reply).toHaveBeenCalledTimes(1);
   });
+
+  it('escapes markdown in usernames and nicknames', async () => {
+    const rotation = new RotationService('test', 'test');
+
+    const users = getUsers(2);
+    users[0].nickname = 'Foo `test`';
+    users[1].username = 'Baz *test*';
+
+    const server = initializeServer(users);
+
+    const additionInteraction = buildInteraction(
+      'add',
+      server,
+      users,
+      () => {},
+    );
+
+    const reply = jest.fn();
+    const rotateInteraction = buildInteraction('rotate', server, [], reply);
+
+    await rotation.handleInteraction(additionInteraction);
+
+    await rotation.handleInteraction(rotateInteraction);
+
+    expect(reply).toHaveBeenCalledWith(
+      "<@1234> it's your turn for the test rotation.\n\ntest rotation queue order: Baz \\*test\\* > Foo \\`test\\` >",
+    );
+  });
 });