Repository: ROpdebee/mb-userscripts
Pull request #553 (2022-08-08 22:05:25)

fix(ecau): more improvements to VGMdb type mappings
Should fix all of the examples reported in https://community.metabrainz.org/t/ropdebees-userscripts-support-thread/551947/105?u=ropdebee except Front Tray and Back Tray. Those are possible, but it'd be super ugly in the current implementation. A massive refactoring is getting more and more necessary (I'm thinking: tokenize the captions and look for combinations of keywords instead of the unflexible first word + rest of the caption stuff it's doing now).

codecov[bot]: # [Codecov](https://codecov.io/gh/ROpdebee/mb-userscripts/pull/553?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Ruben+Opdebeeck) Report
> Merging [#553](https://codecov.io/gh/ROpdebee/mb-userscripts/pull/553?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Ruben+Opdebeeck) (bb1c557) into [main](https://codecov.io/gh/ROpdebee/mb-userscripts/commit/b1971d19581b3ece70f06a1d49a009c8e14d16d2?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Ruben+Opdebeeck) (b1971d1) will **increase** coverage by `0.00%`.
> The diff coverage is `100.00%`.

```diff
@@           Coverage Diff           @@
##             main     #553   +/-   ##
=======================================
  Coverage   98.48%   98.48%           
=======================================
  Files          58       58           
  Lines        1385     1386    +1     
  Branches      220      221    +1     
=======================================
+ Hits         1364     1365    +1     
  Misses         13       13           
  Partials        8        8           
```


| [Impacted Files](https://codecov.io/gh/ROpdebee/mb-userscripts/pull/553?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Ruben+Opdebeeck) | Coverage Δ | |
|---|---|---|
| [...c/mb\_enhanced\_cover\_art\_uploads/providers/vgmdb.ts](https://codecov.io/gh/ROpdebee/mb-userscripts/pull/553/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Ruben+Opdebeeck#diff-c3JjL21iX2VuaGFuY2VkX2NvdmVyX2FydF91cGxvYWRzL3Byb3ZpZGVycy92Z21kYi50cw==) | `100.00% <100.00%> (ø)` | |
| [src/mb\_enhanced\_cover\_art\_uploads/maximise.ts](https://codecov.io/gh/ROpdebee/mb-userscripts/pull/553/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Ruben+Opdebeeck#diff-c3JjL21iX2VuaGFuY2VkX2NvdmVyX2FydF91cGxvYWRzL21heGltaXNlLnRz) | `100.00% <0.00%> (ø)` | |

Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Ruben+Opdebeeck). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Ruben+Opdebeeck)


Patch:
diff --git a/package-lock.json b/package-lock.json
index b92a264e..000214f4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -37,26 +37,26 @@
         "@types/conventional-commits-parser": "3.0.2",
         "@types/glob": "7.2.0",
         "@types/greasemonkey": "4.0.3",
-        "@types/jest": "28.1.6",
+        "@types/jest": "28.1.7",
         "@types/jest-when": "3.5.2",
         "@types/postcss-preset-env": "7.7.0",
         "@types/rollup__plugin-virtual": "2.0.1",
         "@types/rollup-plugin-progress": "1.1.1",
         "@types/setup-polly-jest": "0.5.1",
-        "@typescript-eslint/eslint-plugin": "5.32.0",
-        "@typescript-eslint/parser": "5.32.0",
+        "@typescript-eslint/eslint-plugin": "5.33.1",
+        "@typescript-eslint/parser": "5.33.1",
         "babel-plugin-transform-async-to-promises": "0.8.16",
         "confusing-browser-globals": "1.0.11",
         "conventional-commits-parser": "3.2.4",
         "core-js": "3.24.1",
-        "eslint": "8.21.0",
+        "eslint": "8.22.0",
         "eslint-config-adjunct": "4.11.2",
         "eslint-config-prettier": "8.5.0",
         "eslint-plugin-array-func": "3.1.7",
         "eslint-plugin-disable": "2.0.3",
         "eslint-plugin-eslint-comments": "3.2.0",
         "eslint-plugin-html": "7.1.0",
-        "eslint-plugin-jest": "26.8.0",
+        "eslint-plugin-jest": "26.8.3",
         "eslint-plugin-jest-async": "1.0.3",
         "eslint-plugin-jest-formatting": "3.1.0",
         "eslint-plugin-json": "3.1.0",
@@ -84,19 +84,19 @@
         "nativejsx": "github:ROpdebee/nativejsx",
         "node-fetch": "3.2.10",
         "postcss": "8.4.16",
-        "postcss-preset-env": "7.7.2",
-        "rollup": "2.77.2",
+        "postcss-preset-env": "7.8.0",
+        "rollup": "2.78.1",
         "rollup-plugin-consts": "1.1.0",
         "rollup-plugin-postcss": "4.0.2",
         "rollup-plugin-progress": "1.1.2",
-        "sass": "1.54.3",
+        "sass": "1.54.5",
         "setup-polly-jest": "0.11.0",
         "simple-git": "3.12.0",
         "terser": "5.14.2",
-        "ts-jest": "28.0.7",
+        "ts-jest": "28.0.8",
         "ts-node": "10.9.1",
         "tsconfig-paths": "4.1.0",
-        "type-fest": "2.18.0",
+        "type-fest": "2.18.1",
         "typescript": "4.7.4",
         "warcio": "1.5.1"
       }
@@ -1943,6 +1943,25 @@
         "postcss": "^8.2"
       }
     },
+    "node_modules/@csstools/postcss-nested-calc": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz",
+      "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==",
+      "dev": true,
+      "dependencies": {
+        "postcss-value-parser": "^4.2.0"
+      },
+      "engines": {
+        "node": "^12 || ^14 || >=16"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/csstools"
+      },
+      "peerDependencies": {
+        "postcss": "^8.2"
+      }
+    },
     "node_modules/@csstools/postcss-normalize-display-values": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz",
