VYPR
Critical severityNVD Advisory· Published Oct 12, 2022· Updated May 15, 2025

CVE-2022-37611

CVE-2022-37611

Description

Prototype pollution in gh-pages@3.1.0 via partial variable in util.js allows arbitrary property injection.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Prototype pollution in gh-pages@3.1.0 via `partial` variable in `util.js` allows arbitrary property injection.

Overview

CVE-2022-37611 describes a prototype pollution vulnerability in the tschaub/gh-pages package version 3.1.0. The bug resides in the lib/util.js file, where the partial variable is used to merge configuration options without sanitizing object keys. This allows an attacker to pollute the Object.prototype with arbitrary properties by passing crafted input to the publish function [1][2][3].

Exploitation

Details

Exploitation requires the ability to supply a malicious options object to the ghpages.publish() call. In typical usage, this could occur if an application using gh-pages merges untrusted user input into the options passed to the publish function. The pollution happens because the partial object's properties are recursively assigned without checking for __proto__, constructor, or prototype keys, enabling an attacker to inject properties that will be inherited by all objects in the Node.js process [1][2].

Impact

A successful prototype pollution attack can lead to unexpected behavior in the application, including denial of service, property injection that modifies the behavior of other objects, and potentially remote code execution if the polluted prototype influences later logic used for code execution. The CVSS score (not provided) would typically be medium to high depending on the context of how gh-pages is integrated [3].

Mitigation

As of the published advisory, the vulnerability has been addressed in a subsequent commit referenced in the pull request that updates the code to use safe property assignment methods [2][4]. Users are advised to upgrade to a patched version of gh-pages beyond 3.1.0. A review of the source code shows that the fix involves replacing the vulnerable assignment in lib/util.js with a safer pattern that avoids prototype pollution [4].

AI Insight generated on May 21, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
gh-pagesnpm
< 5.0.05.0.0

Affected products

2

Patches

1
f323e2397b82

Merge pull request #452 from tschaub/updates

