Repository: svg-sprite/svg-sprite
Pull request #765 (2022-11-23 20:41:00)

Update devDependencies and require Node.js >= 14.18.0


Patch:
diff --git a/bin/svg-sprite.js b/bin/svg-sprite.js
index 7c12052..e1630bf 100644
--- a/bin/svg-sprite.js
+++ b/bin/svg-sprite.js
@@ -14,8 +14,8 @@
 /**
  * Module dependencies.
  */
-const fs = require('fs');
-const path = require('path');
+const fs = require('node:fs');
+const path = require('node:path');
 const merge = require('lodash.merge');
 const File = require('vinyl');
 const yaml = require('js-yaml');
diff --git a/example.js b/example.js
index 9e44af5..20bb776 100644
--- a/example.js
+++ b/example.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const path = require('path');
-const fs = require('fs');
+const path = require('node:path');
+const fs = require('node:fs');
 const glob = require('glob');
 const SVGSpriter = require('./lib/svg-sprite.js');
 
diff --git a/lib/svg-sprite.js b/lib/svg-sprite.js
index 4642247..4671256 100644
--- a/lib/svg-sprite.js
+++ b/lib/svg-sprite.js
@@ -9,11 +9,11 @@
  * @license MIT https://github.com/svg-sprite/svg-sprite/blob/main/LICENSE
  */
 
-const { Buffer } = require('buffer');
-const path = require('path');
-const events = require('events');
-const os = require('os');
-const { format } = require('util');
+const { Buffer } = require('node:buffer');
+const path = require('node:path');
+const events = require('node:events');
+const os = require('node:os');
+const { format } = require('node:util');
 const trimStart = require('lodash.trimstart');
 const merge = require('lodash.merge');
 const File = require('vinyl');
diff --git a/lib/svg-sprite/config.js b/lib/svg-sprite/config.js
index e013577..f916cc7 100644
--- a/lib/svg-sprite/config.js
+++ b/lib/svg-sprite/config.js
@@ -9,8 +9,8 @@
  * @license MIT https://github.com/svg-sprite/svg-sprite/blob/main/LICENSE
  */
 
-const fs = require('fs');
-const path = require('path');
+const fs = require('node:fs');
+const path = require('node:path');
 const yaml = require('js-yaml');
 const winston = require('winston');
 const { isFunction, isObject, isPlainObject, isString } = require('./utils/index.js');
@@ -320,18 +320,25 @@ module.exports = class SVGSpriterConfig {
             } else {
                 spacing = this.spacing[property].map(n => Math.max(0, n));
                 switch (spacing.length) {
-                    case 1:
+                    case 1: {
                         spacing = { top: spacing[0], right: spacing[0], bottom: spacing[0], left: spacing[0] };
                         break;
-                    case 2:
+                    }
+
+                    case 2: {
                         spacing = { top: spacing[0], right: spacing[1], bottom: spacing[0], left: spacing[1] };
                         break;
-                    case 3:
+                    }
+
+                    case 3: {
                         spacing = { top: spacing[0], right: spacing[1], bottom: spacing[2], left: spacing[1] };
                         break;
-                    default:
+                    }
+
+                    default: {
                         spacing = { top: spacing[0], right: spacing[1], bottom: spacing[2], left: spacing[3] };
                         break;
+                    }
                 }
 
                 this.spacing[property] = spacing;
diff --git a/lib/svg-sprite/mode/base.js b/lib/svg-sprite/mode/base.js
index 3d157d0..0e08b38 100644
--- a/lib/svg-sprite/mode/base.js
+++ b/lib/svg-sprite/mode/base.js
@@ -9,11 +9,11 @@
  * @license MIT https://github.com/svg-sprite/svg-sprite/blob/main/LICENSE
  */
 
-const { Buffer } = require('buffer');
-const fs = require('fs');
-const crypto = require('crypto');
-const path = require('path');
-const process = require('process');
+const { Buffer } = require('node:buffer');
+const fs = require('node:fs');
+const crypto = require('node:crypto');
+const path = require('node:path');
+const process = require('node:process');
 const async = require('async');
 const merge = require('lodash.merge');
 const mustache = require('mustache');
diff --git a/lib/svg-sprite/mode/css.js b/lib/svg-sprite/mode/css.js
index 27eb39e..0bdd09a 100644
--- a/lib/svg-sprite/mode/css.js
+++ b/lib/svg-sprite/mode/css.js
@@ -9,7 +9,7 @@
  * @license MIT https://github.com/svg-sprite/svg-sprite/blob/main/LICENSE
  */
 
-const { format } = require('util');
+const { format } = require('node:util');
 const { isString } = require('../utils/index.js');
 const SVGSprite = require('../sprite.js');
 const SVGSpriteBase = require('./base.js');
@@ -59,19 +59,22 @@ SVGSpriteCss.prototype._init = function() {
     // Determine the mixin mode and name
     switch (typeof this.config.mixin) {
         // String: Use the given string as mixin name
-        case 'string':
+        case 'string': {
             this.config.mixin = this.config.mixin.trim().length ? this.config.mixin.trim() : null;
             break;
+        }
 
         // Boolean: Use the common CSS class name (if any)
-        case 'boolean':
-            this.config.mixin = this.config.common ? this.config.common : null;
+        case 'boolean': {
+            this.config.mixin = this.config.common || null;
             break;
+        }
 
         // Default: Don't use mixin
-        default:
+        default: {
             this.config.mixin = null;
             break;
+        }
     }
 
     // Refine the base data
@@ -247,7 +250,7 @@ SVGSpriteCss.prototype._addShapeToSimpleCssSprite = function(shape, needsRegular
 
     switch (this.config.layout) {
         // Horizontal sprite arrangement
-        case this.LAYOUT_HORIZONTAL:
+        case this.LAYOUT_HORIZONTAL: {
             rootAttributes.y = 0;
             rootAttributes.x = this.data.spriteWidth;
             positionX = -this.data.spriteWidth;
@@ -255,9 +258,10 @@ SVGSpriteCss.prototype._addShapeToSimpleCssSprite = function(shape, needsRegular
             this.data.spriteWidth = Math.ceil(this.data.spriteWidth + width);
             this.data.spriteHeight = Math.max(this.data.spriteHeight, height);
             break;
+        }
 
         // Diagonal sprite arrangement
-        case this.LAYOUT_DIAGONAL:
+        case this.LAYOUT_DIAGONAL: {
             rootAttributes.x = this.data.spriteWidth;
             rootAttributes.y = this.data.spriteHeight;
             positionX = -this.data.spriteWidth;
@@ -266,15 +270,17 @@ SVGSpriteCss.prototype._addShapeToSimpleCssSprite = function(shape, needsRegular
             this.data.spriteWidth = Math.ceil(this.data.spriteWidth + width);
             this.data.spriteHeight = Math.ceil(this.data.spriteHeight + height);
             break;
+        }
 
         // Vertical sprite arrangement (default)
-        default:
+        default: {
             rootAttributes.x = 0;
             rootAttributes.y = this.data.spriteHeight;
             positionY = -this.data.spriteHeight;
 
             this.data.spriteWidth = Math.max(this.data.spriteWidth, width);
             this.data.spriteHeight = Math.ceil(this.data.spriteHeight + height);
+        }
     }
 
     this._addShapeToCSSSprite(shape, needsRegular, index, position, this._refineRootAttributes(shape, index, rootAttributes), positionX, positionY);
diff --git a/lib/svg-sprite/mode/standalone.js b/lib/svg-sprite/mode/standalone.js
index 066be91..4ed8f91 100644
--- a/lib/svg-sprite/mode/standalone.js
+++ b/lib/svg-sprite/mode/standalone.js
@@ -9,7 +9,7 @@
  * @license MIT https://github.com/svg-sprite/svg-sprite/blob/main/LICENSE
  */
 
-const { format } = require('util');
+const { format } = require('node:util');
 const { isString } = require('../utils/index.js');
 const SVGSpriteBase = require('./base.js');
 
diff --git a/lib/svg-sprite/queue.js b/lib/svg-sprite/queue.js
index e2f20ab..da04da6 100644
--- a/lib/svg-sprite/queue.js
+++ b/lib/svg-sprite/queue.js
@@ -9,8 +9,8 @@
  * @license MIT https://github.com/svg-sprite/svg-sprite/blob/main/LICENSE
  */
 
-const { EventEmitter } = require('events');
-const path = require('path');
+const { EventEmitter } = require('node:events');
+const path = require('node:path');
 const async = require('async');
 const Shape = require('./shape.js');
 
diff --git a/lib/svg-sprite/shape.js b/lib/svg-sprite/shape.js
index 5518fab..2a31793 100644
--- a/lib/svg-sprite/shape.js
+++ b/lib/svg-sprite/shape.js
@@ -9,8 +9,8 @@
  * @license MIT https://github.com/svg-sprite/svg-sprite/blob/main/LICENSE
  */
 
-const path = require('path');
-const { format } = require('util');
+const path = require('node:path');
+const { format } = require('node:util');
 const merge = require('lodash.merge');
 const { DOMParser, XMLSerializer } = require('@xmldom/xmldom');
 const xpath = require('xpath');
diff --git a/lib/svg-sprite/sprite.js b/lib/svg-sprite/sprite.js
index 5b20390..8e31618 100644
--- a/lib/svg-sprite/sprite.js
+++ b/lib/svg-sprite/sprite.js
@@ -9,7 +9,7 @@
  * @license MIT https://github.com/svg-sprite/svg-sprite/blob/main/LICENSE
  */
 
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const escape = require('lodash.escape');
 const File = require('vinyl');
 const { isFunction } = require('./utils/index.js');
diff --git a/package-lock.json b/package-lock.json
index 89690e7..6760f41 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -32,9 +32,9 @@
         "svg-sprite": "bin/svg-sprite.js"
       },
       "devDependencies": {
-        "eslint-plugin-jest": "^27.1.4",
+        "eslint-plugin-jest": "^27.1.6",
         "eslint-plugin-jest-formatting": "^3.1.0",
-        "eslint-plugin-jsdoc": "^39.6.2",
+        "eslint-plugin-jsdoc": "^39.6.4",
         "jest": "^29.3.1",
         "less": "^4.1.3",
         "pixelmatch": "^5.3.0",
@@ -42,10 +42,10 @@
         "pngjs": "^6.0.0",
         "sass": "^1.56.1",
         "stylus": "^0.59.0",
-        "xo": "^0.52.4"
+        "xo": "^0.53.1"
       },
       "engines": {
-        "node": ">=14"
+        "node": ">=14.18.0"
       }
     },
     "node_modules/@adobe/css-tools": {
@@ -684,9 +684,9 @@
       }
     },
     "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.36.0",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.0.tgz",
-      "integrity": "sha512-u0XZyvUF6Urb2cSivSXA8qXIpT/CxkHcdtZKoWusAzgzmsTWpg0F2FpWXsolHmMUyVY3dLWaoy+0ccJ5uf2QjA==",
+      "version": "0.36.1",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz",
+      "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==",
       "dev": true,
       "dependencies": {
         "comment-parser": "1.3.1",
@@ -1637,9 +1637,9 @@
       "dev": true
     },
     "node_modules/@types/yargs": {
-      "version": "17.0.13",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz",
-      "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==",
+      "version": "17.0.14",
+      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.14.tgz",
+      "integrity": "sha512-9Pj7abXoW1RSTcZaL2Hk6G2XyLMlp5ECdVC/Zf2p/KBjC3srijLGgRAXOBjtFrJoIrvxdTKyKDA14bEcbxBaWw==",
       "dev": true,
       "dependencies": {
         "@types/yargs-parser": "*"
@@ -1662,13 +1662,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz",
-      "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz",
+      "integrity": "sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.42.1",
-        "@typescript-eslint/visitor-keys": "5.42.1"
+        "@typescript-eslint/types": "5.44.0",
+        "@typescript-eslint/visitor-keys": "5.44.0"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1679,9 +1679,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz",
-      "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz",
+      "integrity": "sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1692,13 +1692,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz",
-      "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz",
+      "integrity": "sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.42.1",
-        "@typescript-eslint/visitor-keys": "5.42.1",
+        "@typescript-eslint/types": "5.44.0",
+        "@typescript-eslint/visitor-keys": "5.44.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -1719,16 +1719,16 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz",
-      "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.44.0.tgz",
+      "integrity": "sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw==",
       "dev": true,
       "dependencies": {
         "@types/json-schema": "^7.0.9",
         "@types/semver": "^7.3.12",
-        "@typescript-eslint/scope-manager": "5.42.1",
-        "@typescript-eslint/types": "5.42.1",
-        "@typescript-eslint/typescript-estree": "5.42.1",
+        "@typescript-eslint/scope-manager": "5.44.0",
+        "@typescript-eslint/types": "5.44.0",
+        "@typescript-eslint/typescript-estree": "5.44.0",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0",
         "semver": "^7.3.7"
@@ -1767,12 +1767,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz",
-      "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz",
+      "integrity": "sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.42.1",
+        "@typescript-eslint/types": "5.44.0",
         "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
@@ -2085,9 +2085,9 @@
       }
     },
     "node_modules/anymatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "dev": true,
       "dependencies": {
         "normalize-path": "^3.0.0",
@@ -2407,51 +2407,51 @@
       }
     },
     "node_modules/camelcase-keys": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
-      "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-8.0.2.tgz",
+      "integrity": "sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==",
       "dev": true,
       "dependencies": {
-        "camelcase": "^6.3.0",
-        "map-obj": "^4.1.0",
-        "quick-lru": "^5.1.1",
-        "type-fest": "^1.2.1"
+        "camelcase": "^7.0.0",
+        "map-obj": "^4.3.0",
+        "quick-lru": "^6.1.1",
+        "type-fest": "^2.13.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=14.16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/camelcase-keys/node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz",
+      "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=14.16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/camelcase-keys/node_modules/type-fest": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+      "version": "2.19.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+      "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=12.20"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001431",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz",
-      "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==",
+      "version": "1.0.30001434",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz",
+      "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==",
       "dev": true,
       "funding": [
         {
@@ -2539,10 +2539,13 @@
       }
     },
     "node_modules/ci-info": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz",
-      "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==",
-      "dev": true
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz",
+      "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
     "node_modules/cjs-module-lexer": {
       "version": "1.2.2",
@@ -2696,10 +2699,10 @@
         "node": ">= 12.0.0"
       }
     },
-    "node_modules/commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+    "node_modules/common-path-prefix": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+      "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
       "dev": true
     },
     "node_modules/concat-map": {
@@ -2732,9 +2735,9 @@
       }
     },
     "node_modules/cosmiconfig": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-      "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
       "dev": true,
       "dependencies": {
         "@types/parse-json": "^4.0.0",
@@ -2838,12 +2841,12 @@
       }
     },
     "node_modules/decamelize": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
