VYPR
Critical severityOSV Advisory· Published Jul 30, 2020· Updated Sep 17, 2024

Prototype Pollution

CVE-2020-7699

Description

Prototype pollution in express-fileupload before 1.1.8, when parseNested is enabled, allows denial of service or arbitrary code execution.

AI Insight

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

Prototype pollution in express-fileupload before 1.1.8, when parseNested is enabled, allows denial of service or arbitrary code execution.

Vulnerability

Overview

CVE-2020-7699 affects the express-fileupload package for Node.js. The vulnerability is a prototype pollution issue that occurs when the parseNested option is enabled. When processing a crafted HTTP request, the processNested function can be tricked into polluting Object.prototype with attacker-controlled properties [1][3][4]. This is a classic unsafe recursive merge that allows injection into the JavaScript prototype chain [4].

Attack

Vector

An attacker can send a specially crafted HTTP request to an Express server using a vulnerable version of express-fileupload with the parseNested option turned on. The malicious request contains parameters designed to exploit the processNested function, likely through nested JSON-like parameter names that include __proto__ or constructor.prototype paths [1][4]. No authentication is required beyond network access to the application endpoint that processes file uploads.

Impact

Successful exploitation of this prototype pollution can lead to denial of service by causing JavaScript exceptions, or potentially arbitrary code execution if the attacker can control properties used later in the application [1][4]. Since polluting Object.prototype affects all objects in the Node.js process, the impact can cascade widely across the application.

Mitigation

The issue is patched in version 1.1.8 of express-fileupload [1][3]. Users should upgrade immediately. Disabling the parseNested option can serve as a temporary workaround, though upgrading is the recommended fix. This CVE is also listed in Snyk's vulnerability database [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
express-fileuploadnpm
< 1.1.91.1.9

Affected products

2

Patches

1
db495357d755

Merge pull request #237 from richardgirges/fix-236-proto-pollution