@@ -2016,6 +2035,25 @@
         "postcss": "^8.2"
       }
     },
+    "node_modules/@csstools/postcss-text-decoration-shorthand": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz",
+      "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==",
+      "dev": true,
+      "dependencies": {
+        "postcss-value-parser": "^4.2.0"
+      },
+      "engines": {
+        "node": "^12 || ^14 || >=16"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/csstools"
+      },
+      "peerDependencies": {
+        "postcss": "^8.2"
+      }
+    },
     "node_modules/@csstools/postcss-trigonometric-functions": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz",
@@ -3550,12 +3588,12 @@
       }
     },
     "node_modules/@types/jest": {
-      "version": "28.1.6",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.6.tgz",
-      "integrity": "sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==",
+      "version": "28.1.7",
+      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.7.tgz",
+      "integrity": "sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA==",
       "dev": true,
       "dependencies": {
-        "jest-matcher-utils": "^28.0.0",
+        "expect": "^28.0.0",
         "pretty-format": "^28.0.0"
       }
     },
@@ -3802,14 +3840,14 @@
       "dev": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz",
-      "integrity": "sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz",
+      "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.32.0",
-        "@typescript-eslint/type-utils": "5.32.0",
-        "@typescript-eslint/utils": "5.32.0",
+        "@typescript-eslint/scope-manager": "5.33.1",
+        "@typescript-eslint/type-utils": "5.33.1",
+        "@typescript-eslint/utils": "5.33.1",
         "debug": "^4.3.4",
         "functional-red-black-tree": "^1.0.1",
         "ignore": "^5.2.0",
@@ -3908,14 +3946,14 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz",
-      "integrity": "sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz",
+      "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.32.0",
-        "@typescript-eslint/types": "5.32.0",
-        "@typescript-eslint/typescript-estree": "5.32.0",
+        "@typescript-eslint/scope-manager": "5.33.1",
+        "@typescript-eslint/types": "5.33.1",
+        "@typescript-eslint/typescript-estree": "5.33.1",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -3935,9 +3973,9 @@
       }
     },
     "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
-      "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+      "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -3948,13 +3986,13 @@
       }
     },
     "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz",
-      "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
+      "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.32.0",
-        "@typescript-eslint/visitor-keys": "5.32.0",
+        "@typescript-eslint/types": "5.33.1",
+        "@typescript-eslint/visitor-keys": "5.33.1",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -3990,13 +4028,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz",
-      "integrity": "sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
+      "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.32.0",
-        "@typescript-eslint/visitor-keys": "5.32.0"
+        "@typescript-eslint/types": "5.33.1",
+        "@typescript-eslint/visitor-keys": "5.33.1"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4007,9 +4045,9 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
-      "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+      "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4020,12 +4058,12 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz",
-      "integrity": "sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz",
+      "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/utils": "5.32.0",
+        "@typescript-eslint/utils": "5.33.1",
         "debug": "^4.3.4",
         "tsutils": "^3.21.0"
       },
@@ -4118,15 +4156,15 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.32.0.tgz",
-      "integrity": "sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz",
+      "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==",
       "dev": true,
       "dependencies": {
         "@types/json-schema": "^7.0.9",
-        "@typescript-eslint/scope-manager": "5.32.0",
-        "@typescript-eslint/types": "5.32.0",
-        "@typescript-eslint/typescript-estree": "5.32.0",
+        "@typescript-eslint/scope-manager": "5.33.1",
+        "@typescript-eslint/types": "5.33.1",
+        "@typescript-eslint/typescript-estree": "5.33.1",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0"
       },
@@ -4142,9 +4180,9 @@
       }
     },
     "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
-      "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+      "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4155,13 +4193,13 @@
       }
     },
     "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz",
-      "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
+      "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.32.0",
-        "@typescript-eslint/visitor-keys": "5.32.0",
+        "@typescript-eslint/types": "5.33.1",
+        "@typescript-eslint/visitor-keys": "5.33.1",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -4197,12 +4235,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz",
-      "integrity": "sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
+      "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.32.0",
+        "@typescript-eslint/types": "5.33.1",
         "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
@@ -4214,9 +4252,9 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
-      "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+      "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -5412,9 +5450,9 @@
       }
     },
     "node_modules/cssdb": {
-      "version": "6.6.3",
-      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz",
-      "integrity": "sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.0.0.tgz",
+      "integrity": "sha512-HmRYATZ4Gf8naf6sZmwKEyf7MXAC0ZxjsamtNNgmuWpQgoO973zsE/1JMIohEYsSi5e3n7vQauCLv7TWSrOlrw==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -5985,9 +6023,9 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.21.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz",
-      "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==",
+      "version": "8.22.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz",
+      "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==",
       "dev": true,
       "dependencies": {
         "@eslint/eslintrc": "^1.3.0",
@@ -6123,9 +6161,9 @@
       }
     },
     "node_modules/eslint-plugin-jest": {
-      "version": "26.8.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.8.0.tgz",
-      "integrity": "sha512-IyGhk+PpDgIA99OBPHo+l2aTtt8yAeB1IgPwXOQZSzi8ag/t1MsLZBN2MKL1sj6ahlkaxbkhlm7ll+NPcMcjaQ==",
+      "version": "26.8.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.8.3.tgz",
+      "integrity": "sha512-2roWu1MkEiihQ/qEszPPoaoqVI1x2D8Jtadk5AmoXTdEeNVPMu01Dtz7jIuTOAmdW3L+tSkPZOtEtQroYJDt0A==",
       "dev": true,
       "dependencies": {
         "@typescript-eslint/utils": "^5.10.0"
@@ -11666,57 +11704,59 @@
       }
     },
     "node_modules/postcss-preset-env": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.7.2.tgz",