-      "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz",
+      "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -3222,9 +3225,9 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz",
-      "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz",
+      "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==",
       "dev": true,
       "dependencies": {
         "@eslint/eslintrc": "^1.3.3",
@@ -3290,9 +3293,9 @@
       }
     },
     "node_modules/eslint-config-xo": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.42.0.tgz",
-      "integrity": "sha512-HIfd+AM6tHFoaZ/NXYDV3Mr/CJrAj/DoP6IOYt1/v+90XtCwVYOfW7LXbRDYDmhQMzT16h7eqPRcex72waRqdA==",
+      "version": "0.43.1",
+      "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.43.1.tgz",
+      "integrity": "sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==",
       "dev": true,
       "dependencies": {
         "confusing-browser-globals": "1.0.11"
@@ -3304,7 +3307,7 @@
         "url": "https://github.com/sponsors/sindresorhus"
       },
       "peerDependencies": {
-        "eslint": ">=8.14.0"
+        "eslint": ">=8.27.0"
       }
     },
     "node_modules/eslint-formatter-pretty": {
@@ -3587,9 +3590,9 @@
       "dev": true
     },
     "node_modules/eslint-plugin-jest": {
-      "version": "27.1.4",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.4.tgz",
-      "integrity": "sha512-evJ9E9id/z2Fu6LR+ncNySJ6UMs5RiJiv4JsmdA3gPWoq0AR+uZyva738+Y9Uln+3WaYX+3OYP9HJoau94Iurg==",
+      "version": "27.1.6",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.6.tgz",
+      "integrity": "sha512-XA7RFLSrlQF9IGtAmhddkUkBuICCTuryfOTfCSWcZHiHb69OilIH05oozH2XA6CEOtztnOd0vgXyvxZodkxGjg==",
       "dev": true,
       "dependencies": {
         "@typescript-eslint/utils": "^5.10.0"
@@ -3623,12 +3626,12 @@
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
-      "version": "39.6.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.2.tgz",
-      "integrity": "sha512-dvgY/W7eUFoAIIiaWHERIMI61ZWqcz9YFjEeyTzdPlrZc3TY/3aZm5aB91NUoTLWYZmO/vFlYSuQi15tF7uE5A==",
+      "version": "39.6.4",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.4.tgz",
+      "integrity": "sha512-fskvdLCfwmPjHb6e+xNGDtGgbF8X7cDwMtVLAP2WwSf9Htrx68OAx31BESBM1FAwsN2HTQyYQq7m4aW4Q4Nlag==",
       "dev": true,
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.36.0",
+        "@es-joy/jsdoccomment": "~0.36.1",
         "comment-parser": "1.3.1",
         "debug": "^4.3.4",
         "escape-string-regexp": "^4.0.0",
@@ -3705,34 +3708,34 @@
       }
     },
     "node_modules/eslint-plugin-unicorn": {
-      "version": "42.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
-      "integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==",
+      "version": "44.0.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-44.0.2.tgz",
+      "integrity": "sha512-GLIDX1wmeEqpGaKcnMcqRvMVsoabeF0Ton0EX4Th5u6Kmf7RM9WBl705AXFEsns56ESkEs0uyelLuUTvz9Tr0w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.15.7",
-        "ci-info": "^3.3.0",
+        "@babel/helper-validator-identifier": "^7.19.1",
+        "ci-info": "^3.4.0",
         "clean-regexp": "^1.0.0",
         "eslint-utils": "^3.0.0",
         "esquery": "^1.4.0",
         "indent-string": "^4.0.0",
-        "is-builtin-module": "^3.1.0",
+        "is-builtin-module": "^3.2.0",
         "lodash": "^4.17.21",
         "pluralize": "^8.0.0",
         "read-pkg-up": "^7.0.1",
         "regexp-tree": "^0.1.24",
         "safe-regex": "^2.1.1",
-        "semver": "^7.3.5",
+        "semver": "^7.3.7",
         "strip-indent": "^3.0.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=14.18"
       },
       "funding": {
         "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
       },
       "peerDependencies": {
-        "eslint": ">=8.8.0"
+        "eslint": ">=8.23.1"
       }
     },
     "node_modules/eslint-rule-docs": {
@@ -3791,12 +3794,12 @@
       }
     },
     "node_modules/esm-utils": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/esm-utils/-/esm-utils-4.1.0.tgz",
-      "integrity": "sha512-/oTSIjfeNL/gzVgM7CbRL4bqE8aKU1ANJqr8voBwTXvVMjYYm15PdYG6c6zNSAHNa3s9b6UMRHDosIq26OBdWg==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/esm-utils/-/esm-utils-4.1.1.tgz",
+      "integrity": "sha512-cTy4OQgEP/yc7RY3s6EgwMGZ10gAPhCLE9FcrQ6/5bhf37o9PZCFSjzQR1tYb4GaKAEMaW1UmDcMZR13H4p6LQ==",
       "dev": true,
       "dependencies": {
-        "import-meta-resolve": "2.1.0",
+        "import-meta-resolve": "2.2.0",
         "url-or-path": "2.1.0"
       },
       "funding": {
@@ -4088,20 +4091,116 @@
       }
     },
     "node_modules/find-cache-dir": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
