From 65f7b3e6cebacbd349678a412f699d604efd9ade Mon Sep 17 00:00:00 2001
From: Gil Tayar <gil@tayar.org>
Date: Sun, 12 Nov 2023 18:35:06 +0200
Subject: [PATCH] check compatiblity without looking at version number

---
 examples/babel/package-lock.json              |  22 +-
 examples/jest-broken/package-lock.json        |  22 +-
 examples/jest/package-lock.json               |  22 +-
 examples/node-ava/package-lock.json           |  22 +-
 examples/node-esm/package-lock.json           |  22 +-
 examples/node/package-lock.json               |  22 +-
 package-lock.json                             | 311 ++++++++----------
 package.json                                  |  10 +-
 src/can-register-loader.js                    |   8 +-
 test/support/versions.js                      |   5 -
 .../replace/module/require-actual.test.js     |   3 -
 11 files changed, 217 insertions(+), 252 deletions(-)
 delete mode 100644 test/support/versions.js

diff --git a/examples/babel/package-lock.json b/examples/babel/package-lock.json
index e32c724..078e908 100644
--- a/examples/babel/package-lock.json
+++ b/examples/babel/package-lock.json
@@ -15,19 +15,19 @@
     },
     "../..": {
       "name": "testdouble",
-      "version": "3.19.0",
+      "version": "3.20.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "lodash": "^4.17.21",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
       },
       "devDependencies": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -43,7 +43,7 @@
         "standard": "^17.1.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
         "typescript": "^5.2.2"
@@ -12547,9 +12547,9 @@
     "testdouble": {
       "version": "file:../..",
       "requires": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -12562,13 +12562,13 @@
         "mkdirp": "^3.0.1",
         "npm-run-all": "^4.1.5",
         "nyc": "^15.1.0",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "rimraf": "^5.0.5",
         "standard": "^17.1.0",
         "stringify-object-es5": "^2.5.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "theredoc": "^1.0.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
diff --git a/examples/jest-broken/package-lock.json b/examples/jest-broken/package-lock.json
index 669c14c..b37fc29 100644
--- a/examples/jest-broken/package-lock.json
+++ b/examples/jest-broken/package-lock.json
@@ -16,19 +16,19 @@
     },
     "../..": {
       "name": "testdouble",
-      "version": "3.19.0",
+      "version": "3.20.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "lodash": "^4.17.21",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
       },
       "devDependencies": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -44,7 +44,7 @@
         "standard": "^17.1.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
         "typescript": "^5.2.2"
@@ -10044,9 +10044,9 @@
     "testdouble": {
       "version": "file:../..",
       "requires": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -10059,13 +10059,13 @@
         "mkdirp": "^3.0.1",
         "npm-run-all": "^4.1.5",
         "nyc": "^15.1.0",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "rimraf": "^5.0.5",
         "standard": "^17.1.0",
         "stringify-object-es5": "^2.5.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "theredoc": "^1.0.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
diff --git a/examples/jest/package-lock.json b/examples/jest/package-lock.json
index 83781d6..296334a 100644
--- a/examples/jest/package-lock.json
+++ b/examples/jest/package-lock.json
@@ -16,19 +16,19 @@
     },
     "../..": {
       "name": "testdouble",
-      "version": "3.19.0",
+      "version": "3.20.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "lodash": "^4.17.21",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
       },
       "devDependencies": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -44,7 +44,7 @@
         "standard": "^17.1.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
         "typescript": "^5.2.2"
@@ -10044,9 +10044,9 @@
     "testdouble": {
       "version": "file:../..",
       "requires": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -10059,13 +10059,13 @@
         "mkdirp": "^3.0.1",
         "npm-run-all": "^4.1.5",
         "nyc": "^15.1.0",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "rimraf": "^5.0.5",
         "standard": "^17.1.0",
         "stringify-object-es5": "^2.5.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "theredoc": "^1.0.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
diff --git a/examples/node-ava/package-lock.json b/examples/node-ava/package-lock.json
index 314757c..207aeb5 100644
--- a/examples/node-ava/package-lock.json
+++ b/examples/node-ava/package-lock.json
@@ -14,19 +14,19 @@
     },
     "../..": {
       "name": "testdouble",
-      "version": "3.19.0",
+      "version": "3.20.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "lodash": "^4.17.21",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
       },
       "devDependencies": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -42,7 +42,7 @@
         "standard": "^17.1.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
         "typescript": "^5.2.2"