https://github.com/richardgirges/express-fileuploadRichard GirgesJul 29, 2020via ghsa
4 files changed · +518 503
  • lib/processNested.js+10 2 modified
    @@ -1,3 +1,5 @@
    +const INVALID_KEYS = ['__proto__'];
    +
     module.exports = function(data){
       if (!data || data.length < 1) return {};
       
    @@ -11,10 +13,16 @@ module.exports = function(data){
           keyParts = key
             .replace(new RegExp(/\[/g), '.')
             .replace(new RegExp(/\]/g), '')
    -        .split('.');
    -  
    +        .split('.');  
    +
         for (let index = 0; index < keyParts.length; index++){
           let k = keyParts[index];
    +
    +      // Ensure we don't allow prototype pollution
    +      if (INVALID_KEYS.includes(k)) {
    +        continue;
    +      }
    +
           if (index >= keyParts.length - 1){
             current[k] = value;
           } else {
    
  • package.json+2 2 modified
    @@ -30,11 +30,11 @@
       "devDependencies": {
         "body-parser": "^1.19.0",
         "coveralls": "^3.0.14",
    -    "eslint": "^6.8.0",
    +    "eslint": "^7.5.0",
         "express": "^4.17.1",
         "istanbul": "^0.4.5",
         "md5": "^2.2.1",
    -    "mocha": "^7.2.0",
    +    "mocha": "^8.0.1",
         "rimraf": "^3.0.2",
         "supertest": "^4.0.2"
       }
    
  • package-lock.json+497 499 modified
    @@ -5,25 +5,50 @@
       "requires": true,
       "dependencies": {
         "@babel/code-frame": {
    -      "version": "7.8.3",
    -      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
    -      "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
    +      "version": "7.10.4",
    +      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
    +      "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
           "dev": true,
           "requires": {
    -        "@babel/highlight": "^7.8.3"
    +        "@babel/highlight": "^7.10.4"
           }
         },
    +    "@babel/helper-validator-identifier": {
    +      "version": "7.10.4",
    +      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
    +      "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
    +      "dev": true
    +    },
         "@babel/highlight": {
    -      "version": "7.8.3",
    -      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
    -      "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
    +      "version": "7.10.4",
    +      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
    +      "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
           "dev": true,
           "requires": {
    +        "@babel/helper-validator-identifier": "^7.10.4",
             "chalk": "^2.0.0",
    -        "esutils": "^2.0.2",
             "js-tokens": "^4.0.0"
    +      },
    +      "dependencies": {
    +        "chalk": {
    +          "version": "2.4.2",
    +          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
    +          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
    +          "dev": true,
    +          "requires": {
    +            "ansi-styles": "^3.2.1",
    +            "escape-string-regexp": "^1.0.5",
    +            "supports-color": "^5.3.0"
    +          }
    +        }
           }
         },
    +    "@types/color-name": {
    +      "version": "1.1.1",
    +      "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
    +      "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
    +      "dev": true
    +    },
         "abbrev": {
           "version": "1.0.9",
           "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
    @@ -58,15 +83,15 @@
           }
         },
         "acorn": {
    -      "version": "7.1.1",
    -      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
    -      "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==",
    +      "version": "7.3.1",
    +      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
    +      "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
           "dev": true
         },
         "acorn-jsx": {
    -      "version": "5.1.0",
    -      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
    -      "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
    +      "version": "5.2.0",
    +      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
    +      "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
           "dev": true
         },
         "ajv": {
    @@ -89,20 +114,11 @@
           "optional": true
         },
         "ansi-colors": {
    -      "version": "3.2.3",
    -      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
    -      "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
    +      "version": "4.1.1",
    +      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
    +      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
           "dev": true
         },
    -    "ansi-escapes": {
    -      "version": "4.3.0",
    -      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz",
    -      "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==",
    -      "dev": true,
    -      "requires": {
    -        "type-fest": "^0.8.1"
    -      }
    -    },
         "ansi-regex": {
           "version": "5.0.0",
           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    @@ -143,6 +159,18 @@
           "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
           "dev": true
         },
    +    "array.prototype.map": {
    +      "version": "1.0.2",
    +      "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz",
    +      "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==",
    +      "dev": true,
    +      "requires": {
    +        "define-properties": "^1.1.3",
    +        "es-abstract": "^1.17.0-next.1",
    +        "es-array-method-boxes-properly": "^1.0.0",
    +        "is-string": "^1.0.4"
    +      }
    +    },
         "asn1": {
           "version": "0.2.4",
           "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
    @@ -337,59 +365,79 @@
           "dev": true
         },
         "chalk": {
    -      "version": "2.4.2",
    -      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
    -      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
    +      "version": "4.1.0",
    +      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
    +      "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
           "dev": true,
           "requires": {
    -        "ansi-styles": "^3.2.1",
    -        "escape-string-regexp": "^1.0.5",
    -        "supports-color": "^5.3.0"
    +        "ansi-styles": "^4.1.0",
    +        "supports-color": "^7.1.0"
    +      },
    +      "dependencies": {
    +        "ansi-styles": {
    +          "version": "4.2.1",
    +          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
    +          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
    +          "dev": true,
    +          "requires": {
    +            "@types/color-name": "^1.1.1",
    +            "color-convert": "^2.0.1"
    +          }
    +        },
    +        "color-convert": {
    +          "version": "2.0.1",
    +          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
    +          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
    +          "dev": true,
    +          "requires": {
    +            "color-name": "~1.1.4"
    +          }
    +        },
    +        "color-name": {
    +          "version": "1.1.4",
    +          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
    +          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
    +          "dev": true
    +        },
    +        "has-flag": {
    +          "version": "4.0.0",
    +          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    +          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    +          "dev": true
    +        },
    +        "supports-color": {
    +          "version": "7.1.0",
    +          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
    +          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
    +          "dev": true,
    +          "requires": {
    +            "has-flag": "^4.0.0"
    +          }
    +        }
           }
         },
    -    "chardet": {
    -      "version": "0.7.0",
    -      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
    -      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
    -      "dev": true
    -    },
         "charenc": {
           "version": "0.0.2",
           "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
           "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
           "dev": true
         },
         "chokidar": {
    -      "version": "3.3.0",
    -      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
    -      "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
    +      "version": "3.3.1",
    +      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
    +      "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
           "dev": true,
           "requires": {
             "anymatch": "~3.1.1",
             "braces": "~3.0.2",
    -        "fsevents": "~2.1.1",
    +        "fsevents": "~2.1.2",
             "glob-parent": "~5.1.0",
             "is-binary-path": "~2.1.0",
             "is-glob": "~4.0.1",
             "normalize-path": "~3.0.0",
    -        "readdirp": "~3.2.0"
    +        "readdirp": "~3.3.0"
           }
         },
    -    "cli-cursor": {
    -      "version": "3.1.0",
    -      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
    -      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
    -      "dev": true,
    -      "requires": {
    -        "restore-cursor": "^3.1.0"
    -      }
    -    },
    -    "cli-width": {
    -      "version": "2.2.0",
    -      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
    -      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
    -      "dev": true
    -    },
         "cliui": {
           "version": "5.0.0",
           "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
    @@ -401,27 +449,19 @@
             "wrap-ansi": "^5.1.0"
           },
           "dependencies": {
    -        "emoji-regex": {
    -          "version": "7.0.3",
    -          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
    -          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
    -          "dev": true
    -        },
    -        "is-fullwidth-code-point": {
    -          "version": "2.0.0",
    -          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
    -          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
    +        "ansi-regex": {
    +          "version": "4.1.0",
    +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
    +          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
               "dev": true
             },
    -        "string-width": {
    -          "version": "3.1.0",
    -          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
    -          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
    +        "strip-ansi": {
    +          "version": "5.2.0",
    +          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
    +          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
               "dev": true,
               "requires": {
    -            "emoji-regex": "^7.0.1",
    -            "is-fullwidth-code-point": "^2.0.0",
    -            "strip-ansi": "^5.1.0"
    +            "ansi-regex": "^4.1.0"
               }
             }
           }
    @@ -534,23 +574,24 @@
           }
         },
         "cross-spawn": {
    -      "version": "6.0.5",
    -      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
    -      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
    +      "version": "7.0.3",
    +      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
    +      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
           "dev": true,
           "requires": {
    -        "nice-try": "^1.0.4",
    -        "path-key": "^2.0.1",
    -        "semver": "^5.5.0",
    -        "shebang-command": "^1.2.0",
    -        "which": "^1.2.9"
    +        "path-key": "^3.1.0",
    +        "shebang-command": "^2.0.0",
    +        "which": "^2.0.1"
           },
           "dependencies": {
    -        "semver": {
    -          "version": "5.7.1",
    -          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
    -          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
    -          "dev": true
    +        "which": {
    +          "version": "2.0.2",
    +          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
    +          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
    +          "dev": true,
    +          "requires": {
    +            "isexe": "^2.0.0"
    +          }
             }
           }
         },
    @@ -626,9 +667,9 @@
           }
         },
         "diff": {
    -      "version": "3.5.0",
    -      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
    -      "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
    +      "version": "4.0.2",
    +      "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
    +      "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
           "dev": true
         },
         "doctrine": {
    @@ -657,9 +698,9 @@
           "dev": true
         },
         "emoji-regex": {
    -      "version": "8.0.0",
    -      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
    -      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
    +      "version": "7.0.3",
    +      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
    +      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
           "dev": true
         },
         "encodeurl": {
    @@ -668,6 +709,15 @@
           "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
           "dev": true
         },
    +    "enquirer": {
    +      "version": "2.3.6",
    +      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
    +      "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
    +      "dev": true,
    +      "requires": {
    +        "ansi-colors": "^4.1.1"
    +      }
    +    },
         "es-abstract": {
           "version": "1.17.6",
           "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
    @@ -687,6 +737,35 @@
             "string.prototype.trimstart": "^1.0.1"
           }
         },
    +    "es-array-method-boxes-properly": {
    +      "version": "1.0.0",
    +      "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
    +      "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
    +      "dev": true
    +    },
    +    "es-get-iterator": {
    +      "version": "1.1.0",
    +      "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz",
    +      "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==",
    +      "dev": true,
    +      "requires": {
    +        "es-abstract": "^1.17.4",
    +        "has-symbols": "^1.0.1",
    +        "is-arguments": "^1.0.4",
    +        "is-map": "^2.0.1",
    +        "is-set": "^2.0.1",
    +        "is-string": "^1.0.5",
    +        "isarray": "^2.0.5"
    +      },
    +      "dependencies": {
    +        "isarray": {
    +          "version": "2.0.5",
    +          "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
    +          "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
    +          "dev": true
    +        }
    +      }
    +    },
         "es-to-primitive": {
           "version": "1.2.1",
           "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
    @@ -738,22 +817,23 @@
           }
         },
         "eslint": {
    -      "version": "6.8.0",
    -      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
    -      "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
    +      "version": "7.5.0",
    +      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.5.0.tgz",
    +      "integrity": "sha512-vlUP10xse9sWt9SGRtcr1LAC67BENcQMFeV+w5EvLEoFe3xJ8cF1Skd0msziRx/VMC+72B4DxreCE+OR12OA6Q==",
           "dev": true,
           "requires": {
             "@babel/code-frame": "^7.0.0",
             "ajv": "^6.10.0",
    -        "chalk": "^2.1.0",
    -        "cross-spawn": "^6.0.5",
    +        "chalk": "^4.0.0",
    +        "cross-spawn": "^7.0.2",
             "debug": "^4.0.1",
             "doctrine": "^3.0.0",
    -        "eslint-scope": "^5.0.0",
    -        "eslint-utils": "^1.4.3",
    -        "eslint-visitor-keys": "^1.1.0",
    -        "espree": "^6.1.2",
    -        "esquery": "^1.0.1",
    +        "enquirer": "^2.3.5",
    +        "eslint-scope": "^5.1.0",
    +        "eslint-utils": "^2.1.0",
    +        "eslint-visitor-keys": "^1.3.0",
    +        "espree": "^7.2.0",
    +        "esquery": "^1.2.0",
             "esutils": "^2.0.2",
             "file-entry-cache": "^5.0.1",
             "functional-red-black-tree": "^1.0.1",
    @@ -762,21 +842,19 @@
             "ignore": "^4.0.6",
             "import-fresh": "^3.0.0",
             "imurmurhash": "^0.1.4",
    -        "inquirer": "^7.0.0",
             "is-glob": "^4.0.0",
             "js-yaml": "^3.13.1",
             "json-stable-stringify-without-jsonify": "^1.0.1",
    -        "levn": "^0.3.0",
    -        "lodash": "^4.17.14",
    +        "levn": "^0.4.1",
    +        "lodash": "^4.17.19",
             "minimatch": "^3.0.4",
    -        "mkdirp": "^0.5.1",
             "natural-compare": "^1.4.0",
    -        "optionator": "^0.8.3",
    +        "optionator": "^0.9.1",
             "progress": "^2.0.0",
    -        "regexpp": "^2.0.1",
    -        "semver": "^6.1.2",
    -        "strip-ansi": "^5.2.0",
    -        "strip-json-comments": "^3.0.1",
    +        "regexpp": "^3.1.0",
    +        "semver": "^7.2.1",
    +        "strip-ansi": "^6.0.0",
    +        "strip-json-comments": "^3.1.0",
             "table": "^5.2.3",
             "text-table": "^0.2.0",
             "v8-compile-cache": "^2.0.3"
    @@ -792,20 +870,24 @@
               }
             },
             "js-yaml": {
    -          "version": "3.13.1",
    -          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
    -          "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
    +          "version": "3.14.0",
    +          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
    +          "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
               "dev": true,
               "requires": {
                 "argparse": "^1.0.7",
                 "esprima": "^4.0.0"
               }
             },
    -        "lodash": {
    -          "version": "4.17.19",
    -          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
    -          "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
    -          "dev": true
    +        "levn": {
    +          "version": "0.4.1",
    +          "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
    +          "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
    +          "dev": true,
    +          "requires": {
    +            "prelude-ls": "^1.2.1",
    +            "type-check": "~0.4.0"
    +          }
             },
             "ms": {
               "version": "2.1.2",
    @@ -814,55 +896,70 @@
               "dev": true
             },
             "optionator": {
    -          "version": "0.8.3",
    -          "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
    -          "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
    +          "version": "0.9.1",
    +          "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
    +          "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
               "dev": true,
               "requires": {
    -            "deep-is": "~0.1.3",
    -            "fast-levenshtein": "~2.0.6",
    -            "levn": "~0.3.0",
    -            "prelude-ls": "~1.1.2",
    -            "type-check": "~0.3.2",
    -            "word-wrap": "~1.2.3"
    +            "deep-is": "^0.1.3",
    +            "fast-levenshtein": "^2.0.6",
    +            "levn": "^0.4.1",
    +            "prelude-ls": "^1.2.1",
    +            "type-check": "^0.4.0",
    +            "word-wrap": "^1.2.3"
    +          }
    +        },
    +        "prelude-ls": {
    +          "version": "1.2.1",
    +          "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
    +          "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
    +          "dev": true
    +        },
    +        "type-check": {
    +          "version": "0.4.0",
    +          "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
    +          "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
    +          "dev": true,
    +          "requires": {
    +            "prelude-ls": "^1.2.1"
               }
             }
           }
         },
         "eslint-scope": {
    -      "version": "5.0.0",
    -      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
    -      "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
    +      "version": "5.1.0",
    +      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz",
    +      "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==",
           "dev": true,
           "requires": {
             "esrecurse": "^4.1.0",
             "estraverse": "^4.1.1"
           }
         },
         "eslint-utils": {
    -      "version": "1.4.3",
    -      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
    -      "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
    +      "version": "2.1.0",
    +      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
    +      "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
           "dev": true,
           "requires": {
             "eslint-visitor-keys": "^1.1.0"
           }
         },
         "eslint-visitor-keys": {
    -      "version": "1.1.0",
    -      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
    -      "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
    +      "version": "1.3.0",
    +      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
    +      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
           "dev": true
         },
         "espree": {
    -      "version": "6.1.2",
    -      "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz",
    -      "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==",
    +      "version": "7.2.0",
    +      "resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz",
    +      "integrity": "sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==",
           "dev": true,
           "requires": {
    -        "acorn": "^7.1.0",
    -        "acorn-jsx": "^5.1.0",
    -        "eslint-visitor-keys": "^1.1.0"
    +        "acorn": "^7.3.1",
    +        "acorn-jsx": "^5.2.0",
    +        "eslint-visitor-keys": "^1.3.0"
           }
         },
         "esprima": {
    @@ -872,12 +969,20 @@
           "dev": true
         },
         "esquery": {
    -      "version": "1.1.0",
    -      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz",
    -      "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==",
    +      "version": "1.3.1",
    +      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
    +      "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
           "dev": true,
           "requires": {
    -        "estraverse": "^4.0.0"
    +        "estraverse": "^5.1.0"
    +      },
    +      "dependencies": {
    +        "estraverse": {
    +          "version": "5.1.0",
    +          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz",
    +          "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==",
    +          "dev": true
    +        }
           }
         },
         "esrecurse": {
    @@ -959,17 +1064,6 @@
           "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
           "dev": true
         },
    -    "external-editor": {
    -      "version": "3.1.0",
    -      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
    -      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
    -      "dev": true,
    -      "requires": {
    -        "chardet": "^0.7.0",
    -        "iconv-lite": "^0.4.24",
    -        "tmp": "^0.0.33"
    -      }
    -    },
         "extsprintf": {
           "version": "1.3.0",
           "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
    @@ -994,15 +1088,6 @@
           "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
           "dev": true
         },
    -    "figures": {
    -      "version": "3.1.0",
    -      "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz",
    -      "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==",
    -      "dev": true,
    -      "requires": {
    -        "escape-string-regexp": "^1.0.5"
    -      }
    -    },
         "file-entry-cache": {
           "version": "5.0.1",
           "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
    @@ -1037,12 +1122,13 @@
           }
         },
         "find-up": {
    -      "version": "3.0.0",
    -      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
    -      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
    +      "version": "4.1.0",
    +      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
    +      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
           "dev": true,
           "requires": {
    -        "locate-path": "^3.0.0"
    +        "locate-path": "^5.0.0",
    +        "path-exists": "^4.0.0"
           }
         },
         "flat": {
    @@ -1085,9 +1171,9 @@
           }
         },
         "flatted": {
    -      "version": "2.0.1",
    -      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
    -      "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
    +      "version": "2.0.2",
    +      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
    +      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
           "dev": true
         },
         "forever-agent": {
    @@ -1191,18 +1277,18 @@
           }
         },
         "glob-parent": {
    -      "version": "5.1.0",
    -      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
    -      "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
    +      "version": "5.1.1",
    +      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
    +      "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
           "dev": true,
           "requires": {
             "is-glob": "^4.0.1"
           }
         },
         "globals": {
    -      "version": "12.3.0",
    -      "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz",
    -      "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==",
    +      "version": "12.4.0",
    +      "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
    +      "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
           "dev": true,
           "requires": {
             "type-fest": "^0.8.1"
    @@ -1365,41 +1451,18 @@
           "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
           "dev": true
         },
    -    "inquirer": {
    -      "version": "7.0.4",
    -      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz",
    -      "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==",
    -      "dev": true,
    -      "requires": {
    -        "ansi-escapes": "^4.2.1",
    -        "chalk": "^2.4.2",
    -        "cli-cursor": "^3.1.0",
    -        "cli-width": "^2.0.0",
    -        "external-editor": "^3.0.3",
    -        "figures": "^3.0.0",
    -        "lodash": "^4.17.15",
    -        "mute-stream": "0.0.8",
    -        "run-async": "^2.2.0",
    -        "rxjs": "^6.5.3",
    -        "string-width": "^4.1.0",
    -        "strip-ansi": "^5.1.0",
    -        "through": "^2.3.6"
    -      },
    -      "dependencies": {
    -        "lodash": {
    -          "version": "4.17.19",
    -          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
    -          "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
    -          "dev": true
    -        }
    -      }
    -    },
         "ipaddr.js": {
           "version": "1.9.0",
           "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
           "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
           "dev": true
         },
    +    "is-arguments": {
    +      "version": "1.0.4",
    +      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
    +      "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
    +      "dev": true
    +    },
         "is-binary-path": {
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
    @@ -1434,9 +1497,9 @@
           "dev": true
         },
         "is-fullwidth-code-point": {
    -      "version": "3.0.0",
    -      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
    -      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
    +      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
           "dev": true
         },
         "is-glob": {
    @@ -1448,18 +1511,18 @@
             "is-extglob": "^2.1.1"
           }
         },
    +    "is-map": {
    +      "version": "2.0.1",
    +      "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz",
    +      "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==",
    +      "dev": true
    +    },
         "is-number": {
           "version": "7.0.0",
           "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
           "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
           "dev": true
         },
    -    "is-promise": {
    -      "version": "2.1.0",
    -      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
    -      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
    -      "dev": true
    -    },
         "is-regex": {
           "version": "1.1.0",
           "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
    @@ -1469,6 +1532,18 @@
             "has-symbols": "^1.0.1"
           }
         },
    +    "is-set": {
    +      "version": "2.0.1",
    +      "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz",
    +      "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==",
    +      "dev": true
    +    },
    +    "is-string": {
    +      "version": "1.0.5",
    +      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
    +      "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
    +      "dev": true
    +    },
         "is-symbol": {
           "version": "1.0.3",
           "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
    @@ -1560,6 +1635,22 @@
             }
           }
         },
    +    "iterate-iterator": {
    +      "version": "1.0.1",
    +      "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz",
    +      "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==",
    +      "dev": true
    +    },
    +    "iterate-value": {
    +      "version": "1.0.2",
    +      "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz",
    +      "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
    +      "dev": true,
    +      "requires": {
    +        "es-get-iterator": "^1.0.2",
    +        "iterate-iterator": "^1.0.1"
    +      }
    +    },
         "js-tokens": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
    @@ -1635,13 +1726,12 @@
           }
         },
         "locate-path": {
    -      "version": "3.0.0",
    -      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
    -      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
    +      "version": "5.0.0",
    +      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
    +      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
           "dev": true,
           "requires": {
    -        "p-locate": "^3.0.0",
    -        "path-exists": "^3.0.0"
    +        "p-locate": "^4.1.0"
           }
         },
         "lodash": {
    @@ -1663,6 +1753,19 @@
           "dev": true,
           "requires": {
             "chalk": "^2.4.2"
    +      },
    +      "dependencies": {
    +        "chalk": {
    +          "version": "2.4.2",
    +          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
    +          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
    +          "dev": true,
    +          "requires": {
    +            "ansi-styles": "^3.2.1",
    +            "escape-string-regexp": "^1.0.5",
    +            "supports-color": "^5.3.0"
    +          }
    +        }
           }
         },
         "md5": {
    @@ -1715,12 +1818,6 @@
             "mime-db": "~1.36.0"
           }
         },
    -    "mimic-fn": {
    -      "version": "2.1.0",
    -      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
    -      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
    -      "dev": true
    -    },
         "minimatch": {
           "version": "3.0.4",
           "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    @@ -1746,32 +1843,33 @@
           }
         },
         "mocha": {
    -      "version": "7.2.0",
    -      "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz",
    -      "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==",
    +      "version": "8.0.1",
    +      "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.0.1.tgz",
    +      "integrity": "sha512-vefaXfdYI8+Yo8nPZQQi0QO2o+5q9UIMX1jZ1XMmK3+4+CQjc7+B0hPdUeglXiTlr8IHMVRo63IhO9Mzt6fxOg==",
           "dev": true,
           "requires": {
    -        "ansi-colors": "3.2.3",
    +        "ansi-colors": "4.1.1",
             "browser-stdout": "1.3.1",
    -        "chokidar": "3.3.0",
    +        "chokidar": "3.3.1",
             "debug": "3.2.6",
    -        "diff": "3.5.0",
    +        "diff": "4.0.2",
             "escape-string-regexp": "1.0.5",
    -        "find-up": "3.0.0",
    -        "glob": "7.1.3",
    +        "find-up": "4.1.0",
    +        "glob": "7.1.6",
             "growl": "1.10.5",
             "he": "1.2.0",
             "js-yaml": "3.13.1",
             "log-symbols": "3.0.0",
             "minimatch": "3.0.4",
    -        "mkdirp": "0.5.5",
    -        "ms": "2.1.1",
    -        "node-environment-flags": "1.0.6",
    +        "ms": "2.1.2",
             "object.assign": "4.1.0",
    -        "strip-json-comments": "2.0.1",
    -        "supports-color": "6.0.0",
    -        "which": "1.3.1",
    +        "promise.allsettled": "1.0.2",
    +        "serialize-javascript": "3.0.0",
    +        "strip-json-comments": "3.0.1",
    +        "supports-color": "7.1.0",
    +        "which": "2.0.2",
             "wide-align": "1.1.3",
    +        "workerpool": "6.0.0",
             "yargs": "13.3.2",
             "yargs-parser": "13.1.2",
             "yargs-unparser": "1.6.0"
    @@ -1786,6 +1884,26 @@
                 "ms": "^2.1.1"
               }
             },
    +        "glob": {
    +          "version": "7.1.6",
    +          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
    +          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
    +          "dev": true,
    +          "requires": {
    +            "fs.realpath": "^1.0.0",
    +            "inflight": "^1.0.4",
    +            "inherits": "2",
    +            "minimatch": "^3.0.4",
    +            "once": "^1.3.0",
    +            "path-is-absolute": "^1.0.0"
    +          }
    +        },
    +        "has-flag": {
    +          "version": "4.0.0",
    +          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    +          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    +          "dev": true
    +        },
             "js-yaml": {
               "version": "3.13.1",
               "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
    @@ -1797,24 +1915,33 @@
               }
             },
             "ms": {
    -          "version": "2.1.1",
    -          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
    -          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
    +          "version": "2.1.2",
    +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
    +          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
               "dev": true
             },
             "strip-json-comments": {
    -          "version": "2.0.1",
    -          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
    -          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
    +          "version": "3.0.1",
    +          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
    +          "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
               "dev": true
             },
             "supports-color": {
    -          "version": "6.0.0",
    -          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
    -          "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
    +          "version": "7.1.0",
    +          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
    +          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
               "dev": true,
               "requires": {
    -            "has-flag": "^3.0.0"
    +            "has-flag": "^4.0.0"
    +          }
    +        },
    +        "which": {
    +          "version": "2.0.2",
    +          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
    +          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
    +          "dev": true,
    +          "requires": {
    +            "isexe": "^2.0.0"
               }
             }
           }
    @@ -1825,12 +1952,6 @@
           "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
           "dev": true
         },
    -    "mute-stream": {
    -      "version": "0.0.8",
    -      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
    -      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
    -      "dev": true
    -    },
         "natural-compare": {
           "version": "1.4.0",
           "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
    @@ -1843,30 +1964,6 @@
           "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
           "dev": true
         },
    -    "nice-try": {
    -      "version": "1.0.5",
    -      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
    -      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
    -      "dev": true
    -    },
    -    "node-environment-flags": {
    -      "version": "1.0.6",
    -      "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
    -      "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
    -      "dev": true,
    -      "requires": {
    -        "object.getownpropertydescriptors": "^2.0.3",
    -        "semver": "^5.7.0"
    -      },
    -      "dependencies": {
    -        "semver": {
    -          "version": "5.7.1",
    -          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
    -          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
    -          "dev": true
    -        }
    -      }
    -    },
         "nopt": {
           "version": "3.0.6",
           "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
    @@ -1912,16 +2009,6 @@
             "object-keys": "^1.0.11"
           }
         },
    -    "object.getownpropertydescriptors": {
    -      "version": "2.1.0",
    -      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
    -      "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
    -      "dev": true,
    -      "requires": {
    -        "define-properties": "^1.1.3",
    -        "es-abstract": "^1.17.0-next.1"
    -      }
    -    },
         "on-finished": {
           "version": "2.3.0",
           "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
    @@ -1940,15 +2027,6 @@
             "wrappy": "1"
           }
         },
    -    "onetime": {
    -      "version": "5.1.0",
    -      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
    -      "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
    -      "dev": true,
    -      "requires": {
    -        "mimic-fn": "^2.1.0"
    -      }
    -    },
         "optimist": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
    @@ -1987,12 +2065,6 @@
             "wordwrap": "~1.0.0"
           }
         },
    -    "os-tmpdir": {
    -      "version": "1.0.2",
    -      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
    -      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
    -      "dev": true
    -    },
         "p-limit": {
           "version": "2.3.0",
           "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
    @@ -2003,12 +2075,12 @@
           }
         },
         "p-locate": {
    -      "version": "3.0.0",
    -      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
    -      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
    +      "version": "4.1.0",
    +      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
    +      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
           "dev": true,
           "requires": {
    -        "p-limit": "^2.0.0"
    +        "p-limit": "^2.2.0"
           }
         },
         "p-try": {
    @@ -2033,9 +2105,9 @@
           "dev": true
         },
         "path-exists": {
    -      "version": "3.0.0",
    -      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
    -      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
    +      "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
         },
         "path-is-absolute": {
    @@ -2045,9 +2117,9 @@
           "dev": true
         },
         "path-key": {
    -      "version": "2.0.1",
    -      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
    -      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
    +      "version": "3.1.1",
    +      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
    +      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
           "dev": true
         },
         "path-to-regexp": {
    @@ -2086,6 +2158,19 @@
           "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
           "dev": true
         },
    +    "promise.allsettled": {
    +      "version": "1.0.2",
    +      "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz",
    +      "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==",
    +      "dev": true,
    +      "requires": {
    +        "array.prototype.map": "^1.0.1",
    +        "define-properties": "^1.1.3",
    +        "es-abstract": "^1.17.0-next.1",
    +        "function-bind": "^1.1.1",
    +        "iterate-value": "^1.0.0"
    +      }
    +    },
         "proxy-addr": {
           "version": "2.0.5",
           "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
    @@ -2175,18 +2260,18 @@
           }
         },
         "readdirp": {
    -      "version": "3.2.0",
    -      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
    -      "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
    +      "version": "3.3.0",
    +      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
    +      "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
           "dev": true,
           "requires": {
    -        "picomatch": "^2.0.4"
    +        "picomatch": "^2.0.7"
           }
         },
         "regexpp": {
    -      "version": "2.0.1",
    -      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
    -      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
    +      "version": "3.1.0",
    +      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
    +      "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
           "dev": true
         },
         "request": {
    @@ -2241,16 +2326,6 @@
           "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
           "dev": true
         },
    -    "restore-cursor": {
    -      "version": "3.1.0",
    -      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
    -      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
    -      "dev": true,
    -      "requires": {
    -        "onetime": "^5.1.0",
    -        "signal-exit": "^3.0.2"
    -      }
    -    },
         "rimraf": {
           "version": "3.0.2",
           "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
    @@ -2260,24 +2335,6 @@
             "glob": "^7.1.3"
           }
         },
    -    "run-async": {
    -      "version": "2.3.0",
    -      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
    -      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
    -      "dev": true,
    -      "requires": {
    -        "is-promise": "^2.1.0"
    -      }
    -    },
    -    "rxjs": {
    -      "version": "6.5.4",
    -      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
    -      "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
    -      "dev": true,
    -      "requires": {
    -        "tslib": "^1.9.0"
    -      }
    -    },
         "safe-buffer": {
           "version": "5.1.2",
           "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
    @@ -2291,9 +2348,9 @@
           "dev": true
         },
         "semver": {
    -      "version": "6.3.0",
    -      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
    -      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
    +      "version": "7.3.2",
    +      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
    +      "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
           "dev": true
         },
         "send": {
    @@ -2331,6 +2388,12 @@
             }
           }
         },
    +    "serialize-javascript": {
    +      "version": "3.0.0",
    +      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.0.0.tgz",
    +      "integrity": "sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==",
    +      "dev": true
    +    },
         "serve-static": {
           "version": "1.14.1",
           "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
    @@ -2356,24 +2419,18 @@
           "dev": true
         },
         "shebang-command": {
    -      "version": "1.2.0",
    -      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
    -      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
    +      "version": "2.0.0",
    +      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
    +      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
           "dev": true,
           "requires": {
    -        "shebang-regex": "^1.0.0"
    +        "shebang-regex": "^3.0.0"
           }
         },
         "shebang-regex": {
    -      "version": "1.0.0",
    -      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
    -      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
    -      "dev": true
    -    },
    -    "signal-exit": {
    -      "version": "3.0.2",
    -      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
    -      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
    +      "version": "3.0.0",
    +      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
    +      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
           "dev": true
         },
         "slice-ansi": {
    @@ -2385,14 +2442,6 @@
             "ansi-styles": "^3.2.0",
             "astral-regex": "^1.0.0",
             "is-fullwidth-code-point": "^2.0.0"
    -      },
    -      "dependencies": {
    -        "is-fullwidth-code-point": {
    -          "version": "2.0.0",
    -          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
    -          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
    -          "dev": true
    -        }
           }
         },
         "source-map": {
    @@ -2440,23 +2489,29 @@
           "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
         },
         "string-width": {
    -      "version": "4.2.0",
    -      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
    -      "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
    +      "version": "3.1.0",
    +      "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
    +      "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
           "dev": true,
           "requires": {
    -        "emoji-regex": "^8.0.0",
    -        "is-fullwidth-code-point": "^3.0.0",
    -        "strip-ansi": "^6.0.0"
    +        "emoji-regex": "^7.0.1",
    +        "is-fullwidth-code-point": "^2.0.0",
    +        "strip-ansi": "^5.1.0"
           },
           "dependencies": {
    +        "ansi-regex": {
    +          "version": "4.1.0",
    +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
    +          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
    +          "dev": true
    +        },
             "strip-ansi": {
    -          "version": "6.0.0",
    -          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    +          "version": "5.2.0",
    +          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
    +          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
               "dev": true,
               "requires": {
    -            "ansi-regex": "^5.0.0"
    +            "ansi-regex": "^4.1.0"
               }
             }
           }
    @@ -2491,26 +2546,18 @@
           }
         },
         "strip-ansi": {
    -      "version": "5.2.0",
    -      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
    -      "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
    +      "version": "6.0.0",
    +      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    +      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
           "dev": true,
           "requires": {
    -        "ansi-regex": "^4.1.0"
    -      },
    -      "dependencies": {
    -        "ansi-regex": {
    -          "version": "4.1.0",
    -          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
    -          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
    -          "dev": true
    -        }
    +        "ansi-regex": "^5.0.0"
           }
         },
         "strip-json-comments": {
    -      "version": "3.0.1",
    -      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
    -      "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
    +      "version": "3.1.1",
    +      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
    +      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
           "dev": true
         },
         "superagent": {
    @@ -2577,37 +2624,6 @@
             "lodash": "^4.17.14",
             "slice-ansi": "^2.1.0",
             "string-width": "^3.0.0"
    -      },
    -      "dependencies": {
    -        "emoji-regex": {
    -          "version": "7.0.3",
    -          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
    -          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
    -          "dev": true
    -        },
    -        "is-fullwidth-code-point": {
    -          "version": "2.0.0",
    -          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
    -          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
    -          "dev": true
    -        },
    -        "lodash": {
    -          "version": "4.17.19",
    -          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
    -          "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
    -          "dev": true
    -        },
    -        "string-width": {
    -          "version": "3.1.0",
    -          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
    -          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
    -          "dev": true,
    -          "requires": {
    -            "emoji-regex": "^7.0.1",
    -            "is-fullwidth-code-point": "^2.0.0",
    -            "strip-ansi": "^5.1.0"
    -          }
    -        }
           }
         },
         "text-table": {
    @@ -2616,21 +2632,6 @@
           "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
           "dev": true
         },
    -    "through": {
    -      "version": "2.3.8",
    -      "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
    -      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
    -      "dev": true
    -    },
    -    "tmp": {
    -      "version": "0.0.33",
    -      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
    -      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
    -      "dev": true,
    -      "requires": {
    -        "os-tmpdir": "~1.0.2"
    -      }
    -    },
         "to-regex-range": {
           "version": "5.0.1",
           "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
    @@ -2656,12 +2657,6 @@
             "punycode": "^2.1.1"
           }
         },
    -    "tslib": {
    -      "version": "1.10.0",
    -      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
    -      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
    -      "dev": true
    -    },
         "tunnel-agent": {
           "version": "0.6.0",
           "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
    @@ -2781,9 +2776,9 @@
           "dev": true
         },
         "v8-compile-cache": {
    -      "version": "2.1.0",
    -      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
    -      "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
    +      "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
         },
         "vary": {
    @@ -2833,12 +2828,6 @@
               "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
               "dev": true
             },
    -        "is-fullwidth-code-point": {
    -          "version": "2.0.0",
    -          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
    -          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
    -          "dev": true
    -        },
             "string-width": {
               "version": "2.1.1",
               "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
    @@ -2872,6 +2861,12 @@
           "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
           "dev": true
         },
    +    "workerpool": {
    +      "version": "6.0.0",
    +      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz",
    +      "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==",
    +      "dev": true
    +    },
         "wrap-ansi": {
           "version": "5.1.0",
           "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
    @@ -2883,27 +2878,19 @@
             "strip-ansi": "^5.0.0"
           },
           "dependencies": {
    -        "emoji-regex": {
    -          "version": "7.0.3",
    -          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
    -          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
    -          "dev": true
    -        },
    -        "is-fullwidth-code-point": {
    -          "version": "2.0.0",
    -          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
    -          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
    +        "ansi-regex": {
    +          "version": "4.1.0",
    +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
    +          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
               "dev": true
             },
    -        "string-width": {
    -          "version": "3.1.0",
    -          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
    -          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
    +        "strip-ansi": {
    +          "version": "5.2.0",
    +          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
    +          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
               "dev": true,
               "requires": {
    -            "emoji-regex": "^7.0.1",
    -            "is-fullwidth-code-point": "^2.0.0",
    -            "strip-ansi": "^5.1.0"
    +            "ansi-regex": "^4.1.0"
               }
             }
           }
    @@ -2947,28 +2934,39 @@
             "yargs-parser": "^13.1.2"
           },
           "dependencies": {
    -        "emoji-regex": {
    -          "version": "7.0.3",
    -          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
    -          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
    -          "dev": true
    +        "find-up": {
    +          "version": "3.0.0",
    +          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
    +          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
    +          "dev": true,
    +          "requires": {
    +            "locate-path": "^3.0.0"
    +          }
             },
    -        "is-fullwidth-code-point": {
    -          "version": "2.0.0",
    -          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
    -          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
    -          "dev": true
    +        "locate-path": {
    +          "version": "3.0.0",
    +          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
    +          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
    +          "dev": true,
    +          "requires": {
    +            "p-locate": "^3.0.0",
    +            "path-exists": "^3.0.0"
    +          }
             },
    -        "string-width": {
    -          "version": "3.1.0",
    -          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
    -          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
    +        "p-locate": {
    +          "version": "3.0.0",
    +          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
    +          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
               "dev": true,
               "requires": {
    -            "emoji-regex": "^7.0.1",
    -            "is-fullwidth-code-point": "^2.0.0",
    -            "strip-ansi": "^5.1.0"
    +            "p-limit": "^2.0.0"
               }
    +        },
    +        "path-exists": {
    +          "version": "3.0.0",
    +          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
    +          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
    +          "dev": true
             }
           }
         },
    
  • test/processNested.spec.js+9 0 modified
    @@ -45,4 +45,13 @@ describe('Test Convert Flatten object to Nested object', function() {
     
         assert.deepEqual(processed, excerpt);
       });
    +
    +  it('Do not allow prototype pollution', () => {
    +    const pollutionOb = JSON.parse(`{"__proto__.POLLUTED": "FOOBAR"}`);
    +
    +    processNested(pollutionOb);
    +
    +    // eslint-disable-next-line no-undef
    +    assert.equal(global.POLLUTED, undefined);
    +  });
     });
    

Vulnerability mechanics

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

References

8

News mentions

0

No linked articles in our index yet.