diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ec412d50fd94aa6e6b821e2fe4bcd623bd0ca2ae..eeff894b69405062cc623b6a910b18755afac423 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: node:18
+image: node:20
 
 
 stages:
diff --git a/.yarnrc.yml b/.yarnrc.yml
index ddff7ef266871ed8270859ee4b6152f1b02db4a2..a9c8ce82781d8c58f37c6bba9d31cb9295d20124 100644
--- a/.yarnrc.yml
+++ b/.yarnrc.yml
@@ -1,3 +1,7 @@
+compressionLevel: mixed
+
+enableGlobalCache: false
+
 nodeLinker: node-modules
 
 npmScopes:
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index cddd3f32f671f6d257a47b336e9fbb5b3609b819..13dd447e324847f3aafd32960884a4d4a26c6ed7 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -1,6 +1,7 @@
 /* eslint-disable */
 /* prettier-ignore */
 // @ts-nocheck
+// noinspection JSUnusedGlobalSymbols
 // Generated by unplugin-auto-import
 export {}
 declare global {
diff --git a/package.json b/package.json
index 27626be77bb331aa0ec85c5a2eb1e661995e25db..10c001d65ca76bd228d86083db5527d1a537db6f 100644
--- a/package.json
+++ b/package.json
@@ -25,23 +25,23 @@
     "xml-js": "^1.6.11"
   },
   "devDependencies": {
-    "@types/node": "^18.16.18",
-    "@typescript-eslint/eslint-plugin": "^5.60.1",
-    "@typescript-eslint/parser": "^5.60.1",
-    "@vitest/coverage-istanbul": "^0.32.2",
-    "@vitest/ui": "^0.32.4",
-    "concurrently": "^8.2.0",
-    "eslint": "^8.43.0",
-    "eslint-config-prettier": "^8.8.0",
-    "fast-check": "^3.10.0",
-    "jsdom": "^22.1.0",
+    "@types/node": "^20.11.19",
+    "@typescript-eslint/eslint-plugin": "^7.0.2",
+    "@typescript-eslint/parser": "^7.0.2",
+    "@vitest/coverage-istanbul": "^1.3.1",
+    "@vitest/ui": "^1.3.1",
+    "concurrently": "^8.2.2",
+    "eslint": "^8.56.0",
+    "eslint-config-prettier": "^9.1.0",
+    "fast-check": "^3.15.1",
+    "jsdom": "^24.0.0",
     "lodash": "^4.17.21",
-    "prettier": "^2.8.8",
-    "ts-node": "^10.9.1",
-    "typescript": "^5.1.6",
-    "unplugin-auto-import": "^0.16.4",
-    "vite": "^4.3.9",
-    "vitest": "^0.32.2",
+    "prettier": "^3.2.5",
+    "ts-node": "^10.9.2",
+    "typescript": "^5.3.3",
+    "unplugin-auto-import": "^0.17.5",
+    "vite": "^5.1.4",
+    "vitest": "^1.3.1",
     "vitest-environment-custom": "link:./tests/vitest-environment-custom",
     "xpath-ts": "^1.3.13"
   },
@@ -55,5 +55,5 @@
     "LICENSE",
     "README.md"
   ],
-  "packageManager": "yarn@3.5.0"
+  "packageManager": "yarn@4.1.0"
 }
diff --git a/tests/vitest-environment-custom/index.ts b/tests/vitest-environment-custom/index.ts
index c01dccf09bff238ff541b7d80ab987fa5049d3f0..51897b52e92c5be7c92866226f66e0601535a74f 100644
--- a/tests/vitest-environment-custom/index.ts
+++ b/tests/vitest-environment-custom/index.ts
@@ -23,8 +23,9 @@ async function readFile(path: string) {
   }
 }
 
-export default <Environment>{
+export default <Environment>({
   name: "custom",
+  transformMode: "web",
   async setup(global, { custom }: Options) {
     const env = builtinEnvironments["node"];
     const envReturn = await env.setup(global, {});
@@ -34,7 +35,7 @@ export default <Environment>{
       return {
         xml,
         dcc: xml ? DCCDocument.fromXml(xml) : DCCDocument.createEmpty(),
-        dom: new JSDOM(xml, { contentType: "application/xml" }),
+        dom: new JSDOM(xml, { url: "http://localhost:3000", contentType: "application/xml" }),
       };
     };
 
@@ -45,4 +46,4 @@ export default <Environment>{
       },
     };
   },
-};
+});
diff --git a/vite.config.ts b/vite.config.mts
similarity index 100%
rename from vite.config.ts
rename to vite.config.mts
diff --git a/yarn.lock b/yarn.lock
index 27ed0c0f33b450ddba701d232e56d7c765f11010..04c4648709e91aa635c2a0ef21334542e31539ab 100644
Binary files a/yarn.lock and b/yarn.lock differ