@@ -13031,9 +13031,9 @@
     "testdouble": {
       "version": "file:../..",
       "requires": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -13046,13 +13046,13 @@
         "mkdirp": "^3.0.1",
         "npm-run-all": "^4.1.5",
         "nyc": "^15.1.0",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "rimraf": "^5.0.5",
         "standard": "^17.1.0",
         "stringify-object-es5": "^2.5.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "theredoc": "^1.0.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
diff --git a/examples/node-esm/package-lock.json b/examples/node-esm/package-lock.json
index 3cf3915..fc25777 100644
--- a/examples/node-esm/package-lock.json
+++ b/examples/node-esm/package-lock.json
@@ -14,19 +14,19 @@
     },
     "../..": {
       "name": "testdouble",
-      "version": "3.19.0",
+      "version": "3.20.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "lodash": "^4.17.21",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
       },
       "devDependencies": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -42,7 +42,7 @@
         "standard": "^17.1.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
         "typescript": "^5.2.2"
@@ -10537,9 +10537,9 @@
     "testdouble": {
       "version": "file:../..",
       "requires": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -10552,13 +10552,13 @@
         "mkdirp": "^3.0.1",
         "npm-run-all": "^4.1.5",
         "nyc": "^15.1.0",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "rimraf": "^5.0.5",
         "standard": "^17.1.0",
         "stringify-object-es5": "^2.5.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "theredoc": "^1.0.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
diff --git a/examples/node/package-lock.json b/examples/node/package-lock.json
index ad984e3..92fbf17 100644
--- a/examples/node/package-lock.json
+++ b/examples/node/package-lock.json
@@ -15,19 +15,19 @@
     },
     "../..": {
       "name": "testdouble",
-      "version": "3.19.0",
+      "version": "3.20.0",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "lodash": "^4.17.21",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
       },
       "devDependencies": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -43,7 +43,7 @@
         "standard": "^17.1.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
         "typescript": "^5.2.2"