-      "integrity": "sha512-1q0ih7EDsZmCb/FMDRvosna7Gsbdx8CvYO5hYT120hcp2ZAuOHpSzibujZ4JpIUcAC02PG6b+eftxqjTFh5BNA==",
-      "dev": true,
-      "dependencies": {
-        "@csstools/postcss-cascade-layers": "^1.0.4",
-        "@csstools/postcss-color-function": "^1.1.0",
-        "@csstools/postcss-font-format-keywords": "^1.0.0",
-        "@csstools/postcss-hwb-function": "^1.0.1",
-        "@csstools/postcss-ic-unit": "^1.0.0",
-        "@csstools/postcss-is-pseudo-class": "^2.0.6",
-        "@csstools/postcss-normalize-display-values": "^1.0.0",
-        "@csstools/postcss-oklab-function": "^1.1.0",
+      "version": "7.8.0",
+      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz",
+      "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==",
+      "dev": true,
+      "dependencies": {
+        "@csstools/postcss-cascade-layers": "^1.0.5",
+        "@csstools/postcss-color-function": "^1.1.1",
+        "@csstools/postcss-font-format-keywords": "^1.0.1",
+        "@csstools/postcss-hwb-function": "^1.0.2",
+        "@csstools/postcss-ic-unit": "^1.0.1",
+        "@csstools/postcss-is-pseudo-class": "^2.0.7",
+        "@csstools/postcss-nested-calc": "^1.0.0",
+        "@csstools/postcss-normalize-display-values": "^1.0.1",
+        "@csstools/postcss-oklab-function": "^1.1.1",
         "@csstools/postcss-progressive-custom-properties": "^1.3.0",
-        "@csstools/postcss-stepped-value-functions": "^1.0.0",
-        "@csstools/postcss-trigonometric-functions": "^1.0.1",
-        "@csstools/postcss-unset-value": "^1.0.1",
-        "autoprefixer": "^10.4.7",
-        "browserslist": "^4.21.0",
+        "@csstools/postcss-stepped-value-functions": "^1.0.1",
+        "@csstools/postcss-text-decoration-shorthand": "^1.0.0",
+        "@csstools/postcss-trigonometric-functions": "^1.0.2",
+        "@csstools/postcss-unset-value": "^1.0.2",
+        "autoprefixer": "^10.4.8",
+        "browserslist": "^4.21.3",
         "css-blank-pseudo": "^3.0.3",
         "css-has-pseudo": "^3.0.4",
         "css-prefers-color-scheme": "^6.0.3",
-        "cssdb": "^6.6.3",
-        "postcss-attribute-case-insensitive": "^5.0.1",
+        "cssdb": "^7.0.0",
+        "postcss-attribute-case-insensitive": "^5.0.2",
         "postcss-clamp": "^4.1.0",
-        "postcss-color-functional-notation": "^4.2.3",
+        "postcss-color-functional-notation": "^4.2.4",
         "postcss-color-hex-alpha": "^8.0.4",
-        "postcss-color-rebeccapurple": "^7.1.0",
+        "postcss-color-rebeccapurple": "^7.1.1",
         "postcss-custom-media": "^8.0.2",
         "postcss-custom-properties": "^12.1.8",
         "postcss-custom-selectors": "^6.0.3",
-        "postcss-dir-pseudo-class": "^6.0.4",
-        "postcss-double-position-gradients": "^3.1.1",
+        "postcss-dir-pseudo-class": "^6.0.5",
+        "postcss-double-position-gradients": "^3.1.2",
         "postcss-env-function": "^4.0.6",
         "postcss-focus-visible": "^6.0.4",
         "postcss-focus-within": "^5.0.4",
         "postcss-font-variant": "^5.0.0",
-        "postcss-gap-properties": "^3.0.3",
-        "postcss-image-set-function": "^4.0.6",
+        "postcss-gap-properties": "^3.0.5",
+        "postcss-image-set-function": "^4.0.7",
         "postcss-initial": "^4.0.1",
-        "postcss-lab-function": "^4.2.0",
+        "postcss-lab-function": "^4.2.1",
         "postcss-logical": "^5.0.4",
         "postcss-media-minmax": "^5.0.0",
-        "postcss-nesting": "^10.1.9",
+        "postcss-nesting": "^10.1.10",
         "postcss-opacity-percentage": "^1.1.2",
-        "postcss-overflow-shorthand": "^3.0.3",
+        "postcss-overflow-shorthand": "^3.0.4",
         "postcss-page-break": "^3.0.4",
-        "postcss-place": "^7.0.4",
-        "postcss-pseudo-class-any-link": "^7.1.5",
+        "postcss-place": "^7.0.5",
+        "postcss-pseudo-class-any-link": "^7.1.6",
         "postcss-replace-overflow-wrap": "^4.0.0",
-        "postcss-selector-not": "^6.0.0",
+        "postcss-selector-not": "^6.0.1",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -12562,9 +12602,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "2.77.2",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.2.tgz",
-      "integrity": "sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==",
+      "version": "2.78.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
+      "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
       "dev": true,
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -12763,9 +12803,9 @@
       "dev": true
     },
     "node_modules/sass": {
-      "version": "1.54.3",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.3.tgz",
-      "integrity": "sha512-fLodey5Qd41Pxp/Tk7Al97sViYwF/TazRc5t6E65O7JOk4XF8pzwIW7CvCxYVOfJFFI/1x5+elDyBIixrp+zrw==",
+      "version": "1.54.5",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.5.tgz",
+      "integrity": "sha512-p7DTOzxkUPa/63FU0R3KApkRHwcVZYC0PLnLm5iyZACyp15qSi32x7zVUhRdABAATmkALqgGrjCJAcWvobmhHw==",
       "dev": true,
       "dependencies": {
         "chokidar": ">=3.0.0 <4.0.0",
@@ -13479,9 +13519,9 @@
       }
     },
     "node_modules/ts-jest": {
-      "version": "28.0.7",
-      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.7.tgz",
-      "integrity": "sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==",
+      "version": "28.0.8",
+      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz",
+      "integrity": "sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==",
       "dev": true,
       "dependencies": {
         "bs-logger": "0.x",
@@ -13537,9 +13577,9 @@
       }
     },
     "node_modules/ts-jest/node_modules/yargs-parser": {
-      "version": "21.0.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
-      "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
       "dev": true,
       "engines": {
         "node": ">=12"
@@ -13669,9 +13709,9 @@
       }
     },
     "node_modules/type-fest": {
-      "version": "2.18.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.18.0.tgz",
-      "integrity": "sha512-pRS+/yrW5TjPPHNOvxhbNZexr2bS63WjrMU8a+VzEBhUi9Tz1pZeD+vQz3ut0svZ46P+SRqMEPnJmk2XnvNzTw==",
+      "version": "2.18.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.18.1.tgz",
+      "integrity": "sha512-UKCINsd4qiATXD6OIlnQw9t1ux/n2ld+Nl0kzPbCONhCaUIS/BhJbNw14w6584HCQWf3frBK8vmWnGZq/sbPHQ==",
       "dev": true,
       "engines": {
         "node": ">=12.20"
@@ -15742,6 +15782,15 @@
         "postcss-selector-parser": "^6.0.10"
       }
     },
+    "@csstools/postcss-nested-calc": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz",
+      "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==",
+      "dev": true,
+      "requires": {
+        "postcss-value-parser": "^4.2.0"
+      }
+    },
     "@csstools/postcss-normalize-display-values": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz",