https://github.com/tschaub/gh-pagesTim SchaubJan 20, 2023via ghsa-ref
7 files changed · +634 413
  • .github/dependabot.yml+14 0 added
    @@ -0,0 +1,14 @@
    +version: 2
    +
    +updates:
    +  - package-ecosystem: npm
    +    directory: "/"
    +    schedule:
    +      interval: weekly
    +    open-pull-requests-limit: 10
    +    versioning-strategy: increase-if-necessary
    +
    +  - package-ecosystem: github-actions
    +    directory: "/"
    +    schedule:
    +      interval: weekly
    
  • .github/workflows/test.yml+1 1 modified
    @@ -22,9 +22,9 @@ jobs:
             os:
               - ubuntu-latest
             node:
    -          - 12
               - 14
               - 16
    +          - 18
     
         steps:
           - name: Clone repository
    
  • lib/index.js+5 4 modified
    @@ -53,7 +53,7 @@ exports.defaults = {
     /**
      * Push a git branch to a remote (pushes gh-pages by default).
      * @param {string} basePath The base path.
    - * @param {Object} config Publish options.
    + * @param {object} config Publish options.
      * @param {Function} callback Callback.
      * @return {Promise} A promise.
      */
    @@ -88,12 +88,13 @@ exports.publish = function publish(basePath, config, callback) {
     
       try {
         if (!fs.statSync(basePath).isDirectory()) {
    -      done(new Error('The "base" option must be an existing directory'));
    -      return;
    +      const err = new Error('The "base" option must be an existing directory');
    +      done(err);
    +      return Promise.reject(err);
         }
       } catch (err) {
         done(err);
    -    return;
    +    return Promise.reject(err);
       }
     
       const files = globby
    
  • lib/util.js+5 5 modified
    @@ -9,17 +9,17 @@ const fs = require('fs-extra');
      * @return {Array<string>} List of directory paths.
      */
     function uniqueDirs(files) {
    -  const dirs = {};
    +  const dirs = new Set();
       files.forEach((filepath) => {
         const parts = path.dirname(filepath).split(path.sep);
         let partial = parts[0] || '/';
    -    dirs[partial] = true;
    +    dirs.add(partial);
         for (let i = 1, ii = parts.length; i < ii; ++i) {
           partial = path.join(partial, parts[i]);
    -      dirs[partial] = true;
    +      dirs.add(partial);
         }
       });
    -  return Object.keys(dirs);
    +  return Array.from(dirs);
     }
     exports.uniqueDirs = uniqueDirs;
     
    @@ -70,7 +70,7 @@ exports.dirsToCreate = dirsToCreate;
     
     /**
      * Copy a file.
    - * @param {Object} obj Object with src and dest properties.
    + * @param {object} obj Object with src and dest properties.
      * @param {function(Error)} callback Callback
      */
     function copyFile(obj, callback) {
    
  • package.json+6 6 modified
    @@ -43,12 +43,12 @@
         "globby": "^6.1.0"
       },
       "devDependencies": {
    -    "chai": "^4.3.6",
    -    "dir-compare": "^1.8.0",
    -    "eslint": "^8.15.0",
    -    "eslint-config-tschaub": "^14.0.0",
    -    "mocha": "^10.0.0",
    -    "sinon": "^14.0.0",
    +    "chai": "^4.3.7",
    +    "dir-compare": "^4.0.0",
    +    "eslint": "^8.32.0",
    +    "eslint-config-tschaub": "^14.1.2",
    +    "mocha": "^10.2.0",
    +    "sinon": "^15.0.1",
         "tmp": "^0.2.1"
       },
       "bin": {
    
  • package-lock.json+601 395 modified
    @@ -22,42 +22,42 @@
             "gh-pages-clean": "bin/gh-pages-clean.js"
           },
           "devDependencies": {
    -        "chai": "^4.3.6",
    -        "dir-compare": "^1.8.0",
    -        "eslint": "^8.15.0",
    -        "eslint-config-tschaub": "^14.0.0",
    -        "mocha": "^10.0.0",
    -        "sinon": "^14.0.0",
    +        "chai": "^4.3.7",
    +        "dir-compare": "^4.0.0",
    +        "eslint": "^8.32.0",
    +        "eslint-config-tschaub": "^14.1.2",
    +        "mocha": "^10.2.0",
    +        "sinon": "^15.0.1",
             "tmp": "^0.2.1"
           },
           "engines": {
             "node": ">=10"
           }
         },
         "node_modules/@es-joy/jsdoccomment": {
    -      "version": "0.20.1",
    -      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz",
    -      "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==",
    +      "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.0",
    +        "comment-parser": "1.3.1",
             "esquery": "^1.4.0",
    -        "jsdoc-type-pratt-parser": "~2.2.3"
    +        "jsdoc-type-pratt-parser": "~3.1.0"
           },
           "engines": {
    -        "node": "^12 || ^14 || ^16 || ^17"
    +        "node": "^14 || ^16 || ^17 || ^18 || ^19"
           }
         },
         "node_modules/@eslint/eslintrc": {
    -      "version": "1.2.3",
    -      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz",
    -      "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==",
    +      "version": "1.4.1",
    +      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
    +      "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
           "dev": true,
           "dependencies": {
             "ajv": "^6.12.4",
             "debug": "^4.3.2",
    -        "espree": "^9.3.2",
    -        "globals": "^13.9.0",
    +        "espree": "^9.4.0",
    +        "globals": "^13.19.0",
             "ignore": "^5.2.0",
             "import-fresh": "^3.2.1",
             "js-yaml": "^4.1.0",
    @@ -66,61 +66,112 @@
           },
           "engines": {
             "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
    +      },
    +      "funding": {
    +        "url": "https://opencollective.com/eslint"
           }
         },
         "node_modules/@humanwhocodes/config-array": {
    -      "version": "0.9.5",
    -      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
    -      "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
    +      "version": "0.11.8",
    +      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
    +      "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
           "dev": true,
           "dependencies": {
             "@humanwhocodes/object-schema": "^1.2.1",
             "debug": "^4.1.1",
    -        "minimatch": "^3.0.4"
    +        "minimatch": "^3.0.5"
           },
           "engines": {
             "node": ">=10.10.0"
           }
         },
    +    "node_modules/@humanwhocodes/module-importer": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
    +      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=12.22"
    +      },
    +      "funding": {
    +        "type": "github",
    +        "url": "https://github.com/sponsors/nzakas"
    +      }
    +    },
         "node_modules/@humanwhocodes/object-schema": {
           "version": "1.2.1",
           "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
           "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
           "dev": true
         },
    +    "node_modules/@nodelib/fs.scandir": {
    +      "version": "2.1.5",
    +      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
    +      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
    +      "dev": true,
    +      "dependencies": {
    +        "@nodelib/fs.stat": "2.0.5",
    +        "run-parallel": "^1.1.9"
    +      },
    +      "engines": {
    +        "node": ">= 8"
    +      }
    +    },
    +    "node_modules/@nodelib/fs.stat": {
    +      "version": "2.0.5",
    +      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
    +      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">= 8"
    +      }
    +    },
    +    "node_modules/@nodelib/fs.walk": {
    +      "version": "1.2.8",
    +      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
    +      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
    +      "dev": true,
    +      "dependencies": {
    +        "@nodelib/fs.scandir": "2.1.5",
    +        "fastq": "^1.6.0"
    +      },
    +      "engines": {
    +        "node": ">= 8"
    +      }
    +    },
         "node_modules/@sinonjs/commons": {
    -      "version": "1.8.3",
    -      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
    -      "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
    +      "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
           "dev": true,
           "dependencies": {
             "type-detect": "4.0.8"
           }
         },
         "node_modules/@sinonjs/fake-timers": {
    -      "version": "9.1.2",
    -      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
    -      "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
    +      "version": "10.0.2",
    +      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
    +      "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
           "dev": true,
           "dependencies": {
    -        "@sinonjs/commons": "^1.7.0"
    +        "@sinonjs/commons": "^2.0.0"
           }
         },
         "node_modules/@sinonjs/samsam": {
    -      "version": "6.1.1",
    -      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
    -      "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
    +      "version": "7.0.1",
    +      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz",
    +      "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==",
           "dev": true,
           "dependencies": {
    -        "@sinonjs/commons": "^1.6.0",
    +        "@sinonjs/commons": "^2.0.0",
             "lodash.get": "^4.4.2",
             "type-detect": "^4.0.8"
           }
         },
         "node_modules/@sinonjs/text-encoding": {
    -      "version": "0.7.1",
    -      "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
    -      "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
    +      "version": "0.7.2",
    +      "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
    +      "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
           "dev": true
         },
         "node_modules/@types/json5": {
    @@ -129,16 +180,10 @@
           "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
           "dev": true
         },
    -    "node_modules/@ungap/promise-all-settled": {
    -      "version": "1.1.2",
    -      "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
    -      "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
    -      "dev": true
    -    },
         "node_modules/acorn": {
    -      "version": "8.7.1",
    -      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
    -      "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
    +      "version": "8.8.1",
    +      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
    +      "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
           "dev": true,
           "bin": {
             "acorn": "bin/acorn"
    @@ -302,12 +347,6 @@
             "node": ">=8"
           }
         },
    -    "node_modules/bluebird": {
    -      "version": "3.4.1",
    -      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.1.tgz",
    -      "integrity": "sha1-tzHd9I4t077awudeEhWhG8uR+gc=",
    -      "dev": true
    -    },
         "node_modules/brace-expansion": {
           "version": "1.1.11",
           "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
    @@ -335,15 +374,6 @@
           "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
           "dev": true
         },
    -    "node_modules/buffer-equal": {
    -      "version": "1.0.0",
    -      "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
    -      "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
    -      "dev": true,
    -      "engines": {
    -        "node": ">=0.4.0"
    -      }
    -    },
         "node_modules/call-bind": {
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
    @@ -379,14 +409,14 @@
           }
         },
         "node_modules/chai": {
    -      "version": "4.3.6",
    -      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
    -      "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
    +      "version": "4.3.7",
    +      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
    +      "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
           "dev": true,
           "dependencies": {
             "assertion-error": "^1.1.0",
             "check-error": "^1.0.2",
    -        "deep-eql": "^3.0.1",
    +        "deep-eql": "^4.1.2",
             "get-func-name": "^2.0.0",
             "loupe": "^2.3.1",
             "pathval": "^1.1.1",
    @@ -489,24 +519,15 @@
           "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
           "dev": true
         },
    -    "node_modules/colors": {
    -      "version": "1.0.3",
    -      "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
    -      "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
    -      "dev": true,
    -      "engines": {
    -        "node": ">=0.1.90"
    -      }
    -    },
         "node_modules/commander": {
           "version": "2.20.3",
           "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
           "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
         },
         "node_modules/comment-parser": {
    -      "version": "1.3.0",
    -      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz",
    -      "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==",
    +      "version": "1.3.1",
    +      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz",
    +      "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==",
           "dev": true,
           "engines": {
             "node": ">= 12.0.0"
    @@ -566,15 +587,15 @@
           }
         },
         "node_modules/deep-eql": {
    -      "version": "3.0.1",
    -      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
    -      "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
    +      "version": "4.1.3",
    +      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
    +      "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
           "dev": true,
           "dependencies": {
             "type-detect": "^4.0.0"
           },
           "engines": {
    -        "node": ">=0.12"
    +        "node": ">=6"
           }
         },
         "node_modules/deep-is": {
    @@ -609,43 +630,28 @@
           }
         },
         "node_modules/dir-compare": {
    -      "version": "1.8.0",
    -      "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-1.8.0.tgz",
    -      "integrity": "sha512-Ork/J37pKE6M+Fvl98OB+iAuZ5CG7d2d8DIMmiCDEZVAbEWn2lp+ghSbc1lgkgVX91p8jMQs2DeTMJvpMeU9+A==",
    +      "version": "4.0.0",
    +      "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.0.0.tgz",
    +      "integrity": "sha512-wC7thVKL3V656tO61rbEDE4LTeeYrUC2pAUL00AaXYghBhjjVNRyBlpH6POzb44ZuK23OSrqF6TbSC/QYeqfAg==",
           "dev": true,
           "dependencies": {
    -        "bluebird": "3.4.1",
    -        "buffer-equal": "1.0.0",
    -        "colors": "1.0.3",
    -        "commander": "2.9.0",
    -        "minimatch": "3.0.2"
    -      },
    -      "bin": {
    -        "dircompare": "dircompare.js"
    +        "minimatch": "^3.0.4",
    +        "p-limit": "^3.1.0 "
           }
         },
    -    "node_modules/dir-compare/node_modules/commander": {
    -      "version": "2.9.0",
    -      "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
    -      "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
    +    "node_modules/dir-compare/node_modules/p-limit": {
    +      "version": "3.1.0",
    +      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
    +      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
           "dev": true,
           "dependencies": {
    -        "graceful-readlink": ">= 1.0.0"
    +        "yocto-queue": "^0.1.0"
           },
           "engines": {
    -        "node": ">= 0.6.x"
    -      }
    -    },
    -    "node_modules/dir-compare/node_modules/minimatch": {
    -      "version": "3.0.2",
    -      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz",
    -      "integrity": "sha1-DzmKcwDqRB6cNIyD2Yq4ydv5xAo=",
    -      "dev": true,
    -      "dependencies": {
    -        "brace-expansion": "^1.0.0"
    +        "node": ">=10"
           },
    -      "engines": {
    -        "node": "*"
    +      "funding": {
    +        "url": "https://github.com/sponsors/sindresorhus"
           }
         },
         "node_modules/doctrine": {
    @@ -752,13 +758,15 @@
           }
         },
         "node_modules/eslint": {
    -      "version": "8.15.0",
    -      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz",
    -      "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==",
    +      "version": "8.32.0",
    +      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz",
    +      "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==",
           "dev": true,
           "dependencies": {
    -        "@eslint/eslintrc": "^1.2.3",
    -        "@humanwhocodes/config-array": "^0.9.2",
    +        "@eslint/eslintrc": "^1.4.1",
    +        "@humanwhocodes/config-array": "^0.11.8",
    +        "@humanwhocodes/module-importer": "^1.0.1",
    +        "@nodelib/fs.walk": "^1.2.8",
             "ajv": "^6.10.0",
             "chalk": "^4.0.0",
             "cross-spawn": "^7.0.2",
    @@ -768,18 +776,21 @@
             "eslint-scope": "^7.1.1",
             "eslint-utils": "^3.0.0",
             "eslint-visitor-keys": "^3.3.0",
    -        "espree": "^9.3.2",
    +        "espree": "^9.4.0",
             "esquery": "^1.4.0",
             "esutils": "^2.0.2",
             "fast-deep-equal": "^3.1.3",
             "file-entry-cache": "^6.0.1",
    -        "functional-red-black-tree": "^1.0.1",
    -        "glob-parent": "^6.0.1",
    -        "globals": "^13.6.0",
    +        "find-up": "^5.0.0",
    +        "glob-parent": "^6.0.2",
    +        "globals": "^13.19.0",
    +        "grapheme-splitter": "^1.0.4",
             "ignore": "^5.2.0",
             "import-fresh": "^3.0.0",
             "imurmurhash": "^0.1.4",
             "is-glob": "^4.0.0",
    +        "is-path-inside": "^3.0.3",
    +        "js-sdsl": "^4.1.4",
             "js-yaml": "^4.1.0",
             "json-stable-stringify-without-jsonify": "^1.0.1",
             "levn": "^0.4.1",
    @@ -790,8 +801,7 @@
             "regexpp": "^3.2.0",
             "strip-ansi": "^6.0.1",
             "strip-json-comments": "^3.1.0",
    -        "text-table": "^0.2.0",
    -        "v8-compile-cache": "^2.0.3"
    +        "text-table": "^0.2.0"
           },
           "bin": {
             "eslint": "bin/eslint.js"
    @@ -816,17 +826,17 @@
           }
         },
         "node_modules/eslint-config-tschaub": {
    -      "version": "14.0.0",
    -      "resolved": "https://registry.npmjs.org/eslint-config-tschaub/-/eslint-config-tschaub-14.0.0.tgz",
    -      "integrity": "sha512-hcUZym/VH7SV5qAxUztGRSBAIpl+AobKikkiL7+KYgHZrHTgp2nnyIg41XjAAo9bmPFK5VV/HVBvaBRqV2FVrQ==",
    +      "version": "14.1.2",
    +      "resolved": "https://registry.npmjs.org/eslint-config-tschaub/-/eslint-config-tschaub-14.1.2.tgz",
    +      "integrity": "sha512-Hk3veCDDOghs46o2HeuAnc79xt1/2oVPpnprW23yi9qgsDbHmHBqwjlxv4pb2l1PfUBNvbh5ur2o+zlCbV3kLA==",
           "dev": true,
           "dependencies": {
    -        "eslint-config-prettier": "^8.3.0",
    -        "eslint-plugin-import": "^2.25.4",
    -        "eslint-plugin-jsdoc": "^37.8.2",
    -        "eslint-plugin-prettier": "^4.0.0",
    +        "eslint-config-prettier": "^8.5.0",
    +        "eslint-plugin-import": "^2.26.0",
    +        "eslint-plugin-jsdoc": ">=38",
    +        "eslint-plugin-prettier": "^4.2.1",
             "eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
    -        "prettier": "^2.5.1"
    +        "prettier": "^2.7.1"
           }
         },
         "node_modules/eslint-import-resolver-node": {
    @@ -925,22 +935,21 @@
           "dev": true
         },
         "node_modules/eslint-plugin-jsdoc": {
    -      "version": "37.9.7",
    -      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz",
    -      "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==",
    +      "version": "39.6.7",
    +      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.7.tgz",
    +      "integrity": "sha512-0mrzXrHvL2ZLe3QK9X0OEDy7Fs2cFQ/f1d1G5KHEGD+13D1qg56Iovq0uOkYf5bJlHiKPytWVgOOO9y7kLW3VA==",
           "dev": true,
           "dependencies": {
    -        "@es-joy/jsdoccomment": "~0.20.1",
    -        "comment-parser": "1.3.0",
    -        "debug": "^4.3.3",
    +        "@es-joy/jsdoccomment": "~0.36.1",
    +        "comment-parser": "1.3.1",
    +        "debug": "^4.3.4",
             "escape-string-regexp": "^4.0.0",
             "esquery": "^1.4.0",
    -        "regextras": "^0.8.0",
    -        "semver": "^7.3.5",
    +        "semver": "^7.3.8",
             "spdx-expression-parse": "^3.0.1"
           },
           "engines": {
    -        "node": "^12 || ^14 || ^16 || ^17"
    +        "node": "^14 || ^16 || ^17 || ^18 || ^19"
           },
           "peerDependencies": {
             "eslint": "^7.0.0 || ^8.0.0"
    @@ -959,15 +968,15 @@
           }
         },
         "node_modules/eslint-plugin-prettier": {
    -      "version": "4.0.0",
    -      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz",
    -      "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==",
    +      "version": "4.2.1",
    +      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
    +      "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
           "dev": true,
           "dependencies": {
             "prettier-linter-helpers": "^1.0.0"
           },
           "engines": {
    -        "node": ">=6.0.0"
    +        "node": ">=12.0.0"
           },
           "peerDependencies": {
             "eslint": ">=7.28.0",
    @@ -1049,6 +1058,22 @@
             "url": "https://github.com/sponsors/sindresorhus"
           }
         },
    +    "node_modules/eslint/node_modules/find-up": {
    +      "version": "5.0.0",
    +      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
    +      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
    +      "dev": true,
    +      "dependencies": {
    +        "locate-path": "^6.0.0",
    +        "path-exists": "^4.0.0"
    +      },
    +      "engines": {
    +        "node": ">=10"
    +      },
    +      "funding": {
    +        "url": "https://github.com/sponsors/sindresorhus"
    +      }
    +    },
         "node_modules/eslint/node_modules/glob-parent": {
           "version": "6.0.2",
           "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
    @@ -1061,18 +1086,75 @@
             "node": ">=10.13.0"
           }
         },
    +    "node_modules/eslint/node_modules/locate-path": {
    +      "version": "6.0.0",
    +      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
    +      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
    +      "dev": true,
    +      "dependencies": {
    +        "p-locate": "^5.0.0"
    +      },
    +      "engines": {
    +        "node": ">=10"
    +      },
    +      "funding": {
    +        "url": "https://github.com/sponsors/sindresorhus"
    +      }
    +    },
    +    "node_modules/eslint/node_modules/p-limit": {
    +      "version": "3.1.0",
    +      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
    +      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
    +      "dev": true,
    +      "dependencies": {
    +        "yocto-queue": "^0.1.0"
    +      },
    +      "engines": {
    +        "node": ">=10"
    +      },
    +      "funding": {
    +        "url": "https://github.com/sponsors/sindresorhus"
    +      }
    +    },
    +    "node_modules/eslint/node_modules/p-locate": {
    +      "version": "5.0.0",
    +      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
    +      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
    +      "dev": true,
    +      "dependencies": {
    +        "p-limit": "^3.0.2"
    +      },
    +      "engines": {
    +        "node": ">=10"
    +      },
    +      "funding": {
    +        "url": "https://github.com/sponsors/sindresorhus"
    +      }
    +    },
    +    "node_modules/eslint/node_modules/path-exists": {
    +      "version": "4.0.0",
    +      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
    +      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=8"
    +      }
    +    },
         "node_modules/espree": {
    -      "version": "9.3.2",
    -      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
    -      "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
    +      "version": "9.4.1",
    +      "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
    +      "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
           "dev": true,
           "dependencies": {
    -        "acorn": "^8.7.1",
    +        "acorn": "^8.8.0",
             "acorn-jsx": "^5.3.2",
             "eslint-visitor-keys": "^3.3.0"
           },
           "engines": {
             "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
    +      },
    +      "funding": {
    +        "url": "https://opencollective.com/eslint"
           }
         },
         "node_modules/esquery": {
    @@ -1141,6 +1223,15 @@
           "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
           "dev": true
         },
    +    "node_modules/fastq": {
    +      "version": "1.15.0",
    +      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
    +      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
    +      "dev": true,
    +      "dependencies": {
    +        "reusify": "^1.0.4"
    +      }
    +    },
         "node_modules/file-entry-cache": {
           "version": "6.0.1",
           "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
    @@ -1370,12 +1461,6 @@
             "url": "https://github.com/sponsors/ljharb"
           }
         },
    -    "node_modules/functional-red-black-tree": {
    -      "version": "1.0.1",
    -      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
    -      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
    -      "dev": true
    -    },
         "node_modules/functions-have-names": {
           "version": "1.2.3",
           "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
    @@ -1465,9 +1550,9 @@
           }
         },
         "node_modules/globals": {
    -      "version": "13.9.0",
    -      "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
    -      "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==",
    +      "version": "13.19.0",
    +      "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
    +      "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
           "dev": true,
           "dependencies": {
             "type-fest": "^0.20.2"
    @@ -1499,10 +1584,10 @@
           "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
           "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
         },
    -    "node_modules/graceful-readlink": {
    -      "version": "1.0.1",
    -      "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
    -      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
    +    "node_modules/grapheme-splitter": {
    +      "version": "1.0.4",
    +      "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
    +      "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
           "dev": true
         },
         "node_modules/has": {
    @@ -1584,9 +1669,9 @@
           }
         },
         "node_modules/ignore": {
    -      "version": "5.2.0",
    -      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
    -      "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
    +      "version": "5.2.4",
    +      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
    +      "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
           "dev": true,
           "engines": {
             "node": ">= 4"
    @@ -1781,6 +1866,15 @@
             "url": "https://github.com/sponsors/ljharb"
           }
         },
    +    "node_modules/is-path-inside": {
    +      "version": "3.0.3",
    +      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
    +      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
    +      "dev": true,
    +      "engines": {
    +        "node": ">=8"
    +      }
    +    },
         "node_modules/is-regex": {
           "version": "1.1.4",
           "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
    @@ -1866,7 +1960,7 @@
         "node_modules/isarray": {
           "version": "0.0.1",
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
    -      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
    +      "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
           "dev": true
         },
         "node_modules/isexe": {
    @@ -1875,6 +1969,16 @@
           "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
           "dev": true
         },
    +    "node_modules/js-sdsl": {
    +      "version": "4.3.0",
    +      "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
    +      "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
    +      "dev": true,
    +      "funding": {
    +        "type": "opencollective",
    +        "url": "https://opencollective.com/js-sdsl"
    +      }
    +    },
         "node_modules/js-yaml": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
    @@ -1888,9 +1992,9 @@
           }
         },
         "node_modules/jsdoc-type-pratt-parser": {
    -      "version": "2.2.5",
    -      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz",
    -      "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==",
    +      "version": "3.1.0",
    +      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz",
    +      "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==",
           "dev": true,
           "engines": {
             "node": ">=12.0.0"
    @@ -1909,9 +2013,9 @@
           "dev": true
         },
         "node_modules/json5": {
    -      "version": "1.0.1",
    -      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
    -      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
    +      "version": "1.0.2",
    +      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
    +      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
           "dev": true,
           "dependencies": {
             "minimist": "^1.2.0"
    @@ -1968,7 +2072,7 @@
         "node_modules/lodash.get": {
           "version": "4.4.2",
           "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
    -      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
    +      "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
           "dev": true
         },
         "node_modules/lodash.merge": {
    @@ -2051,12 +2155,11 @@
           "dev": true
         },
         "node_modules/mocha": {
    -      "version": "10.0.0",
    -      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
    -      "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
    +      "version": "10.2.0",
    +      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
    +      "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
           "dev": true,
           "dependencies": {
    -        "@ungap/promise-all-settled": "1.1.2",
             "ansi-colors": "4.1.1",
             "browser-stdout": "1.3.1",
             "chokidar": "3.5.3",
    @@ -2234,13 +2337,13 @@
           "dev": true
         },
         "node_modules/nise": {
    -      "version": "5.1.1",
    -      "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
    -      "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
    +      "version": "5.1.4",
    +      "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz",
    +      "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==",
           "dev": true,
           "dependencies": {
    -        "@sinonjs/commons": "^1.8.3",
    -        "@sinonjs/fake-timers": ">=5",
    +        "@sinonjs/commons": "^2.0.0",
    +        "@sinonjs/fake-timers": "^10.0.2",
             "@sinonjs/text-encoding": "^0.7.1",
             "just-extend": "^4.0.2",
             "path-to-regexp": "^1.7.0"
    @@ -2485,9 +2588,9 @@
           }
         },
         "node_modules/prettier": {
    -      "version": "2.6.2",
    -      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
    -      "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
    +      "version": "2.8.3",
    +      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz",
    +      "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==",
           "dev": true,
           "bin": {
             "prettier": "bin-prettier.js"
    @@ -2512,14 +2615,34 @@
           }
         },
         "node_modules/punycode": {
    -      "version": "2.1.1",
    -      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
    -      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
    +      "version": "2.3.0",
    +      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
    +      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
           "dev": true,
           "engines": {
             "node": ">=6"
           }
         },
    +    "node_modules/queue-microtask": {
    +      "version": "1.2.3",
    +      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
    +      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
    +      "dev": true,
    +      "funding": [
    +        {
    +          "type": "github",
    +          "url": "https://github.com/sponsors/feross"
    +        },
    +        {
    +          "type": "patreon",
    +          "url": "https://www.patreon.com/feross"
    +        },
    +        {
    +          "type": "consulting",
    +          "url": "https://feross.org/support"
    +        }
    +      ]
    +    },
         "node_modules/randombytes": {
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
    @@ -2570,15 +2693,6 @@
             "url": "https://github.com/sponsors/mysticatea"
           }
         },
    -    "node_modules/regextras": {
    -      "version": "0.8.0",
    -      "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz",
    -      "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==",
    -      "dev": true,
    -      "engines": {
    -        "node": ">=0.1.14"
    -      }
    -    },
         "node_modules/require-directory": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
    @@ -2614,6 +2728,16 @@
             "node": ">=4"
           }
         },
    +    "node_modules/reusify": {
    +      "version": "1.0.4",
    +      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
    +      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
    +      "dev": true,
    +      "engines": {
    +        "iojs": ">=1.0.0",
    +        "node": ">=0.10.0"
    +      }
    +    },
         "node_modules/rimraf": {
           "version": "3.0.2",
           "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
    @@ -2629,6 +2753,29 @@
             "url": "https://github.com/sponsors/isaacs"
           }
         },
    +    "node_modules/run-parallel": {
    +      "version": "1.2.0",
    +      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
    +      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
    +      "dev": true,
    +      "funding": [
    +        {
    +          "type": "github",
    +          "url": "https://github.com/sponsors/feross"
    +        },
    +        {
    +          "type": "patreon",
    +          "url": "https://www.patreon.com/feross"
    +        },
    +        {
    +          "type": "consulting",
    +          "url": "https://feross.org/support"
    +        }
    +      ],
    +      "dependencies": {
    +        "queue-microtask": "^1.2.2"
    +      }
    +    },
         "node_modules/safe-buffer": {
           "version": "5.2.1",
           "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
    @@ -2650,9 +2797,9 @@
           ]
         },
         "node_modules/semver": {
    -      "version": "7.3.7",
    -      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
    -      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
    +      "version": "7.3.8",
    +      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
    +      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
           "dev": true,
           "dependencies": {
             "lru-cache": "^6.0.0"
    @@ -2709,16 +2856,16 @@
           }
         },
         "node_modules/sinon": {
    -      "version": "14.0.0",
    -      "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz",
    -      "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==",
    +      "version": "15.0.1",
    +      "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.1.tgz",
    +      "integrity": "sha512-PZXKc08f/wcA/BMRGBze2Wmw50CWPiAH3E21EOi4B49vJ616vW4DQh4fQrqsYox2aNR/N3kCqLuB0PwwOucQrg==",
           "dev": true,
           "dependencies": {
    -        "@sinonjs/commons": "^1.8.3",
    -        "@sinonjs/fake-timers": "^9.1.2",
    -        "@sinonjs/samsam": "^6.1.1",
    +        "@sinonjs/commons": "^2.0.0",
    +        "@sinonjs/fake-timers": "10.0.2",
    +        "@sinonjs/samsam": "^7.0.1",
             "diff": "^5.0.0",
    -        "nise": "^5.1.1",
    +        "nise": "^5.1.2",
             "supports-color": "^7.2.0"
           },
           "funding": {
    @@ -2755,9 +2902,9 @@
           }
         },
         "node_modules/spdx-license-ids": {
    -      "version": "3.0.11",
    -      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
    -      "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
    +      "version": "3.0.12",
    +      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
    +      "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
           "dev": true
         },
         "node_modules/string-width": {
    @@ -3000,12 +3147,6 @@
             "punycode": "^2.1.0"
           }
         },
    -    "node_modules/v8-compile-cache": {
    -      "version": "2.1.1",
    -      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
    -      "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
    -      "dev": true
    -    },
         "node_modules/which": {
           "version": "2.0.2",
           "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
    @@ -3155,26 +3296,26 @@
       },
       "dependencies": {
         "@es-joy/jsdoccomment": {
    -      "version": "0.20.1",
    -      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz",
    -      "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==",
    +      "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.0",
    +        "comment-parser": "1.3.1",
             "esquery": "^1.4.0",
    -        "jsdoc-type-pratt-parser": "~2.2.3"
    +        "jsdoc-type-pratt-parser": "~3.1.0"
           }
         },
         "@eslint/eslintrc": {
    -      "version": "1.2.3",
    -      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz",
    -      "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==",
    +      "version": "1.4.1",
    +      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
    +      "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
           "dev": true,
           "requires": {
             "ajv": "^6.12.4",
             "debug": "^4.3.2",
    -        "espree": "^9.3.2",
    -        "globals": "^13.9.0",
    +        "espree": "^9.4.0",
    +        "globals": "^13.19.0",
             "ignore": "^5.2.0",
             "import-fresh": "^3.2.1",
             "js-yaml": "^4.1.0",
    @@ -3183,55 +3324,87 @@
           }
         },
         "@humanwhocodes/config-array": {
    -      "version": "0.9.5",
    -      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
    -      "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
    +      "version": "0.11.8",
    +      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
    +      "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
           "dev": true,
           "requires": {
             "@humanwhocodes/object-schema": "^1.2.1",
             "debug": "^4.1.1",
    -        "minimatch": "^3.0.4"
    +        "minimatch": "^3.0.5"
           }
         },
    +    "@humanwhocodes/module-importer": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
    +      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
    +      "dev": true
    +    },
         "@humanwhocodes/object-schema": {
           "version": "1.2.1",
           "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
           "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
           "dev": true
         },
    +    "@nodelib/fs.scandir": {
    +      "version": "2.1.5",
    +      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
    +      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
    +      "dev": true,
    +      "requires": {
    +        "@nodelib/fs.stat": "2.0.5",
    +        "run-parallel": "^1.1.9"
    +      }
    +    },
    +    "@nodelib/fs.stat": {
    +      "version": "2.0.5",
    +      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
    +      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
    +      "dev": true
    +    },
    +    "@nodelib/fs.walk": {
    +      "version": "1.2.8",
    +      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
    +      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
    +      "dev": true,
    +      "requires": {
    +        "@nodelib/fs.scandir": "2.1.5",
    +        "fastq": "^1.6.0"
    +      }
    +    },
         "@sinonjs/commons": {
    -      "version": "1.8.3",
    -      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
    -      "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
    +      "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
           "dev": true,
           "requires": {
             "type-detect": "4.0.8"
           }
         },
         "@sinonjs/fake-timers": {
    -      "version": "9.1.2",
    -      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
    -      "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
    +      "version": "10.0.2",
    +      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
    +      "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
           "dev": true,
           "requires": {
    -        "@sinonjs/commons": "^1.7.0"
    +        "@sinonjs/commons": "^2.0.0"
           }
         },
         "@sinonjs/samsam": {
    -      "version": "6.1.1",
    -      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
    -      "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
    +      "version": "7.0.1",
    +      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz",
    +      "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==",
           "dev": true,
           "requires": {
    -        "@sinonjs/commons": "^1.6.0",
    +        "@sinonjs/commons": "^2.0.0",
             "lodash.get": "^4.4.2",
             "type-detect": "^4.0.8"
           }
         },
         "@sinonjs/text-encoding": {
    -      "version": "0.7.1",
    -      "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
    -      "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
    +      "version": "0.7.2",
    +      "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
    +      "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
           "dev": true
         },
         "@types/json5": {
    @@ -3240,16 +3413,10 @@
           "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
           "dev": true
         },
    -    "@ungap/promise-all-settled": {
    -      "version": "1.1.2",
    -      "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
    -      "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
    -      "dev": true
    -    },
         "acorn": {
    -      "version": "8.7.1",
    -      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
    -      "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
    +      "version": "8.8.1",
    +      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
    +      "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
           "dev": true
         },
         "acorn-jsx": {
    @@ -3365,12 +3532,6 @@
           "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
           "dev": true
         },
    -    "bluebird": {
    -      "version": "3.4.1",
    -      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.1.tgz",
    -      "integrity": "sha1-tzHd9I4t077awudeEhWhG8uR+gc=",
    -      "dev": true
    -    },
         "brace-expansion": {
           "version": "1.1.11",
           "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
    @@ -3395,12 +3556,6 @@
           "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
           "dev": true
         },
    -    "buffer-equal": {
    -      "version": "1.0.0",
    -      "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
    -      "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
    -      "dev": true
    -    },
         "call-bind": {
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
    @@ -3424,14 +3579,14 @@
           "dev": true
         },
         "chai": {
    -      "version": "4.3.6",
    -      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
    -      "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
    +      "version": "4.3.7",
    +      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
    +      "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
           "dev": true,
           "requires": {
             "assertion-error": "^1.1.0",
             "check-error": "^1.0.2",
    -        "deep-eql": "^3.0.1",
    +        "deep-eql": "^4.1.2",
             "get-func-name": "^2.0.0",
             "loupe": "^2.3.1",
             "pathval": "^1.1.1",
    @@ -3507,21 +3662,15 @@
           "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
           "dev": true
         },
    -    "colors": {
    -      "version": "1.0.3",
    -      "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
    -      "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
    -      "dev": true
    -    },
         "commander": {
           "version": "2.20.3",
           "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
           "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
         },
         "comment-parser": {
    -      "version": "1.3.0",
    -      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz",
    -      "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==",
    +      "version": "1.3.1",
    +      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz",
    +      "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==",
           "dev": true
         },
         "commondir": {
    @@ -3561,9 +3710,9 @@
           "dev": true
         },
         "deep-eql": {
    -      "version": "3.0.1",
    -      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
    -      "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
    +      "version": "4.1.3",
    +      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
    +      "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
           "dev": true,
           "requires": {
             "type-detect": "^4.0.0"
    @@ -3592,34 +3741,22 @@
           "dev": true
         },
         "dir-compare": {
    -      "version": "1.8.0",
    -      "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-1.8.0.tgz",
    -      "integrity": "sha512-Ork/J37pKE6M+Fvl98OB+iAuZ5CG7d2d8DIMmiCDEZVAbEWn2lp+ghSbc1lgkgVX91p8jMQs2DeTMJvpMeU9+A==",
    +      "version": "4.0.0",
    +      "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.0.0.tgz",
    +      "integrity": "sha512-wC7thVKL3V656tO61rbEDE4LTeeYrUC2pAUL00AaXYghBhjjVNRyBlpH6POzb44ZuK23OSrqF6TbSC/QYeqfAg==",
           "dev": true,
           "requires": {
    -        "bluebird": "3.4.1",
    -        "buffer-equal": "1.0.0",
    -        "colors": "1.0.3",
    -        "commander": "2.9.0",
    -        "minimatch": "3.0.2"
    +        "minimatch": "^3.0.4",
    +        "p-limit": "^3.1.0 "
           },
           "dependencies": {
    -        "commander": {
    -          "version": "2.9.0",
    -          "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
    -          "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
    -          "dev": true,
    -          "requires": {
    -            "graceful-readlink": ">= 1.0.0"
    -          }
    -        },
    -        "minimatch": {
    -          "version": "3.0.2",
    -          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz",
    -          "integrity": "sha1-DzmKcwDqRB6cNIyD2Yq4ydv5xAo=",
    +        "p-limit": {
    +          "version": "3.1.0",
    +          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
    +          "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
               "dev": true,
               "requires": {
    -            "brace-expansion": "^1.0.0"
    +            "yocto-queue": "^0.1.0"
               }
             }
           }
    @@ -3707,13 +3844,15 @@
           "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
         },
         "eslint": {
    -      "version": "8.15.0",
    -      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz",
    -      "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==",
    +      "version": "8.32.0",
    +      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz",
    +      "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==",
           "dev": true,
           "requires": {
    -        "@eslint/eslintrc": "^1.2.3",
    -        "@humanwhocodes/config-array": "^0.9.2",
    +        "@eslint/eslintrc": "^1.4.1",
    +        "@humanwhocodes/config-array": "^0.11.8",
    +        "@humanwhocodes/module-importer": "^1.0.1",
    +        "@nodelib/fs.walk": "^1.2.8",
             "ajv": "^6.10.0",
             "chalk": "^4.0.0",
             "cross-spawn": "^7.0.2",
    @@ -3723,18 +3862,21 @@
             "eslint-scope": "^7.1.1",
             "eslint-utils": "^3.0.0",
             "eslint-visitor-keys": "^3.3.0",
    -        "espree": "^9.3.2",
    +        "espree": "^9.4.0",
             "esquery": "^1.4.0",
             "esutils": "^2.0.2",
             "fast-deep-equal": "^3.1.3",
             "file-entry-cache": "^6.0.1",
    -        "functional-red-black-tree": "^1.0.1",
    -        "glob-parent": "^6.0.1",
    -        "globals": "^13.6.0",
    +        "find-up": "^5.0.0",
    +        "glob-parent": "^6.0.2",
    +        "globals": "^13.19.0",
    +        "grapheme-splitter": "^1.0.4",
             "ignore": "^5.2.0",
             "import-fresh": "^3.0.0",
             "imurmurhash": "^0.1.4",
             "is-glob": "^4.0.0",
    +        "is-path-inside": "^3.0.3",
    +        "js-sdsl": "^4.1.4",
             "js-yaml": "^4.1.0",
             "json-stable-stringify-without-jsonify": "^1.0.1",
             "levn": "^0.4.1",
    @@ -3745,8 +3887,7 @@
             "regexpp": "^3.2.0",
             "strip-ansi": "^6.0.1",
             "strip-json-comments": "^3.1.0",
    -        "text-table": "^0.2.0",
    -        "v8-compile-cache": "^2.0.3"
    +        "text-table": "^0.2.0"
           },
           "dependencies": {
             "escape-string-regexp": {
    @@ -3755,6 +3896,16 @@
               "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
               "dev": true
             },
    +        "find-up": {
    +          "version": "5.0.0",
    +          "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
    +          "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
    +          "dev": true,
    +          "requires": {
    +            "locate-path": "^6.0.0",
    +            "path-exists": "^4.0.0"
    +          }
    +        },
             "glob-parent": {
               "version": "6.0.2",
               "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
    @@ -3763,6 +3914,39 @@
               "requires": {
                 "is-glob": "^4.0.3"
               }
    +        },
    +        "locate-path": {
    +          "version": "6.0.0",
    +          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
    +          "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
    +          "dev": true,
    +          "requires": {
    +            "p-locate": "^5.0.0"
    +          }
    +        },
    +        "p-limit": {
    +          "version": "3.1.0",
    +          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
    +          "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
    +          "dev": true,
    +          "requires": {
    +            "yocto-queue": "^0.1.0"
    +          }
    +        },
    +        "p-locate": {
    +          "version": "5.0.0",
    +          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
    +          "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
    +          "dev": true,
    +          "requires": {
    +            "p-limit": "^3.0.2"
    +          }
    +        },
    +        "path-exists": {
    +          "version": "4.0.0",
    +          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
    +          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
    +          "dev": true
             }
           }
         },
    @@ -3774,17 +3958,17 @@
           "requires": {}
         },
         "eslint-config-tschaub": {
    -      "version": "14.0.0",
    -      "resolved": "https://registry.npmjs.org/eslint-config-tschaub/-/eslint-config-tschaub-14.0.0.tgz",
    -      "integrity": "sha512-hcUZym/VH7SV5qAxUztGRSBAIpl+AobKikkiL7+KYgHZrHTgp2nnyIg41XjAAo9bmPFK5VV/HVBvaBRqV2FVrQ==",
    +      "version": "14.1.2",
    +      "resolved": "https://registry.npmjs.org/eslint-config-tschaub/-/eslint-config-tschaub-14.1.2.tgz",
    +      "integrity": "sha512-Hk3veCDDOghs46o2HeuAnc79xt1/2oVPpnprW23yi9qgsDbHmHBqwjlxv4pb2l1PfUBNvbh5ur2o+zlCbV3kLA==",
           "dev": true,
           "requires": {
    -        "eslint-config-prettier": "^8.3.0",
    -        "eslint-plugin-import": "^2.25.4",
    -        "eslint-plugin-jsdoc": "^37.8.2",
    -        "eslint-plugin-prettier": "^4.0.0",
    +        "eslint-config-prettier": "^8.5.0",
    +        "eslint-plugin-import": "^2.26.0",
    +        "eslint-plugin-jsdoc": ">=38",
    +        "eslint-plugin-prettier": "^4.2.1",
             "eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
    -        "prettier": "^2.5.1"
    +        "prettier": "^2.7.1"
           }
         },
         "eslint-import-resolver-node": {
    @@ -3877,18 +4061,17 @@
           }
         },
         "eslint-plugin-jsdoc": {
    -      "version": "37.9.7",
    -      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz",
    -      "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==",
    +      "version": "39.6.7",
    +      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.7.tgz",
    +      "integrity": "sha512-0mrzXrHvL2ZLe3QK9X0OEDy7Fs2cFQ/f1d1G5KHEGD+13D1qg56Iovq0uOkYf5bJlHiKPytWVgOOO9y7kLW3VA==",
           "dev": true,
           "requires": {
    -        "@es-joy/jsdoccomment": "~0.20.1",
    -        "comment-parser": "1.3.0",
    -        "debug": "^4.3.3",
    +        "@es-joy/jsdoccomment": "~0.36.1",
    +        "comment-parser": "1.3.1",
    +        "debug": "^4.3.4",
             "escape-string-regexp": "^4.0.0",
             "esquery": "^1.4.0",
    -        "regextras": "^0.8.0",
    -        "semver": "^7.3.5",
    +        "semver": "^7.3.8",
             "spdx-expression-parse": "^3.0.1"
           },
           "dependencies": {
    @@ -3901,9 +4084,9 @@
           }
         },
         "eslint-plugin-prettier": {
    -      "version": "4.0.0",
    -      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz",
    -      "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==",
    +      "version": "4.2.1",
    +      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
    +      "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
           "dev": true,
           "requires": {
             "prettier-linter-helpers": "^1.0.0"
    @@ -3950,12 +4133,12 @@
           "dev": true
         },
         "espree": {
    -      "version": "9.3.2",
    -      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
    -      "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
    +      "version": "9.4.1",
    +      "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
    +      "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
           "dev": true,
           "requires": {
    -        "acorn": "^8.7.1",
    +        "acorn": "^8.8.0",
             "acorn-jsx": "^5.3.2",
             "eslint-visitor-keys": "^3.3.0"
           }
    @@ -4014,6 +4197,15 @@
           "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
           "dev": true
         },
    +    "fastq": {
    +      "version": "1.15.0",
    +      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
    +      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
    +      "dev": true,
    +      "requires": {
    +        "reusify": "^1.0.4"
    +      }
    +    },
         "file-entry-cache": {
           "version": "6.0.1",
           "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
    @@ -4181,12 +4373,6 @@
             "functions-have-names": "^1.2.2"
           }
         },
    -    "functional-red-black-tree": {
    -      "version": "1.0.1",
    -      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
    -      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
    -      "dev": true
    -    },
         "functions-have-names": {
           "version": "1.2.3",
           "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
    @@ -4249,9 +4435,9 @@
           }
         },
         "globals": {
    -      "version": "13.9.0",
    -      "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
    -      "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==",
    +      "version": "13.19.0",
    +      "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
    +      "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
           "dev": true,
           "requires": {
             "type-fest": "^0.20.2"
    @@ -4274,10 +4460,10 @@
           "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
           "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
         },
    -    "graceful-readlink": {
    -      "version": "1.0.1",
    -      "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
    -      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
    +    "grapheme-splitter": {
    +      "version": "1.0.4",
    +      "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
    +      "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
           "dev": true
         },
         "has": {
    @@ -4332,9 +4518,9 @@
           "dev": true
         },
         "ignore": {
    -      "version": "5.2.0",
    -      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
    -      "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
    +      "version": "5.2.4",
    +      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
    +      "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
           "dev": true
         },
         "import-fresh": {
    @@ -4466,6 +4652,12 @@
             "has-tostringtag": "^1.0.0"
           }
         },
    +    "is-path-inside": {
    +      "version": "3.0.3",
    +      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
    +      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
    +      "dev": true
    +    },
         "is-regex": {
           "version": "1.1.4",
           "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
    @@ -4521,7 +4713,7 @@
         "isarray": {
           "version": "0.0.1",
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
    -      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
    +      "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
           "dev": true
         },
         "isexe": {
    @@ -4530,6 +4722,12 @@
           "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
           "dev": true
         },
    +    "js-sdsl": {
    +      "version": "4.3.0",
    +      "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
    +      "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
    +      "dev": true
    +    },
         "js-yaml": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
    @@ -4540,9 +4738,9 @@
           }
         },
         "jsdoc-type-pratt-parser": {
    -      "version": "2.2.5",
    -      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz",
    -      "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==",
    +      "version": "3.1.0",
    +      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz",
    +      "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==",
           "dev": true
         },
         "json-schema-traverse": {
    @@ -4558,9 +4756,9 @@
           "dev": true
         },
         "json5": {
    -      "version": "1.0.1",
    -      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
    -      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
    +      "version": "1.0.2",
    +      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
    +      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
           "dev": true,
           "requires": {
             "minimist": "^1.2.0"
    @@ -4608,7 +4806,7 @@
         "lodash.get": {
           "version": "4.4.2",
           "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
    -      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
    +      "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
           "dev": true
         },
         "lodash.merge": {
    @@ -4675,12 +4873,11 @@
           "dev": true
         },
         "mocha": {
    -      "version": "10.0.0",
    -      "resolved": "
    ... [truncated]
    
  • test/helper.js+2 2 modified
    @@ -36,7 +36,7 @@ function mkdtemp() {
     /**
      * Creates a git repo with the contents of a fixture.
      * @param {string} fixtureName Name of fixture.
    - * @param {Object} options Repo options.
    + * @param {object} options Repo options.
      * @return {Promise<string>} A promise for the path to the repo.
      */
     function setupRepo(fixtureName, options) {
    @@ -60,7 +60,7 @@ function setupRepo(fixtureName, options) {
     /**
      * Creates a git repo with the contents of a fixture and pushes to a remote.
      * @param {string} fixtureName Name of the fixture.
    - * @param {Object} options Repo options.
    + * @param {object} options Repo options.
      * @return {Promise} A promise.
      */
     function setupRemote(fixtureName, options) {
    

Vulnerability mechanics

Root cause

"Prototype pollution vulnerability via the `partial` variable in `util.js` allows an attacker to inject properties into the global `Object.prototype`."

Attack vector

An attacker can exploit this prototype pollution vulnerability by crafting a malicious payload that is processed by the `partial` variable in `util.js`. The advisory indicates the vulnerability exists in tschaub/gh-pages version 3.1.0. The exact attack vector is not detailed in the supplied bundle, but prototype pollution typically occurs when user-controlled input is merged or assigned into an object without proper key validation, allowing the attacker to set properties like `__proto__` or `constructor.prototype`. This can lead to property injection across the application, potentially enabling denial of service, property tampering, or in some contexts, arbitrary code execution depending on how polluted properties are consumed downstream.

Affected code

The vulnerability is reported in the `partial` variable within `util.js` of the tschaub/gh-pages package version 3.1.0. The supplied patch [patch_id=1641389] does not include the source code of `util.js`, so the exact vulnerable code path cannot be confirmed from this bundle.

What the fix does

The patch [patch_id=1641389] is a merge commit titled "Assorted updates" that primarily updates devDependencies in `package-lock.json`. The diff does not show changes to `util.js` or any source file that would directly fix the prototype pollution in the `partial` variable. The advisory states the vulnerability is in version 3.1.0 via the `partial` variable in `util.js`, but the supplied patch bundle does not contain the actual source code fix. Without the source-level diff, the precise mechanism of the fix cannot be determined from this bundle alone.

Preconditions

  • inputThe attacker must be able to supply input that reaches the `partial` variable in `util.js`.
  • networkThe attacker typically needs network access to deliver the malicious payload to an application using the vulnerable gh-pages library.

Generated on May 23, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

6

News mentions

0

No linked articles in our index yet.