@@ -8548,9 +8548,9 @@
     "testdouble": {
       "version": "file:../..",
       "requires": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -8563,13 +8563,13 @@
         "mkdirp": "^3.0.1",
         "npm-run-all": "^4.1.5",
         "nyc": "^15.1.0",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "rimraf": "^5.0.5",
         "standard": "^17.1.0",
         "stringify-object-es5": "^2.5.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "theredoc": "^1.0.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
diff --git a/package-lock.json b/package-lock.json
index f5e7cb8..9411a86 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,14 +10,14 @@
       "license": "MIT",
       "dependencies": {
         "lodash": "^4.17.21",
-        "quibble": "^0.9.0",
+        "quibble": "^0.9.1",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
       },
       "devDependencies": {
-        "@types/node": "^20.8.7",
-        "@typescript-eslint/eslint-plugin": "^6.8.0",
-        "@typescript-eslint/parser": "^6.8.0",
+        "@types/node": "^20.9.0",
+        "@typescript-eslint/eslint-plugin": "^6.10.0",
+        "@typescript-eslint/parser": "^6.10.0",
         "browserify": "^17.0.0",
         "codeclimate-test-reporter": "^0.5.1",
         "cross-conf-env": "^1.3.0",
@@ -33,7 +33,7 @@
         "standard": "^17.1.0",
         "teenytest": "^6.0.5",
         "teenytest-promise": "^1.0.0",
-        "testdouble": "^3.19.0",
+        "testdouble": "^3.20.0",
         "ts-node": "^10.9.1",
         "tsify": "^5.0.4",
         "typescript": "^5.2.2"
@@ -680,9 +680,9 @@
       "dev": true
     },
     "node_modules/@types/json-schema": {
-      "version": "7.0.14",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz",
-      "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==",
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "dev": true
     },
     "node_modules/@types/json5": {
@@ -692,31 +692,31 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "20.8.7",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
-      "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
+      "version": "20.9.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
+      "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
       "dev": true,
       "dependencies": {
-        "undici-types": "~5.25.1"
+        "undici-types": "~5.26.4"
       }
     },
     "node_modules/@types/semver": {
-      "version": "7.5.4",
-      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz",
-      "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==",
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz",
+      "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
       "dev": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz",
-      "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz",
+      "integrity": "sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==",
       "dev": true,
       "dependencies": {
         "@eslint-community/regexpp": "^4.5.1",
-        "@typescript-eslint/scope-manager": "6.8.0",
-        "@typescript-eslint/type-utils": "6.8.0",
-        "@typescript-eslint/utils": "6.8.0",
-        "@typescript-eslint/visitor-keys": "6.8.0",
+        "@typescript-eslint/scope-manager": "6.10.0",
+        "@typescript-eslint/type-utils": "6.10.0",
+        "@typescript-eslint/utils": "6.10.0",
+        "@typescript-eslint/visitor-keys": "6.10.0",
         "debug": "^4.3.4",
         "graphemer": "^1.4.0",
         "ignore": "^5.2.4",
@@ -757,15 +757,15 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz",
-      "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz",
+      "integrity": "sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "6.8.0",
-        "@typescript-eslint/types": "6.8.0",
-        "@typescript-eslint/typescript-estree": "6.8.0",
-        "@typescript-eslint/visitor-keys": "6.8.0",
+        "@typescript-eslint/scope-manager": "6.10.0",
+        "@typescript-eslint/types": "6.10.0",
+        "@typescript-eslint/typescript-estree": "6.10.0",
+        "@typescript-eslint/visitor-keys": "6.10.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -785,13 +785,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz",
-      "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz",
+      "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "6.8.0",
-        "@typescript-eslint/visitor-keys": "6.8.0"
+        "@typescript-eslint/types": "6.10.0",
+        "@typescript-eslint/visitor-keys": "6.10.0"
       },
       "engines": {
         "node": "^16.0.0 || >=18.0.0"
@@ -802,13 +802,13 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz",
-      "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz",
+      "integrity": "sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "6.8.0",
-        "@typescript-eslint/utils": "6.8.0",
+        "@typescript-eslint/typescript-estree": "6.10.0",
+        "@typescript-eslint/utils": "6.10.0",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.0.1"
       },
@@ -829,9 +829,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz",
-      "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz",
+      "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==",
       "dev": true,
       "engines": {
         "node": "^16.0.0 || >=18.0.0"
@@ -842,13 +842,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz",
-      "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz",
+      "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "6.8.0",
-        "@typescript-eslint/visitor-keys": "6.8.0",
+        "@typescript-eslint/types": "6.10.0",
+        "@typescript-eslint/visitor-keys": "6.10.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -884,17 +884,17 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz",
-      "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz",
+      "integrity": "sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
         "@types/json-schema": "^7.0.12",
         "@types/semver": "^7.5.0",
-        "@typescript-eslint/scope-manager": "6.8.0",
-        "@typescript-eslint/types": "6.8.0",
-        "@typescript-eslint/typescript-estree": "6.8.0",
+        "@typescript-eslint/scope-manager": "6.10.0",
+        "@typescript-eslint/types": "6.10.0",
+        "@typescript-eslint/typescript-estree": "6.10.0",
         "semver": "^7.5.4"
       },
       "engines": {
@@ -924,12 +924,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz",
-      "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz",
+      "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "6.8.0",
+        "@typescript-eslint/types": "6.10.0",
         "eslint-visitor-keys": "^3.4.1"
       },
       "engines": {
@@ -3184,9 +3184,9 @@
       "dev": true
     },
     "node_modules/fast-glob": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
-      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
       "dev": true,
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -5873,12 +5873,12 @@
       ]
     },
     "node_modules/quibble": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.9.0.tgz",