-      "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+      "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
       "dev": true,
       "dependencies": {
-        "commondir": "^1.0.1",
-        "make-dir": "^3.0.2",
-        "pkg-dir": "^4.1.0"
+        "common-path-prefix": "^3.0.0",
+        "pkg-dir": "^7.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/find-cache-dir/node_modules/find-up": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+      "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^7.1.0",
+        "path-exists": "^5.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/find-cache-dir/node_modules/locate-path": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
+      "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
+      "dev": true,
+      "dependencies": {
+        "p-locate": "^6.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/find-cache-dir/node_modules/p-limit": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+      "dev": true,
+      "dependencies": {
+        "yocto-queue": "^1.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/find-cache-dir/node_modules/p-locate": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+      "dev": true,
+      "dependencies": {
+        "p-limit": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/find-cache-dir/node_modules/path-exists": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/find-cache-dir/node_modules/pkg-dir": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+      "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
+      "dev": true,
+      "dependencies": {
+        "find-up": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=14.16"
       },
       "funding": {
-        "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/find-cache-dir/node_modules/yocto-queue": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+      "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/find-root": {
@@ -4330,9 +4429,9 @@
       "peer": true
     },
     "node_modules/globals": {
-      "version": "13.17.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
-      "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+      "version": "13.18.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz",
+      "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -4455,15 +4554,24 @@
       }
     },
     "node_modules/hosted-git-info": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
-      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz",
+      "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==",
       "dev": true,
       "dependencies": {
-        "lru-cache": "^6.0.0"
+        "lru-cache": "^7.5.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/hosted-git-info/node_modules/lru-cache": {
+      "version": "7.14.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz",
+      "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
       }
     },
     "node_modules/html-escaper": {
@@ -4571,9 +4679,9 @@
       }
     },
     "node_modules/import-meta-resolve": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.1.0.tgz",
-      "integrity": "sha512-yG9pxkWJVTy4cmRsNWE3ztFdtFuYIV8G4N+cbCkO8b+qngkLyIUhxQFuZ0qJm67+0nUOxjMPT7nfksPKza1v2g==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.0.tgz",
+      "integrity": "sha512-CpPOtiCHxP9HdtDM5F45tNiAe66Cqlv3f5uHoJjt+KlaLrUh9/Wz9vepADZ78SlqEo62aDWZtj9ydMGXV+CPnw==",
       "dev": true,
       "funding": {
         "type": "github",
@@ -5460,9 +5568,9 @@
       }
     },
     "node_modules/jest-pnp-resolver": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
-      "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
       "dev": true,
       "engines": {
         "node": ">=6"
@@ -5720,10 +5828,14 @@
       "dev": true
     },
     "node_modules/js-sdsl": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz",
-      "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==",
-      "dev": true
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
+      "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
+      "dev": true,
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/js-sdsl"
+      }
     },
     "node_modules/js-tokens": {
       "version": "4.0.0",
@@ -6088,23 +6200,39 @@
       "dev": true
     },
     "node_modules/meow": {
-      "version": "10.1.5",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
-      "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-11.0.0.tgz",
+      "integrity": "sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==",
       "dev": true,
       "dependencies": {
         "@types/minimist": "^1.2.2",
-        "camelcase-keys": "^7.0.0",
-        "decamelize": "^5.0.0",
+        "camelcase-keys": "^8.0.2",
+        "decamelize": "^6.0.0",
         "decamelize-keys": "^1.1.0",
         "hard-rejection": "^2.1.0",
         "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.2",
-        "read-pkg-up": "^8.0.0",
+        "normalize-package-data": "^4.0.1",
+        "read-pkg-up": "^9.1.0",
         "redent": "^4.0.0",
         "trim-newlines": "^4.0.2",
-        "type-fest": "^1.2.2",
-        "yargs-parser": "^20.2.9"
+        "type-fest": "^3.1.0",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/find-up": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+      "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^7.1.0",
+        "path-exists": "^5.0.0"
       },
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
@@ -6113,48 +6241,165 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/meow/node_modules/read-pkg": {
+    "node_modules/meow/node_modules/hosted-git-info": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/locate-path": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
+      "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
+      "dev": true,
+      "dependencies": {
+        "p-locate": "^6.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/p-limit": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+      "dev": true,
+      "dependencies": {
+        "yocto-queue": "^1.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/p-locate": {
       "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
-      "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
       "dev": true,
       "dependencies": {
-        "@types/normalize-package-data": "^2.4.0",
+        "p-limit": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/path-exists": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/meow/node_modules/read-pkg": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz",
+      "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==",
+      "dev": true,
+      "dependencies": {
+        "@types/normalize-package-data": "^2.4.1",
         "normalize-package-data": "^3.0.2",
         "parse-json": "^5.2.0",
-        "type-fest": "^1.0.1"
+        "type-fest": "^2.0.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=12.20"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/meow/node_modules/read-pkg-up": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
-      "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz",
+      "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==",
       "dev": true,
       "dependencies": {
-        "find-up": "^5.0.0",
-        "read-pkg": "^6.0.0",
-        "type-fest": "^1.0.1"
+        "find-up": "^6.3.0",
+        "read-pkg": "^7.1.0",
+        "type-fest": "^2.5.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/meow/node_modules/type-fest": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+    "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": {
+      "version": "2.19.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+      "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
       "dev": true,
+      "engines": {
+        "node": ">=12.20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+      "dev": true,
+      "dependencies": {
+        "hosted-git-info": "^4.0.1",
+        "is-core-module": "^2.5.0",
+        "semver": "^7.3.4",
+        "validate-npm-package-license": "^3.0.1"
+      },
       "engines": {
         "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": {
+      "version": "2.19.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+      "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/type-fest": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.2.0.tgz",
+      "integrity": "sha512-Il3wdLRzWvbAEtocgxGQA9YOoRVeVUGOMBtel5LdEpNeEAol6GJTLw8GbX6Z8EIMfvfhoOXs2bwOijtAZdK5og==",
+      "dev": true,
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/yocto-queue": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+      "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.20"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -6311,9 +6556,9 @@
       "dev": true
     },
     "node_modules/needle": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz",
-      "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+      "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -6358,18 +6603,18 @@
       "dev": true
     },
     "node_modules/normalize-package-data": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
-      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz",
+      "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==",
       "dev": true,
       "dependencies": {
-        "hosted-git-info": "^4.0.1",
-        "is-core-module": "^2.5.0",
-        "semver": "^7.3.4",
-        "validate-npm-package-license": "^3.0.1"
+        "hosted-git-info": "^5.0.0",
+        "is-core-module": "^2.8.1",
+        "semver": "^7.3.5",
+        "validate-npm-package-license": "^3.0.4"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
       }
     },
     "node_modules/normalize-path": {
@@ -6957,9 +7202,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
-      "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz",
+      "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==",
       "dev": true,
       "bin": {
         "prettier": "bin-prettier.js"
@@ -7114,12 +7359,12 @@
       "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
     },
     "node_modules/quick-lru": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz",
+      "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -8079,9 +8324,9 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.15.1",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz",
-      "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
+      "version": "5.16.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz",
+      "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -8357,9 +8602,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "4.8.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz",
-      "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==",
+      "version": "4.9.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
+      "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -8576,9 +8821,9 @@
       "peer": true
     },
     "node_modules/webpack/node_modules/enhanced-resolve": {
-      "version": "5.10.0",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
-      "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+      "version": "5.12.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+      "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
       "dev": true,
       "peer": true,
       "dependencies": {
@@ -8753,9 +8998,9 @@
       }
     },
     "node_modules/xo": {
-      "version": "0.52.4",
-      "resolved": "https://registry.npmjs.org/xo/-/xo-0.52.4.tgz",
-      "integrity": "sha512-5K+2bSy+nPO1fE6TS5KydgqhZ5pyXvO1P6Rw98aflxHi2LFWoShLmDpJOCxSpIP5867LVOCdH/WO+7iXk6/WVQ==",
+      "version": "0.53.1",
+      "resolved": "https://registry.npmjs.org/xo/-/xo-0.53.1.tgz",
+      "integrity": "sha512-/2R8SPehv1UhiIqJ9uSvrAjslcoygICNsUlEb/Zf2V6rMtr7YCoggc6hlt6b/kbncpR989Roqt6AvEO779dFxw==",
       "bundleDependencies": [
         "@typescript-eslint/eslint-plugin",
         "@typescript-eslint/parser",
@@ -8763,48 +9008,48 @@
       ],
       "dev": true,
       "dependencies": {
-        "@eslint/eslintrc": "^1.3.0",
-        "@typescript-eslint/eslint-plugin": "*",
-        "@typescript-eslint/parser": "*",
+        "@eslint/eslintrc": "^1.3.3",
+        "@typescript-eslint/eslint-plugin": "^5.43.0",
+        "@typescript-eslint/parser": "^5.43.0",
         "arrify": "^3.0.0",
-        "cosmiconfig": "^7.0.1",
+        "cosmiconfig": "^7.1.0",
         "define-lazy-prop": "^3.0.0",
-        "eslint": "^8.22.0",
+        "eslint": "^8.27.0",
         "eslint-config-prettier": "^8.5.0",
-        "eslint-config-xo": "^0.42.0",
-        "eslint-config-xo-typescript": "*",
+        "eslint-config-xo": "^0.43.1",
+        "eslint-config-xo-typescript": "^0.55.0",
         "eslint-formatter-pretty": "^4.1.0",
         "eslint-import-resolver-webpack": "^0.13.2",
         "eslint-plugin-ava": "^13.2.0",
         "eslint-plugin-eslint-comments": "^3.2.0",
         "eslint-plugin-import": "^2.26.0",
-        "eslint-plugin-n": "^15.2.5",
+        "eslint-plugin-n": "^15.5.1",
         "eslint-plugin-no-use-extend-native": "^0.5.0",
-        "eslint-plugin-prettier": "^4.0.0",
-        "eslint-plugin-unicorn": "^42.0.0",
+        "eslint-plugin-prettier": "^4.2.1",
+        "eslint-plugin-unicorn": "^44.0.2",
         "esm-utils": "^4.1.0",
-        "find-cache-dir": "^3.3.2",
+        "find-cache-dir": "^4.0.0",
         "find-up": "^6.3.0",
         "get-stdin": "^9.0.0",
-        "globby": "^13.1.1",
+        "globby": "^13.1.2",
         "imurmurhash": "^0.1.4",
         "json-stable-stringify-without-jsonify": "^1.0.1",
         "json5": "^2.2.1",
         "lodash-es": "^4.17.21",
-        "meow": "^10.1.2",
+        "meow": "^11.0.0",
         "micromatch": "^4.0.5",
         "open-editor": "^4.0.0",
-        "prettier": "^2.6.2",
-        "semver": "^7.3.7",
-        "slash": "^4.0.0",
+        "prettier": "^2.7.1",
+        "semver": "^7.3.8",
+        "slash": "^5.0.0",
         "to-absolute-glob": "^2.0.2",
-        "typescript": "^4.7.3"
+        "typescript": "^4.9.3"
       },
       "bin": {
         "xo": "cli.js"
       },
       "engines": {
-        "node": ">=12.20"
+        "node": ">=14.16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -8851,17 +9096,24 @@
       "inBundle": true,
       "license": "MIT"
     },
+    "node_modules/xo/node_modules/@types/semver": {
+      "version": "7.3.13",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT"
+    },
     "node_modules/xo/node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "5.39.0",
+      "version": "5.43.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.39.0",
-        "@typescript-eslint/type-utils": "5.39.0",
-        "@typescript-eslint/utils": "5.39.0",
+        "@typescript-eslint/scope-manager": "5.43.0",
+        "@typescript-eslint/type-utils": "5.43.0",
+        "@typescript-eslint/utils": "5.43.0",
         "debug": "^4.3.4",
         "ignore": "^5.2.0",
+        "natural-compare-lite": "^1.4.0",
         "regexpp": "^3.2.0",
         "semver": "^7.3.7",
         "tsutils": "^3.21.0"
@@ -8884,14 +9136,14 @@
       }
     },
     "node_modules/xo/node_modules/@typescript-eslint/parser": {
-      "version": "5.39.0",
+      "version": "5.43.0",
       "dev": true,
       "inBundle": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.39.0",
-        "@typescript-eslint/types": "5.39.0",
-        "@typescript-eslint/typescript-estree": "5.39.0",
+        "@typescript-eslint/scope-manager": "5.43.0",
+        "@typescript-eslint/types": "5.43.0",
+        "@typescript-eslint/typescript-estree": "5.43.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -8911,13 +9163,13 @@
       }
     },
     "node_modules/xo/node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.39.0",
+      "version": "5.43.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "5.39.0",
-        "@typescript-eslint/visitor-keys": "5.39.0"
+        "@typescript-eslint/types": "5.43.0",
+        "@typescript-eslint/visitor-keys": "5.43.0"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -8928,13 +9180,13 @@
       }
     },
     "node_modules/xo/node_modules/@typescript-eslint/type-utils": {
-      "version": "5.39.0",
+      "version": "5.43.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "5.39.0",
-        "@typescript-eslint/utils": "5.39.0",
+        "@typescript-eslint/typescript-estree": "5.43.0",
+        "@typescript-eslint/utils": "5.43.0",
         "debug": "^4.3.4",
         "tsutils": "^3.21.0"
       },
@@ -8955,7 +9207,7 @@
       }
     },
     "node_modules/xo/node_modules/@typescript-eslint/types": {
-      "version": "5.39.0",
+      "version": "5.43.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -8968,13 +9220,13 @@
       }
     },
     "node_modules/xo/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.39.0",
+      "version": "5.43.0",
       "dev": true,
       "inBundle": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "5.39.0",
-        "@typescript-eslint/visitor-keys": "5.39.0",
+        "@typescript-eslint/types": "5.43.0",
+        "@typescript-eslint/visitor-keys": "5.43.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -9024,17 +9276,19 @@
       }
     },
     "node_modules/xo/node_modules/@typescript-eslint/utils": {
-      "version": "5.39.0",
+      "version": "5.43.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
         "@types/json-schema": "^7.0.9",
-        "@typescript-eslint/scope-manager": "5.39.0",
-        "@typescript-eslint/types": "5.39.0",
-        "@typescript-eslint/typescript-estree": "5.39.0",
+        "@types/semver": "^7.3.12",
+        "@typescript-eslint/scope-manager": "5.43.0",
+        "@typescript-eslint/types": "5.43.0",
+        "@typescript-eslint/typescript-estree": "5.43.0",
         "eslint-scope": "^5.1.1",
-        "eslint-utils": "^3.0.0"
+        "eslint-utils": "^3.0.0",
+        "semver": "^7.3.7"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -9048,12 +9302,12 @@
       }
     },
     "node_modules/xo/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.39.0",