@@ -15779,6 +15828,15 @@
         "postcss-value-parser": "^4.2.0"
       }
     },
+    "@csstools/postcss-text-decoration-shorthand": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz",
+      "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==",
+      "dev": true,
+      "requires": {
+        "postcss-value-parser": "^4.2.0"
+      }
+    },
     "@csstools/postcss-trigonometric-functions": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz",
@@ -16987,12 +17045,12 @@
       }
     },
     "@types/jest": {
-      "version": "28.1.6",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.6.tgz",
-      "integrity": "sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==",
+      "version": "28.1.7",
+      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.7.tgz",
+      "integrity": "sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA==",
       "dev": true,
       "requires": {
-        "jest-matcher-utils": "^28.0.0",
+        "expect": "^28.0.0",
         "pretty-format": "^28.0.0"
       }
     },
@@ -17231,14 +17289,14 @@
       "dev": true
     },
     "@typescript-eslint/eslint-plugin": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz",
-      "integrity": "sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz",
+      "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "5.32.0",
-        "@typescript-eslint/type-utils": "5.32.0",
-        "@typescript-eslint/utils": "5.32.0",
+        "@typescript-eslint/scope-manager": "5.33.1",
+        "@typescript-eslint/type-utils": "5.33.1",
+        "@typescript-eslint/utils": "5.33.1",
         "debug": "^4.3.4",
         "functional-red-black-tree": "^1.0.1",
         "ignore": "^5.2.0",
@@ -17295,31 +17353,31 @@
       }
     },
     "@typescript-eslint/parser": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz",
-      "integrity": "sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz",
+      "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "5.32.0",
-        "@typescript-eslint/types": "5.32.0",
-        "@typescript-eslint/typescript-estree": "5.32.0",
+        "@typescript-eslint/scope-manager": "5.33.1",
+        "@typescript-eslint/types": "5.33.1",
+        "@typescript-eslint/typescript-estree": "5.33.1",
         "debug": "^4.3.4"
       },
       "dependencies": {
         "@typescript-eslint/types": {
-          "version": "5.32.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
-          "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
+          "version": "5.33.1",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+          "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
           "dev": true
         },
         "@typescript-eslint/typescript-estree": {
-          "version": "5.32.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz",
-          "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==",
+          "version": "5.33.1",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
+          "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
           "dev": true,
           "requires": {
-            "@typescript-eslint/types": "5.32.0",
-            "@typescript-eslint/visitor-keys": "5.32.0",
+            "@typescript-eslint/types": "5.33.1",
+            "@typescript-eslint/visitor-keys": "5.33.1",
             "debug": "^4.3.4",
             "globby": "^11.1.0",
             "is-glob": "^4.0.3",
@@ -17339,30 +17397,30 @@
       }
     },
     "@typescript-eslint/scope-manager": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz",
-      "integrity": "sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
+      "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.32.0",
-        "@typescript-eslint/visitor-keys": "5.32.0"
+        "@typescript-eslint/types": "5.33.1",
+        "@typescript-eslint/visitor-keys": "5.33.1"
       },
       "dependencies": {
         "@typescript-eslint/types": {
-          "version": "5.32.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
-          "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
+          "version": "5.33.1",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+          "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
           "dev": true
         }
       }
     },
     "@typescript-eslint/type-utils": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz",
-      "integrity": "sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz",
+      "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/utils": "5.32.0",
+        "@typescript-eslint/utils": "5.33.1",
         "debug": "^4.3.4",
         "tsutils": "^3.21.0"
       }
@@ -17410,33 +17468,33 @@
       }
     },
     "@typescript-eslint/utils": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.32.0.tgz",