-      "integrity": "sha512-gpBmqaEPl0nNZuDq16sLO7g/aYcrldSIls8igHm5EYP02+Kzmn/DCNpcSGywnhTk6aNJXkUv6vrRDvrJyRJ2Xw==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.9.1.tgz",
+      "integrity": "sha512-2EkLLm3CsBhbHfYEgBWHSJZZRpVHUZLeuJVEQoU/lsCqxcOvVkgVlF4nWv2ACWKkb0lgxgMh3m8vq9rhx9LTIg==",
       "dependencies": {
         "lodash": "^4.17.21",
-        "resolve": "^1.22.4"
+        "resolve": "^1.22.8"
       },
       "engines": {
         "node": ">= 0.14.0"
@@ -6062,9 +6062,9 @@
       "dev": true
     },
     "node_modules/resolve": {
-      "version": "1.22.4",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
-      "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
       "dependencies": {
         "is-core-module": "^2.13.0",
         "path-parse": "^1.0.7",
@@ -6985,13 +6985,13 @@
       }
     },
     "node_modules/testdouble": {
-      "version": "3.19.0",
-      "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-3.19.0.tgz",
-      "integrity": "sha512-iavgMMYdgnAyB7EGv2prhgtqnvhSI+K/EVPySqW4MwFjEiLJkiLBnWqlCP09ikB1Q2LargMb8W6otImp8cnLdw==",
+      "version": "3.20.0",
+      "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-3.20.0.tgz",
+      "integrity": "sha512-P/wfyKF1P1AE8/VM6PXCtSQJyOgPObOg191TlVZnoSQw/hhFXvxIFM5yGJ7Bf9Hs0FX8677YCv3esVgPGSeTLg==",
       "dev": true,
       "dependencies": {
         "lodash": "^4.17.21",
-        "quibble": "^0.8.0",
+        "quibble": "^0.9.0",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
       },
@@ -6999,19 +6999,6 @@
         "node": ">= 16"
       }
     },
-    "node_modules/testdouble/node_modules/quibble": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.8.0.tgz",
-      "integrity": "sha512-hFN7qy9BP6H7gU5LtOCMKu1PeVGKO1jV+avf62zbKJI/tmvkNUYqA5NTxR89WUgsxzS0EACsuT11PNOFxPUBvg==",
-      "dev": true,
-      "dependencies": {
-        "lodash": "^4.17.21",
-        "resolve": "^1.22.4"
-      },
-      "engines": {
-        "node": ">= 0.14.0"
-      }
-    },
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -7428,9 +7415,9 @@
       }
     },
     "node_modules/undici-types": {
-      "version": "5.25.3",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
-      "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
       "dev": true
     },
     "node_modules/uri-js": {
@@ -8328,9 +8315,9 @@
       "dev": true
     },
     "@types/json-schema": {
-      "version": "7.0.14",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz",
-      "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==",
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "dev": true
     },
     "@types/json5": {
@@ -8340,31 +8327,31 @@
       "dev": true
     },
     "@types/node": {
-      "version": "20.8.7",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
-      "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
+      "version": "20.9.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
+      "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
       "dev": true,
       "requires": {
-        "undici-types": "~5.25.1"
+        "undici-types": "~5.26.4"
       }
     },
     "@types/semver": {
-      "version": "7.5.4",
-      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz",
-      "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==",
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz",
+      "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
       "dev": true
     },
     "@typescript-eslint/eslint-plugin": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz",
-      "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz",
+      "integrity": "sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==",
       "dev": true,
       "requires": {
         "@eslint-community/regexpp": "^4.5.1",
-        "@typescript-eslint/scope-manager": "6.8.0",
-        "@typescript-eslint/type-utils": "6.8.0",
-        "@typescript-eslint/utils": "6.8.0",
-        "@typescript-eslint/visitor-keys": "6.8.0",
+        "@typescript-eslint/scope-manager": "6.10.0",
+        "@typescript-eslint/type-utils": "6.10.0",
+        "@typescript-eslint/utils": "6.10.0",
+        "@typescript-eslint/visitor-keys": "6.10.0",
         "debug": "^4.3.4",
         "graphemer": "^1.4.0",
         "ignore": "^5.2.4",
@@ -8385,54 +8372,54 @@
       }
     },
     "@typescript-eslint/parser": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz",