+      "version": "5.43.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "5.39.0",
+        "@typescript-eslint/types": "5.43.0",
         "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
@@ -9121,7 +9375,7 @@
       }
     },
     "node_modules/xo/node_modules/eslint-config-xo-typescript": {
-      "version": "0.53.0",
+      "version": "0.55.0",
       "dev": true,
       "inBundle": true,
       "license": "MIT",
@@ -9132,8 +9386,8 @@
         "url": "https://github.com/sponsors/sindresorhus"
       },
       "peerDependencies": {
-        "@typescript-eslint/eslint-plugin": ">=5.31.0",
-        "@typescript-eslint/parser": ">=5.31.0",
+        "@typescript-eslint/eslint-plugin": ">=5.43.0",
+        "@typescript-eslint/parser": ">=5.43.0",
         "eslint": ">=8.0.0",
         "typescript": ">=4.4"
       }
@@ -9301,6 +9555,18 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/xo/node_modules/globby/node_modules/slash": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+      "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/xo/node_modules/ignore": {
       "version": "5.2.0",
       "dev": true,
@@ -9343,28 +9609,16 @@
     "node_modules/xo/node_modules/locate-path": {
       "version": "7.1.1",
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
-      "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^6.0.0"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/xo/node_modules/lru-cache": {
-      "version": "6.0.0",
+      "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
       "dev": true,
-      "inBundle": true,
-      "license": "ISC",
       "dependencies": {
-        "yallist": "^4.0.0"
+        "p-locate": "^6.0.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/xo/node_modules/merge2": {
@@ -9389,6 +9643,12 @@
         "node": ">=8.6"
       }
     },
+    "node_modules/xo/node_modules/natural-compare-lite": {
+      "version": "1.4.0",
+      "dev": true,
+      "inBundle": true,
+      "license": "MIT"
+    },
     "node_modules/xo/node_modules/p-limit": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
@@ -9515,7 +9775,7 @@
       }
     },
     "node_modules/xo/node_modules/semver": {
-      "version": "7.3.7",
+      "version": "7.3.8",
       "dev": true,
       "inBundle": true,
       "license": "ISC",
@@ -9529,13 +9789,25 @@
         "node": ">=10"
       }
     },
+    "node_modules/xo/node_modules/semver/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "dev": true,
+      "inBundle": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/xo/node_modules/slash": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
-      "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz",
+      "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==",
       "dev": true,
       "engines": {
-        "node": ">=12"
+        "node": ">=14.16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -9641,15 +9913,6 @@
       }
     },
     "node_modules/yargs-parser": {
-      "version": "20.2.9",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/yargs/node_modules/yargs-parser": {
       "version": "21.1.1",
       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
       "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
@@ -10176,9 +10439,9 @@
       }
     },
     "@es-joy/jsdoccomment": {
-      "version": "0.36.0",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.0.tgz",
-      "integrity": "sha512-u0XZyvUF6Urb2cSivSXA8qXIpT/CxkHcdtZKoWusAzgzmsTWpg0F2FpWXsolHmMUyVY3dLWaoy+0ccJ5uf2QjA==",
+      "version": "0.36.1",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz",
+      "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==",
       "dev": true,
       "requires": {
         "comment-parser": "1.3.1",
@@ -10894,9 +11157,9 @@
       "dev": true
     },
     "@types/yargs": {
-      "version": "17.0.13",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz",
-      "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==",
+      "version": "17.0.14",
+      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.14.tgz",
+      "integrity": "sha512-9Pj7abXoW1RSTcZaL2Hk6G2XyLMlp5ECdVC/Zf2p/KBjC3srijLGgRAXOBjtFrJoIrvxdTKyKDA14bEcbxBaWw==",
       "dev": true,
       "requires": {
         "@types/yargs-parser": "*"
@@ -10919,29 +11182,29 @@
       }
     },
     "@typescript-eslint/scope-manager": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz",
-      "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz",
+      "integrity": "sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.42.1",
-        "@typescript-eslint/visitor-keys": "5.42.1"
+        "@typescript-eslint/types": "5.44.0",
+        "@typescript-eslint/visitor-keys": "5.44.0"
       }
     },
     "@typescript-eslint/types": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz",
-      "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz",
+      "integrity": "sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ==",
       "dev": true
     },
     "@typescript-eslint/typescript-estree": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz",
-      "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz",
+      "integrity": "sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.42.1",
-        "@typescript-eslint/visitor-keys": "5.42.1",
+        "@typescript-eslint/types": "5.44.0",
+        "@typescript-eslint/visitor-keys": "5.44.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -10950,16 +11213,16 @@
       }
     },
     "@typescript-eslint/utils": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz",
-      "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.44.0.tgz",
+      "integrity": "sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw==",
       "dev": true,
       "requires": {
         "@types/json-schema": "^7.0.9",
         "@types/semver": "^7.3.12",
-        "@typescript-eslint/scope-manager": "5.42.1",
-        "@typescript-eslint/types": "5.42.1",
-        "@typescript-eslint/typescript-estree": "5.42.1",
+        "@typescript-eslint/scope-manager": "5.44.0",
+        "@typescript-eslint/types": "5.44.0",
+        "@typescript-eslint/typescript-estree": "5.44.0",
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^3.0.0",
         "semver": "^7.3.7"
@@ -10984,12 +11247,12 @@
       }
     },
     "@typescript-eslint/visitor-keys": {
-      "version": "5.42.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz",
-      "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==",
+      "version": "5.44.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz",
+      "integrity": "sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.42.1",
+        "@typescript-eslint/types": "5.44.0",
         "eslint-visitor-keys": "^3.3.0"
       }
     },
@@ -11254,9 +11517,9 @@
       }
     },
     "anymatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "dev": true,
       "requires": {
         "normalize-path": "^3.0.0",
@@ -11491,35 +11754,35 @@
       "dev": true
     },
     "camelcase-keys": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
-      "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-8.0.2.tgz",
+      "integrity": "sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==",
       "dev": true,
       "requires": {
-        "camelcase": "^6.3.0",
-        "map-obj": "^4.1.0",
-        "quick-lru": "^5.1.1",
-        "type-fest": "^1.2.1"
+        "camelcase": "^7.0.0",
+        "map-obj": "^4.3.0",
+        "quick-lru": "^6.1.1",
+        "type-fest": "^2.13.0"
       },
       "dependencies": {
         "camelcase": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-          "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz",
+          "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==",
           "dev": true
         },
         "type-fest": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-          "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+          "version": "2.19.0",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+          "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
           "dev": true
         }
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001431",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz",
-      "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==",
+      "version": "1.0.30001434",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz",
+      "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==",
       "dev": true
     },
     "chalk": {
@@ -11573,9 +11836,9 @@
       "peer": true
     },
     "ci-info": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz",
-      "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==",
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz",
+      "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==",
       "dev": true
     },
     "cjs-module-lexer": {
@@ -11706,10 +11969,10 @@
       "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==",
       "dev": true
     },
-    "commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+    "common-path-prefix": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+      "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
       "dev": true
     },
     "concat-map": {
@@ -11739,9 +12002,9 @@
       }
     },
     "cosmiconfig": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-      "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
       "dev": true,
       "requires": {
         "@types/parse-json": "^4.0.0",
@@ -11816,9 +12079,9 @@
       }
     },
     "decamelize": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
-      "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz",
+      "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==",
       "dev": true
     },
     "decamelize-keys": {
@@ -12094,9 +12357,9 @@
       "dev": true
     },
     "eslint": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz",
-      "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz",
+      "integrity": "sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==",
       "dev": true,
       "requires": {
         "@eslint/eslintrc": "^1.3.3",
@@ -12148,9 +12411,9 @@
       "requires": {}
     },
     "eslint-config-xo": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.42.0.tgz",
-      "integrity": "sha512-HIfd+AM6tHFoaZ/NXYDV3Mr/CJrAj/DoP6IOYt1/v+90XtCwVYOfW7LXbRDYDmhQMzT16h7eqPRcex72waRqdA==",
+      "version": "0.43.1",
+      "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.43.1.tgz",
+      "integrity": "sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==",
       "dev": true,
       "requires": {
         "confusing-browser-globals": "1.0.11"
@@ -12375,9 +12638,9 @@
       }
     },
     "eslint-plugin-jest": {
-      "version": "27.1.4",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.4.tgz",
-      "integrity": "sha512-evJ9E9id/z2Fu6LR+ncNySJ6UMs5RiJiv4JsmdA3gPWoq0AR+uZyva738+Y9Uln+3WaYX+3OYP9HJoau94Iurg==",
+      "version": "27.1.6",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.6.tgz",
+      "integrity": "sha512-XA7RFLSrlQF9IGtAmhddkUkBuICCTuryfOTfCSWcZHiHb69OilIH05oozH2XA6CEOtztnOd0vgXyvxZodkxGjg==",
       "dev": true,
       "requires": {
         "@typescript-eslint/utils": "^5.10.0"
@@ -12391,12 +12654,12 @@
       "requires": {}
     },
     "eslint-plugin-jsdoc": {
-      "version": "39.6.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.2.tgz",
-      "integrity": "sha512-dvgY/W7eUFoAIIiaWHERIMI61ZWqcz9YFjEeyTzdPlrZc3TY/3aZm5aB91NUoTLWYZmO/vFlYSuQi15tF7uE5A==",
+      "version": "39.6.4",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.4.tgz",
+      "integrity": "sha512-fskvdLCfwmPjHb6e+xNGDtGgbF8X7cDwMtVLAP2WwSf9Htrx68OAx31BESBM1FAwsN2HTQyYQq7m4aW4Q4Nlag==",
       "dev": true,
       "requires": {
-        "@es-joy/jsdoccomment": "~0.36.0",
+        "@es-joy/jsdoccomment": "~0.36.1",
         "comment-parser": "1.3.1",
         "debug": "^4.3.4",
         "escape-string-regexp": "^4.0.0",
@@ -12443,24 +12706,24 @@
       }
     },
     "eslint-plugin-unicorn": {
-      "version": "42.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
-      "integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==",
+      "version": "44.0.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-44.0.2.tgz",
+      "integrity": "sha512-GLIDX1wmeEqpGaKcnMcqRvMVsoabeF0Ton0EX4Th5u6Kmf7RM9WBl705AXFEsns56ESkEs0uyelLuUTvz9Tr0w==",
       "dev": true,
       "requires": {
-        "@babel/helper-validator-identifier": "^7.15.7",
-        "ci-info": "^3.3.0",
+        "@babel/helper-validator-identifier": "^7.19.1",
+        "ci-info": "^3.4.0",
         "clean-regexp": "^1.0.0",
         "eslint-utils": "^3.0.0",
         "esquery": "^1.4.0",
         "indent-string": "^4.0.0",
-        "is-builtin-module": "^3.1.0",
+        "is-builtin-module": "^3.2.0",
         "lodash": "^4.17.21",
         "pluralize": "^8.0.0",
         "read-pkg-up": "^7.0.1",
         "regexp-tree": "^0.1.24",
         "safe-regex": "^2.1.1",
-        "semver": "^7.3.5",
+        "semver": "^7.3.7",
         "strip-indent": "^3.0.0"
       }
     },
@@ -12504,12 +12767,12 @@
       "dev": true
     },
     "esm-utils": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/esm-utils/-/esm-utils-4.1.0.tgz",