-      "integrity": "sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz",
+      "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==",
       "dev": true,
       "requires": {
         "@types/json-schema": "^7.0.9",
-        "@typescript-eslint/scope-manager": "5.32.0",
-        "@typescript-eslint/types": "5.32.0",
-        "@typescript-eslint/typescript-estree": "5.32.0",
+        "@typescript-eslint/scope-manager": "5.33.1",
+        "@typescript-eslint/types": "5.33.1",
+        "@typescript-eslint/typescript-estree": "5.33.1",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0"
       },
       "dependencies": {
         "@typescript-eslint/types": {
-          "version": "5.32.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
-          "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
+          "version": "5.33.1",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+          "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
           "dev": true
         },
         "@typescript-eslint/typescript-estree": {
-          "version": "5.32.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz",
-          "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==",
+          "version": "5.33.1",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
+          "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
           "dev": true,
           "requires": {
-            "@typescript-eslint/types": "5.32.0",
-            "@typescript-eslint/visitor-keys": "5.32.0",
+            "@typescript-eslint/types": "5.33.1",
+            "@typescript-eslint/visitor-keys": "5.33.1",
             "debug": "^4.3.4",
             "globby": "^11.1.0",
             "is-glob": "^4.0.3",
@@ -17456,19 +17514,19 @@
       }
     },
     "@typescript-eslint/visitor-keys": {
-      "version": "5.32.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz",
-      "integrity": "sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==",
+      "version": "5.33.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
+      "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.32.0",
+        "@typescript-eslint/types": "5.33.1",
         "eslint-visitor-keys": "^3.3.0"
       },
       "dependencies": {
         "@typescript-eslint/types": {
-          "version": "5.32.0",
-          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
-          "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
+          "version": "5.33.1",
+          "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+          "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
           "dev": true
         }
       }
@@ -18347,9 +18405,9 @@
       "dev": true
     },
     "cssdb": {
-      "version": "6.6.3",
-      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz",
-      "integrity": "sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.0.0.tgz",
+      "integrity": "sha512-HmRYATZ4Gf8naf6sZmwKEyf7MXAC0ZxjsamtNNgmuWpQgoO973zsE/1JMIohEYsSi5e3n7vQauCLv7TWSrOlrw==",
       "dev": true
     },
     "cssesc": {
@@ -18769,9 +18827,9 @@
       }
     },
     "eslint": {
-      "version": "8.21.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz",
-      "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==",
+      "version": "8.22.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz",
+      "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==",
       "dev": true,
       "requires": {
         "@eslint/eslintrc": "^1.3.0",
@@ -18961,9 +19019,9 @@
       }
     },
     "eslint-plugin-jest": {
-      "version": "26.8.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.8.0.tgz",
-      "integrity": "sha512-IyGhk+PpDgIA99OBPHo+l2aTtt8yAeB1IgPwXOQZSzi8ag/t1MsLZBN2MKL1sj6ahlkaxbkhlm7ll+NPcMcjaQ==",
+      "version": "26.8.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.8.3.tgz",
+      "integrity": "sha512-2roWu1MkEiihQ/qEszPPoaoqVI1x2D8Jtadk5AmoXTdEeNVPMu01Dtz7jIuTOAmdW3L+tSkPZOtEtQroYJDt0A==",
       "dev": true,
       "requires": {
         "@typescript-eslint/utils": "^5.10.0"
@@ -22795,57 +22853,59 @@
       }
     },
     "postcss-preset-env": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.7.2.tgz",