-      "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz",
+      "integrity": "sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "6.8.0",
-        "@typescript-eslint/types": "6.8.0",
-        "@typescript-eslint/typescript-estree": "6.8.0",
-        "@typescript-eslint/visitor-keys": "6.8.0",
+        "@typescript-eslint/scope-manager": "6.10.0",
+        "@typescript-eslint/types": "6.10.0",
+        "@typescript-eslint/typescript-estree": "6.10.0",
+        "@typescript-eslint/visitor-keys": "6.10.0",
         "debug": "^4.3.4"
       }
     },
     "@typescript-eslint/scope-manager": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz",
-      "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz",
+      "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "6.8.0",
-        "@typescript-eslint/visitor-keys": "6.8.0"
+        "@typescript-eslint/types": "6.10.0",
+        "@typescript-eslint/visitor-keys": "6.10.0"
       }
     },
     "@typescript-eslint/type-utils": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz",
-      "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz",
+      "integrity": "sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/typescript-estree": "6.8.0",
-        "@typescript-eslint/utils": "6.8.0",
+        "@typescript-eslint/typescript-estree": "6.10.0",
+        "@typescript-eslint/utils": "6.10.0",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.0.1"
       }
     },
     "@typescript-eslint/types": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz",
-      "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz",
+      "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==",
       "dev": true
     },
     "@typescript-eslint/typescript-estree": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz",
-      "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz",
+      "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "6.8.0",
-        "@typescript-eslint/visitor-keys": "6.8.0",
+        "@typescript-eslint/types": "6.10.0",
+        "@typescript-eslint/visitor-keys": "6.10.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -8452,17 +8439,17 @@
       }
     },
     "@typescript-eslint/utils": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz",
-      "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz",
+      "integrity": "sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==",
       "dev": true,
       "requires": {
         "@eslint-community/eslint-utils": "^4.4.0",
         "@types/json-schema": "^7.0.12",
         "@types/semver": "^7.5.0",
-        "@typescript-eslint/scope-manager": "6.8.0",
-        "@typescript-eslint/types": "6.8.0",
-        "@typescript-eslint/typescript-estree": "6.8.0",
+        "@typescript-eslint/scope-manager": "6.10.0",
+        "@typescript-eslint/types": "6.10.0",
+        "@typescript-eslint/typescript-estree": "6.10.0",
         "semver": "^7.5.4"
       },
       "dependencies": {
@@ -8478,12 +8465,12 @@
       }
     },
     "@typescript-eslint/visitor-keys": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz",
-      "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz",
+      "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "6.8.0",
+        "@typescript-eslint/types": "6.10.0",
         "eslint-visitor-keys": "^3.4.1"
       }
     },
@@ -10251,9 +10238,9 @@
       "dev": true
     },
     "fast-glob": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
-      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
       "dev": true,
       "requires": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -12303,12 +12290,12 @@
       "dev": true
     },
     "quibble": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.9.0.tgz",