-      "integrity": "sha512-/oTSIjfeNL/gzVgM7CbRL4bqE8aKU1ANJqr8voBwTXvVMjYYm15PdYG6c6zNSAHNa3s9b6UMRHDosIq26OBdWg==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/esm-utils/-/esm-utils-4.1.1.tgz",
+      "integrity": "sha512-cTy4OQgEP/yc7RY3s6EgwMGZ10gAPhCLE9FcrQ6/5bhf37o9PZCFSjzQR1tYb4GaKAEMaW1UmDcMZR13H4p6LQ==",
       "dev": true,
       "requires": {
-        "import-meta-resolve": "2.1.0",
+        "import-meta-resolve": "2.2.0",
         "url-or-path": "2.1.0"
       }
     },
@@ -12736,14 +12999,73 @@
       }
     },
     "find-cache-dir": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
-      "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+      "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
       "dev": true,
       "requires": {
-        "commondir": "^1.0.1",
-        "make-dir": "^3.0.2",
-        "pkg-dir": "^4.1.0"
+        "common-path-prefix": "^3.0.0",
+        "pkg-dir": "^7.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+          "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^7.1.0",
+            "path-exists": "^5.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "7.1.1",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
+          "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^6.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+          "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+          "dev": true,
+          "requires": {
+            "yocto-queue": "^1.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+          "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^4.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+          "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+          "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
+          "dev": true,
+          "requires": {
+            "find-up": "^6.3.0"
+          }
+        },
+        "yocto-queue": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+          "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+          "dev": true
+        }
       }
     },
     "find-root": {
@@ -12905,9 +13227,9 @@
       "peer": true
     },
     "globals": {
-      "version": "13.17.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
-      "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+      "version": "13.18.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz",
+      "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==",
       "dev": true,
       "requires": {
         "type-fest": "^0.20.2"
@@ -12991,12 +13313,20 @@
       }
     },
     "hosted-git-info": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
-      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz",
+      "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==",
       "dev": true,
       "requires": {
-        "lru-cache": "^6.0.0"
+        "lru-cache": "^7.5.1"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "7.14.1",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz",
+          "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==",
+          "dev": true
+        }
       }
     },
     "html-escaper": {
@@ -13071,9 +13401,9 @@
       }
     },
     "import-meta-resolve": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.1.0.tgz",
-      "integrity": "sha512-yG9pxkWJVTy4cmRsNWE3ztFdtFuYIV8G4N+cbCkO8b+qngkLyIUhxQFuZ0qJm67+0nUOxjMPT7nfksPKza1v2g==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.0.tgz",
+      "integrity": "sha512-CpPOtiCHxP9HdtDM5F45tNiAe66Cqlv3f5uHoJjt+KlaLrUh9/Wz9vepADZ78SlqEo62aDWZtj9ydMGXV+CPnw==",
       "dev": true
     },
     "import-modules": {
@@ -13709,9 +14039,9 @@
       }
     },
     "jest-pnp-resolver": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
-      "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
       "dev": true,
       "requires": {}
     },
@@ -13921,9 +14251,9 @@
       "dev": true
     },
     "js-sdsl": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz",
-      "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
+      "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
       "dev": true
     },
     "js-tokens": {
@@ -14200,52 +14530,138 @@
       "dev": true
     },
     "meow": {
-      "version": "10.1.5",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
-      "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-11.0.0.tgz",
+      "integrity": "sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==",
       "dev": true,
       "requires": {
         "@types/minimist": "^1.2.2",
-        "camelcase-keys": "^7.0.0",
-        "decamelize": "^5.0.0",
+        "camelcase-keys": "^8.0.2",
+        "decamelize": "^6.0.0",
         "decamelize-keys": "^1.1.0",
         "hard-rejection": "^2.1.0",
         "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.2",
-        "read-pkg-up": "^8.0.0",
+        "normalize-package-data": "^4.0.1",
+        "read-pkg-up": "^9.1.0",
         "redent": "^4.0.0",
         "trim-newlines": "^4.0.2",
-        "type-fest": "^1.2.2",
-        "yargs-parser": "^20.2.9"
+        "type-fest": "^3.1.0",
+        "yargs-parser": "^21.1.1"
       },
       "dependencies": {
-        "read-pkg": {
+        "find-up": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+          "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^7.1.0",
+            "path-exists": "^5.0.0"
+          }
+        },
+        "hosted-git-info": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+          "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "7.1.1",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
+          "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^6.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+          "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+          "dev": true,
+          "requires": {
+            "yocto-queue": "^1.0.0"
+          }
+        },
+        "p-locate": {
           "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
-          "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+          "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^4.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+          "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+          "dev": true
+        },
+        "read-pkg": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz",
+          "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==",
           "dev": true,
           "requires": {
-            "@types/normalize-package-data": "^2.4.0",
+            "@types/normalize-package-data": "^2.4.1",
             "normalize-package-data": "^3.0.2",
             "parse-json": "^5.2.0",
-            "type-fest": "^1.0.1"
+            "type-fest": "^2.0.0"
+          },
+          "dependencies": {
+            "normalize-package-data": {
+              "version": "3.0.3",
+              "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+              "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+              "dev": true,
+              "requires": {
+                "hosted-git-info": "^4.0.1",
+                "is-core-module": "^2.5.0",
+                "semver": "^7.3.4",
+                "validate-npm-package-license": "^3.0.1"
+              }
+            },
+            "type-fest": {
+              "version": "2.19.0",
+              "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+              "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+              "dev": true
+            }
           }
         },
         "read-pkg-up": {
-          "version": "8.0.0",
-          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
-          "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
+          "version": "9.1.0",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz",
+          "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==",
           "dev": true,
           "requires": {
-            "find-up": "^5.0.0",
-            "read-pkg": "^6.0.0",
-            "type-fest": "^1.0.1"
+            "find-up": "^6.3.0",
+            "read-pkg": "^7.1.0",
+            "type-fest": "^2.5.0"
+          },
+          "dependencies": {
+            "type-fest": {
+              "version": "2.19.0",
+              "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+              "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+              "dev": true
+            }
           }
         },
         "type-fest": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-          "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.2.0.tgz",
+          "integrity": "sha512-Il3wdLRzWvbAEtocgxGQA9YOoRVeVUGOMBtel5LdEpNeEAol6GJTLw8GbX6Z8EIMfvfhoOXs2bwOijtAZdK5og==",
+          "dev": true
+        },
+        "yocto-queue": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+          "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
           "dev": true
         }
       }
@@ -14364,9 +14780,9 @@
       "dev": true
     },
     "needle": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz",
-      "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz",
+      "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -14407,15 +14823,15 @@
       "dev": true
     },
     "normalize-package-data": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
-      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz",
+      "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==",
       "dev": true,
       "requires": {
-        "hosted-git-info": "^4.0.1",
-        "is-core-module": "^2.5.0",
-        "semver": "^7.3.4",
-        "validate-npm-package-license": "^3.0.1"
+        "hosted-git-info": "^5.0.0",
+        "is-core-module": "^2.8.1",
+        "semver": "^7.3.5",
+        "validate-npm-package-license": "^3.0.4"
       }
     },
     "normalize-path": {
@@ -14831,9 +15247,9 @@
       "dev": true
     },
     "prettier": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
-      "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz",
+      "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==",
       "dev": true
     },
     "prettier-linter-helpers": {
@@ -14943,9 +15359,9 @@
       "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
     },
     "quick-lru": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz",