-      "integrity": "sha512-1q0ih7EDsZmCb/FMDRvosna7Gsbdx8CvYO5hYT120hcp2ZAuOHpSzibujZ4JpIUcAC02PG6b+eftxqjTFh5BNA==",
-      "dev": true,
-      "requires": {
-        "@csstools/postcss-cascade-layers": "^1.0.4",
-        "@csstools/postcss-color-function": "^1.1.0",
-        "@csstools/postcss-font-format-keywords": "^1.0.0",
-        "@csstools/postcss-hwb-function": "^1.0.1",
-        "@csstools/postcss-ic-unit": "^1.0.0",
-        "@csstools/postcss-is-pseudo-class": "^2.0.6",
-        "@csstools/postcss-normalize-display-values": "^1.0.0",
-        "@csstools/postcss-oklab-function": "^1.1.0",
+      "version": "7.8.0",
+      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz",
+      "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==",
+      "dev": true,
+      "requires": {
+        "@csstools/postcss-cascade-layers": "^1.0.5",
+        "@csstools/postcss-color-function": "^1.1.1",
+        "@csstools/postcss-font-format-keywords": "^1.0.1",
+        "@csstools/postcss-hwb-function": "^1.0.2",
+        "@csstools/postcss-ic-unit": "^1.0.1",
+        "@csstools/postcss-is-pseudo-class": "^2.0.7",
+        "@csstools/postcss-nested-calc": "^1.0.0",
+        "@csstools/postcss-normalize-display-values": "^1.0.1",
+        "@csstools/postcss-oklab-function": "^1.1.1",
         "@csstools/postcss-progressive-custom-properties": "^1.3.0",
-        "@csstools/postcss-stepped-value-functions": "^1.0.0",
-        "@csstools/postcss-trigonometric-functions": "^1.0.1",
-        "@csstools/postcss-unset-value": "^1.0.1",
-        "autoprefixer": "^10.4.7",
-        "browserslist": "^4.21.0",
+        "@csstools/postcss-stepped-value-functions": "^1.0.1",
+        "@csstools/postcss-text-decoration-shorthand": "^1.0.0",
+        "@csstools/postcss-trigonometric-functions": "^1.0.2",
+        "@csstools/postcss-unset-value": "^1.0.2",
+        "autoprefixer": "^10.4.8",
+        "browserslist": "^4.21.3",
         "css-blank-pseudo": "^3.0.3",
         "css-has-pseudo": "^3.0.4",
         "css-prefers-color-scheme": "^6.0.3",
-        "cssdb": "^6.6.3",
-        "postcss-attribute-case-insensitive": "^5.0.1",
+        "cssdb": "^7.0.0",
+        "postcss-attribute-case-insensitive": "^5.0.2",
         "postcss-clamp": "^4.1.0",
-        "postcss-color-functional-notation": "^4.2.3",
+        "postcss-color-functional-notation": "^4.2.4",
         "postcss-color-hex-alpha": "^8.0.4",
-        "postcss-color-rebeccapurple": "^7.1.0",
+        "postcss-color-rebeccapurple": "^7.1.1",
         "postcss-custom-media": "^8.0.2",
         "postcss-custom-properties": "^12.1.8",
         "postcss-custom-selectors": "^6.0.3",
-        "postcss-dir-pseudo-class": "^6.0.4",
-        "postcss-double-position-gradients": "^3.1.1",
+        "postcss-dir-pseudo-class": "^6.0.5",
+        "postcss-double-position-gradients": "^3.1.2",
         "postcss-env-function": "^4.0.6",
         "postcss-focus-visible": "^6.0.4",
         "postcss-focus-within": "^5.0.4",
         "postcss-font-variant": "^5.0.0",
-        "postcss-gap-properties": "^3.0.3",
-        "postcss-image-set-function": "^4.0.6",
+        "postcss-gap-properties": "^3.0.5",
+        "postcss-image-set-function": "^4.0.7",
         "postcss-initial": "^4.0.1",
-        "postcss-lab-function": "^4.2.0",
+        "postcss-lab-function": "^4.2.1",
         "postcss-logical": "^5.0.4",
         "postcss-media-minmax": "^5.0.0",
-        "postcss-nesting": "^10.1.9",
+        "postcss-nesting": "^10.1.10",
         "postcss-opacity-percentage": "^1.1.2",
-        "postcss-overflow-shorthand": "^3.0.3",
+        "postcss-overflow-shorthand": "^3.0.4",
         "postcss-page-break": "^3.0.4",
-        "postcss-place": "^7.0.4",
-        "postcss-pseudo-class-any-link": "^7.1.5",
+        "postcss-place": "^7.0.5",
+        "postcss-pseudo-class-any-link": "^7.1.6",
         "postcss-replace-overflow-wrap": "^4.0.0",
-        "postcss-selector-not": "^6.0.0",
+        "postcss-selector-not": "^6.0.1",
         "postcss-value-parser": "^4.2.0"
       }
     },
@@ -23473,9 +23533,9 @@
       }
     },
     "rollup": {
-      "version": "2.77.2",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.2.tgz",
-      "integrity": "sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==",
+      "version": "2.78.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
+      "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
       "dev": true,
       "requires": {
         "fsevents": "~2.3.2"
@@ -23629,9 +23689,9 @@
       "dev": true
     },
     "sass": {
-      "version": "1.54.3",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.3.tgz",
-      "integrity": "sha512-fLodey5Qd41Pxp/Tk7Al97sViYwF/TazRc5t6E65O7JOk4XF8pzwIW7CvCxYVOfJFFI/1x5+elDyBIixrp+zrw==",
+      "version": "1.54.5",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.5.tgz",
+      "integrity": "sha512-p7DTOzxkUPa/63FU0R3KApkRHwcVZYC0PLnLm5iyZACyp15qSi32x7zVUhRdABAATmkALqgGrjCJAcWvobmhHw==",
       "dev": true,
       "requires": {
         "chokidar": ">=3.0.0 <4.0.0",
@@ -24192,9 +24252,9 @@
       "integrity": "sha512-cBvC2QjtvJ9JfWLvstVnI45Y46Y5dMxIaG1TDMGAD/R87hpvqFL+7LhvUDhnRCfOnx/xitollFWWvUKKKhbN0A=="
     },
     "ts-jest": {
-      "version": "28.0.7",
-      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.7.tgz",
-      "integrity": "sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==",
+      "version": "28.0.8",
+      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz",
+      "integrity": "sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==",
       "dev": true,
       "requires": {
         "bs-logger": "0.x",
@@ -24217,9 +24277,9 @@
           }
         },
         "yargs-parser": {
-          "version": "21.0.1",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
-          "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
+          "version": "21.1.1",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+          "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
           "dev": true
         }
       }
@@ -24311,9 +24371,9 @@
       "dev": true
     },
     "type-fest": {
-      "version": "2.18.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.18.0.tgz",
-      "integrity": "sha512-pRS+/yrW5TjPPHNOvxhbNZexr2bS63WjrMU8a+VzEBhUi9Tz1pZeD+vQz3ut0svZ46P+SRqMEPnJmk2XnvNzTw==",
+      "version": "2.18.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.18.1.tgz",
+      "integrity": "sha512-UKCINsd4qiATXD6OIlnQw9t1ux/n2ld+Nl0kzPbCONhCaUIS/BhJbNw14w6584HCQWf3frBK8vmWnGZq/sbPHQ==",
       "dev": true
     },
     "typescript": {
diff --git a/package.json b/package.json
index 810ebcfa..58d2baa3 100644
--- a/package.json
+++ b/package.json
@@ -44,26 +44,26 @@
     "@types/conventional-commits-parser": "3.0.2",
     "@types/glob": "7.2.0",
     "@types/greasemonkey": "4.0.3",
-    "@types/jest": "28.1.6",
+    "@types/jest": "28.1.7",
     "@types/jest-when": "3.5.2",
     "@types/postcss-preset-env": "7.7.0",
     "@types/rollup__plugin-virtual": "2.0.1",
     "@types/rollup-plugin-progress": "1.1.1",
     "@types/setup-polly-jest": "0.5.1",
-    "@typescript-eslint/eslint-plugin": "5.32.0",
-    "@typescript-eslint/parser": "5.32.0",
+    "@typescript-eslint/eslint-plugin": "5.33.1",
+    "@typescript-eslint/parser": "5.33.1",
     "babel-plugin-transform-async-to-promises": "0.8.16",
     "confusing-browser-globals": "1.0.11",
     "conventional-commits-parser": "3.2.4",
     "core-js": "3.24.1",
-    "eslint": "8.21.0",
+    "eslint": "8.22.0",
     "eslint-config-adjunct": "4.11.2",
     "eslint-config-prettier": "8.5.0",
     "eslint-plugin-array-func": "3.1.7",
     "eslint-plugin-disable": "2.0.3",
     "eslint-plugin-eslint-comments": "3.2.0",
     "eslint-plugin-html": "7.1.0",
-    "eslint-plugin-jest": "26.8.0",
+    "eslint-plugin-jest": "26.8.3",
     "eslint-plugin-jest-async": "1.0.3",
     "eslint-plugin-jest-formatting": "3.1.0",
     "eslint-plugin-json": "3.1.0",
@@ -91,19 +91,19 @@
     "nativejsx": "github:ROpdebee/nativejsx",
     "node-fetch": "3.2.10",
     "postcss": "8.4.16",
-    "postcss-preset-env": "7.7.2",
-    "rollup": "2.77.2",
+    "postcss-preset-env": "7.8.0",
+    "rollup": "2.78.1",
     "rollup-plugin-consts": "1.1.0",
     "rollup-plugin-postcss": "4.0.2",
     "rollup-plugin-progress": "1.1.2",
-    "sass": "1.54.3",
+    "sass": "1.54.5",
     "setup-polly-jest": "0.11.0",
     "simple-git": "3.12.0",
     "terser": "5.14.2",
-    "ts-jest": "28.0.7",
+    "ts-jest": "28.0.8",
     "ts-node": "10.9.1",
     "tsconfig-paths": "4.1.0",
-    "type-fest": "2.18.0",
+    "type-fest": "2.18.1",
     "typescript": "4.7.4",
     "warcio": "1.5.1"
   },