-      "integrity": "sha512-gpBmqaEPl0nNZuDq16sLO7g/aYcrldSIls8igHm5EYP02+Kzmn/DCNpcSGywnhTk6aNJXkUv6vrRDvrJyRJ2Xw==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.9.1.tgz",
+      "integrity": "sha512-2EkLLm3CsBhbHfYEgBWHSJZZRpVHUZLeuJVEQoU/lsCqxcOvVkgVlF4nWv2ACWKkb0lgxgMh3m8vq9rhx9LTIg==",
       "requires": {
         "lodash": "^4.17.21",
-        "resolve": "^1.22.4"
+        "resolve": "^1.22.8"
       }
     },
     "randombytes": {
@@ -12460,9 +12447,9 @@
       "dev": true
     },
     "resolve": {
-      "version": "1.22.4",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
-      "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
       "requires": {
         "is-core-module": "^2.13.0",
         "path-parse": "^1.0.7",
@@ -13138,27 +13125,15 @@
       }
     },
     "testdouble": {
-      "version": "3.19.0",
-      "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-3.19.0.tgz",
-      "integrity": "sha512-iavgMMYdgnAyB7EGv2prhgtqnvhSI+K/EVPySqW4MwFjEiLJkiLBnWqlCP09ikB1Q2LargMb8W6otImp8cnLdw==",
+      "version": "3.20.0",
+      "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-3.20.0.tgz",
+      "integrity": "sha512-P/wfyKF1P1AE8/VM6PXCtSQJyOgPObOg191TlVZnoSQw/hhFXvxIFM5yGJ7Bf9Hs0FX8677YCv3esVgPGSeTLg==",
       "dev": true,
       "requires": {
         "lodash": "^4.17.21",
-        "quibble": "^0.8.0",
+        "quibble": "^0.9.0",
         "stringify-object-es5": "^2.5.0",
         "theredoc": "^1.0.0"
-      },
-      "dependencies": {
-        "quibble": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.8.0.tgz",
-          "integrity": "sha512-hFN7qy9BP6H7gU5LtOCMKu1PeVGKO1jV+avf62zbKJI/tmvkNUYqA5NTxR89WUgsxzS0EACsuT11PNOFxPUBvg==",
-          "dev": true,
-          "requires": {
-            "lodash": "^4.17.21",
-            "resolve": "^1.22.4"
-          }
-        }
       }
     },
     "text-table": {
@@ -13477,9 +13452,9 @@
       }
     },
     "undici-types": {
-      "version": "5.25.3",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
-      "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
       "dev": true
     },
     "uri-js": {
diff --git a/package.json b/package.json
index 40feaf8..4410d5a 100644
--- a/package.json
+++ b/package.json
@@ -98,14 +98,14 @@
   },
   "dependencies": {
     "lodash": "^4.17.21",
-    "quibble": "^0.9.0",
+    "quibble": "^0.9.1",
     "stringify-object-es5": "^2.5.0",
     "theredoc": "^1.0.0"
   },
   "devDependencies": {
-    "@types/node": "^20.8.7",
-    "@typescript-eslint/eslint-plugin": "^6.8.0",
-    "@typescript-eslint/parser": "^6.8.0",
+    "@types/node": "^20.9.0",
+    "@typescript-eslint/eslint-plugin": "^6.10.0",
+    "@typescript-eslint/parser": "^6.10.0",
     "browserify": "^17.0.0",
     "codeclimate-test-reporter": "^0.5.1",
     "cross-conf-env": "^1.3.0",
@@ -121,7 +121,7 @@
     "standard": "^17.1.0",
     "teenytest": "^6.0.5",
     "teenytest-promise": "^1.0.0",
-    "testdouble": "^3.19.0",
+    "testdouble": "^3.20.0",
     "ts-node": "^10.9.1",
     "tsify": "^5.0.4",
     "typescript": "^5.2.2"
diff --git a/src/can-register-loader.js b/src/can-register-loader.js
index 1b8129c..a260406 100644
--- a/src/can-register-loader.js
+++ b/src/can-register-loader.js
@@ -1,9 +1,7 @@
-function canRegisterLoader () {
-  const [major, minor] = process.versions.node
-    .split('.')
-    .map((m) => parseInt(m, 10))
+const Module = require('module')
 
-  return major > 20 || (major === 20 && minor >= 6)
+function canRegisterLoader () {
+  return !!Module.register
 }
 
 exports.canRegisterLoader = canRegisterLoader
diff --git a/test/support/versions.js b/test/support/versions.js
deleted file mode 100644
index 7b9d4f6..0000000
--- a/test/support/versions.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  nodeVersionLessThan: function (majorVersion) {
-    return parseInt(process.version.match(/v(\d+)/)[1], 10) < majorVersion
-  }
-}
diff --git a/test/unit/replace/module/require-actual.test.js b/test/unit/replace/module/require-actual.test.js
index c8c6c8d..c56de7d 100644
--- a/test/unit/replace/module/require-actual.test.js
+++ b/test/unit/replace/module/require-actual.test.js
@@ -1,7 +1,6 @@
 import * as theredoc from 'theredoc'
 
 import subject from '../../../../src/replace/module/require-actual'
-import { nodeVersionLessThan } from '../../../support/versions'
 
 module.exports = {
   'require a relative path' () {
@@ -18,8 +17,6 @@ module.exports = {
     assert._isEqual(isNumber(5), true)
   },
   'print a huge error when both fail' () {
-    if (nodeVersionLessThan(16)) return
-
     assert.throwsMessage(() => { subject('./lol/not/real') }, theredoc`
       Error: testdouble.js - td.replace - failed to load the module being replaced.
 