+      "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==",
       "dev": true
     },
     "randombytes": {
@@ -15651,9 +16067,9 @@
       }
     },
     "terser": {
-      "version": "5.15.1",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz",
-      "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
+      "version": "5.16.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz",
+      "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==",
       "dev": true,
       "peer": true,
       "requires": {
@@ -15859,9 +16275,9 @@
       "dev": true
     },
     "typescript": {
-      "version": "4.8.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz",
-      "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==",
+      "version": "4.9.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
+      "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
       "dev": true
     },
     "unbox-primitive": {
@@ -16014,9 +16430,9 @@
           "peer": true
         },
         "enhanced-resolve": {
-          "version": "5.10.0",
-          "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
-          "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+          "version": "5.12.0",
+          "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+          "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
           "dev": true,
           "peer": true,
           "requires": {
@@ -16147,47 +16563,47 @@
       "requires": {}
     },
     "xo": {
-      "version": "0.52.4",
-      "resolved": "https://registry.npmjs.org/xo/-/xo-0.52.4.tgz",
-      "integrity": "sha512-5K+2bSy+nPO1fE6TS5KydgqhZ5pyXvO1P6Rw98aflxHi2LFWoShLmDpJOCxSpIP5867LVOCdH/WO+7iXk6/WVQ==",
+      "version": "0.53.1",
+      "resolved": "https://registry.npmjs.org/xo/-/xo-0.53.1.tgz",
+      "integrity": "sha512-/2R8SPehv1UhiIqJ9uSvrAjslcoygICNsUlEb/Zf2V6rMtr7YCoggc6hlt6b/kbncpR989Roqt6AvEO779dFxw==",
       "dev": true,
       "requires": {
-        "@eslint/eslintrc": "^1.3.0",
-        "@typescript-eslint/eslint-plugin": "*",
-        "@typescript-eslint/parser": "*",
+        "@eslint/eslintrc": "^1.3.3",
+        "@typescript-eslint/eslint-plugin": "^5.43.0",
+        "@typescript-eslint/parser": "^5.43.0",
         "arrify": "^3.0.0",
-        "cosmiconfig": "^7.0.1",
+        "cosmiconfig": "^7.1.0",
         "define-lazy-prop": "^3.0.0",
-        "eslint": "^8.22.0",
+        "eslint": "^8.27.0",
         "eslint-config-prettier": "^8.5.0",
-        "eslint-config-xo": "^0.42.0",
-        "eslint-config-xo-typescript": "*",
+        "eslint-config-xo": "^0.43.1",
+        "eslint-config-xo-typescript": "^0.55.0",
         "eslint-formatter-pretty": "^4.1.0",
         "eslint-import-resolver-webpack": "^0.13.2",
         "eslint-plugin-ava": "^13.2.0",
         "eslint-plugin-eslint-comments": "^3.2.0",
         "eslint-plugin-import": "^2.26.0",
-        "eslint-plugin-n": "^15.2.5",
+        "eslint-plugin-n": "^15.5.1",
         "eslint-plugin-no-use-extend-native": "^0.5.0",
-        "eslint-plugin-prettier": "^4.0.0",
-        "eslint-plugin-unicorn": "^42.0.0",
+        "eslint-plugin-prettier": "^4.2.1",
+        "eslint-plugin-unicorn": "^44.0.2",
         "esm-utils": "^4.1.0",
-        "find-cache-dir": "^3.3.2",
+        "find-cache-dir": "^4.0.0",
         "find-up": "^6.3.0",
         "get-stdin": "^9.0.0",
-        "globby": "^13.1.1",
+        "globby": "^13.1.2",
         "imurmurhash": "^0.1.4",
         "json-stable-stringify-without-jsonify": "^1.0.1",
         "json5": "^2.2.1",
         "lodash-es": "^4.17.21",
-        "meow": "^10.1.2",
+        "meow": "^11.0.0",
         "micromatch": "^4.0.5",
         "open-editor": "^4.0.0",
-        "prettier": "^2.6.2",
-        "semver": "^7.3.7",
-        "slash": "^4.0.0",
+        "prettier": "^2.7.1",
+        "semver": "^7.3.8",
+        "slash": "^5.0.0",
         "to-absolute-glob": "^2.0.2",
-        "typescript": "^4.7.3"
+        "typescript": "^4.9.3"
       },
       "dependencies": {
         "@nodelib/fs.scandir": {
@@ -16218,64 +16634,70 @@
           "bundled": true,
           "dev": true
         },
+        "@types/semver": {
+          "version": "7.3.13",
+          "bundled": true,
+          "dev": true
+        },
         "@typescript-eslint/eslint-plugin": {
-          "version": "5.39.0",
+          "version": "5.43.0",
           "bundled": true,
           "dev": true,
           "requires": {
-            "@typescript-eslint/scope-manager": "5.39.0",
-            "@typescript-eslint/type-utils": "5.39.0",
-            "@typescript-eslint/utils": "5.39.0",
+            "@typescript-eslint/scope-manager": "5.43.0",
+            "@typescript-eslint/type-utils": "5.43.0",
+            "@typescript-eslint/utils": "5.43.0",
             "debug": "^4.3.4",
             "ignore": "^5.2.0",
+            "natural-compare-lite": "^1.4.0",
             "regexpp": "^3.2.0",
             "semver": "^7.3.7",
             "tsutils": "^3.21.0"
           }
         },
         "@typescript-eslint/parser": {
-          "version": "5.39.0",
+          "version": "5.43.0",
           "bundled": true,
           "dev": true,
           "requires": {
-            "@typescript-eslint/scope-manager": "5.39.0",
-            "@typescript-eslint/types": "5.39.0",
-            "@typescript-eslint/typescript-estree": "5.39.0",
+            "@typescript-eslint/scope-manager": "5.43.0",
+            "@typescript-eslint/types": "5.43.0",
+            "@typescript-eslint/typescript-estree": "5.43.0",
             "debug": "^4.3.4"
           }
         },
         "@typescript-eslint/scope-manager": {
-          "version": "5.39.0",
+          "version": "5.43.0",
           "bundled": true,
           "dev": true,
           "requires": {
-            "@typescript-eslint/types": "5.39.0",
-            "@typescript-eslint/visitor-keys": "5.39.0"
+            "@typescript-eslint/types": "5.43.0",
+            "@typescript-eslint/visitor-keys": "5.43.0"
           }
         },
         "@typescript-eslint/type-utils": {
-          "version": "5.39.0",
+          "version": "5.43.0",
           "bundled": true,
           "dev": true,
           "requires": {
-            "@typescript-eslint/typescript-estree": "5.39.0",
-            "@typescript-eslint/utils": "5.39.0",
+            "@typescript-eslint/typescript-estree": "5.43.0",
+            "@typescript-eslint/utils": "5.43.0",
             "debug": "^4.3.4",
             "tsutils": "^3.21.0"
           }
         },
         "@typescript-eslint/types": {
-          "version": "5.39.0",
+          "version": "5.43.0",
           "bundled": true,
           "dev": true
         },
         "@typescript-eslint/typescript-estree": {
-          "version": "5.39.0",
+          "version": "5.43.0",
           "bundled": true,
           "dev": true,
           "requires": {
-            "@typescript-eslint/types": "5.39.0",
-            "@typescript-eslint/visitor-keys": "5.39.0",
+            "@typescript-eslint/types": "5.43.0",
+            "@typescript-eslint/visitor-keys": "5.43.0",
             "debug": "^4.3.4",
             "globby": "^11.1.0",
             "is-glob": "^4.0.3",
@@ -16304,24 +16726,26 @@
           }
         },
         "@typescript-eslint/utils": {
-          "version": "5.39.0",
+          "version": "5.43.0",
           "bundled": true,
           "dev": true,
           "requires": {
             "@types/json-schema": "^7.0.9",
-            "@typescript-eslint/scope-manager": "5.39.0",
-            "@typescript-eslint/types": "5.39.0",
-            "@typescript-eslint/typescript-estree": "5.39.0",
+            "@types/semver": "^7.3.12",
+            "@typescript-eslint/scope-manager": "5.43.0",
+            "@typescript-eslint/types": "5.43.0",
+            "@typescript-eslint/typescript-estree": "5.43.0",
             "eslint-scope": "^5.1.1",
-            "eslint-utils": "^3.0.0"
+            "eslint-utils": "^3.0.0",
+            "semver": "^7.3.7"
           }
         },
         "@typescript-eslint/visitor-keys": {
-          "version": "5.39.0",
+          "version": "5.43.0",
           "bundled": true,
           "dev": true,
           "requires": {
-            "@typescript-eslint/types": "5.39.0",
+            "@typescript-eslint/types": "5.43.0",
             "eslint-visitor-keys": "^3.3.0"
           }
         },
@@ -16362,7 +16786,7 @@
           }
         },
         "eslint-config-xo-typescript": {
-          "version": "0.53.0",
+          "version": "0.55.0",
           "bundled": true,
           "dev": true,
           "requires": {}
@@ -16473,6 +16897,14 @@
             "ignore": "^5.2.0",
             "merge2": "^1.4.1",
             "slash": "^4.0.0"
+          },
+          "dependencies": {
+            "slash": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+              "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+              "dev": true
+            }
           }
         },
         "ignore": {
@@ -16507,14 +16939,6 @@
             "p-locate": "^6.0.0"
           }
         },
-        "lru-cache": {
-          "version": "6.0.0",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
-        },
         "merge2": {
           "version": "1.4.1",
           "bundled": true,
@@ -16529,6 +16953,11 @@
             "picomatch": "^2.3.1"
           }
         },
+        "natural-compare-lite": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true
+        },
         "p-limit": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
@@ -16587,17 +17016,27 @@
           }
         },
         "semver": {
-          "version": "7.3.7",
+          "version": "7.3.8",
           "bundled": true,
           "dev": true,
           "requires": {
             "lru-cache": "^6.0.0"
+          },
+          "dependencies": {
+            "lru-cache": {
+              "version": "6.0.0",
+              "bundled": true,
+              "dev": true,
+              "requires": {
+                "yallist": "^4.0.0"
+              }
+            }
           }
         },
         "slash": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