diff --git a/src/lib/MB/types.ts b/src/lib/MB/types.ts
index 3e29128a..f150d4a0 100644
--- a/src/lib/MB/types.ts
+++ b/src/lib/MB/types.ts
@@ -31,9 +31,7 @@ declare global {
         MB: {
             releaseEditor?: ReleaseEditor;
             sourceExternalLinksEditor?: {
-                externalLinksEditorRef: {
-                    current: ExternalLinks;
-                };
+                current: ExternalLinks;
             };
         };
     }
diff --git a/src/mb_enhanced_cover_art_uploads/providers/amazon.ts b/src/mb_enhanced_cover_art_uploads/providers/amazon.ts
index cc23e41a..d64885d7 100644
--- a/src/mb_enhanced_cover_art_uploads/providers/amazon.ts
+++ b/src/mb_enhanced_cover_art_uploads/providers/amazon.ts
@@ -63,6 +63,12 @@ export class AmazonProvider extends CoverArtProvider {
         const pageContent = await this.fetchPage(url);
         const pageDom = parseDOM(pageContent, url.href);
 
+        // Check for Amazon rate limiting
+        // istanbul ignore next: Difficult to exercise in tests.
+        if (qsMaybe('form[action="/errors/validateCaptcha"]', pageDom) !== null) {
+            throw new Error('Amazon served a captcha page');
+        }
+
         let finder: typeof this.findDigitalImages;
         /* eslint-disable @typescript-eslint/unbound-method -- Bound further down */
         if (qsMaybe(AUDIBLE_PAGE_QUERY, pageDom)) {
diff --git a/src/mb_enhanced_cover_art_uploads/providers/vgmdb.ts b/src/mb_enhanced_cover_art_uploads/providers/vgmdb.ts
index 3bd989bb..ee8eb0d5 100644
--- a/src/mb_enhanced_cover_art_uploads/providers/vgmdb.ts
+++ b/src/mb_enhanced_cover_art_uploads/providers/vgmdb.ts
@@ -46,6 +46,7 @@ function mapPackagingType(packaging: string, caption: string): MappedArtwork {
         ['front', ArtworkTypeIDs.Front],
         ['back', ArtworkTypeIDs.Back],
         ['spine', ArtworkTypeIDs.Spine],
+        ['side', ArtworkTypeIDs.Spine],
         ['top', ArtworkTypeIDs.Top],
         ['bottom', ArtworkTypeIDs.Bottom],
         ['interior', ArtworkTypeIDs.Tray],
@@ -78,20 +79,21 @@ function mapPackagingType(packaging: string, caption: string): MappedArtwork {
 }
 
 function mapDiscType(mediumType: string, caption: string): MappedArtwork {
-    const keywords = caption.split(/,|\s/).filter(Boolean);
     const commentParts = [];
     let type = ArtworkTypeIDs.Medium;
+
+    const keywords = caption.split(/,|\s/).filter(Boolean);
     for (const keyword of keywords) {
         // As a regular expression because it might be surrounded in parentheses
         if (/reverse|back/i.test(keyword)) {
             type = ArtworkTypeIDs.Matrix;
-        } else {
+        } else if (!/front/i.test(keyword)) {  // Don't include "front" for e.g. "Disc Front"
             commentParts.push(keyword);
         }
     }
 
-    // If the comment starts with a sequence number, add the medium type
-    if (commentParts.length > 0 && /^\d+/.test(commentParts[0])) {
+    // If the comment starts with a sequence number or isn't just "Disc", add the medium type
+    if (commentParts.length > 0 && /^\d+/.test(commentParts[0]) || mediumType !== 'Disc') {
         commentParts.unshift(mediumType);
     }
 
@@ -112,6 +114,7 @@ const __CAPTION_TYPE_MAPPING: Record<string, MappedArtwork | ((caption: string)
     cassette: ArtworkTypeIDs.Medium,
     vinyl: ArtworkTypeIDs.Medium,
     dvd: mapDiscType.bind(undefined, 'DVD'),
+    'blu-ray': mapDiscType.bind(undefined, 'Blu‐ray'),
     tray: ArtworkTypeIDs.Tray,
     back: ArtworkTypeIDs.Back,
     obi: ArtworkTypeIDs.Obi,
@@ -120,6 +123,7 @@ const __CAPTION_TYPE_MAPPING: Record<string, MappedArtwork | ((caption: string)
     sticker: ArtworkTypeIDs.Sticker,
     slipcase: mapPackagingType.bind(undefined, 'Slipcase'),
     digipack: mapPackagingType.bind(undefined, 'Digipak'),
+    sleeve: mapPackagingType.bind(undefined, 'Sleeve'),
     insert: { type: ArtworkTypeIDs.Other, comment: 'Insert' }, // Or poster?
     inside: ArtworkTypeIDs.Tray,
     case: mapPackagingType.bind(undefined, 'Case'),
@@ -190,7 +194,7 @@ function cleanupCaption(captionRest: string): string {
 
 function convertCaption(caption: string): { types?: ArtworkTypeIDs[]; comment: string } {
     LOGGER.debug(`Found caption “${caption}”`);
-    const [captionType, ...captionRestParts] = caption.trim().split(/\b/);
+    const [captionType, ...captionRestParts] = caption.trim().split(/(?=[^a-zA-Z\d-])/);
     const captionRest = cleanupCaption(captionRestParts.join('').trim());
     const mapper = CAPTION_TYPE_MAPPING[captionType.toLowerCase()];
 
diff --git a/src/mb_multi_external_links/index.ts b/src/mb_multi_external_links/index.ts
index fab00f67..b3270960 100644
--- a/src/mb_multi_external_links/index.ts
+++ b/src/mb_multi_external_links/index.ts
@@ -10,7 +10,7 @@ import { onAddEntityDialogLoaded, qsa, qsMaybe, setInputValue } from '@lib/util/
 
 function getExternalLinksEditor(mbInstance: typeof window.MB): ExternalLinks {
     // Can be found in the MB object, but exact property depends on actual page.
-    const editor = (mbInstance.releaseEditor?.externalLinks ?? mbInstance.sourceExternalLinksEditor)?.externalLinksEditorRef.current;
+    const editor = (mbInstance.releaseEditor?.externalLinks.externalLinksEditorRef ?? mbInstance.sourceExternalLinksEditor)?.current;
     assertHasValue(editor, 'Cannot find external links editor object');
     return editor;
 }


Test patch:
diff --git a/tests/unit/mb_enhanced_cover_art_uploads/providers/vgmdb.test.ts b/tests/unit/mb_enhanced_cover_art_uploads/providers/vgmdb.test.ts
index 320e9d75..20af2b04 100644
--- a/tests/unit/mb_enhanced_cover_art_uploads/providers/vgmdb.test.ts
+++ b/tests/unit/mb_enhanced_cover_art_uploads/providers/vgmdb.test.ts
@@ -40,7 +40,8 @@ describe('vgmdb provider', () => {
             ['Jacket Front & Back colorised', [ArtworkTypeIDs.Front, ArtworkTypeIDs.Back, ArtworkTypeIDs.Spine], 'colorised'],
             ['Disc', [ArtworkTypeIDs.Medium], ''],
             ['Disc 1', [ArtworkTypeIDs.Medium], 'Disc 1'],
-            ['DVD', [ArtworkTypeIDs.Medium], ''],
+            ['DVD', [ArtworkTypeIDs.Medium], 'DVD'],
+            ['CD', [ArtworkTypeIDs.Medium], 'CD'],
             ['Disc (reverse)', [ArtworkTypeIDs.Matrix], ''],
             ['Disc (Back)', [ArtworkTypeIDs.Matrix], ''],
             ['Disc 1 (Back)', [ArtworkTypeIDs.Matrix], 'Disc 1'],
@@ -68,6 +69,15 @@ describe('vgmdb provider', () => {
             ['Contents', [ArtworkTypeIDs.Raw], ''],
             [' Booklet Front & Back', [ArtworkTypeIDs.Booklet], 'Front & Back'],
             ['Booklet: Interview', [ArtworkTypeIDs.Booklet], 'Interview'],
+            // ['Back Tray', [ArtworkTypeIDs.Tray], 'Back'],  // FIXME
+            // ['Front Tray', [ArtworkTypeIDs.Tray], 'Front'],  // FIXME
+            ['Case Side', [ArtworkTypeIDs.Spine], 'Case'],
+            ['Box Side', [ArtworkTypeIDs.Spine], 'Box'],
+            ['Disc Front', [ArtworkTypeIDs.Medium], ''],
+            ['Blu-ray', [ArtworkTypeIDs.Medium], 'Blu‐ray'],
+            ['Sleeve Front', [ArtworkTypeIDs.Front], 'Sleeve'],
+            ['Sleeve Back', [ArtworkTypeIDs.Back], 'Sleeve'],
+            ['Sleeve Interior', [ArtworkTypeIDs.Tray], 'Sleeve'], // Might be wrong.
         ];
 
         it.each(mappingCases)('should map %s to the correct type', (caption, expectedTypes, expectedComment) => {