-          "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz",
+          "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==",
           "dev": true
         },
         "to-regex-range": {
@@ -16668,20 +17107,12 @@
         "string-width": "^4.2.3",
         "y18n": "^5.0.5",
         "yargs-parser": "^21.1.1"
-      },
-      "dependencies": {
-        "yargs-parser": {
-          "version": "21.1.1",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
-          "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="
-        }
       }
     },
     "yargs-parser": {
-      "version": "20.2.9",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-      "dev": true
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="
     },
     "yauzl": {
       "version": "2.10.0",
diff --git a/package.json b/package.json
index ca16de3..98e3f3b 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
   },
   "license": "MIT",
   "engines": {
-    "node": ">=14"
+    "node": ">=14.18.0"
   },
   "main": "lib/svg-sprite.js",
   "bin": {
@@ -54,9 +54,9 @@
     "yargs": "^17.6.2"
   },
   "devDependencies": {
-    "eslint-plugin-jest": "^27.1.4",
+    "eslint-plugin-jest": "^27.1.6",
     "eslint-plugin-jest-formatting": "^3.1.0",
-    "eslint-plugin-jsdoc": "^39.6.2",
+    "eslint-plugin-jsdoc": "^39.6.4",
     "jest": "^29.3.1",
     "less": "^4.1.3",
     "pixelmatch": "^5.3.0",
@@ -64,7 +64,7 @@
     "pngjs": "^6.0.0",
     "sass": "^1.56.1",
     "stylus": "^0.59.0",
-    "xo": "^0.52.4"
+    "xo": "^0.53.1"
   },
   "keywords": [
     "icon",


Test patch:
diff --git a/test/calculate-svg-dimensions.test.js b/test/calculate-svg-dimensions.test.js
index 3fdfbdb..93b1944 100644
--- a/test/calculate-svg-dimensions.test.js
+++ b/test/calculate-svg-dimensions.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const { readFile } = require('fs').promises;
-const path = require('path');
+const { readFile } = require('node:fs').promises;
+const path = require('node:path');
 const calculateSvgDimensions = require('../lib/svg-sprite/utils/calculate-svg-dimensions.js');
 const DimensionsCalculationError = require('../lib/svg-sprite/errors/dimensions-calculation-error.js');
 
diff --git a/test/helpers/add-files.js b/test/helpers/add-files.js
index d43397e..e645407 100644
--- a/test/helpers/add-files.js
+++ b/test/helpers/add-files.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const fs = require('fs');
-const path = require('path');
+const fs = require('node:fs');
+const path = require('node:path');
 
 /**
  * Add a bunch of SVG files
diff --git a/test/helpers/compare-png-2-png.js b/test/helpers/compare-png-2-png.js
index eed80e5..630822f 100644
--- a/test/helpers/compare-png-2-png.js
+++ b/test/helpers/compare-png-2-png.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const fs = require('fs').promises;
-const path = require('path');
+const { mkdir, readFile, writeFile } = require('node:fs').promises;
+const path = require('node:path');
 const { PNG } = require('pngjs');
 const pixelmatch = require('pixelmatch');
 
@@ -12,8 +12,8 @@ const MAX_MISMATCH = 5;
  * @param {string} filePath where to store the diff
  */
 const storeDiff = async(diff, filePath) => {
-    await fs.mkdir(path.dirname(filePath), { recursive: true });
-    await fs.writeFile(filePath, PNG.sync.write(diff));
+    await mkdir(path.dirname(filePath), { recursive: true });
+    await writeFile(filePath, PNG.sync.write(diff));
 };
 
 /**
@@ -22,8 +22,8 @@ const storeDiff = async(diff, filePath) => {
  * @returns {Promise<{isEqual: boolean, matched: (number|*), diff: exports.PNG}>} matching results
  */
 module.exports = async(input, expected) => {
-    const inputPng = PNG.sync.read(await fs.readFile(input));
-    const expectedPng = PNG.sync.read(await fs.readFile(expected));
+    const inputPng = PNG.sync.read(await readFile(input));
+    const expectedPng = PNG.sync.read(await readFile(expected));
 
     const { width, height } = inputPng;
 
diff --git a/test/helpers/compare-svg-2-png.js b/test/helpers/compare-svg-2-png.js
index 4fb6264..51bb8c0 100644
--- a/test/helpers/compare-svg-2-png.js
+++ b/test/helpers/compare-svg-2-png.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const fs = require('fs').promises;
-const path = require('path');
+const { mkdir } = require('node:fs').promises;
+const path = require('node:path');
 const convertSvg2Png = require('./convert-svg-2-png.js');
 const comparePng2Png = require('./compare-png-2-png.js');
 
@@ -13,7 +13,7 @@ const comparePng2Png = require('./compare-png-2-png.js');
  * @param {string} expected           Expected PNG file path
  */
 module.exports = async(svg, png, expected) => {
-    await fs.mkdir(path.dirname(png), { recursive: true });
+    await mkdir(path.dirname(png), { recursive: true });
     await convertSvg2Png(svg, png);
 
     return comparePng2Png(png, expected);
diff --git a/test/helpers/constants.js b/test/helpers/constants.js
index 1f386e8..4fb813b 100644
--- a/test/helpers/constants.js
+++ b/test/helpers/constants.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const path = require('path');
+const path = require('node:path');
 
 module.exports = {
     paths: {
diff --git a/test/helpers/remove-temp-path.js b/test/helpers/remove-temp-path.js
index 19177da..03935f1 100644
--- a/test/helpers/remove-temp-path.js
+++ b/test/helpers/remove-temp-path.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { rm } = require('fs').promises;
+const { rm } = require('node:fs').promises;
 const { paths } = require('./constants.js');
 
 /**
diff --git a/test/helpers/test-configs.js b/test/helpers/test-configs.js
index bacfbe9..2c211d3 100644
--- a/test/helpers/test-configs.js
+++ b/test/helpers/test-configs.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const path = require('path');
+const path = require('node:path');
 const glob = require('glob');
 const { paths } = require('./constants.js');
 
diff --git a/test/helpers/write-file.js b/test/helpers/write-file.js
index 386df05..99e726b 100644
--- a/test/helpers/write-file.js
+++ b/test/helpers/write-file.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const { mkdir, writeFile } = require('fs').promises;
-const path = require('path');
+const { mkdir, writeFile } = require('node:fs').promises;
+const path = require('node:path');
 
 /**
  * Prepare and output a file and create directories as necessary
diff --git a/test/helpers/write-files.js b/test/helpers/write-files.js
index e5660d2..5731c80 100644
--- a/test/helpers/write-files.js
+++ b/test/helpers/write-files.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const fs = require('fs');
-const path = require('path');
+const fs = require('node:fs');
+const path = require('node:path');
 const File = require('vinyl');
 const { isObject } = require('../../lib/svg-sprite/utils/index.js');
 
diff --git a/test/jest/setup.js b/test/jest/setup.js
index 7ecd8a9..85fc08f 100644
--- a/test/jest/setup.js
+++ b/test/jest/setup.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const path = require('path');
+const path = require('node:path');
 const compareSvg2Png = require('../helpers/compare-svg-2-png.js');
 const compareHTML2Png = require('../helpers/compare-html-2-png.js');
 const { launchBrowser, closeBrowser } = require('../helpers/capture-browser.js');
diff --git a/test/shape.test.js b/test/shape.test.js
index fe16452..ef1fed6 100644
--- a/test/shape.test.js
+++ b/test/shape.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const { Buffer } = require('buffer');
-const path = require('path');
+const { Buffer } = require('node:buffer');
+const path = require('node:path');
 const { DOMParser } = require('@xmldom/xmldom');
 const SVGSpriter = require('../lib/svg-sprite.js');
 const calculateSvgDimensions = require('../lib/svg-sprite/utils/calculate-svg-dimensions.js');
diff --git a/test/spriter.test.js b/test/spriter.test.js
index fbd80a1..740cad7 100644
--- a/test/spriter.test.js
+++ b/test/spriter.test.js
@@ -1,9 +1,9 @@
 'use strict';
 
 /* eslint-disable max-nested-callbacks, jest/prefer-expect-assertions */
-const fs = require('fs');
-const path = require('path');
-const { Buffer } = require('buffer');
+const fs = require('node:fs');
+const path = require('node:path');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 const SVGSpriter = require('../lib/svg-sprite.js');
 
diff --git a/test/svg-shape.test.js b/test/svg-shape.test.js
index 5db1b5e..9b5acfd 100644
--- a/test/svg-shape.test.js
+++ b/test/svg-shape.test.js
@@ -1,8 +1,8 @@
 'use strict';
 
-const { Buffer } = require('buffer');
-const path = require('path');
-const fs = require('fs');
+const { Buffer } = require('node:buffer');
+const path = require('node:path');
+const fs = require('node:fs');
 const File = require('vinyl');
 const glob = require('glob');
 const getShape = require('../lib/svg-sprite/shape.js');
diff --git a/test/svg-sprite/alignment/center.test.js b/test/svg-sprite/alignment/center.test.js
index 8d3537b..a3db08a 100644
--- a/test/svg-sprite/alignment/center.test.js
+++ b/test/svg-sprite/alignment/center.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const path = require('path');
-const fs = require('fs');
+const path = require('node:path');
+const fs = require('node:fs');
 const mustache = require('mustache');
 const sass = require('sass');
 const glob = require('glob');
diff --git a/test/svg-sprite/alignment/mixed.test.js b/test/svg-sprite/alignment/mixed.test.js
index 978a2e7..376f27f 100644
--- a/test/svg-sprite/alignment/mixed.test.js
+++ b/test/svg-sprite/alignment/mixed.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const path = require('path');
-const fs = require('fs');
+const path = require('node:path');
+const fs = require('node:fs');
 const mustache = require('mustache');
 const sass = require('sass');
 const glob = require('glob');
diff --git a/test/svg-sprite/config/config.constructor.attributes.test.js b/test/svg-sprite/config/config.constructor.attributes.test.js
index c4a0be2..64664bc 100644
--- a/test/svg-sprite/config/config.constructor.attributes.test.js
+++ b/test/svg-sprite/config/config.constructor.attributes.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const path = require('path');
+const path = require('node:path');
 const SVGSpriterConfig = require('../../../lib/svg-sprite/config.js');
 const { paths } = require('../../helpers/constants.js');
 
diff --git a/test/svg-sprite/config/config.constructor.shape.align.test.js b/test/svg-sprite/config/config.constructor.shape.align.test.js
index 8c42da5..3a7ca8c 100644
--- a/test/svg-sprite/config/config.constructor.shape.align.test.js
+++ b/test/svg-sprite/config/config.constructor.shape.align.test.js
@@ -1,12 +1,12 @@
 'use strict';
 
-const fs = require('fs');
-const path = require('path');
-const { Buffer } = require('buffer');
+const fs = require('node:fs');
+const path = require('node:path');
+const { Buffer } = require('node:buffer');
 const yaml = require('js-yaml');
 const SVGSpriterConfig = require('../../../lib/svg-sprite/config.js');
 
-jest.mock('fs');
+jest.mock('node:fs');
 jest.mock('yaml');
 
 describe('testing SVGSpriterConfig shape.align', () => {
diff --git a/test/svg-sprite/config/config.constructor.shape.meta.test.js b/test/svg-sprite/config/config.constructor.shape.meta.test.js
index b3a01a5..4cf2974 100644
--- a/test/svg-sprite/config/config.constructor.shape.meta.test.js
+++ b/test/svg-sprite/config/config.constructor.shape.meta.test.js
@@ -1,12 +1,12 @@
 'use strict';
 
-const fs = require('fs');
-const path = require('path');
-const { Buffer } = require('buffer');
+const fs = require('node:fs');
+const path = require('node:path');
+const { Buffer } = require('node:buffer');
 const yaml = require('js-yaml');
 const SVGSpriterConfig = require('../../../lib/svg-sprite/config.js');
 
-jest.mock('fs');
+jest.mock('node:fs');
 jest.mock('yaml');
 
 describe('testing SVGSpriterConfig shape.meta', () => {
diff --git a/test/svg-sprite/minimal-configuration/modes/css.test.js b/test/svg-sprite/minimal-configuration/modes/css.test.js
index 0bb0b47..4b9ddf1 100644
--- a/test/svg-sprite/minimal-configuration/modes/css.test.js
+++ b/test/svg-sprite/minimal-configuration/modes/css.test.js
@@ -1,8 +1,8 @@
 'use strict';
 
 /* eslint-disable max-nested-callbacks */
-const path = require('path');
-const fs = require('fs');
+const path = require('node:path');
+const fs = require('node:fs');
 const mustache = require('mustache');
 const sass = require('sass');
 const { constants: testConfigs } = require('../../../helpers/test-configs.js');
diff --git a/test/svg-sprite/minimal-configuration/modes/defs.test.js b/test/svg-sprite/minimal-configuration/modes/defs.test.js
index 2ea2043..7bbc1b9 100644
--- a/test/svg-sprite/minimal-configuration/modes/defs.test.js
+++ b/test/svg-sprite/minimal-configuration/modes/defs.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const path = require('path');
-const fs = require('fs').promises;
+const path = require('node:path');
+const { readFile } = require('node:fs').promises;
 const mustache = require('mustache');
 const SVGSpriter = require('../../../../lib/svg-sprite.js');
 const { addFixtureFiles } = require('../../../helpers/add-files.js');
@@ -45,14 +45,14 @@ describe.each`
     it('creates a visually correct stylesheet resource in CSS format', async() => {
         expect.hasAssertions();
 
-        const svgData = await fs.readFile(path.join(tmpPath, 'defs/svg', svg));
+        const svgData = await readFile(path.join(tmpPath, 'defs/svg', svg));
 
         data.svg = svgData.toString();
         data.css = '../sprite.css';
 
         expect(data.svg).toMatchSnapshot();
 
-        const previewTemplate = await fs.readFile(path.join(__dirname, '../../../tmpl/defs.html'), 'utf8');
+        const previewTemplate = await readFile(path.join(__dirname, '../../../tmpl/defs.html'), 'utf8');
         const out = mustache.render(previewTemplate, data);
         const preview = await writeFile(path.join(tmpPath, `defs/html/defs${testConfig.namespace}.html`), out);
         const expected = path.join(paths.expectations, `png/defs${testConfig.namespace}.html.png`);
diff --git a/test/svg-sprite/minimal-configuration/modes/stack.test.js b/test/svg-sprite/minimal-configuration/modes/stack.test.js
index c9fcbb8..0778c7f 100644
--- a/test/svg-sprite/minimal-configuration/modes/stack.test.js
+++ b/test/svg-sprite/minimal-configuration/modes/stack.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const path = require('path');
-const fs = require('fs').promises;
+const path = require('node:path');
+const { readFile } = require('node:fs').promises;
 const mustache = require('mustache');
 const SVGSpriter = require('../../../../lib/svg-sprite.js');
 const { addFixtureFiles } = require('../../../helpers/add-files.js');
@@ -45,14 +45,14 @@ describe.each`
     it('creates a visually correct stylesheet resource in CSS format', async() => {
         expect.hasAssertions();
 
-        const svgData = await fs.readFile(path.join(tmpPath, 'stack/svg', svg));
+        const svgData = await readFile(path.join(tmpPath, 'stack/svg', svg));
 
         data.svg = svgData.toString();
         data.css = '../sprite.css';
 
         expect(data.svg).toMatchSnapshot();
 
-        const previewTemplate = await fs.readFile(path.join(__dirname, '../../../tmpl/stack.html'), 'utf8');
+        const previewTemplate = await readFile(path.join(__dirname, '../../../tmpl/stack.html'), 'utf8');
         const out = mustache.render(previewTemplate, data);
         const preview = await writeFile(path.join(tmpPath, `stack/html/stack${testConfig.namespace}.html`), out);
         const expected = path.join(paths.expectations, `png/stack${testConfig.namespace}.html.png`);
@@ -90,14 +90,14 @@ describe('without viewbox', () => {
     it('creates a visually correct stylesheet resource in CSS format', async() => {
         expect.hasAssertions();
 
-        const svgData = await fs.readFile(path.join(tmpPath, 'stack/svg', svg));
+        const svgData = await readFile(path.join(tmpPath, 'stack/svg', svg));
 
         data.svg = svgData.toString();
         data.css = '../sprite.css';
 
         expect(data.svg).toMatchSnapshot();
 
-        const previewTemplate = await fs.readFile(path.join(__dirname, '../../../tmpl/stack.html'), 'utf8');
+        const previewTemplate = await readFile(path.join(__dirname, '../../../tmpl/stack.html'), 'utf8');
         const out = mustache.render(previewTemplate, data);
         const preview = await writeFile(path.join(tmpPath, 'stack/html/stack-without-viewbox.html'), out);
         const expected = path.join(paths.expectations, 'png/stack-without-viewbox.html.png');
diff --git a/test/svg-sprite/minimal-configuration/modes/symbol.test.js b/test/svg-sprite/minimal-configuration/modes/symbol.test.js
index 93053bd..a327eab 100644
--- a/test/svg-sprite/minimal-configuration/modes/symbol.test.js
+++ b/test/svg-sprite/minimal-configuration/modes/symbol.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const path = require('path');
-const fs = require('fs').promises;
+const path = require('node:path');
+const { readFile } = require('node:fs').promises;
 const mustache = require('mustache');
 const SVGSpriter = require('../../../../lib/svg-sprite.js');
 const { addFixtureFiles } = require('../../../helpers/add-files.js');
@@ -45,14 +45,14 @@ describe.each`
     it('creates a visually correct stylesheet resource in CSS format', async() => {
         expect.hasAssertions();
 
-        const svgData = await fs.readFile(path.join(tmpPath, 'symbol/svg', svg));
+        const svgData = await readFile(path.join(tmpPath, 'symbol/svg', svg));
 
         data.svg = svgData.toString();
         data.css = '../sprite.css';
 
         expect(data.svg).toMatchSnapshot();
 
-        const previewTemplate = await fs.readFile(path.join(__dirname, '../../../tmpl/symbol.html'), 'utf8');
+        const previewTemplate = await readFile(path.join(__dirname, '../../../tmpl/symbol.html'), 'utf8');
         const out = mustache.render(previewTemplate, data);
         const preview = await writeFile(path.join(tmpPath, 'symbol/html/symbol.html'), out);
         const expected = path.join(paths.expectations, `png/symbol.html${testConfig.namespace}.png`);
diff --git a/test/svg-sprite/minimal-configuration/modes/view.mixed.test.js b/test/svg-sprite/minimal-configuration/modes/view.mixed.test.js
index 9cd4da4..cf9573e 100644
--- a/test/svg-sprite/minimal-configuration/modes/view.mixed.test.js
+++ b/test/svg-sprite/minimal-configuration/modes/view.mixed.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const path = require('path');
-const fs = require('fs');
+const path = require('node:path');
+const fs = require('node:fs');
 const mustache = require('mustache');
 const glob = require('glob');
 const SVGSpriter = require('../../../../lib/svg-sprite.js');
diff --git a/test/svg-sprite/minimal-configuration/modes/view.packed.test.js b/test/svg-sprite/minimal-configuration/modes/view.packed.test.js
index ef98103..c61d445 100644
--- a/test/svg-sprite/minimal-configuration/modes/view.packed.test.js
+++ b/test/svg-sprite/minimal-configuration/modes/view.packed.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
-const path = require('path');
-const fs = require('fs').promises;
+const path = require('node:path');
+const { readFile } = require('node:fs').promises;
 const mustache = require('mustache');
 const writeFiles = require('../../../helpers/write-files.js');
 const writeFile = require('../../../helpers/write-file.js');
@@ -52,7 +52,7 @@ describe.each`
 
             const input = path.join(tmpPath, 'view/svg', svg);
             const expected = path.join(paths.expectations, `png/css.packed${testConfig.namespace}.png`);
-            const svgFile = await fs.readFile(input);
+            const svgFile = await readFile(input);
 
             expect(svgFile.toString()).toMatchSnapshot();
             await expect(input).toBeVisuallyEqualTo(expected);
@@ -63,7 +63,7 @@ describe.each`
 
             data.css = '../sprite.css';
 
-            const previewTemplate = await fs.readFile(path.join(__dirname, '../../../tmpl/view.html'), 'utf8');
+            const previewTemplate = await readFile(path.join(__dirname, '../../../tmpl/view.html'), 'utf8');
             const out = mustache.render(previewTemplate, data);
             const preview = await writeFile(path.join(tmpPath, 'view/html/view.html'), out);
             const expected = path.join(paths.expectations, `png/view.html${testConfig.namespace}.png`);
diff --git a/test/svg-sprite/minimal-configuration/no-arguments.test.js b/test/svg-sprite/minimal-configuration/no-arguments.test.js
index 6b057c3..fd30a6b 100644
--- a/test/svg-sprite/minimal-configuration/no-arguments.test.js
+++ b/test/svg-sprite/minimal-configuration/no-arguments.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const path = require('path');
+const path = require('node:path');
 const glob = require('glob');
 const SVGSpriter = require('../../../lib/svg-sprite.js');
 const { addFixtureFiles, addRelativeFixtureFiles } = require('../../helpers/add-files.js');
diff --git a/test/svg-sprite/minimal-configuration/rerun.test.js b/test/svg-sprite/minimal-configuration/rerun.test.js
index 76beec9..0c33d2f 100644
--- a/test/svg-sprite/minimal-configuration/rerun.test.js
+++ b/test/svg-sprite/minimal-configuration/rerun.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const path = require('path');
+const path = require('node:path');
 const glob = require('glob');
 const SVGSpriter = require('../../../lib/svg-sprite.js');
 const { addFixtureFiles } = require('../../helpers/add-files.js');
diff --git a/test/svg-sprite/mode/base.test.js b/test/svg-sprite/mode/base.test.js
index 9f4b3f8..8d60644 100644
--- a/test/svg-sprite/mode/base.test.js
+++ b/test/svg-sprite/mode/base.test.js
@@ -2,15 +2,15 @@
 
 /* eslint-disable new-cap */
 
-const path = require('path');
-const { Buffer } = require('buffer');
-const process = require('process');
+const path = require('node:path');
+const { Buffer } = require('node:buffer');
+const process = require('node:process');
 const mustache = require('mustache');
 const File = require('vinyl');
 const SVGSpriteBase = require('../../../lib/svg-sprite/mode/base.js');
 
 jest.mock('mustache');
-jest.mock('fs');
+jest.mock('node:fs');
 
 describe('testings SVGSpriteBase', () => {
     const TEST_MODE_NAME = 'base';
diff --git a/test/svg-sprite/queue.test.js b/test/svg-sprite/queue.test.js
index c8eff79..a033d78 100644
--- a/test/svg-sprite/queue.test.js
+++ b/test/svg-sprite/queue.test.js
@@ -1,13 +1,13 @@
 'use strict';
 
-const { EventEmitter } = require('events');
-const path = require('path');
+const { EventEmitter } = require('node:events');
+const path = require('node:path');
 const File = require('vinyl');
 const SVGSpriterQueue = require('../../lib/svg-sprite/queue.js');
 const Shape = require('../../lib/svg-sprite/shape.js');
 
 jest.mock('../../lib/svg-sprite/shape.js');
-jest.mock('events');
+jest.mock('node:events');
 
 describe('testing Queue', () => {
     describe('testing constructor()', () => {
diff --git a/test/svg-sprite/shape/shape.complement.test.js b/test/svg-sprite/shape/shape.complement.test.js
index 3c57121..042a4ca 100644
--- a/test/svg-sprite/shape/shape.complement.test.js
+++ b/test/svg-sprite/shape/shape.complement.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 
 const TEST_SPRITER = {
diff --git a/test/svg-sprite/shape/shape.constructor.test.js b/test/svg-sprite/shape/shape.constructor.test.js
index 88787c1..649fe74 100644
--- a/test/svg-sprite/shape/shape.constructor.test.js
+++ b/test/svg-sprite/shape/shape.constructor.test.js
@@ -2,8 +2,8 @@
 
 /* eslint-disable max-nested-callbacks */
 
-const path = require('path');
-const { Buffer } = require('buffer');
+const path = require('node:path');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 const SVGShape = require('../../../lib/svg-sprite/shape.js');
 
diff --git a/test/svg-sprite/shape/shape.dimensions.test.js b/test/svg-sprite/shape/shape.dimensions.test.js
index 5342c06..4a5a6d8 100644
--- a/test/svg-sprite/shape/shape.dimensions.test.js
+++ b/test/svg-sprite/shape/shape.dimensions.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 const SVGShape = require('../../../lib/svg-sprite/shape.js');
 
diff --git a/test/svg-sprite/shape/shape.distribute.test.js b/test/svg-sprite/shape/shape.distribute.test.js
index 3cba8b6..d612d3a 100644
--- a/test/svg-sprite/shape/shape.distribute.test.js
+++ b/test/svg-sprite/shape/shape.distribute.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 const SVGShape = require('../../../lib/svg-sprite/shape.js');
 
diff --git a/test/svg-sprite/shape/shape.init-svg.test.js b/test/svg-sprite/shape/shape.init-svg.test.js
index 19bca90..d689ab5 100644
--- a/test/svg-sprite/shape/shape.init-svg.test.js
+++ b/test/svg-sprite/shape/shape.init-svg.test.js
@@ -1,7 +1,7 @@
 'use strict';
 
 /* eslint-disable no-new */
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 const fixXMLString = require('../../../lib/svg-sprite/utils/fix-xml-string.js');
 const SVGShape = require('../../../lib/svg-sprite/shape.js');
diff --git a/test/svg-sprite/shape/shape.references.test.js b/test/svg-sprite/shape/shape.references.test.js
index a0728ab..a6845e6 100644
--- a/test/svg-sprite/shape/shape.references.test.js
+++ b/test/svg-sprite/shape/shape.references.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 const SVGShape = require('../../../lib/svg-sprite/shape.js');
 
diff --git a/test/svg-sprite/shape/shape.svg.namespace.test.js b/test/svg-sprite/shape/shape.svg.namespace.test.js
index 2aef000..8694778 100644
--- a/test/svg-sprite/shape/shape.svg.namespace.test.js
+++ b/test/svg-sprite/shape/shape.svg.namespace.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const xpath = require('xpath');
 const File = require('vinyl');
 const SVGShape = require('../../../lib/svg-sprite/shape.js');
diff --git a/test/svg-sprite/shape/shape.svg.test.js b/test/svg-sprite/shape/shape.svg.test.js
index 0ef1126..60658e7 100644
--- a/test/svg-sprite/shape/shape.svg.test.js
+++ b/test/svg-sprite/shape/shape.svg.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 
 const TEST_SPRITER = {
diff --git a/test/svg-sprite/special/font-face.test.js b/test/svg-sprite/special/font-face.test.js
index c52fc9c..4530bc4 100644
--- a/test/svg-sprite/special/font-face.test.js
+++ b/test/svg-sprite/special/font-face.test.js
@@ -1,4 +1,4 @@
-const path = require('path');
+const path = require('node:path');
 const SVGSpriter = require('../../../lib/svg-sprite.js');
 const { paths } = require('../../helpers/constants.js');
 
diff --git a/test/svg-sprite/sprite.test.js b/test/svg-sprite/sprite.test.js
index fd8b101..db2cc3f 100644
--- a/test/svg-sprite/sprite.test.js
+++ b/test/svg-sprite/sprite.test.js
@@ -1,6 +1,6 @@
 'use strict';
 
-const { Buffer } = require('buffer');
+const { Buffer } = require('node:buffer');
 const File = require('vinyl');
 const SVGSprite = require('../../lib/svg-sprite/sprite.js');