├── .github ├── dependabot.yml └── workflows │ └── ci.yml ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── index.js ├── lib ├── BlackHole.js ├── LinkCheckResult.js └── proto │ ├── file.js │ ├── hash.js │ ├── http.js │ ├── https.js │ └── mailto.js ├── package-lock.json ├── package.json └── test ├── fixtures ├── file.md └── s p a c e │ └── A.md └── link-check.test.js /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: npm 9 | directory: '/' 10 | schedule: 11 | interval: weekly 12 | open-pull-requests-limit: 99 13 | 14 | - package-ecosystem: github-actions 15 | directory: '/' 16 | schedule: 17 | interval: weekly 18 | open-pull-requests-limit: 99 19 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Test library 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - 'dependabot/**' 7 | pull_request: 8 | 9 | jobs: 10 | test: 11 | 12 | runs-on: ubuntu-latest 13 | 14 | strategy: 15 | fail-fast: false 16 | matrix: 17 | node-version: 18 | - 18 19 | - 20 20 | - 22 21 | - 23 22 | 23 | steps: 24 | - uses: actions/checkout@v4 25 | 26 | - name: Use Node.js ${{ matrix.node-version }} 27 | uses: actions/setup-node@v4 28 | with: 29 | node-version: ${{ matrix.node-version }} 30 | cache: npm 31 | 32 | - run: npm ci 33 | 34 | - run: npm test 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .tern-port 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changes 2 | 3 | ## Version 5.4.0 4 | 5 | * Defer protocol imports #89 @mondeja 6 | * Decrease package size #90 @mondeja 7 | * ci: use current node.js versions in matrix build #93 @MikeMcC399 8 | * Replace isemail to fix deprecation warning #94 @rkitover 9 | * Fix #79, keep HTTP method when following #80 @MrThanlon 10 | * fix test badge on README #74 @dklimpel 11 | * upgrade dependencies 12 | 13 | ## Version 5.3.0 14 | 15 | * fix failing github action with IPv6 @dklimpel 16 | * Add http proxy support @dklimpel 17 | * docs: Format with Markdownlint @nschonni 18 | * upgrade dependencies 19 | 20 | ## Version 5.2.0 21 | 22 | Changes: 23 | 24 | * add `open_timeout` option @Colin-Whelan #51 25 | * don't parse HTTP response @sadra-barikbin #57 26 | * upgrade dependencies 27 | 28 | ## Version 5.1.0 29 | 30 | Changes: 31 | 32 | * support for hash links 33 | 34 | ## Version 5.0.3 35 | 36 | Changes: 37 | 38 | * upgrade dependencies 39 | 40 | ## Version 5.0.2 41 | 42 | Changes: 43 | 44 | * upgrade dependencies 45 | 46 | ## Version 5.0.1 47 | 48 | Changes: 49 | 50 | * #49 upgrade dependencies 51 | 52 | ## Version 5.0.0 53 | 54 | This release contains the following potentially breaking changes: 55 | 56 | * bad/expired/unauthorized HTTPS certificate errors are no longer ignored. 57 | * sites with bad certs are no longer considered `alive` 58 | * `User-Agent` header no longer impersonates Firefox. 59 | * defaults to `link-check/5.0.0` (override via `opts.user_agent`). 60 | 61 | Changes: 62 | 63 | * #46 provide accurate user-agent string 64 | * #44 update to use WHATWG URL API 65 | * #40 use a broader URL encoding function 66 | * #30 reject unauthorized TLS connections (i.e. don't allow bad certs) 67 | * #29 replace Request deprecated dependency by Needle 68 | 69 | ## Version 4.5.4 70 | 71 | * #35 fix encode by adding decode first 72 | 73 | ## Version 4.5.3 74 | 75 | * #76 encode urls to prevent unicode chars to fail 76 | 77 | ## Version 4.5.2 78 | 79 | * #25 fixes 429 "Too Many Requests" retries that don't follow standard (@NicolasMassart) 80 | * #22 Add support for retry count on 429 response codes (@andreizet) 81 | 82 | ## Version 4.5.1 83 | 84 | * update dependencies 85 | 86 | ## Version 4.5.0 87 | 88 | * update dependencies 89 | * add an option to automatically retry on a 429 response (PR #19) 90 | 91 | ## Version 4.4.7 92 | 93 | * update dependencies. 94 | * fix markdown formatting in `README.md` (PR #18) 95 | 96 | ## Version 4.4.6 97 | 98 | * update dependencies. 99 | 100 | ## Version 4.4.5 101 | 102 | * update dependencies. 103 | * add CHANGELOG.md (Issue #17) 104 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contributing 2 | ============ 3 | 4 | 1. Fork it 5 | 2. Create your feature branch (`git checkout -b my-new-feature`) 6 | 3. Commit your changes (`git commit -am 'Add some feature'`) 7 | 4. Push to the branch (`git push origin my-new-feature`) 8 | 5. Create new Pull Request 9 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016-2024 Thomas Cort 2 | 3 | Permission to use, copy, modify, and distribute this software for any 4 | purpose with or without fee is hereby granted, provided that the above 5 | copyright notice and this permission notice appear in all copies. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 10 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 12 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 13 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Test library](https://github.com/tcort/link-check/actions/workflows/ci.yml/badge.svg) 2 | 3 | # link-check 4 | 5 | Checks whether a hyperlink is alive (`200 OK`) or dead. 6 | 7 | ## Installation 8 | 9 | ```console 10 | npm install --save link-check 11 | ``` 12 | 13 | ## Specification 14 | 15 | A link is said to be 'alive' if an HTTP HEAD or HTTP GET for the given URL 16 | eventually ends in a `200 OK` response. To minimize bandwidth, an HTTP HEAD 17 | is performed. If that fails (e.g. with a `405 Method Not Allowed`), an HTTP 18 | GET is performed. Redirects are followed. 19 | 20 | In the case of `mailto:` links, this module validates the e-mail address using 21 | [node-email-verifier](https://www.npmjs.com/package/node-email-verifier). 22 | 23 | ## API 24 | 25 | ### linkCheck(link, [opts,] callback) 26 | 27 | Given a `link` and a `callback`, attempt an HTTP HEAD and possibly an HTTP GET. 28 | 29 | Parameters: 30 | 31 | * `url` string containing a URL. 32 | * `opts` optional options object containing any of the following optional fields: 33 | * `anchors` array of anchor strings (e.g. `[ "#foo", "#bar" ]`) for checking anchor links (e.g. `Foo`). 34 | * `baseUrl` the base URL for relative links. 35 | * `timeout` timeout in [zeit/ms](https://www.npmjs.com/package/ms) format. (e.g. `"2000ms"`, `20s`, `1m`). Default `10s`. 36 | * `user_agent` the user-agent string. Default `${name}/${version}` (e.g. `link-check/4.5.5`) 37 | * `aliveStatusCodes` an array of numeric HTTP Response codes which indicate that the link is alive. Entries in this array may also be regular expressions. Example: `[ 200, /^[45][0-9]{2}$/ ]`. Default `[ 200 ]`. 38 | * `headers` a string based attribute value object to send custom HTTP headers. Example: `{ 'Authorization' : 'Basic Zm9vOmJhcg==' }`. 39 | * `retryOn429` a boolean indicating whether to retry on a 429 (Too Many Requests) response. When true, if the response has a 429 HTTP code and includes an optional `retry-after` header, a retry will be attempted after the delay indicated in the `retry-after` header. If no `retry-after` header is present in the response or the `retry-after` header value is not valid according to [RFC7231](https://tools.ietf.org/html/rfc7231#section-7.1.3) (value must be in seconds), a default retry delay of 60 seconds will apply. This default can be overriden by the `fallbackRetryDelay` parameter. 40 | * `retryCount` the number of retries to be made on a 429 response. Default `2`. 41 | * `fallbackRetryDelay` the delay in [zeit/ms](https://www.npmjs.com/package/ms) format. (e.g. `"2000ms"`, `20s`, `1m`) for retries on a 429 response when no `retry-after` header is returned or when it has an invalid value. Default is `60s`. 42 | * `callback` function which accepts `(err, result)`. 43 | * `err` an Error object when the operation cannot be completed, otherwise `null`. 44 | * `result` an object with the following properties: 45 | * `link` the `link` provided as input 46 | * `status` a string set to either `alive` or `dead`. 47 | * `statusCode` the HTTP status code. Set to `0` if no HTTP status code was returned (e.g. when the server is down). 48 | * `err` any connection error that occurred, otherwise `null`. 49 | 50 | ## Examples 51 | 52 | ```js 53 | 'use strict'; 54 | 55 | import linkCheck from 'link-check'; 56 | 57 | linkCheck('http://example.com', function (err, result) { 58 | if (err) { 59 | console.error(err); 60 | return; 61 | } 62 | console.log(`${result.link} is ${result.status}`); 63 | }); 64 | ``` 65 | 66 | **With basic authentication:** 67 | 68 | ```js 69 | 'use strict'; 70 | 71 | import linkCheck from 'link-check'; 72 | 73 | linkCheck('http://example.com', { headers: { 'Authorization': 'Basic Zm9vOmJhcg==' } }, function (err, result) { 74 | if (err) { 75 | console.error(err); 76 | return; 77 | } 78 | console.log(`${result.link} is ${result.status}`); 79 | }); 80 | ``` 81 | 82 | ## Testing 83 | 84 | ```console 85 | npm test 86 | ``` 87 | 88 | ## License 89 | 90 | See [LICENSE.md](https://github.com/tcort/link-check/blob/master/LICENSE.md) 91 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const { URL } = require('url'); 4 | 5 | const protocols = { 6 | hash: function () { return require('./lib/proto/hash'); }, 7 | file: function () { return require('./lib/proto/file'); }, 8 | http: function () { return require('./lib/proto/http'); }, 9 | https: function () { return require('./lib/proto/https'); }, 10 | mailto: function () { return require('./lib/proto/mailto'); }, 11 | }; 12 | 13 | module.exports = function linkCheck(link, opts, callback) { 14 | 15 | if (arguments.length === 2 && typeof opts === 'function') { 16 | // optional 'opts' not supplied. 17 | callback = opts; 18 | opts = {}; 19 | } 20 | 21 | const url = link.startsWith('#') ? link : new URL(link, opts.baseUrl); 22 | const protocol = link.startsWith('#') ? 'hash' : url.protocol.replace(/:$/, ''); 23 | 24 | if (!protocols.hasOwnProperty(protocol)) { 25 | callback(new Error('Unsupported Protocol'), null); 26 | return; 27 | } 28 | 29 | protocols[protocol]().check(link, opts, callback); 30 | }; 31 | 32 | module.exports.LinkCheckResult = require('./lib/LinkCheckResult'); 33 | -------------------------------------------------------------------------------- /lib/BlackHole.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const Writable = require('stream').Writable; 4 | 5 | class BlackHole extends Writable { 6 | constructor(options) { 7 | super(options); 8 | } 9 | _write(chunk, encoding, callback) { 10 | callback(); // eat the input 11 | } 12 | } 13 | 14 | module.exports = BlackHole; 15 | -------------------------------------------------------------------------------- /lib/LinkCheckResult.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | class LinkCheckResult { 4 | constructor(opts, link, statusCode, err) { 5 | opts.aliveStatusCodes = opts.aliveStatusCodes || [ 200 ]; 6 | 7 | this.link = link; 8 | this.statusCode = statusCode || 0; 9 | this.err = err || null; 10 | this.status = opts.aliveStatusCodes.some((statusCode) => (statusCode instanceof RegExp) ? statusCode.test(this.statusCode) : statusCode === this.statusCode) ? 'alive' : 'dead'; 11 | } 12 | } 13 | 14 | module.exports = LinkCheckResult; 15 | -------------------------------------------------------------------------------- /lib/proto/file.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const fs = require('fs'); 4 | const LinkCheckResult = require('../LinkCheckResult'); 5 | const processModule = require('process'); 6 | const url = require('url'); 7 | 8 | module.exports = { 9 | check: function (link, opts, callback) { 10 | 11 | // force baseUrl to end with '/' for proper treatment by WHATWG URL API 12 | if (typeof opts.baseUrl === 'string' && !opts.baseUrl.endsWith('/')) { 13 | opts.baseUrl = opts.baseUrl + '/'; 14 | } // without the ending '/', the final component is dropped 15 | 16 | const loc = new URL(link || '', opts.baseUrl || processModule.cwd()); 17 | fs.access(url.fileURLToPath(loc) || '', fs.hasOwnProperty('R_OK') ? fs.R_OK : fs.constants.R_OK, function (err) { 18 | callback(null, new LinkCheckResult(opts, link, !err ? 200 : 400, err)); 19 | }); 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /lib/proto/hash.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const LinkCheckResult = require('../LinkCheckResult'); 4 | 5 | module.exports = { 6 | check: function (link, opts, callback) { 7 | const anchors = opts.anchors || []; 8 | callback(null, new LinkCheckResult(opts, link, anchors.includes(link) ? 200 : 404, null)); 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /lib/proto/http.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const BlackHole = require('../BlackHole'); 4 | const LinkCheckResult = require('../LinkCheckResult'); 5 | const ms = require('ms'); 6 | const needle = require('needle'); 7 | const pkg = require('../../package.json'); 8 | var { ProxyAgent } = require('proxy-agent'); 9 | 10 | module.exports = { 11 | 12 | check: function check(link, opts, callback, attempts, additionalMessage) { 13 | 14 | attempts = attempts ?? 0; 15 | 16 | // default request timeout set to 10s if not provided in options 17 | let timeout = opts.timeout || '10s'; 18 | 19 | // default open timeout set to 10s if not provided in options 20 | let open_timeout = opts.open_timeout || '10s'; 21 | 22 | // retry on 429 http code flag is false by default if not provided in options 23 | let retryOn429 = opts.retryOn429 || false; 24 | 25 | //max retry count will default to 2 seconds if not provided in options 26 | let retryCount = opts.retryCount || 2; 27 | 28 | //fallback retry delay will default to 60 seconds not provided in options 29 | let fallbackRetryDelayInMs = ms(opts.fallbackRetryDelay || '60s'); 30 | 31 | let user_agent = opts.user_agent || `${pkg.name}/${pkg.version}`; 32 | 33 | // Decoding and encoding is required to prevent encoding already encoded URLs 34 | // We decode using the decodeURIComponent as it will decode a wider range of 35 | // characters that were not necessary to be encoded at first, then we re-encode 36 | // only the required ones using encodeURI. 37 | // Note that we don't use encodeURIComponents as it adds too much non-necessary encodings 38 | // see "Not Escaped" list in https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#description 39 | const url = encodeURI(decodeURIComponent(new URL(link, opts.baseUrl).toString())); 40 | 41 | const options = { 42 | agent: new ProxyAgent(), 43 | use_proxy_from_env_var: false, 44 | user_agent: user_agent, 45 | follow_max: 8, 46 | follow_keep_method: true, 47 | response_timeout: ms(timeout), 48 | open_timeout: ms(open_timeout), 49 | auth: 'auto', 50 | headers: {}, 51 | parse_response: false 52 | }; 53 | 54 | if (opts.headers) { 55 | Object.assign(options.headers, opts.headers); 56 | } 57 | 58 | needle.head(url, options, function (err, res) { 59 | if (!err && res.statusCode === 200) { 60 | if (additionalMessage){ 61 | err = !err ? additionalMessage : `${err} ${additionalMessage}`; 62 | } 63 | callback(null, new LinkCheckResult(opts, link, res ? res.statusCode : 0, err)); // alive, returned 200 OK 64 | return; 65 | } 66 | 67 | // if HEAD fails (405 Method Not Allowed, etc), try GET 68 | needle.get(url, options, function (err, res) { 69 | // If enabled in opts, the response was a 429 (Too Many Requests) and there is a retry-after provided, wait and then retry 70 | if (retryOn429 && res && res.statusCode === 429 && attempts < retryCount) { 71 | //delay will default to fallbackRetryDelay if no retry-after header is found 72 | let retryInMs = fallbackRetryDelayInMs; 73 | if (res.headers.hasOwnProperty('retry-after')){ 74 | const retryStr = res.headers['retry-after']; 75 | // Standard for 'retry-after' header is in seconds. 76 | // the format have to be checked before to see if it's an integer or a complex one. 77 | // see https://github.com/tcort/link-check/issues/24 78 | 79 | if(isNaN(retryStr)){ 80 | // Some HTTP servers return a non standard 'retry-after' header with incorrect values according to . 81 | // tcort/link-check implemented a retry system to mainly enable Github links to be tested. 82 | // Hopefully Github fixed this non standard behaviour on their side. 83 | // tcort/link-check will then stop the support of non standard 'retry-after' header for releases greater or equal to 4.7.0. 84 | // all this 'isNaN' part and the additionalMessage will then be removed from the code. 85 | additionalMessage = 86 | "Server returned a non standard \'retry-after\' header. " + 87 | "Non standard \'retry-after\' header will not work after link-check 4.7.0 release. " + 88 | "See https://github.com/tcort/link-check/releases/tag/v4.5.2 release note for details."; 89 | 90 | let buf = ''; 91 | let letter = false; 92 | for (let i = 0; i < retryStr.length; i++) { 93 | let c = retryStr[i]; 94 | if (isNaN(c)) { 95 | letter = true; 96 | buf += c; 97 | } else { 98 | if (letter) { 99 | retryInMs += ms(buf.trim()); 100 | buf = ''; 101 | } 102 | letter = false; 103 | buf += c; 104 | } 105 | } 106 | retryInMs = ms(buf.trim()); 107 | }else{ 108 | // standard compliant header value conversion to milliseconds 109 | const secondsToMilisecondsMultiplier = 1000; 110 | retryInMs = parseFloat(retryStr) * secondsToMilisecondsMultiplier; 111 | } 112 | } 113 | // Recurse back after the retry timeout has elapsed (incrementing our attempts to avoid an infinite loop) 114 | setTimeout(check, retryInMs, link, opts, callback, attempts + 1, additionalMessage); 115 | } else { 116 | if (additionalMessage){ 117 | err = !err ? additionalMessage : `${err} ${additionalMessage}`; 118 | } 119 | callback(null, new LinkCheckResult(opts, link, res ? res.statusCode : 0, err)); 120 | } 121 | }).pipe(new BlackHole()); 122 | }); 123 | }, 124 | }; 125 | -------------------------------------------------------------------------------- /lib/proto/https.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | module.exports = require('./http'); 4 | -------------------------------------------------------------------------------- /lib/proto/mailto.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const LinkCheckResult = require('../LinkCheckResult'); 4 | 5 | module.exports.check = (link, opts, callback) => { 6 | import('node-email-verifier').then((mod) => { 7 | const emailValidator = mod.default; 8 | const address = link 9 | .substr(7) // strip "mailto:" 10 | .split('?')[0]; // trim ?subject=blah hfields 11 | 12 | /* per RFC6068, the '?' is a reserved delimiter and email addresses containing '?' must be encoded, 13 | * so it's safe to split on '?' and pick [0]. 14 | */ 15 | 16 | emailValidator(address, { checkMx: true, timeout: opts.timeout || '10s' }).then((emailValid) => { 17 | if (!emailValid) { 18 | return callback(null, new LinkCheckResult(opts, link, 400, null)); 19 | } 20 | return callback(null, new LinkCheckResult(opts, link, 200, null)); 21 | }).catch((error) => { 22 | if (error.message.match(/timed out/)) { 23 | return callback(null, new LinkCheckResult(opts, link, 0, { message: 'Domain MX lookup timed out', code: 'ECONNRESET' })); 24 | } 25 | return callback(null, new LinkCheckResult(opts, link, 0, error)); 26 | }); 27 | }); 28 | }; 29 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "link-check", 3 | "version": "5.4.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "link-check", 9 | "version": "5.4.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "is-relative-url": "^4.0.0", 13 | "ms": "^2.1.3", 14 | "needle": "^3.3.1", 15 | "node-email-verifier": "^2.0.0", 16 | "proxy-agent": "^6.4.0" 17 | }, 18 | "devDependencies": { 19 | "debug": "^4.3.7", 20 | "expect.js": "^0.3.1", 21 | "express": "^4.21.1", 22 | "jshint": "^2.13.6", 23 | "mocha": "^10.8.2" 24 | } 25 | }, 26 | "node_modules/@tootallnate/quickjs-emscripten": { 27 | "version": "0.23.0", 28 | "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", 29 | "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" 30 | }, 31 | "node_modules/accepts": { 32 | "version": "1.3.8", 33 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 34 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 35 | "dev": true, 36 | "dependencies": { 37 | "mime-types": "~2.1.34", 38 | "negotiator": "0.6.3" 39 | }, 40 | "engines": { 41 | "node": ">= 0.6" 42 | } 43 | }, 44 | "node_modules/agent-base": { 45 | "version": "7.1.0", 46 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", 47 | "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", 48 | "dependencies": { 49 | "debug": "^4.3.4" 50 | }, 51 | "engines": { 52 | "node": ">= 14" 53 | } 54 | }, 55 | "node_modules/ansi-colors": { 56 | "version": "4.1.3", 57 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", 58 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", 59 | "dev": true, 60 | "engines": { 61 | "node": ">=6" 62 | } 63 | }, 64 | "node_modules/ansi-regex": { 65 | "version": "5.0.1", 66 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 67 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 68 | "dev": true, 69 | "engines": { 70 | "node": ">=8" 71 | } 72 | }, 73 | "node_modules/ansi-styles": { 74 | "version": "4.3.0", 75 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 76 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 77 | "dev": true, 78 | "dependencies": { 79 | "color-convert": "^2.0.1" 80 | }, 81 | "engines": { 82 | "node": ">=8" 83 | }, 84 | "funding": { 85 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 86 | } 87 | }, 88 | "node_modules/anymatch": { 89 | "version": "3.1.2", 90 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 91 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 92 | "dev": true, 93 | "dependencies": { 94 | "normalize-path": "^3.0.0", 95 | "picomatch": "^2.0.4" 96 | }, 97 | "engines": { 98 | "node": ">= 8" 99 | } 100 | }, 101 | "node_modules/argparse": { 102 | "version": "2.0.1", 103 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 104 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 105 | "dev": true 106 | }, 107 | "node_modules/array-flatten": { 108 | "version": "1.1.1", 109 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 110 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", 111 | "dev": true 112 | }, 113 | "node_modules/ast-types": { 114 | "version": "0.13.4", 115 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", 116 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", 117 | "dependencies": { 118 | "tslib": "^2.0.1" 119 | }, 120 | "engines": { 121 | "node": ">=4" 122 | } 123 | }, 124 | "node_modules/balanced-match": { 125 | "version": "1.0.2", 126 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 127 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 128 | "dev": true 129 | }, 130 | "node_modules/basic-ftp": { 131 | "version": "5.0.4", 132 | "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", 133 | "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", 134 | "engines": { 135 | "node": ">=10.0.0" 136 | } 137 | }, 138 | "node_modules/binary-extensions": { 139 | "version": "2.2.0", 140 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 141 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 142 | "dev": true, 143 | "engines": { 144 | "node": ">=8" 145 | } 146 | }, 147 | "node_modules/body-parser": { 148 | "version": "1.20.3", 149 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", 150 | "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", 151 | "dev": true, 152 | "dependencies": { 153 | "bytes": "3.1.2", 154 | "content-type": "~1.0.5", 155 | "debug": "2.6.9", 156 | "depd": "2.0.0", 157 | "destroy": "1.2.0", 158 | "http-errors": "2.0.0", 159 | "iconv-lite": "0.4.24", 160 | "on-finished": "2.4.1", 161 | "qs": "6.13.0", 162 | "raw-body": "2.5.2", 163 | "type-is": "~1.6.18", 164 | "unpipe": "1.0.0" 165 | }, 166 | "engines": { 167 | "node": ">= 0.8", 168 | "npm": "1.2.8000 || >= 1.4.16" 169 | } 170 | }, 171 | "node_modules/body-parser/node_modules/debug": { 172 | "version": "2.6.9", 173 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 174 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 175 | "dev": true, 176 | "dependencies": { 177 | "ms": "2.0.0" 178 | } 179 | }, 180 | "node_modules/body-parser/node_modules/ms": { 181 | "version": "2.0.0", 182 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 183 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 184 | "dev": true 185 | }, 186 | "node_modules/brace-expansion": { 187 | "version": "1.1.11", 188 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 189 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 190 | "dev": true, 191 | "dependencies": { 192 | "balanced-match": "^1.0.0", 193 | "concat-map": "0.0.1" 194 | } 195 | }, 196 | "node_modules/braces": { 197 | "version": "3.0.3", 198 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 199 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 200 | "dev": true, 201 | "dependencies": { 202 | "fill-range": "^7.1.1" 203 | }, 204 | "engines": { 205 | "node": ">=8" 206 | } 207 | }, 208 | "node_modules/browser-stdout": { 209 | "version": "1.3.1", 210 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 211 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 212 | "dev": true 213 | }, 214 | "node_modules/bytes": { 215 | "version": "3.1.2", 216 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 217 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 218 | "dev": true, 219 | "engines": { 220 | "node": ">= 0.8" 221 | } 222 | }, 223 | "node_modules/call-bind": { 224 | "version": "1.0.7", 225 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 226 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 227 | "dev": true, 228 | "dependencies": { 229 | "es-define-property": "^1.0.0", 230 | "es-errors": "^1.3.0", 231 | "function-bind": "^1.1.2", 232 | "get-intrinsic": "^1.2.4", 233 | "set-function-length": "^1.2.1" 234 | }, 235 | "engines": { 236 | "node": ">= 0.4" 237 | }, 238 | "funding": { 239 | "url": "https://github.com/sponsors/ljharb" 240 | } 241 | }, 242 | "node_modules/camelcase": { 243 | "version": "6.3.0", 244 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 245 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 246 | "dev": true, 247 | "engines": { 248 | "node": ">=10" 249 | }, 250 | "funding": { 251 | "url": "https://github.com/sponsors/sindresorhus" 252 | } 253 | }, 254 | "node_modules/chalk": { 255 | "version": "4.1.2", 256 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 257 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 258 | "dev": true, 259 | "dependencies": { 260 | "ansi-styles": "^4.1.0", 261 | "supports-color": "^7.1.0" 262 | }, 263 | "engines": { 264 | "node": ">=10" 265 | }, 266 | "funding": { 267 | "url": "https://github.com/chalk/chalk?sponsor=1" 268 | } 269 | }, 270 | "node_modules/chalk/node_modules/supports-color": { 271 | "version": "7.2.0", 272 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 273 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 274 | "dev": true, 275 | "dependencies": { 276 | "has-flag": "^4.0.0" 277 | }, 278 | "engines": { 279 | "node": ">=8" 280 | } 281 | }, 282 | "node_modules/chokidar": { 283 | "version": "3.5.3", 284 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 285 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 286 | "dev": true, 287 | "funding": [ 288 | { 289 | "type": "individual", 290 | "url": "https://paulmillr.com/funding/" 291 | } 292 | ], 293 | "dependencies": { 294 | "anymatch": "~3.1.2", 295 | "braces": "~3.0.2", 296 | "glob-parent": "~5.1.2", 297 | "is-binary-path": "~2.1.0", 298 | "is-glob": "~4.0.1", 299 | "normalize-path": "~3.0.0", 300 | "readdirp": "~3.6.0" 301 | }, 302 | "engines": { 303 | "node": ">= 8.10.0" 304 | }, 305 | "optionalDependencies": { 306 | "fsevents": "~2.3.2" 307 | } 308 | }, 309 | "node_modules/cli": { 310 | "version": "1.0.1", 311 | "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", 312 | "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", 313 | "dev": true, 314 | "dependencies": { 315 | "exit": "0.1.2", 316 | "glob": "^7.1.1" 317 | }, 318 | "engines": { 319 | "node": ">=0.2.5" 320 | } 321 | }, 322 | "node_modules/cliui": { 323 | "version": "7.0.4", 324 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 325 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 326 | "dev": true, 327 | "dependencies": { 328 | "string-width": "^4.2.0", 329 | "strip-ansi": "^6.0.0", 330 | "wrap-ansi": "^7.0.0" 331 | } 332 | }, 333 | "node_modules/color-convert": { 334 | "version": "2.0.1", 335 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 336 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 337 | "dev": true, 338 | "dependencies": { 339 | "color-name": "~1.1.4" 340 | }, 341 | "engines": { 342 | "node": ">=7.0.0" 343 | } 344 | }, 345 | "node_modules/color-name": { 346 | "version": "1.1.4", 347 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 348 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 349 | "dev": true 350 | }, 351 | "node_modules/concat-map": { 352 | "version": "0.0.1", 353 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 354 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 355 | "dev": true 356 | }, 357 | "node_modules/console-browserify": { 358 | "version": "1.1.0", 359 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 360 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 361 | "dev": true, 362 | "dependencies": { 363 | "date-now": "^0.1.4" 364 | } 365 | }, 366 | "node_modules/content-disposition": { 367 | "version": "0.5.4", 368 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 369 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 370 | "dev": true, 371 | "dependencies": { 372 | "safe-buffer": "5.2.1" 373 | }, 374 | "engines": { 375 | "node": ">= 0.6" 376 | } 377 | }, 378 | "node_modules/content-type": { 379 | "version": "1.0.5", 380 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 381 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 382 | "dev": true, 383 | "engines": { 384 | "node": ">= 0.6" 385 | } 386 | }, 387 | "node_modules/cookie": { 388 | "version": "0.7.1", 389 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", 390 | "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", 391 | "dev": true, 392 | "engines": { 393 | "node": ">= 0.6" 394 | } 395 | }, 396 | "node_modules/cookie-signature": { 397 | "version": "1.0.6", 398 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 399 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", 400 | "dev": true 401 | }, 402 | "node_modules/core-util-is": { 403 | "version": "1.0.3", 404 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 405 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 406 | "dev": true 407 | }, 408 | "node_modules/data-uri-to-buffer": { 409 | "version": "6.0.1", 410 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", 411 | "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", 412 | "engines": { 413 | "node": ">= 14" 414 | } 415 | }, 416 | "node_modules/date-now": { 417 | "version": "0.1.4", 418 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 419 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 420 | "dev": true 421 | }, 422 | "node_modules/debug": { 423 | "version": "4.3.7", 424 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 425 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 426 | "dependencies": { 427 | "ms": "^2.1.3" 428 | }, 429 | "engines": { 430 | "node": ">=6.0" 431 | }, 432 | "peerDependenciesMeta": { 433 | "supports-color": { 434 | "optional": true 435 | } 436 | } 437 | }, 438 | "node_modules/decamelize": { 439 | "version": "4.0.0", 440 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 441 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 442 | "dev": true, 443 | "engines": { 444 | "node": ">=10" 445 | }, 446 | "funding": { 447 | "url": "https://github.com/sponsors/sindresorhus" 448 | } 449 | }, 450 | "node_modules/define-data-property": { 451 | "version": "1.1.4", 452 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 453 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 454 | "dev": true, 455 | "dependencies": { 456 | "es-define-property": "^1.0.0", 457 | "es-errors": "^1.3.0", 458 | "gopd": "^1.0.1" 459 | }, 460 | "engines": { 461 | "node": ">= 0.4" 462 | }, 463 | "funding": { 464 | "url": "https://github.com/sponsors/ljharb" 465 | } 466 | }, 467 | "node_modules/degenerator": { 468 | "version": "5.0.1", 469 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", 470 | "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", 471 | "dependencies": { 472 | "ast-types": "^0.13.4", 473 | "escodegen": "^2.1.0", 474 | "esprima": "^4.0.1" 475 | }, 476 | "engines": { 477 | "node": ">= 14" 478 | } 479 | }, 480 | "node_modules/depd": { 481 | "version": "2.0.0", 482 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 483 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 484 | "dev": true, 485 | "engines": { 486 | "node": ">= 0.8" 487 | } 488 | }, 489 | "node_modules/destroy": { 490 | "version": "1.2.0", 491 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 492 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 493 | "dev": true, 494 | "engines": { 495 | "node": ">= 0.8", 496 | "npm": "1.2.8000 || >= 1.4.16" 497 | } 498 | }, 499 | "node_modules/diff": { 500 | "version": "5.2.0", 501 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", 502 | "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", 503 | "dev": true, 504 | "engines": { 505 | "node": ">=0.3.1" 506 | } 507 | }, 508 | "node_modules/dom-serializer": { 509 | "version": "0.2.2", 510 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", 511 | "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", 512 | "dev": true, 513 | "dependencies": { 514 | "domelementtype": "^2.0.1", 515 | "entities": "^2.0.0" 516 | } 517 | }, 518 | "node_modules/dom-serializer/node_modules/domelementtype": { 519 | "version": "2.2.0", 520 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", 521 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", 522 | "dev": true, 523 | "funding": [ 524 | { 525 | "type": "github", 526 | "url": "https://github.com/sponsors/fb55" 527 | } 528 | ] 529 | }, 530 | "node_modules/dom-serializer/node_modules/entities": { 531 | "version": "2.2.0", 532 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 533 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 534 | "dev": true, 535 | "funding": { 536 | "url": "https://github.com/fb55/entities?sponsor=1" 537 | } 538 | }, 539 | "node_modules/domelementtype": { 540 | "version": "1.3.1", 541 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 542 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 543 | "dev": true 544 | }, 545 | "node_modules/domhandler": { 546 | "version": "2.3.0", 547 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", 548 | "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", 549 | "dev": true, 550 | "dependencies": { 551 | "domelementtype": "1" 552 | } 553 | }, 554 | "node_modules/domutils": { 555 | "version": "1.5.1", 556 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 557 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 558 | "dev": true, 559 | "dependencies": { 560 | "dom-serializer": "0", 561 | "domelementtype": "1" 562 | } 563 | }, 564 | "node_modules/ee-first": { 565 | "version": "1.1.1", 566 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 567 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 568 | "dev": true 569 | }, 570 | "node_modules/emoji-regex": { 571 | "version": "8.0.0", 572 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 573 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 574 | "dev": true 575 | }, 576 | "node_modules/encodeurl": { 577 | "version": "2.0.0", 578 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 579 | "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 580 | "dev": true, 581 | "engines": { 582 | "node": ">= 0.8" 583 | } 584 | }, 585 | "node_modules/entities": { 586 | "version": "1.0.0", 587 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", 588 | "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", 589 | "dev": true 590 | }, 591 | "node_modules/es-define-property": { 592 | "version": "1.0.0", 593 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 594 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 595 | "dev": true, 596 | "dependencies": { 597 | "get-intrinsic": "^1.2.4" 598 | }, 599 | "engines": { 600 | "node": ">= 0.4" 601 | } 602 | }, 603 | "node_modules/es-errors": { 604 | "version": "1.3.0", 605 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 606 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 607 | "dev": true, 608 | "engines": { 609 | "node": ">= 0.4" 610 | } 611 | }, 612 | "node_modules/escalade": { 613 | "version": "3.1.1", 614 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 615 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 616 | "dev": true, 617 | "engines": { 618 | "node": ">=6" 619 | } 620 | }, 621 | "node_modules/escape-html": { 622 | "version": "1.0.3", 623 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 624 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 625 | "dev": true 626 | }, 627 | "node_modules/escape-string-regexp": { 628 | "version": "4.0.0", 629 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 630 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 631 | "dev": true, 632 | "engines": { 633 | "node": ">=10" 634 | }, 635 | "funding": { 636 | "url": "https://github.com/sponsors/sindresorhus" 637 | } 638 | }, 639 | "node_modules/escodegen": { 640 | "version": "2.1.0", 641 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", 642 | "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", 643 | "dependencies": { 644 | "esprima": "^4.0.1", 645 | "estraverse": "^5.2.0", 646 | "esutils": "^2.0.2" 647 | }, 648 | "bin": { 649 | "escodegen": "bin/escodegen.js", 650 | "esgenerate": "bin/esgenerate.js" 651 | }, 652 | "engines": { 653 | "node": ">=6.0" 654 | }, 655 | "optionalDependencies": { 656 | "source-map": "~0.6.1" 657 | } 658 | }, 659 | "node_modules/esprima": { 660 | "version": "4.0.1", 661 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 662 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 663 | "bin": { 664 | "esparse": "bin/esparse.js", 665 | "esvalidate": "bin/esvalidate.js" 666 | }, 667 | "engines": { 668 | "node": ">=4" 669 | } 670 | }, 671 | "node_modules/estraverse": { 672 | "version": "5.3.0", 673 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 674 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 675 | "engines": { 676 | "node": ">=4.0" 677 | } 678 | }, 679 | "node_modules/esutils": { 680 | "version": "2.0.3", 681 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 682 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 683 | "engines": { 684 | "node": ">=0.10.0" 685 | } 686 | }, 687 | "node_modules/etag": { 688 | "version": "1.8.1", 689 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 690 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 691 | "dev": true, 692 | "engines": { 693 | "node": ">= 0.6" 694 | } 695 | }, 696 | "node_modules/exit": { 697 | "version": "0.1.2", 698 | "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 699 | "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", 700 | "dev": true, 701 | "engines": { 702 | "node": ">= 0.8.0" 703 | } 704 | }, 705 | "node_modules/expect.js": { 706 | "version": "0.3.1", 707 | "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", 708 | "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=", 709 | "dev": true 710 | }, 711 | "node_modules/express": { 712 | "version": "4.21.1", 713 | "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", 714 | "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", 715 | "dev": true, 716 | "dependencies": { 717 | "accepts": "~1.3.8", 718 | "array-flatten": "1.1.1", 719 | "body-parser": "1.20.3", 720 | "content-disposition": "0.5.4", 721 | "content-type": "~1.0.4", 722 | "cookie": "0.7.1", 723 | "cookie-signature": "1.0.6", 724 | "debug": "2.6.9", 725 | "depd": "2.0.0", 726 | "encodeurl": "~2.0.0", 727 | "escape-html": "~1.0.3", 728 | "etag": "~1.8.1", 729 | "finalhandler": "1.3.1", 730 | "fresh": "0.5.2", 731 | "http-errors": "2.0.0", 732 | "merge-descriptors": "1.0.3", 733 | "methods": "~1.1.2", 734 | "on-finished": "2.4.1", 735 | "parseurl": "~1.3.3", 736 | "path-to-regexp": "0.1.10", 737 | "proxy-addr": "~2.0.7", 738 | "qs": "6.13.0", 739 | "range-parser": "~1.2.1", 740 | "safe-buffer": "5.2.1", 741 | "send": "0.19.0", 742 | "serve-static": "1.16.2", 743 | "setprototypeof": "1.2.0", 744 | "statuses": "2.0.1", 745 | "type-is": "~1.6.18", 746 | "utils-merge": "1.0.1", 747 | "vary": "~1.1.2" 748 | }, 749 | "engines": { 750 | "node": ">= 0.10.0" 751 | } 752 | }, 753 | "node_modules/express/node_modules/debug": { 754 | "version": "2.6.9", 755 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 756 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 757 | "dev": true, 758 | "dependencies": { 759 | "ms": "2.0.0" 760 | } 761 | }, 762 | "node_modules/express/node_modules/ms": { 763 | "version": "2.0.0", 764 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 765 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 766 | "dev": true 767 | }, 768 | "node_modules/fill-range": { 769 | "version": "7.1.1", 770 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 771 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 772 | "dev": true, 773 | "dependencies": { 774 | "to-regex-range": "^5.0.1" 775 | }, 776 | "engines": { 777 | "node": ">=8" 778 | } 779 | }, 780 | "node_modules/finalhandler": { 781 | "version": "1.3.1", 782 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", 783 | "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", 784 | "dev": true, 785 | "dependencies": { 786 | "debug": "2.6.9", 787 | "encodeurl": "~2.0.0", 788 | "escape-html": "~1.0.3", 789 | "on-finished": "2.4.1", 790 | "parseurl": "~1.3.3", 791 | "statuses": "2.0.1", 792 | "unpipe": "~1.0.0" 793 | }, 794 | "engines": { 795 | "node": ">= 0.8" 796 | } 797 | }, 798 | "node_modules/finalhandler/node_modules/debug": { 799 | "version": "2.6.9", 800 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 801 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 802 | "dev": true, 803 | "dependencies": { 804 | "ms": "2.0.0" 805 | } 806 | }, 807 | "node_modules/finalhandler/node_modules/ms": { 808 | "version": "2.0.0", 809 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 810 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 811 | "dev": true 812 | }, 813 | "node_modules/find-up": { 814 | "version": "5.0.0", 815 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 816 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 817 | "dev": true, 818 | "dependencies": { 819 | "locate-path": "^6.0.0", 820 | "path-exists": "^4.0.0" 821 | }, 822 | "engines": { 823 | "node": ">=10" 824 | }, 825 | "funding": { 826 | "url": "https://github.com/sponsors/sindresorhus" 827 | } 828 | }, 829 | "node_modules/flat": { 830 | "version": "5.0.2", 831 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 832 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 833 | "dev": true, 834 | "bin": { 835 | "flat": "cli.js" 836 | } 837 | }, 838 | "node_modules/forwarded": { 839 | "version": "0.2.0", 840 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 841 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 842 | "dev": true, 843 | "engines": { 844 | "node": ">= 0.6" 845 | } 846 | }, 847 | "node_modules/fresh": { 848 | "version": "0.5.2", 849 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 850 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 851 | "dev": true, 852 | "engines": { 853 | "node": ">= 0.6" 854 | } 855 | }, 856 | "node_modules/fs-extra": { 857 | "version": "8.1.0", 858 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 859 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 860 | "dependencies": { 861 | "graceful-fs": "^4.2.0", 862 | "jsonfile": "^4.0.0", 863 | "universalify": "^0.1.0" 864 | }, 865 | "engines": { 866 | "node": ">=6 <7 || >=8" 867 | } 868 | }, 869 | "node_modules/fs.realpath": { 870 | "version": "1.0.0", 871 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 872 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 873 | "dev": true 874 | }, 875 | "node_modules/fsevents": { 876 | "version": "2.3.2", 877 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 878 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 879 | "dev": true, 880 | "hasInstallScript": true, 881 | "optional": true, 882 | "os": [ 883 | "darwin" 884 | ], 885 | "engines": { 886 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 887 | } 888 | }, 889 | "node_modules/function-bind": { 890 | "version": "1.1.2", 891 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 892 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 893 | "dev": true, 894 | "funding": { 895 | "url": "https://github.com/sponsors/ljharb" 896 | } 897 | }, 898 | "node_modules/get-caller-file": { 899 | "version": "2.0.5", 900 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 901 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 902 | "dev": true, 903 | "engines": { 904 | "node": "6.* || 8.* || >= 10.*" 905 | } 906 | }, 907 | "node_modules/get-intrinsic": { 908 | "version": "1.2.4", 909 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 910 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 911 | "dev": true, 912 | "dependencies": { 913 | "es-errors": "^1.3.0", 914 | "function-bind": "^1.1.2", 915 | "has-proto": "^1.0.1", 916 | "has-symbols": "^1.0.3", 917 | "hasown": "^2.0.0" 918 | }, 919 | "engines": { 920 | "node": ">= 0.4" 921 | }, 922 | "funding": { 923 | "url": "https://github.com/sponsors/ljharb" 924 | } 925 | }, 926 | "node_modules/get-uri": { 927 | "version": "6.0.2", 928 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", 929 | "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", 930 | "dependencies": { 931 | "basic-ftp": "^5.0.2", 932 | "data-uri-to-buffer": "^6.0.0", 933 | "debug": "^4.3.4", 934 | "fs-extra": "^8.1.0" 935 | }, 936 | "engines": { 937 | "node": ">= 14" 938 | } 939 | }, 940 | "node_modules/glob": { 941 | "version": "7.2.0", 942 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 943 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 944 | "dev": true, 945 | "dependencies": { 946 | "fs.realpath": "^1.0.0", 947 | "inflight": "^1.0.4", 948 | "inherits": "2", 949 | "minimatch": "^3.0.4", 950 | "once": "^1.3.0", 951 | "path-is-absolute": "^1.0.0" 952 | }, 953 | "engines": { 954 | "node": "*" 955 | }, 956 | "funding": { 957 | "url": "https://github.com/sponsors/isaacs" 958 | } 959 | }, 960 | "node_modules/glob-parent": { 961 | "version": "5.1.2", 962 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 963 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 964 | "dev": true, 965 | "dependencies": { 966 | "is-glob": "^4.0.1" 967 | }, 968 | "engines": { 969 | "node": ">= 6" 970 | } 971 | }, 972 | "node_modules/gopd": { 973 | "version": "1.0.1", 974 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 975 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 976 | "dev": true, 977 | "dependencies": { 978 | "get-intrinsic": "^1.1.3" 979 | }, 980 | "funding": { 981 | "url": "https://github.com/sponsors/ljharb" 982 | } 983 | }, 984 | "node_modules/graceful-fs": { 985 | "version": "4.2.11", 986 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 987 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 988 | }, 989 | "node_modules/has-flag": { 990 | "version": "4.0.0", 991 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 992 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 993 | "dev": true, 994 | "engines": { 995 | "node": ">=8" 996 | } 997 | }, 998 | "node_modules/has-property-descriptors": { 999 | "version": "1.0.2", 1000 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 1001 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 1002 | "dev": true, 1003 | "dependencies": { 1004 | "es-define-property": "^1.0.0" 1005 | }, 1006 | "funding": { 1007 | "url": "https://github.com/sponsors/ljharb" 1008 | } 1009 | }, 1010 | "node_modules/has-proto": { 1011 | "version": "1.0.3", 1012 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 1013 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 1014 | "dev": true, 1015 | "engines": { 1016 | "node": ">= 0.4" 1017 | }, 1018 | "funding": { 1019 | "url": "https://github.com/sponsors/ljharb" 1020 | } 1021 | }, 1022 | "node_modules/has-symbols": { 1023 | "version": "1.0.3", 1024 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1025 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1026 | "dev": true, 1027 | "engines": { 1028 | "node": ">= 0.4" 1029 | }, 1030 | "funding": { 1031 | "url": "https://github.com/sponsors/ljharb" 1032 | } 1033 | }, 1034 | "node_modules/hasown": { 1035 | "version": "2.0.2", 1036 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1037 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1038 | "dev": true, 1039 | "dependencies": { 1040 | "function-bind": "^1.1.2" 1041 | }, 1042 | "engines": { 1043 | "node": ">= 0.4" 1044 | } 1045 | }, 1046 | "node_modules/he": { 1047 | "version": "1.2.0", 1048 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1049 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1050 | "dev": true, 1051 | "bin": { 1052 | "he": "bin/he" 1053 | } 1054 | }, 1055 | "node_modules/htmlparser2": { 1056 | "version": "3.8.3", 1057 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", 1058 | "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", 1059 | "dev": true, 1060 | "dependencies": { 1061 | "domelementtype": "1", 1062 | "domhandler": "2.3", 1063 | "domutils": "1.5", 1064 | "entities": "1.0", 1065 | "readable-stream": "1.1" 1066 | } 1067 | }, 1068 | "node_modules/http-errors": { 1069 | "version": "2.0.0", 1070 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1071 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1072 | "dev": true, 1073 | "dependencies": { 1074 | "depd": "2.0.0", 1075 | "inherits": "2.0.4", 1076 | "setprototypeof": "1.2.0", 1077 | "statuses": "2.0.1", 1078 | "toidentifier": "1.0.1" 1079 | }, 1080 | "engines": { 1081 | "node": ">= 0.8" 1082 | } 1083 | }, 1084 | "node_modules/http-proxy-agent": { 1085 | "version": "7.0.2", 1086 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", 1087 | "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", 1088 | "dependencies": { 1089 | "agent-base": "^7.1.0", 1090 | "debug": "^4.3.4" 1091 | }, 1092 | "engines": { 1093 | "node": ">= 14" 1094 | } 1095 | }, 1096 | "node_modules/https-proxy-agent": { 1097 | "version": "7.0.4", 1098 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", 1099 | "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", 1100 | "dependencies": { 1101 | "agent-base": "^7.0.2", 1102 | "debug": "4" 1103 | }, 1104 | "engines": { 1105 | "node": ">= 14" 1106 | } 1107 | }, 1108 | "node_modules/iconv-lite": { 1109 | "version": "0.4.24", 1110 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1111 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1112 | "dev": true, 1113 | "dependencies": { 1114 | "safer-buffer": ">= 2.1.2 < 3" 1115 | }, 1116 | "engines": { 1117 | "node": ">=0.10.0" 1118 | } 1119 | }, 1120 | "node_modules/inflight": { 1121 | "version": "1.0.6", 1122 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1123 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1124 | "dev": true, 1125 | "dependencies": { 1126 | "once": "^1.3.0", 1127 | "wrappy": "1" 1128 | } 1129 | }, 1130 | "node_modules/inherits": { 1131 | "version": "2.0.4", 1132 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1133 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1134 | "dev": true 1135 | }, 1136 | "node_modules/ip-address": { 1137 | "version": "9.0.5", 1138 | "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", 1139 | "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", 1140 | "dependencies": { 1141 | "jsbn": "1.1.0", 1142 | "sprintf-js": "^1.1.3" 1143 | }, 1144 | "engines": { 1145 | "node": ">= 12" 1146 | } 1147 | }, 1148 | "node_modules/ipaddr.js": { 1149 | "version": "1.9.1", 1150 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1151 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 1152 | "dev": true, 1153 | "engines": { 1154 | "node": ">= 0.10" 1155 | } 1156 | }, 1157 | "node_modules/is-absolute-url": { 1158 | "version": "4.0.1", 1159 | "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", 1160 | "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", 1161 | "engines": { 1162 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1163 | }, 1164 | "funding": { 1165 | "url": "https://github.com/sponsors/sindresorhus" 1166 | } 1167 | }, 1168 | "node_modules/is-binary-path": { 1169 | "version": "2.1.0", 1170 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1171 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1172 | "dev": true, 1173 | "dependencies": { 1174 | "binary-extensions": "^2.0.0" 1175 | }, 1176 | "engines": { 1177 | "node": ">=8" 1178 | } 1179 | }, 1180 | "node_modules/is-extglob": { 1181 | "version": "2.1.1", 1182 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1183 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1184 | "dev": true, 1185 | "engines": { 1186 | "node": ">=0.10.0" 1187 | } 1188 | }, 1189 | "node_modules/is-fullwidth-code-point": { 1190 | "version": "3.0.0", 1191 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1192 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1193 | "dev": true, 1194 | "engines": { 1195 | "node": ">=8" 1196 | } 1197 | }, 1198 | "node_modules/is-glob": { 1199 | "version": "4.0.3", 1200 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1201 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1202 | "dev": true, 1203 | "dependencies": { 1204 | "is-extglob": "^2.1.1" 1205 | }, 1206 | "engines": { 1207 | "node": ">=0.10.0" 1208 | } 1209 | }, 1210 | "node_modules/is-number": { 1211 | "version": "7.0.0", 1212 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1213 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1214 | "dev": true, 1215 | "engines": { 1216 | "node": ">=0.12.0" 1217 | } 1218 | }, 1219 | "node_modules/is-plain-obj": { 1220 | "version": "2.1.0", 1221 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1222 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1223 | "dev": true, 1224 | "engines": { 1225 | "node": ">=8" 1226 | } 1227 | }, 1228 | "node_modules/is-relative-url": { 1229 | "version": "4.0.0", 1230 | "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-4.0.0.tgz", 1231 | "integrity": "sha512-PkzoL1qKAYXNFct5IKdKRH/iBQou/oCC85QhXj6WKtUQBliZ4Yfd3Zk27RHu9KQG8r6zgvAA2AQKC9p+rqTszg==", 1232 | "dependencies": { 1233 | "is-absolute-url": "^4.0.1" 1234 | }, 1235 | "engines": { 1236 | "node": ">=14.16" 1237 | }, 1238 | "funding": { 1239 | "url": "https://github.com/sponsors/sindresorhus" 1240 | } 1241 | }, 1242 | "node_modules/is-unicode-supported": { 1243 | "version": "0.1.0", 1244 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1245 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1246 | "dev": true, 1247 | "engines": { 1248 | "node": ">=10" 1249 | }, 1250 | "funding": { 1251 | "url": "https://github.com/sponsors/sindresorhus" 1252 | } 1253 | }, 1254 | "node_modules/isarray": { 1255 | "version": "0.0.1", 1256 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1257 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1258 | "dev": true 1259 | }, 1260 | "node_modules/js-yaml": { 1261 | "version": "4.1.0", 1262 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1263 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1264 | "dev": true, 1265 | "dependencies": { 1266 | "argparse": "^2.0.1" 1267 | }, 1268 | "bin": { 1269 | "js-yaml": "bin/js-yaml.js" 1270 | } 1271 | }, 1272 | "node_modules/jsbn": { 1273 | "version": "1.1.0", 1274 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", 1275 | "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" 1276 | }, 1277 | "node_modules/jshint": { 1278 | "version": "2.13.6", 1279 | "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", 1280 | "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", 1281 | "dev": true, 1282 | "dependencies": { 1283 | "cli": "~1.0.0", 1284 | "console-browserify": "1.1.x", 1285 | "exit": "0.1.x", 1286 | "htmlparser2": "3.8.x", 1287 | "lodash": "~4.17.21", 1288 | "minimatch": "~3.0.2", 1289 | "strip-json-comments": "1.0.x" 1290 | }, 1291 | "bin": { 1292 | "jshint": "bin/jshint" 1293 | } 1294 | }, 1295 | "node_modules/jsonfile": { 1296 | "version": "4.0.0", 1297 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1298 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 1299 | "optionalDependencies": { 1300 | "graceful-fs": "^4.1.6" 1301 | } 1302 | }, 1303 | "node_modules/locate-path": { 1304 | "version": "6.0.0", 1305 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1306 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1307 | "dev": true, 1308 | "dependencies": { 1309 | "p-locate": "^5.0.0" 1310 | }, 1311 | "engines": { 1312 | "node": ">=10" 1313 | }, 1314 | "funding": { 1315 | "url": "https://github.com/sponsors/sindresorhus" 1316 | } 1317 | }, 1318 | "node_modules/lodash": { 1319 | "version": "4.17.21", 1320 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1321 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1322 | "dev": true 1323 | }, 1324 | "node_modules/log-symbols": { 1325 | "version": "4.1.0", 1326 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1327 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1328 | "dev": true, 1329 | "dependencies": { 1330 | "chalk": "^4.1.0", 1331 | "is-unicode-supported": "^0.1.0" 1332 | }, 1333 | "engines": { 1334 | "node": ">=10" 1335 | }, 1336 | "funding": { 1337 | "url": "https://github.com/sponsors/sindresorhus" 1338 | } 1339 | }, 1340 | "node_modules/lru-cache": { 1341 | "version": "7.18.3", 1342 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 1343 | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", 1344 | "engines": { 1345 | "node": ">=12" 1346 | } 1347 | }, 1348 | "node_modules/media-typer": { 1349 | "version": "0.3.0", 1350 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1351 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1352 | "dev": true, 1353 | "engines": { 1354 | "node": ">= 0.6" 1355 | } 1356 | }, 1357 | "node_modules/merge-descriptors": { 1358 | "version": "1.0.3", 1359 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", 1360 | "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", 1361 | "dev": true, 1362 | "funding": { 1363 | "url": "https://github.com/sponsors/sindresorhus" 1364 | } 1365 | }, 1366 | "node_modules/methods": { 1367 | "version": "1.1.2", 1368 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1369 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 1370 | "dev": true, 1371 | "engines": { 1372 | "node": ">= 0.6" 1373 | } 1374 | }, 1375 | "node_modules/mime": { 1376 | "version": "1.6.0", 1377 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1378 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1379 | "dev": true, 1380 | "bin": { 1381 | "mime": "cli.js" 1382 | }, 1383 | "engines": { 1384 | "node": ">=4" 1385 | } 1386 | }, 1387 | "node_modules/mime-db": { 1388 | "version": "1.52.0", 1389 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1390 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1391 | "dev": true, 1392 | "engines": { 1393 | "node": ">= 0.6" 1394 | } 1395 | }, 1396 | "node_modules/mime-types": { 1397 | "version": "2.1.35", 1398 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1399 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1400 | "dev": true, 1401 | "dependencies": { 1402 | "mime-db": "1.52.0" 1403 | }, 1404 | "engines": { 1405 | "node": ">= 0.6" 1406 | } 1407 | }, 1408 | "node_modules/minimatch": { 1409 | "version": "3.0.8", 1410 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", 1411 | "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", 1412 | "dev": true, 1413 | "dependencies": { 1414 | "brace-expansion": "^1.1.7" 1415 | }, 1416 | "engines": { 1417 | "node": "*" 1418 | } 1419 | }, 1420 | "node_modules/mocha": { 1421 | "version": "10.8.2", 1422 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", 1423 | "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", 1424 | "dev": true, 1425 | "dependencies": { 1426 | "ansi-colors": "^4.1.3", 1427 | "browser-stdout": "^1.3.1", 1428 | "chokidar": "^3.5.3", 1429 | "debug": "^4.3.5", 1430 | "diff": "^5.2.0", 1431 | "escape-string-regexp": "^4.0.0", 1432 | "find-up": "^5.0.0", 1433 | "glob": "^8.1.0", 1434 | "he": "^1.2.0", 1435 | "js-yaml": "^4.1.0", 1436 | "log-symbols": "^4.1.0", 1437 | "minimatch": "^5.1.6", 1438 | "ms": "^2.1.3", 1439 | "serialize-javascript": "^6.0.2", 1440 | "strip-json-comments": "^3.1.1", 1441 | "supports-color": "^8.1.1", 1442 | "workerpool": "^6.5.1", 1443 | "yargs": "^16.2.0", 1444 | "yargs-parser": "^20.2.9", 1445 | "yargs-unparser": "^2.0.0" 1446 | }, 1447 | "bin": { 1448 | "_mocha": "bin/_mocha", 1449 | "mocha": "bin/mocha.js" 1450 | }, 1451 | "engines": { 1452 | "node": ">= 14.0.0" 1453 | } 1454 | }, 1455 | "node_modules/mocha/node_modules/brace-expansion": { 1456 | "version": "2.0.1", 1457 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1458 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1459 | "dev": true, 1460 | "dependencies": { 1461 | "balanced-match": "^1.0.0" 1462 | } 1463 | }, 1464 | "node_modules/mocha/node_modules/glob": { 1465 | "version": "8.1.0", 1466 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 1467 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 1468 | "dev": true, 1469 | "dependencies": { 1470 | "fs.realpath": "^1.0.0", 1471 | "inflight": "^1.0.4", 1472 | "inherits": "2", 1473 | "minimatch": "^5.0.1", 1474 | "once": "^1.3.0" 1475 | }, 1476 | "engines": { 1477 | "node": ">=12" 1478 | }, 1479 | "funding": { 1480 | "url": "https://github.com/sponsors/isaacs" 1481 | } 1482 | }, 1483 | "node_modules/mocha/node_modules/minimatch": { 1484 | "version": "5.1.6", 1485 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 1486 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 1487 | "dev": true, 1488 | "dependencies": { 1489 | "brace-expansion": "^2.0.1" 1490 | }, 1491 | "engines": { 1492 | "node": ">=10" 1493 | } 1494 | }, 1495 | "node_modules/mocha/node_modules/strip-json-comments": { 1496 | "version": "3.1.1", 1497 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1498 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1499 | "dev": true, 1500 | "engines": { 1501 | "node": ">=8" 1502 | }, 1503 | "funding": { 1504 | "url": "https://github.com/sponsors/sindresorhus" 1505 | } 1506 | }, 1507 | "node_modules/ms": { 1508 | "version": "2.1.3", 1509 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1510 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1511 | }, 1512 | "node_modules/needle": { 1513 | "version": "3.3.1", 1514 | "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", 1515 | "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", 1516 | "dependencies": { 1517 | "iconv-lite": "^0.6.3", 1518 | "sax": "^1.2.4" 1519 | }, 1520 | "bin": { 1521 | "needle": "bin/needle" 1522 | }, 1523 | "engines": { 1524 | "node": ">= 4.4.x" 1525 | } 1526 | }, 1527 | "node_modules/needle/node_modules/iconv-lite": { 1528 | "version": "0.6.3", 1529 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 1530 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 1531 | "dependencies": { 1532 | "safer-buffer": ">= 2.1.2 < 3.0.0" 1533 | }, 1534 | "engines": { 1535 | "node": ">=0.10.0" 1536 | } 1537 | }, 1538 | "node_modules/negotiator": { 1539 | "version": "0.6.3", 1540 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1541 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1542 | "dev": true, 1543 | "engines": { 1544 | "node": ">= 0.6" 1545 | } 1546 | }, 1547 | "node_modules/netmask": { 1548 | "version": "2.0.2", 1549 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", 1550 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", 1551 | "engines": { 1552 | "node": ">= 0.4.0" 1553 | } 1554 | }, 1555 | "node_modules/node-email-verifier": { 1556 | "version": "2.0.0", 1557 | "resolved": "https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-2.0.0.tgz", 1558 | "integrity": "sha512-AHcppjOH2KT0mxakrxFMOMjV/gOVMRpYvnJUkNfgF9oJ3INdVmqcMFJ5TlM8elpTPwt6A7bSp1IMnnWcxGom/Q==", 1559 | "license": "MIT", 1560 | "dependencies": { 1561 | "ms": "^2.1.3", 1562 | "validator": "^13.11.0" 1563 | }, 1564 | "engines": { 1565 | "node": ">=16.0.0" 1566 | } 1567 | }, 1568 | "node_modules/normalize-path": { 1569 | "version": "3.0.0", 1570 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1571 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1572 | "dev": true, 1573 | "engines": { 1574 | "node": ">=0.10.0" 1575 | } 1576 | }, 1577 | "node_modules/object-inspect": { 1578 | "version": "1.13.2", 1579 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", 1580 | "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", 1581 | "dev": true, 1582 | "engines": { 1583 | "node": ">= 0.4" 1584 | }, 1585 | "funding": { 1586 | "url": "https://github.com/sponsors/ljharb" 1587 | } 1588 | }, 1589 | "node_modules/on-finished": { 1590 | "version": "2.4.1", 1591 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1592 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1593 | "dev": true, 1594 | "dependencies": { 1595 | "ee-first": "1.1.1" 1596 | }, 1597 | "engines": { 1598 | "node": ">= 0.8" 1599 | } 1600 | }, 1601 | "node_modules/once": { 1602 | "version": "1.4.0", 1603 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1604 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1605 | "dev": true, 1606 | "dependencies": { 1607 | "wrappy": "1" 1608 | } 1609 | }, 1610 | "node_modules/p-limit": { 1611 | "version": "3.1.0", 1612 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1613 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1614 | "dev": true, 1615 | "dependencies": { 1616 | "yocto-queue": "^0.1.0" 1617 | }, 1618 | "engines": { 1619 | "node": ">=10" 1620 | }, 1621 | "funding": { 1622 | "url": "https://github.com/sponsors/sindresorhus" 1623 | } 1624 | }, 1625 | "node_modules/p-locate": { 1626 | "version": "5.0.0", 1627 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1628 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1629 | "dev": true, 1630 | "dependencies": { 1631 | "p-limit": "^3.0.2" 1632 | }, 1633 | "engines": { 1634 | "node": ">=10" 1635 | }, 1636 | "funding": { 1637 | "url": "https://github.com/sponsors/sindresorhus" 1638 | } 1639 | }, 1640 | "node_modules/pac-proxy-agent": { 1641 | "version": "7.0.1", 1642 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", 1643 | "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", 1644 | "dependencies": { 1645 | "@tootallnate/quickjs-emscripten": "^0.23.0", 1646 | "agent-base": "^7.0.2", 1647 | "debug": "^4.3.4", 1648 | "get-uri": "^6.0.1", 1649 | "http-proxy-agent": "^7.0.0", 1650 | "https-proxy-agent": "^7.0.2", 1651 | "pac-resolver": "^7.0.0", 1652 | "socks-proxy-agent": "^8.0.2" 1653 | }, 1654 | "engines": { 1655 | "node": ">= 14" 1656 | } 1657 | }, 1658 | "node_modules/pac-resolver": { 1659 | "version": "7.0.1", 1660 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", 1661 | "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", 1662 | "dependencies": { 1663 | "degenerator": "^5.0.0", 1664 | "netmask": "^2.0.2" 1665 | }, 1666 | "engines": { 1667 | "node": ">= 14" 1668 | } 1669 | }, 1670 | "node_modules/parseurl": { 1671 | "version": "1.3.3", 1672 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1673 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1674 | "dev": true, 1675 | "engines": { 1676 | "node": ">= 0.8" 1677 | } 1678 | }, 1679 | "node_modules/path-exists": { 1680 | "version": "4.0.0", 1681 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1682 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1683 | "dev": true, 1684 | "engines": { 1685 | "node": ">=8" 1686 | } 1687 | }, 1688 | "node_modules/path-is-absolute": { 1689 | "version": "1.0.1", 1690 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1691 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1692 | "dev": true, 1693 | "engines": { 1694 | "node": ">=0.10.0" 1695 | } 1696 | }, 1697 | "node_modules/path-to-regexp": { 1698 | "version": "0.1.10", 1699 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", 1700 | "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", 1701 | "dev": true 1702 | }, 1703 | "node_modules/picomatch": { 1704 | "version": "2.3.1", 1705 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1706 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1707 | "dev": true, 1708 | "engines": { 1709 | "node": ">=8.6" 1710 | }, 1711 | "funding": { 1712 | "url": "https://github.com/sponsors/jonschlinkert" 1713 | } 1714 | }, 1715 | "node_modules/proxy-addr": { 1716 | "version": "2.0.7", 1717 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1718 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1719 | "dev": true, 1720 | "dependencies": { 1721 | "forwarded": "0.2.0", 1722 | "ipaddr.js": "1.9.1" 1723 | }, 1724 | "engines": { 1725 | "node": ">= 0.10" 1726 | } 1727 | }, 1728 | "node_modules/proxy-agent": { 1729 | "version": "6.4.0", 1730 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", 1731 | "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", 1732 | "dependencies": { 1733 | "agent-base": "^7.0.2", 1734 | "debug": "^4.3.4", 1735 | "http-proxy-agent": "^7.0.1", 1736 | "https-proxy-agent": "^7.0.3", 1737 | "lru-cache": "^7.14.1", 1738 | "pac-proxy-agent": "^7.0.1", 1739 | "proxy-from-env": "^1.1.0", 1740 | "socks-proxy-agent": "^8.0.2" 1741 | }, 1742 | "engines": { 1743 | "node": ">= 14" 1744 | } 1745 | }, 1746 | "node_modules/proxy-from-env": { 1747 | "version": "1.1.0", 1748 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1749 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 1750 | }, 1751 | "node_modules/qs": { 1752 | "version": "6.13.0", 1753 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 1754 | "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 1755 | "dev": true, 1756 | "dependencies": { 1757 | "side-channel": "^1.0.6" 1758 | }, 1759 | "engines": { 1760 | "node": ">=0.6" 1761 | }, 1762 | "funding": { 1763 | "url": "https://github.com/sponsors/ljharb" 1764 | } 1765 | }, 1766 | "node_modules/randombytes": { 1767 | "version": "2.1.0", 1768 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1769 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1770 | "dev": true, 1771 | "dependencies": { 1772 | "safe-buffer": "^5.1.0" 1773 | } 1774 | }, 1775 | "node_modules/range-parser": { 1776 | "version": "1.2.1", 1777 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1778 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1779 | "dev": true, 1780 | "engines": { 1781 | "node": ">= 0.6" 1782 | } 1783 | }, 1784 | "node_modules/raw-body": { 1785 | "version": "2.5.2", 1786 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 1787 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 1788 | "dev": true, 1789 | "dependencies": { 1790 | "bytes": "3.1.2", 1791 | "http-errors": "2.0.0", 1792 | "iconv-lite": "0.4.24", 1793 | "unpipe": "1.0.0" 1794 | }, 1795 | "engines": { 1796 | "node": ">= 0.8" 1797 | } 1798 | }, 1799 | "node_modules/readable-stream": { 1800 | "version": "1.1.14", 1801 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1802 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 1803 | "dev": true, 1804 | "dependencies": { 1805 | "core-util-is": "~1.0.0", 1806 | "inherits": "~2.0.1", 1807 | "isarray": "0.0.1", 1808 | "string_decoder": "~0.10.x" 1809 | } 1810 | }, 1811 | "node_modules/readdirp": { 1812 | "version": "3.6.0", 1813 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1814 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1815 | "dev": true, 1816 | "dependencies": { 1817 | "picomatch": "^2.2.1" 1818 | }, 1819 | "engines": { 1820 | "node": ">=8.10.0" 1821 | } 1822 | }, 1823 | "node_modules/require-directory": { 1824 | "version": "2.1.1", 1825 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1826 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1827 | "dev": true, 1828 | "engines": { 1829 | "node": ">=0.10.0" 1830 | } 1831 | }, 1832 | "node_modules/safe-buffer": { 1833 | "version": "5.2.1", 1834 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1835 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1836 | "dev": true, 1837 | "funding": [ 1838 | { 1839 | "type": "github", 1840 | "url": "https://github.com/sponsors/feross" 1841 | }, 1842 | { 1843 | "type": "patreon", 1844 | "url": "https://www.patreon.com/feross" 1845 | }, 1846 | { 1847 | "type": "consulting", 1848 | "url": "https://feross.org/support" 1849 | } 1850 | ] 1851 | }, 1852 | "node_modules/safer-buffer": { 1853 | "version": "2.1.2", 1854 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1855 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1856 | }, 1857 | "node_modules/sax": { 1858 | "version": "1.2.4", 1859 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1860 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 1861 | }, 1862 | "node_modules/send": { 1863 | "version": "0.19.0", 1864 | "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", 1865 | "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", 1866 | "dev": true, 1867 | "dependencies": { 1868 | "debug": "2.6.9", 1869 | "depd": "2.0.0", 1870 | "destroy": "1.2.0", 1871 | "encodeurl": "~1.0.2", 1872 | "escape-html": "~1.0.3", 1873 | "etag": "~1.8.1", 1874 | "fresh": "0.5.2", 1875 | "http-errors": "2.0.0", 1876 | "mime": "1.6.0", 1877 | "ms": "2.1.3", 1878 | "on-finished": "2.4.1", 1879 | "range-parser": "~1.2.1", 1880 | "statuses": "2.0.1" 1881 | }, 1882 | "engines": { 1883 | "node": ">= 0.8.0" 1884 | } 1885 | }, 1886 | "node_modules/send/node_modules/debug": { 1887 | "version": "2.6.9", 1888 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1889 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1890 | "dev": true, 1891 | "dependencies": { 1892 | "ms": "2.0.0" 1893 | } 1894 | }, 1895 | "node_modules/send/node_modules/debug/node_modules/ms": { 1896 | "version": "2.0.0", 1897 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1898 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 1899 | "dev": true 1900 | }, 1901 | "node_modules/send/node_modules/encodeurl": { 1902 | "version": "1.0.2", 1903 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1904 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 1905 | "dev": true, 1906 | "engines": { 1907 | "node": ">= 0.8" 1908 | } 1909 | }, 1910 | "node_modules/serialize-javascript": { 1911 | "version": "6.0.2", 1912 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 1913 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 1914 | "dev": true, 1915 | "dependencies": { 1916 | "randombytes": "^2.1.0" 1917 | } 1918 | }, 1919 | "node_modules/serve-static": { 1920 | "version": "1.16.2", 1921 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", 1922 | "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", 1923 | "dev": true, 1924 | "dependencies": { 1925 | "encodeurl": "~2.0.0", 1926 | "escape-html": "~1.0.3", 1927 | "parseurl": "~1.3.3", 1928 | "send": "0.19.0" 1929 | }, 1930 | "engines": { 1931 | "node": ">= 0.8.0" 1932 | } 1933 | }, 1934 | "node_modules/set-function-length": { 1935 | "version": "1.2.2", 1936 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 1937 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 1938 | "dev": true, 1939 | "dependencies": { 1940 | "define-data-property": "^1.1.4", 1941 | "es-errors": "^1.3.0", 1942 | "function-bind": "^1.1.2", 1943 | "get-intrinsic": "^1.2.4", 1944 | "gopd": "^1.0.1", 1945 | "has-property-descriptors": "^1.0.2" 1946 | }, 1947 | "engines": { 1948 | "node": ">= 0.4" 1949 | } 1950 | }, 1951 | "node_modules/setprototypeof": { 1952 | "version": "1.2.0", 1953 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1954 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 1955 | "dev": true 1956 | }, 1957 | "node_modules/side-channel": { 1958 | "version": "1.0.6", 1959 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 1960 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 1961 | "dev": true, 1962 | "dependencies": { 1963 | "call-bind": "^1.0.7", 1964 | "es-errors": "^1.3.0", 1965 | "get-intrinsic": "^1.2.4", 1966 | "object-inspect": "^1.13.1" 1967 | }, 1968 | "engines": { 1969 | "node": ">= 0.4" 1970 | }, 1971 | "funding": { 1972 | "url": "https://github.com/sponsors/ljharb" 1973 | } 1974 | }, 1975 | "node_modules/smart-buffer": { 1976 | "version": "4.2.0", 1977 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1978 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1979 | "engines": { 1980 | "node": ">= 6.0.0", 1981 | "npm": ">= 3.0.0" 1982 | } 1983 | }, 1984 | "node_modules/socks": { 1985 | "version": "2.8.3", 1986 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", 1987 | "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", 1988 | "dependencies": { 1989 | "ip-address": "^9.0.5", 1990 | "smart-buffer": "^4.2.0" 1991 | }, 1992 | "engines": { 1993 | "node": ">= 10.0.0", 1994 | "npm": ">= 3.0.0" 1995 | } 1996 | }, 1997 | "node_modules/socks-proxy-agent": { 1998 | "version": "8.0.2", 1999 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", 2000 | "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", 2001 | "dependencies": { 2002 | "agent-base": "^7.0.2", 2003 | "debug": "^4.3.4", 2004 | "socks": "^2.7.1" 2005 | }, 2006 | "engines": { 2007 | "node": ">= 14" 2008 | } 2009 | }, 2010 | "node_modules/source-map": { 2011 | "version": "0.6.1", 2012 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2013 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2014 | "optional": true, 2015 | "engines": { 2016 | "node": ">=0.10.0" 2017 | } 2018 | }, 2019 | "node_modules/sprintf-js": { 2020 | "version": "1.1.3", 2021 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", 2022 | "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" 2023 | }, 2024 | "node_modules/statuses": { 2025 | "version": "2.0.1", 2026 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 2027 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 2028 | "dev": true, 2029 | "engines": { 2030 | "node": ">= 0.8" 2031 | } 2032 | }, 2033 | "node_modules/string_decoder": { 2034 | "version": "0.10.31", 2035 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2036 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 2037 | "dev": true 2038 | }, 2039 | "node_modules/string-width": { 2040 | "version": "4.2.3", 2041 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2042 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2043 | "dev": true, 2044 | "dependencies": { 2045 | "emoji-regex": "^8.0.0", 2046 | "is-fullwidth-code-point": "^3.0.0", 2047 | "strip-ansi": "^6.0.1" 2048 | }, 2049 | "engines": { 2050 | "node": ">=8" 2051 | } 2052 | }, 2053 | "node_modules/strip-ansi": { 2054 | "version": "6.0.1", 2055 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2056 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2057 | "dev": true, 2058 | "dependencies": { 2059 | "ansi-regex": "^5.0.1" 2060 | }, 2061 | "engines": { 2062 | "node": ">=8" 2063 | } 2064 | }, 2065 | "node_modules/strip-json-comments": { 2066 | "version": "1.0.4", 2067 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 2068 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", 2069 | "dev": true, 2070 | "bin": { 2071 | "strip-json-comments": "cli.js" 2072 | }, 2073 | "engines": { 2074 | "node": ">=0.8.0" 2075 | } 2076 | }, 2077 | "node_modules/supports-color": { 2078 | "version": "8.1.1", 2079 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 2080 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 2081 | "dev": true, 2082 | "dependencies": { 2083 | "has-flag": "^4.0.0" 2084 | }, 2085 | "engines": { 2086 | "node": ">=10" 2087 | }, 2088 | "funding": { 2089 | "url": "https://github.com/chalk/supports-color?sponsor=1" 2090 | } 2091 | }, 2092 | "node_modules/to-regex-range": { 2093 | "version": "5.0.1", 2094 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2095 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2096 | "dev": true, 2097 | "dependencies": { 2098 | "is-number": "^7.0.0" 2099 | }, 2100 | "engines": { 2101 | "node": ">=8.0" 2102 | } 2103 | }, 2104 | "node_modules/toidentifier": { 2105 | "version": "1.0.1", 2106 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2107 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 2108 | "dev": true, 2109 | "engines": { 2110 | "node": ">=0.6" 2111 | } 2112 | }, 2113 | "node_modules/tslib": { 2114 | "version": "2.6.2", 2115 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 2116 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" 2117 | }, 2118 | "node_modules/type-is": { 2119 | "version": "1.6.18", 2120 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2121 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2122 | "dev": true, 2123 | "dependencies": { 2124 | "media-typer": "0.3.0", 2125 | "mime-types": "~2.1.24" 2126 | }, 2127 | "engines": { 2128 | "node": ">= 0.6" 2129 | } 2130 | }, 2131 | "node_modules/universalify": { 2132 | "version": "0.1.2", 2133 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 2134 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 2135 | "engines": { 2136 | "node": ">= 4.0.0" 2137 | } 2138 | }, 2139 | "node_modules/unpipe": { 2140 | "version": "1.0.0", 2141 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2142 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 2143 | "dev": true, 2144 | "engines": { 2145 | "node": ">= 0.8" 2146 | } 2147 | }, 2148 | "node_modules/utils-merge": { 2149 | "version": "1.0.1", 2150 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2151 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 2152 | "dev": true, 2153 | "engines": { 2154 | "node": ">= 0.4.0" 2155 | } 2156 | }, 2157 | "node_modules/validator": { 2158 | "version": "13.12.0", 2159 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", 2160 | "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", 2161 | "engines": { 2162 | "node": ">= 0.10" 2163 | } 2164 | }, 2165 | "node_modules/vary": { 2166 | "version": "1.1.2", 2167 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2168 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 2169 | "dev": true, 2170 | "engines": { 2171 | "node": ">= 0.8" 2172 | } 2173 | }, 2174 | "node_modules/workerpool": { 2175 | "version": "6.5.1", 2176 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", 2177 | "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", 2178 | "dev": true 2179 | }, 2180 | "node_modules/wrap-ansi": { 2181 | "version": "7.0.0", 2182 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2183 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2184 | "dev": true, 2185 | "dependencies": { 2186 | "ansi-styles": "^4.0.0", 2187 | "string-width": "^4.1.0", 2188 | "strip-ansi": "^6.0.0" 2189 | }, 2190 | "engines": { 2191 | "node": ">=10" 2192 | }, 2193 | "funding": { 2194 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2195 | } 2196 | }, 2197 | "node_modules/wrappy": { 2198 | "version": "1.0.2", 2199 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2200 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2201 | "dev": true 2202 | }, 2203 | "node_modules/y18n": { 2204 | "version": "5.0.8", 2205 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2206 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2207 | "dev": true, 2208 | "engines": { 2209 | "node": ">=10" 2210 | } 2211 | }, 2212 | "node_modules/yargs": { 2213 | "version": "16.2.0", 2214 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2215 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2216 | "dev": true, 2217 | "dependencies": { 2218 | "cliui": "^7.0.2", 2219 | "escalade": "^3.1.1", 2220 | "get-caller-file": "^2.0.5", 2221 | "require-directory": "^2.1.1", 2222 | "string-width": "^4.2.0", 2223 | "y18n": "^5.0.5", 2224 | "yargs-parser": "^20.2.2" 2225 | }, 2226 | "engines": { 2227 | "node": ">=10" 2228 | } 2229 | }, 2230 | "node_modules/yargs-parser": { 2231 | "version": "20.2.9", 2232 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 2233 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 2234 | "dev": true, 2235 | "engines": { 2236 | "node": ">=10" 2237 | } 2238 | }, 2239 | "node_modules/yargs-unparser": { 2240 | "version": "2.0.0", 2241 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 2242 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 2243 | "dev": true, 2244 | "dependencies": { 2245 | "camelcase": "^6.0.0", 2246 | "decamelize": "^4.0.0", 2247 | "flat": "^5.0.2", 2248 | "is-plain-obj": "^2.1.0" 2249 | }, 2250 | "engines": { 2251 | "node": ">=10" 2252 | } 2253 | }, 2254 | "node_modules/yocto-queue": { 2255 | "version": "0.1.0", 2256 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2257 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2258 | "dev": true, 2259 | "engines": { 2260 | "node": ">=10" 2261 | }, 2262 | "funding": { 2263 | "url": "https://github.com/sponsors/sindresorhus" 2264 | } 2265 | } 2266 | }, 2267 | "dependencies": { 2268 | "@tootallnate/quickjs-emscripten": { 2269 | "version": "0.23.0", 2270 | "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", 2271 | "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" 2272 | }, 2273 | "accepts": { 2274 | "version": "1.3.8", 2275 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 2276 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 2277 | "dev": true, 2278 | "requires": { 2279 | "mime-types": "~2.1.34", 2280 | "negotiator": "0.6.3" 2281 | } 2282 | }, 2283 | "agent-base": { 2284 | "version": "7.1.0", 2285 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", 2286 | "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", 2287 | "requires": { 2288 | "debug": "^4.3.4" 2289 | } 2290 | }, 2291 | "ansi-colors": { 2292 | "version": "4.1.3", 2293 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", 2294 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", 2295 | "dev": true 2296 | }, 2297 | "ansi-regex": { 2298 | "version": "5.0.1", 2299 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2300 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2301 | "dev": true 2302 | }, 2303 | "ansi-styles": { 2304 | "version": "4.3.0", 2305 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2306 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2307 | "dev": true, 2308 | "requires": { 2309 | "color-convert": "^2.0.1" 2310 | } 2311 | }, 2312 | "anymatch": { 2313 | "version": "3.1.2", 2314 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 2315 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 2316 | "dev": true, 2317 | "requires": { 2318 | "normalize-path": "^3.0.0", 2319 | "picomatch": "^2.0.4" 2320 | } 2321 | }, 2322 | "argparse": { 2323 | "version": "2.0.1", 2324 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2325 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2326 | "dev": true 2327 | }, 2328 | "array-flatten": { 2329 | "version": "1.1.1", 2330 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 2331 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", 2332 | "dev": true 2333 | }, 2334 | "ast-types": { 2335 | "version": "0.13.4", 2336 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", 2337 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", 2338 | "requires": { 2339 | "tslib": "^2.0.1" 2340 | } 2341 | }, 2342 | "balanced-match": { 2343 | "version": "1.0.2", 2344 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2345 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2346 | "dev": true 2347 | }, 2348 | "basic-ftp": { 2349 | "version": "5.0.4", 2350 | "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", 2351 | "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==" 2352 | }, 2353 | "binary-extensions": { 2354 | "version": "2.2.0", 2355 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 2356 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 2357 | "dev": true 2358 | }, 2359 | "body-parser": { 2360 | "version": "1.20.3", 2361 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", 2362 | "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", 2363 | "dev": true, 2364 | "requires": { 2365 | "bytes": "3.1.2", 2366 | "content-type": "~1.0.5", 2367 | "debug": "2.6.9", 2368 | "depd": "2.0.0", 2369 | "destroy": "1.2.0", 2370 | "http-errors": "2.0.0", 2371 | "iconv-lite": "0.4.24", 2372 | "on-finished": "2.4.1", 2373 | "qs": "6.13.0", 2374 | "raw-body": "2.5.2", 2375 | "type-is": "~1.6.18", 2376 | "unpipe": "1.0.0" 2377 | }, 2378 | "dependencies": { 2379 | "debug": { 2380 | "version": "2.6.9", 2381 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2382 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2383 | "dev": true, 2384 | "requires": { 2385 | "ms": "2.0.0" 2386 | } 2387 | }, 2388 | "ms": { 2389 | "version": "2.0.0", 2390 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2391 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 2392 | "dev": true 2393 | } 2394 | } 2395 | }, 2396 | "brace-expansion": { 2397 | "version": "1.1.11", 2398 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2399 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2400 | "dev": true, 2401 | "requires": { 2402 | "balanced-match": "^1.0.0", 2403 | "concat-map": "0.0.1" 2404 | } 2405 | }, 2406 | "braces": { 2407 | "version": "3.0.3", 2408 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 2409 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 2410 | "dev": true, 2411 | "requires": { 2412 | "fill-range": "^7.1.1" 2413 | } 2414 | }, 2415 | "browser-stdout": { 2416 | "version": "1.3.1", 2417 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 2418 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 2419 | "dev": true 2420 | }, 2421 | "bytes": { 2422 | "version": "3.1.2", 2423 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 2424 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 2425 | "dev": true 2426 | }, 2427 | "call-bind": { 2428 | "version": "1.0.7", 2429 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 2430 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 2431 | "dev": true, 2432 | "requires": { 2433 | "es-define-property": "^1.0.0", 2434 | "es-errors": "^1.3.0", 2435 | "function-bind": "^1.1.2", 2436 | "get-intrinsic": "^1.2.4", 2437 | "set-function-length": "^1.2.1" 2438 | } 2439 | }, 2440 | "camelcase": { 2441 | "version": "6.3.0", 2442 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 2443 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 2444 | "dev": true 2445 | }, 2446 | "chalk": { 2447 | "version": "4.1.2", 2448 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2449 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2450 | "dev": true, 2451 | "requires": { 2452 | "ansi-styles": "^4.1.0", 2453 | "supports-color": "^7.1.0" 2454 | }, 2455 | "dependencies": { 2456 | "supports-color": { 2457 | "version": "7.2.0", 2458 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2459 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2460 | "dev": true, 2461 | "requires": { 2462 | "has-flag": "^4.0.0" 2463 | } 2464 | } 2465 | } 2466 | }, 2467 | "chokidar": { 2468 | "version": "3.5.3", 2469 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 2470 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 2471 | "dev": true, 2472 | "requires": { 2473 | "anymatch": "~3.1.2", 2474 | "braces": "~3.0.2", 2475 | "fsevents": "~2.3.2", 2476 | "glob-parent": "~5.1.2", 2477 | "is-binary-path": "~2.1.0", 2478 | "is-glob": "~4.0.1", 2479 | "normalize-path": "~3.0.0", 2480 | "readdirp": "~3.6.0" 2481 | } 2482 | }, 2483 | "cli": { 2484 | "version": "1.0.1", 2485 | "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", 2486 | "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", 2487 | "dev": true, 2488 | "requires": { 2489 | "exit": "0.1.2", 2490 | "glob": "^7.1.1" 2491 | } 2492 | }, 2493 | "cliui": { 2494 | "version": "7.0.4", 2495 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2496 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2497 | "dev": true, 2498 | "requires": { 2499 | "string-width": "^4.2.0", 2500 | "strip-ansi": "^6.0.0", 2501 | "wrap-ansi": "^7.0.0" 2502 | } 2503 | }, 2504 | "color-convert": { 2505 | "version": "2.0.1", 2506 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2507 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2508 | "dev": true, 2509 | "requires": { 2510 | "color-name": "~1.1.4" 2511 | } 2512 | }, 2513 | "color-name": { 2514 | "version": "1.1.4", 2515 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2516 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2517 | "dev": true 2518 | }, 2519 | "concat-map": { 2520 | "version": "0.0.1", 2521 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2522 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 2523 | "dev": true 2524 | }, 2525 | "console-browserify": { 2526 | "version": "1.1.0", 2527 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 2528 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 2529 | "dev": true, 2530 | "requires": { 2531 | "date-now": "^0.1.4" 2532 | } 2533 | }, 2534 | "content-disposition": { 2535 | "version": "0.5.4", 2536 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 2537 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 2538 | "dev": true, 2539 | "requires": { 2540 | "safe-buffer": "5.2.1" 2541 | } 2542 | }, 2543 | "content-type": { 2544 | "version": "1.0.5", 2545 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 2546 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 2547 | "dev": true 2548 | }, 2549 | "cookie": { 2550 | "version": "0.7.1", 2551 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", 2552 | "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", 2553 | "dev": true 2554 | }, 2555 | "cookie-signature": { 2556 | "version": "1.0.6", 2557 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 2558 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", 2559 | "dev": true 2560 | }, 2561 | "core-util-is": { 2562 | "version": "1.0.3", 2563 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 2564 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 2565 | "dev": true 2566 | }, 2567 | "data-uri-to-buffer": { 2568 | "version": "6.0.1", 2569 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", 2570 | "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==" 2571 | }, 2572 | "date-now": { 2573 | "version": "0.1.4", 2574 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 2575 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 2576 | "dev": true 2577 | }, 2578 | "debug": { 2579 | "version": "4.3.7", 2580 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 2581 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 2582 | "requires": { 2583 | "ms": "^2.1.3" 2584 | } 2585 | }, 2586 | "decamelize": { 2587 | "version": "4.0.0", 2588 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 2589 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 2590 | "dev": true 2591 | }, 2592 | "define-data-property": { 2593 | "version": "1.1.4", 2594 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 2595 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 2596 | "dev": true, 2597 | "requires": { 2598 | "es-define-property": "^1.0.0", 2599 | "es-errors": "^1.3.0", 2600 | "gopd": "^1.0.1" 2601 | } 2602 | }, 2603 | "degenerator": { 2604 | "version": "5.0.1", 2605 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", 2606 | "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", 2607 | "requires": { 2608 | "ast-types": "^0.13.4", 2609 | "escodegen": "^2.1.0", 2610 | "esprima": "^4.0.1" 2611 | } 2612 | }, 2613 | "depd": { 2614 | "version": "2.0.0", 2615 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 2616 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 2617 | "dev": true 2618 | }, 2619 | "destroy": { 2620 | "version": "1.2.0", 2621 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 2622 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 2623 | "dev": true 2624 | }, 2625 | "diff": { 2626 | "version": "5.2.0", 2627 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", 2628 | "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", 2629 | "dev": true 2630 | }, 2631 | "dom-serializer": { 2632 | "version": "0.2.2", 2633 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", 2634 | "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", 2635 | "dev": true, 2636 | "requires": { 2637 | "domelementtype": "^2.0.1", 2638 | "entities": "^2.0.0" 2639 | }, 2640 | "dependencies": { 2641 | "domelementtype": { 2642 | "version": "2.2.0", 2643 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", 2644 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", 2645 | "dev": true 2646 | }, 2647 | "entities": { 2648 | "version": "2.2.0", 2649 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 2650 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 2651 | "dev": true 2652 | } 2653 | } 2654 | }, 2655 | "domelementtype": { 2656 | "version": "1.3.1", 2657 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 2658 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 2659 | "dev": true 2660 | }, 2661 | "domhandler": { 2662 | "version": "2.3.0", 2663 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", 2664 | "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", 2665 | "dev": true, 2666 | "requires": { 2667 | "domelementtype": "1" 2668 | } 2669 | }, 2670 | "domutils": { 2671 | "version": "1.5.1", 2672 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 2673 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 2674 | "dev": true, 2675 | "requires": { 2676 | "dom-serializer": "0", 2677 | "domelementtype": "1" 2678 | } 2679 | }, 2680 | "ee-first": { 2681 | "version": "1.1.1", 2682 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 2683 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 2684 | "dev": true 2685 | }, 2686 | "emoji-regex": { 2687 | "version": "8.0.0", 2688 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2689 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2690 | "dev": true 2691 | }, 2692 | "encodeurl": { 2693 | "version": "2.0.0", 2694 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 2695 | "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 2696 | "dev": true 2697 | }, 2698 | "entities": { 2699 | "version": "1.0.0", 2700 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", 2701 | "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", 2702 | "dev": true 2703 | }, 2704 | "es-define-property": { 2705 | "version": "1.0.0", 2706 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 2707 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 2708 | "dev": true, 2709 | "requires": { 2710 | "get-intrinsic": "^1.2.4" 2711 | } 2712 | }, 2713 | "es-errors": { 2714 | "version": "1.3.0", 2715 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 2716 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 2717 | "dev": true 2718 | }, 2719 | "escalade": { 2720 | "version": "3.1.1", 2721 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2722 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2723 | "dev": true 2724 | }, 2725 | "escape-html": { 2726 | "version": "1.0.3", 2727 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 2728 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 2729 | "dev": true 2730 | }, 2731 | "escape-string-regexp": { 2732 | "version": "4.0.0", 2733 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2734 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2735 | "dev": true 2736 | }, 2737 | "escodegen": { 2738 | "version": "2.1.0", 2739 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", 2740 | "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", 2741 | "requires": { 2742 | "esprima": "^4.0.1", 2743 | "estraverse": "^5.2.0", 2744 | "esutils": "^2.0.2", 2745 | "source-map": "~0.6.1" 2746 | } 2747 | }, 2748 | "esprima": { 2749 | "version": "4.0.1", 2750 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 2751 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 2752 | }, 2753 | "estraverse": { 2754 | "version": "5.3.0", 2755 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2756 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" 2757 | }, 2758 | "esutils": { 2759 | "version": "2.0.3", 2760 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2761 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 2762 | }, 2763 | "etag": { 2764 | "version": "1.8.1", 2765 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 2766 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 2767 | "dev": true 2768 | }, 2769 | "exit": { 2770 | "version": "0.1.2", 2771 | "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 2772 | "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", 2773 | "dev": true 2774 | }, 2775 | "expect.js": { 2776 | "version": "0.3.1", 2777 | "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", 2778 | "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=", 2779 | "dev": true 2780 | }, 2781 | "express": { 2782 | "version": "4.21.1", 2783 | "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", 2784 | "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", 2785 | "dev": true, 2786 | "requires": { 2787 | "accepts": "~1.3.8", 2788 | "array-flatten": "1.1.1", 2789 | "body-parser": "1.20.3", 2790 | "content-disposition": "0.5.4", 2791 | "content-type": "~1.0.4", 2792 | "cookie": "0.7.1", 2793 | "cookie-signature": "1.0.6", 2794 | "debug": "2.6.9", 2795 | "depd": "2.0.0", 2796 | "encodeurl": "~2.0.0", 2797 | "escape-html": "~1.0.3", 2798 | "etag": "~1.8.1", 2799 | "finalhandler": "1.3.1", 2800 | "fresh": "0.5.2", 2801 | "http-errors": "2.0.0", 2802 | "merge-descriptors": "1.0.3", 2803 | "methods": "~1.1.2", 2804 | "on-finished": "2.4.1", 2805 | "parseurl": "~1.3.3", 2806 | "path-to-regexp": "0.1.10", 2807 | "proxy-addr": "~2.0.7", 2808 | "qs": "6.13.0", 2809 | "range-parser": "~1.2.1", 2810 | "safe-buffer": "5.2.1", 2811 | "send": "0.19.0", 2812 | "serve-static": "1.16.2", 2813 | "setprototypeof": "1.2.0", 2814 | "statuses": "2.0.1", 2815 | "type-is": "~1.6.18", 2816 | "utils-merge": "1.0.1", 2817 | "vary": "~1.1.2" 2818 | }, 2819 | "dependencies": { 2820 | "debug": { 2821 | "version": "2.6.9", 2822 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2823 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2824 | "dev": true, 2825 | "requires": { 2826 | "ms": "2.0.0" 2827 | } 2828 | }, 2829 | "ms": { 2830 | "version": "2.0.0", 2831 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2832 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2833 | "dev": true 2834 | } 2835 | } 2836 | }, 2837 | "fill-range": { 2838 | "version": "7.1.1", 2839 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2840 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2841 | "dev": true, 2842 | "requires": { 2843 | "to-regex-range": "^5.0.1" 2844 | } 2845 | }, 2846 | "finalhandler": { 2847 | "version": "1.3.1", 2848 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", 2849 | "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", 2850 | "dev": true, 2851 | "requires": { 2852 | "debug": "2.6.9", 2853 | "encodeurl": "~2.0.0", 2854 | "escape-html": "~1.0.3", 2855 | "on-finished": "2.4.1", 2856 | "parseurl": "~1.3.3", 2857 | "statuses": "2.0.1", 2858 | "unpipe": "~1.0.0" 2859 | }, 2860 | "dependencies": { 2861 | "debug": { 2862 | "version": "2.6.9", 2863 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2864 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2865 | "dev": true, 2866 | "requires": { 2867 | "ms": "2.0.0" 2868 | } 2869 | }, 2870 | "ms": { 2871 | "version": "2.0.0", 2872 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2873 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 2874 | "dev": true 2875 | } 2876 | } 2877 | }, 2878 | "find-up": { 2879 | "version": "5.0.0", 2880 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2881 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2882 | "dev": true, 2883 | "requires": { 2884 | "locate-path": "^6.0.0", 2885 | "path-exists": "^4.0.0" 2886 | } 2887 | }, 2888 | "flat": { 2889 | "version": "5.0.2", 2890 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 2891 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 2892 | "dev": true 2893 | }, 2894 | "forwarded": { 2895 | "version": "0.2.0", 2896 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 2897 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 2898 | "dev": true 2899 | }, 2900 | "fresh": { 2901 | "version": "0.5.2", 2902 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 2903 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 2904 | "dev": true 2905 | }, 2906 | "fs-extra": { 2907 | "version": "8.1.0", 2908 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 2909 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 2910 | "requires": { 2911 | "graceful-fs": "^4.2.0", 2912 | "jsonfile": "^4.0.0", 2913 | "universalify": "^0.1.0" 2914 | } 2915 | }, 2916 | "fs.realpath": { 2917 | "version": "1.0.0", 2918 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2919 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 2920 | "dev": true 2921 | }, 2922 | "fsevents": { 2923 | "version": "2.3.2", 2924 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2925 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2926 | "dev": true, 2927 | "optional": true 2928 | }, 2929 | "function-bind": { 2930 | "version": "1.1.2", 2931 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2932 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2933 | "dev": true 2934 | }, 2935 | "get-caller-file": { 2936 | "version": "2.0.5", 2937 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2938 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 2939 | "dev": true 2940 | }, 2941 | "get-intrinsic": { 2942 | "version": "1.2.4", 2943 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 2944 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 2945 | "dev": true, 2946 | "requires": { 2947 | "es-errors": "^1.3.0", 2948 | "function-bind": "^1.1.2", 2949 | "has-proto": "^1.0.1", 2950 | "has-symbols": "^1.0.3", 2951 | "hasown": "^2.0.0" 2952 | } 2953 | }, 2954 | "get-uri": { 2955 | "version": "6.0.2", 2956 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", 2957 | "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", 2958 | "requires": { 2959 | "basic-ftp": "^5.0.2", 2960 | "data-uri-to-buffer": "^6.0.0", 2961 | "debug": "^4.3.4", 2962 | "fs-extra": "^8.1.0" 2963 | } 2964 | }, 2965 | "glob": { 2966 | "version": "7.2.0", 2967 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 2968 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 2969 | "dev": true, 2970 | "requires": { 2971 | "fs.realpath": "^1.0.0", 2972 | "inflight": "^1.0.4", 2973 | "inherits": "2", 2974 | "minimatch": "^3.0.4", 2975 | "once": "^1.3.0", 2976 | "path-is-absolute": "^1.0.0" 2977 | } 2978 | }, 2979 | "glob-parent": { 2980 | "version": "5.1.2", 2981 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2982 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2983 | "dev": true, 2984 | "requires": { 2985 | "is-glob": "^4.0.1" 2986 | } 2987 | }, 2988 | "gopd": { 2989 | "version": "1.0.1", 2990 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 2991 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 2992 | "dev": true, 2993 | "requires": { 2994 | "get-intrinsic": "^1.1.3" 2995 | } 2996 | }, 2997 | "graceful-fs": { 2998 | "version": "4.2.11", 2999 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 3000 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 3001 | }, 3002 | "has-flag": { 3003 | "version": "4.0.0", 3004 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3005 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3006 | "dev": true 3007 | }, 3008 | "has-property-descriptors": { 3009 | "version": "1.0.2", 3010 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 3011 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 3012 | "dev": true, 3013 | "requires": { 3014 | "es-define-property": "^1.0.0" 3015 | } 3016 | }, 3017 | "has-proto": { 3018 | "version": "1.0.3", 3019 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 3020 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 3021 | "dev": true 3022 | }, 3023 | "has-symbols": { 3024 | "version": "1.0.3", 3025 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 3026 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 3027 | "dev": true 3028 | }, 3029 | "hasown": { 3030 | "version": "2.0.2", 3031 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 3032 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 3033 | "dev": true, 3034 | "requires": { 3035 | "function-bind": "^1.1.2" 3036 | } 3037 | }, 3038 | "he": { 3039 | "version": "1.2.0", 3040 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 3041 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 3042 | "dev": true 3043 | }, 3044 | "htmlparser2": { 3045 | "version": "3.8.3", 3046 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", 3047 | "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", 3048 | "dev": true, 3049 | "requires": { 3050 | "domelementtype": "1", 3051 | "domhandler": "2.3", 3052 | "domutils": "1.5", 3053 | "entities": "1.0", 3054 | "readable-stream": "1.1" 3055 | } 3056 | }, 3057 | "http-errors": { 3058 | "version": "2.0.0", 3059 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 3060 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 3061 | "dev": true, 3062 | "requires": { 3063 | "depd": "2.0.0", 3064 | "inherits": "2.0.4", 3065 | "setprototypeof": "1.2.0", 3066 | "statuses": "2.0.1", 3067 | "toidentifier": "1.0.1" 3068 | } 3069 | }, 3070 | "http-proxy-agent": { 3071 | "version": "7.0.2", 3072 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", 3073 | "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", 3074 | "requires": { 3075 | "agent-base": "^7.1.0", 3076 | "debug": "^4.3.4" 3077 | } 3078 | }, 3079 | "https-proxy-agent": { 3080 | "version": "7.0.4", 3081 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", 3082 | "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", 3083 | "requires": { 3084 | "agent-base": "^7.0.2", 3085 | "debug": "4" 3086 | } 3087 | }, 3088 | "iconv-lite": { 3089 | "version": "0.4.24", 3090 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 3091 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 3092 | "dev": true, 3093 | "requires": { 3094 | "safer-buffer": ">= 2.1.2 < 3" 3095 | } 3096 | }, 3097 | "inflight": { 3098 | "version": "1.0.6", 3099 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 3100 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 3101 | "dev": true, 3102 | "requires": { 3103 | "once": "^1.3.0", 3104 | "wrappy": "1" 3105 | } 3106 | }, 3107 | "inherits": { 3108 | "version": "2.0.4", 3109 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3110 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 3111 | "dev": true 3112 | }, 3113 | "ip-address": { 3114 | "version": "9.0.5", 3115 | "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", 3116 | "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", 3117 | "requires": { 3118 | "jsbn": "1.1.0", 3119 | "sprintf-js": "^1.1.3" 3120 | } 3121 | }, 3122 | "ipaddr.js": { 3123 | "version": "1.9.1", 3124 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 3125 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 3126 | "dev": true 3127 | }, 3128 | "is-absolute-url": { 3129 | "version": "4.0.1", 3130 | "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", 3131 | "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==" 3132 | }, 3133 | "is-binary-path": { 3134 | "version": "2.1.0", 3135 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 3136 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 3137 | "dev": true, 3138 | "requires": { 3139 | "binary-extensions": "^2.0.0" 3140 | } 3141 | }, 3142 | "is-extglob": { 3143 | "version": "2.1.1", 3144 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3145 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 3146 | "dev": true 3147 | }, 3148 | "is-fullwidth-code-point": { 3149 | "version": "3.0.0", 3150 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3151 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3152 | "dev": true 3153 | }, 3154 | "is-glob": { 3155 | "version": "4.0.3", 3156 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3157 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3158 | "dev": true, 3159 | "requires": { 3160 | "is-extglob": "^2.1.1" 3161 | } 3162 | }, 3163 | "is-number": { 3164 | "version": "7.0.0", 3165 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3166 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3167 | "dev": true 3168 | }, 3169 | "is-plain-obj": { 3170 | "version": "2.1.0", 3171 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 3172 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 3173 | "dev": true 3174 | }, 3175 | "is-relative-url": { 3176 | "version": "4.0.0", 3177 | "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-4.0.0.tgz", 3178 | "integrity": "sha512-PkzoL1qKAYXNFct5IKdKRH/iBQou/oCC85QhXj6WKtUQBliZ4Yfd3Zk27RHu9KQG8r6zgvAA2AQKC9p+rqTszg==", 3179 | "requires": { 3180 | "is-absolute-url": "^4.0.1" 3181 | } 3182 | }, 3183 | "is-unicode-supported": { 3184 | "version": "0.1.0", 3185 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 3186 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 3187 | "dev": true 3188 | }, 3189 | "isarray": { 3190 | "version": "0.0.1", 3191 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 3192 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 3193 | "dev": true 3194 | }, 3195 | "js-yaml": { 3196 | "version": "4.1.0", 3197 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 3198 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 3199 | "dev": true, 3200 | "requires": { 3201 | "argparse": "^2.0.1" 3202 | } 3203 | }, 3204 | "jsbn": { 3205 | "version": "1.1.0", 3206 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", 3207 | "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" 3208 | }, 3209 | "jshint": { 3210 | "version": "2.13.6", 3211 | "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", 3212 | "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", 3213 | "dev": true, 3214 | "requires": { 3215 | "cli": "~1.0.0", 3216 | "console-browserify": "1.1.x", 3217 | "exit": "0.1.x", 3218 | "htmlparser2": "3.8.x", 3219 | "lodash": "~4.17.21", 3220 | "minimatch": "~3.0.2", 3221 | "strip-json-comments": "1.0.x" 3222 | } 3223 | }, 3224 | "jsonfile": { 3225 | "version": "4.0.0", 3226 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 3227 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 3228 | "requires": { 3229 | "graceful-fs": "^4.1.6" 3230 | } 3231 | }, 3232 | "locate-path": { 3233 | "version": "6.0.0", 3234 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3235 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3236 | "dev": true, 3237 | "requires": { 3238 | "p-locate": "^5.0.0" 3239 | } 3240 | }, 3241 | "lodash": { 3242 | "version": "4.17.21", 3243 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 3244 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 3245 | "dev": true 3246 | }, 3247 | "log-symbols": { 3248 | "version": "4.1.0", 3249 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 3250 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 3251 | "dev": true, 3252 | "requires": { 3253 | "chalk": "^4.1.0", 3254 | "is-unicode-supported": "^0.1.0" 3255 | } 3256 | }, 3257 | "lru-cache": { 3258 | "version": "7.18.3", 3259 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 3260 | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" 3261 | }, 3262 | "media-typer": { 3263 | "version": "0.3.0", 3264 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 3265 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 3266 | "dev": true 3267 | }, 3268 | "merge-descriptors": { 3269 | "version": "1.0.3", 3270 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", 3271 | "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", 3272 | "dev": true 3273 | }, 3274 | "methods": { 3275 | "version": "1.1.2", 3276 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 3277 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 3278 | "dev": true 3279 | }, 3280 | "mime": { 3281 | "version": "1.6.0", 3282 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 3283 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 3284 | "dev": true 3285 | }, 3286 | "mime-db": { 3287 | "version": "1.52.0", 3288 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 3289 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 3290 | "dev": true 3291 | }, 3292 | "mime-types": { 3293 | "version": "2.1.35", 3294 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 3295 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 3296 | "dev": true, 3297 | "requires": { 3298 | "mime-db": "1.52.0" 3299 | } 3300 | }, 3301 | "minimatch": { 3302 | "version": "3.0.8", 3303 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", 3304 | "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", 3305 | "dev": true, 3306 | "requires": { 3307 | "brace-expansion": "^1.1.7" 3308 | } 3309 | }, 3310 | "mocha": { 3311 | "version": "10.8.2", 3312 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", 3313 | "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", 3314 | "dev": true, 3315 | "requires": { 3316 | "ansi-colors": "^4.1.3", 3317 | "browser-stdout": "^1.3.1", 3318 | "chokidar": "^3.5.3", 3319 | "debug": "^4.3.5", 3320 | "diff": "^5.2.0", 3321 | "escape-string-regexp": "^4.0.0", 3322 | "find-up": "^5.0.0", 3323 | "glob": "^8.1.0", 3324 | "he": "^1.2.0", 3325 | "js-yaml": "^4.1.0", 3326 | "log-symbols": "^4.1.0", 3327 | "minimatch": "^5.1.6", 3328 | "ms": "^2.1.3", 3329 | "serialize-javascript": "^6.0.2", 3330 | "strip-json-comments": "^3.1.1", 3331 | "supports-color": "^8.1.1", 3332 | "workerpool": "^6.5.1", 3333 | "yargs": "^16.2.0", 3334 | "yargs-parser": "^20.2.9", 3335 | "yargs-unparser": "^2.0.0" 3336 | }, 3337 | "dependencies": { 3338 | "brace-expansion": { 3339 | "version": "2.0.1", 3340 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 3341 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 3342 | "dev": true, 3343 | "requires": { 3344 | "balanced-match": "^1.0.0" 3345 | } 3346 | }, 3347 | "glob": { 3348 | "version": "8.1.0", 3349 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 3350 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 3351 | "dev": true, 3352 | "requires": { 3353 | "fs.realpath": "^1.0.0", 3354 | "inflight": "^1.0.4", 3355 | "inherits": "2", 3356 | "minimatch": "^5.0.1", 3357 | "once": "^1.3.0" 3358 | } 3359 | }, 3360 | "minimatch": { 3361 | "version": "5.1.6", 3362 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 3363 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 3364 | "dev": true, 3365 | "requires": { 3366 | "brace-expansion": "^2.0.1" 3367 | } 3368 | }, 3369 | "strip-json-comments": { 3370 | "version": "3.1.1", 3371 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3372 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3373 | "dev": true 3374 | } 3375 | } 3376 | }, 3377 | "ms": { 3378 | "version": "2.1.3", 3379 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3380 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 3381 | }, 3382 | "needle": { 3383 | "version": "3.3.1", 3384 | "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", 3385 | "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", 3386 | "requires": { 3387 | "iconv-lite": "^0.6.3", 3388 | "sax": "^1.2.4" 3389 | }, 3390 | "dependencies": { 3391 | "iconv-lite": { 3392 | "version": "0.6.3", 3393 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 3394 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 3395 | "requires": { 3396 | "safer-buffer": ">= 2.1.2 < 3.0.0" 3397 | } 3398 | } 3399 | } 3400 | }, 3401 | "negotiator": { 3402 | "version": "0.6.3", 3403 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 3404 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 3405 | "dev": true 3406 | }, 3407 | "netmask": { 3408 | "version": "2.0.2", 3409 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", 3410 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" 3411 | }, 3412 | "node-email-verifier": { 3413 | "version": "2.0.0", 3414 | "resolved": "https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-2.0.0.tgz", 3415 | "integrity": "sha512-AHcppjOH2KT0mxakrxFMOMjV/gOVMRpYvnJUkNfgF9oJ3INdVmqcMFJ5TlM8elpTPwt6A7bSp1IMnnWcxGom/Q==", 3416 | "requires": { 3417 | "ms": "^2.1.3", 3418 | "validator": "^13.11.0" 3419 | } 3420 | }, 3421 | "normalize-path": { 3422 | "version": "3.0.0", 3423 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3424 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 3425 | "dev": true 3426 | }, 3427 | "object-inspect": { 3428 | "version": "1.13.2", 3429 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", 3430 | "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", 3431 | "dev": true 3432 | }, 3433 | "on-finished": { 3434 | "version": "2.4.1", 3435 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 3436 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 3437 | "dev": true, 3438 | "requires": { 3439 | "ee-first": "1.1.1" 3440 | } 3441 | }, 3442 | "once": { 3443 | "version": "1.4.0", 3444 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3445 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3446 | "dev": true, 3447 | "requires": { 3448 | "wrappy": "1" 3449 | } 3450 | }, 3451 | "p-limit": { 3452 | "version": "3.1.0", 3453 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3454 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3455 | "dev": true, 3456 | "requires": { 3457 | "yocto-queue": "^0.1.0" 3458 | } 3459 | }, 3460 | "p-locate": { 3461 | "version": "5.0.0", 3462 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3463 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3464 | "dev": true, 3465 | "requires": { 3466 | "p-limit": "^3.0.2" 3467 | } 3468 | }, 3469 | "pac-proxy-agent": { 3470 | "version": "7.0.1", 3471 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", 3472 | "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", 3473 | "requires": { 3474 | "@tootallnate/quickjs-emscripten": "^0.23.0", 3475 | "agent-base": "^7.0.2", 3476 | "debug": "^4.3.4", 3477 | "get-uri": "^6.0.1", 3478 | "http-proxy-agent": "^7.0.0", 3479 | "https-proxy-agent": "^7.0.2", 3480 | "pac-resolver": "^7.0.0", 3481 | "socks-proxy-agent": "^8.0.2" 3482 | } 3483 | }, 3484 | "pac-resolver": { 3485 | "version": "7.0.1", 3486 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", 3487 | "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", 3488 | "requires": { 3489 | "degenerator": "^5.0.0", 3490 | "netmask": "^2.0.2" 3491 | } 3492 | }, 3493 | "parseurl": { 3494 | "version": "1.3.3", 3495 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 3496 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 3497 | "dev": true 3498 | }, 3499 | "path-exists": { 3500 | "version": "4.0.0", 3501 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3502 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3503 | "dev": true 3504 | }, 3505 | "path-is-absolute": { 3506 | "version": "1.0.1", 3507 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3508 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 3509 | "dev": true 3510 | }, 3511 | "path-to-regexp": { 3512 | "version": "0.1.10", 3513 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", 3514 | "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", 3515 | "dev": true 3516 | }, 3517 | "picomatch": { 3518 | "version": "2.3.1", 3519 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3520 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3521 | "dev": true 3522 | }, 3523 | "proxy-addr": { 3524 | "version": "2.0.7", 3525 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 3526 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 3527 | "dev": true, 3528 | "requires": { 3529 | "forwarded": "0.2.0", 3530 | "ipaddr.js": "1.9.1" 3531 | } 3532 | }, 3533 | "proxy-agent": { 3534 | "version": "6.4.0", 3535 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", 3536 | "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", 3537 | "requires": { 3538 | "agent-base": "^7.0.2", 3539 | "debug": "^4.3.4", 3540 | "http-proxy-agent": "^7.0.1", 3541 | "https-proxy-agent": "^7.0.3", 3542 | "lru-cache": "^7.14.1", 3543 | "pac-proxy-agent": "^7.0.1", 3544 | "proxy-from-env": "^1.1.0", 3545 | "socks-proxy-agent": "^8.0.2" 3546 | } 3547 | }, 3548 | "proxy-from-env": { 3549 | "version": "1.1.0", 3550 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 3551 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 3552 | }, 3553 | "qs": { 3554 | "version": "6.13.0", 3555 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 3556 | "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 3557 | "dev": true, 3558 | "requires": { 3559 | "side-channel": "^1.0.6" 3560 | } 3561 | }, 3562 | "randombytes": { 3563 | "version": "2.1.0", 3564 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 3565 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 3566 | "dev": true, 3567 | "requires": { 3568 | "safe-buffer": "^5.1.0" 3569 | } 3570 | }, 3571 | "range-parser": { 3572 | "version": "1.2.1", 3573 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 3574 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 3575 | "dev": true 3576 | }, 3577 | "raw-body": { 3578 | "version": "2.5.2", 3579 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 3580 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 3581 | "dev": true, 3582 | "requires": { 3583 | "bytes": "3.1.2", 3584 | "http-errors": "2.0.0", 3585 | "iconv-lite": "0.4.24", 3586 | "unpipe": "1.0.0" 3587 | } 3588 | }, 3589 | "readable-stream": { 3590 | "version": "1.1.14", 3591 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 3592 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 3593 | "dev": true, 3594 | "requires": { 3595 | "core-util-is": "~1.0.0", 3596 | "inherits": "~2.0.1", 3597 | "isarray": "0.0.1", 3598 | "string_decoder": "~0.10.x" 3599 | } 3600 | }, 3601 | "readdirp": { 3602 | "version": "3.6.0", 3603 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3604 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3605 | "dev": true, 3606 | "requires": { 3607 | "picomatch": "^2.2.1" 3608 | } 3609 | }, 3610 | "require-directory": { 3611 | "version": "2.1.1", 3612 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3613 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 3614 | "dev": true 3615 | }, 3616 | "safe-buffer": { 3617 | "version": "5.2.1", 3618 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 3619 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 3620 | "dev": true 3621 | }, 3622 | "safer-buffer": { 3623 | "version": "2.1.2", 3624 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3625 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 3626 | }, 3627 | "sax": { 3628 | "version": "1.2.4", 3629 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 3630 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 3631 | }, 3632 | "send": { 3633 | "version": "0.19.0", 3634 | "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", 3635 | "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", 3636 | "dev": true, 3637 | "requires": { 3638 | "debug": "2.6.9", 3639 | "depd": "2.0.0", 3640 | "destroy": "1.2.0", 3641 | "encodeurl": "~1.0.2", 3642 | "escape-html": "~1.0.3", 3643 | "etag": "~1.8.1", 3644 | "fresh": "0.5.2", 3645 | "http-errors": "2.0.0", 3646 | "mime": "1.6.0", 3647 | "ms": "2.1.3", 3648 | "on-finished": "2.4.1", 3649 | "range-parser": "~1.2.1", 3650 | "statuses": "2.0.1" 3651 | }, 3652 | "dependencies": { 3653 | "debug": { 3654 | "version": "2.6.9", 3655 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 3656 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 3657 | "dev": true, 3658 | "requires": { 3659 | "ms": "2.0.0" 3660 | }, 3661 | "dependencies": { 3662 | "ms": { 3663 | "version": "2.0.0", 3664 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 3665 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 3666 | "dev": true 3667 | } 3668 | } 3669 | }, 3670 | "encodeurl": { 3671 | "version": "1.0.2", 3672 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 3673 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 3674 | "dev": true 3675 | } 3676 | } 3677 | }, 3678 | "serialize-javascript": { 3679 | "version": "6.0.2", 3680 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 3681 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 3682 | "dev": true, 3683 | "requires": { 3684 | "randombytes": "^2.1.0" 3685 | } 3686 | }, 3687 | "serve-static": { 3688 | "version": "1.16.2", 3689 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", 3690 | "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", 3691 | "dev": true, 3692 | "requires": { 3693 | "encodeurl": "~2.0.0", 3694 | "escape-html": "~1.0.3", 3695 | "parseurl": "~1.3.3", 3696 | "send": "0.19.0" 3697 | } 3698 | }, 3699 | "set-function-length": { 3700 | "version": "1.2.2", 3701 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 3702 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 3703 | "dev": true, 3704 | "requires": { 3705 | "define-data-property": "^1.1.4", 3706 | "es-errors": "^1.3.0", 3707 | "function-bind": "^1.1.2", 3708 | "get-intrinsic": "^1.2.4", 3709 | "gopd": "^1.0.1", 3710 | "has-property-descriptors": "^1.0.2" 3711 | } 3712 | }, 3713 | "setprototypeof": { 3714 | "version": "1.2.0", 3715 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 3716 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 3717 | "dev": true 3718 | }, 3719 | "side-channel": { 3720 | "version": "1.0.6", 3721 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 3722 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 3723 | "dev": true, 3724 | "requires": { 3725 | "call-bind": "^1.0.7", 3726 | "es-errors": "^1.3.0", 3727 | "get-intrinsic": "^1.2.4", 3728 | "object-inspect": "^1.13.1" 3729 | } 3730 | }, 3731 | "smart-buffer": { 3732 | "version": "4.2.0", 3733 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 3734 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" 3735 | }, 3736 | "socks": { 3737 | "version": "2.8.3", 3738 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", 3739 | "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", 3740 | "requires": { 3741 | "ip-address": "^9.0.5", 3742 | "smart-buffer": "^4.2.0" 3743 | } 3744 | }, 3745 | "socks-proxy-agent": { 3746 | "version": "8.0.2", 3747 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", 3748 | "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", 3749 | "requires": { 3750 | "agent-base": "^7.0.2", 3751 | "debug": "^4.3.4", 3752 | "socks": "^2.7.1" 3753 | } 3754 | }, 3755 | "source-map": { 3756 | "version": "0.6.1", 3757 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3758 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3759 | "optional": true 3760 | }, 3761 | "sprintf-js": { 3762 | "version": "1.1.3", 3763 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", 3764 | "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" 3765 | }, 3766 | "statuses": { 3767 | "version": "2.0.1", 3768 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 3769 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 3770 | "dev": true 3771 | }, 3772 | "string_decoder": { 3773 | "version": "0.10.31", 3774 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 3775 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 3776 | "dev": true 3777 | }, 3778 | "string-width": { 3779 | "version": "4.2.3", 3780 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3781 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3782 | "dev": true, 3783 | "requires": { 3784 | "emoji-regex": "^8.0.0", 3785 | "is-fullwidth-code-point": "^3.0.0", 3786 | "strip-ansi": "^6.0.1" 3787 | } 3788 | }, 3789 | "strip-ansi": { 3790 | "version": "6.0.1", 3791 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3792 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3793 | "dev": true, 3794 | "requires": { 3795 | "ansi-regex": "^5.0.1" 3796 | } 3797 | }, 3798 | "strip-json-comments": { 3799 | "version": "1.0.4", 3800 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 3801 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", 3802 | "dev": true 3803 | }, 3804 | "supports-color": { 3805 | "version": "8.1.1", 3806 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 3807 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 3808 | "dev": true, 3809 | "requires": { 3810 | "has-flag": "^4.0.0" 3811 | } 3812 | }, 3813 | "to-regex-range": { 3814 | "version": "5.0.1", 3815 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3816 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3817 | "dev": true, 3818 | "requires": { 3819 | "is-number": "^7.0.0" 3820 | } 3821 | }, 3822 | "toidentifier": { 3823 | "version": "1.0.1", 3824 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3825 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 3826 | "dev": true 3827 | }, 3828 | "tslib": { 3829 | "version": "2.6.2", 3830 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 3831 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" 3832 | }, 3833 | "type-is": { 3834 | "version": "1.6.18", 3835 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 3836 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 3837 | "dev": true, 3838 | "requires": { 3839 | "media-typer": "0.3.0", 3840 | "mime-types": "~2.1.24" 3841 | } 3842 | }, 3843 | "universalify": { 3844 | "version": "0.1.2", 3845 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 3846 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 3847 | }, 3848 | "unpipe": { 3849 | "version": "1.0.0", 3850 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3851 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 3852 | "dev": true 3853 | }, 3854 | "utils-merge": { 3855 | "version": "1.0.1", 3856 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3857 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 3858 | "dev": true 3859 | }, 3860 | "validator": { 3861 | "version": "13.12.0", 3862 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", 3863 | "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==" 3864 | }, 3865 | "vary": { 3866 | "version": "1.1.2", 3867 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3868 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 3869 | "dev": true 3870 | }, 3871 | "workerpool": { 3872 | "version": "6.5.1", 3873 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", 3874 | "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", 3875 | "dev": true 3876 | }, 3877 | "wrap-ansi": { 3878 | "version": "7.0.0", 3879 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3880 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3881 | "dev": true, 3882 | "requires": { 3883 | "ansi-styles": "^4.0.0", 3884 | "string-width": "^4.1.0", 3885 | "strip-ansi": "^6.0.0" 3886 | } 3887 | }, 3888 | "wrappy": { 3889 | "version": "1.0.2", 3890 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3891 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3892 | "dev": true 3893 | }, 3894 | "y18n": { 3895 | "version": "5.0.8", 3896 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3897 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3898 | "dev": true 3899 | }, 3900 | "yargs": { 3901 | "version": "16.2.0", 3902 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 3903 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 3904 | "dev": true, 3905 | "requires": { 3906 | "cliui": "^7.0.2", 3907 | "escalade": "^3.1.1", 3908 | "get-caller-file": "^2.0.5", 3909 | "require-directory": "^2.1.1", 3910 | "string-width": "^4.2.0", 3911 | "y18n": "^5.0.5", 3912 | "yargs-parser": "^20.2.2" 3913 | } 3914 | }, 3915 | "yargs-parser": { 3916 | "version": "20.2.9", 3917 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 3918 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 3919 | "dev": true 3920 | }, 3921 | "yargs-unparser": { 3922 | "version": "2.0.0", 3923 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 3924 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 3925 | "dev": true, 3926 | "requires": { 3927 | "camelcase": "^6.0.0", 3928 | "decamelize": "^4.0.0", 3929 | "flat": "^5.0.2", 3930 | "is-plain-obj": "^2.1.0" 3931 | } 3932 | }, 3933 | "yocto-queue": { 3934 | "version": "0.1.0", 3935 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3936 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3937 | "dev": true 3938 | } 3939 | } 3940 | } 3941 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "link-check", 3 | "version": "5.4.0", 4 | "description": "checks whether a hyperlink is alive (200 OK) or dead", 5 | "main": "index.js", 6 | "files": [ 7 | "CHANGELOG.md", 8 | "LICENSE.md", 9 | "README.md", 10 | "lib" 11 | ], 12 | "scripts": { 13 | "pretest": "jshint index.js lib test", 14 | "test": "mocha -R spec --exit" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/tcort/link-check.git" 19 | }, 20 | "keywords": [ 21 | "link", 22 | "check", 23 | "checker", 24 | "hyperlink", 25 | "alive", 26 | "dead", 27 | "HTTP", 28 | "head" 29 | ], 30 | "author": "Thomas Cort ", 31 | "license": "ISC", 32 | "bugs": { 33 | "url": "https://github.com/tcort/link-check/issues" 34 | }, 35 | "homepage": "https://github.com/tcort/link-check#readme", 36 | "dependencies": { 37 | "is-relative-url": "^4.0.0", 38 | "ms": "^2.1.3", 39 | "needle": "^3.3.1", 40 | "node-email-verifier": "^2.0.0", 41 | "proxy-agent": "^6.4.0" 42 | }, 43 | "devDependencies": { 44 | "debug": "^4.3.7", 45 | "expect.js": "^0.3.1", 46 | "express": "^4.21.1", 47 | "jshint": "^2.13.6", 48 | "mocha": "^10.8.2" 49 | }, 50 | "jshintConfig": { 51 | "esversion": 11, 52 | "bitwise": true, 53 | "curly": true, 54 | "eqeqeq": true, 55 | "forin": true, 56 | "freeze": true, 57 | "globalstrict": true, 58 | "immed": true, 59 | "indent": 4, 60 | "moz": true, 61 | "newcap": true, 62 | "noarg": true, 63 | "node": true, 64 | "noempty": true, 65 | "nonew": true, 66 | "trailing": true, 67 | "undef": true, 68 | "smarttabs": true, 69 | "strict": true, 70 | "validthis": true, 71 | "globals": { 72 | "describe": false, 73 | "it": false, 74 | "before": false, 75 | "beforeEach": false, 76 | "after": false, 77 | "afterEach": false 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /test/fixtures/file.md: -------------------------------------------------------------------------------- 1 | # Isaac Newton Quote of the Day 2 | 3 | Errors are not in the art but in the artificers. 4 | -------------------------------------------------------------------------------- /test/fixtures/s p a c e/A.md: -------------------------------------------------------------------------------- 1 | # Hello, World! 2 | -------------------------------------------------------------------------------- /test/link-check.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const expect = require('expect.js'); 4 | const http = require('http'); 5 | const express = require('express'); 6 | const linkCheck = require('../'); 7 | 8 | describe('link-check', function () { 9 | 10 | this.timeout(2500);//increase timeout to enable 429 retry tests 11 | 12 | let baseUrl; 13 | let laterCustomRetryCounter; 14 | 15 | before(function (done) { 16 | const app = express(); 17 | 18 | app.head('/nohead', function (req, res) { 19 | res.sendStatus(405); // method not allowed 20 | }); 21 | app.get('/nohead', function (req, res) { 22 | res.sendStatus(200); 23 | }); 24 | 25 | app.get('/foo/redirect', function (req, res) { 26 | res.redirect('/foo/bar'); 27 | }); 28 | app.get('/foo/bar', function (req, res) { 29 | res.json({foo:'bar'}); 30 | }); 31 | 32 | app.get('/loop', function (req, res) { 33 | res.redirect('/loop'); 34 | }); 35 | 36 | app.get('/hang', function (req, res) { 37 | // no reply 38 | }); 39 | 40 | app.get('/notfound', function (req, res) { 41 | res.sendStatus(404); 42 | }); 43 | 44 | app.get('/basic-auth', function (req, res) { 45 | 46 | if (req.headers.authorization === "Basic Zm9vOmJhcg==") { 47 | return res.sendStatus(200); 48 | } 49 | res.sendStatus(401); 50 | }); 51 | 52 | // prevent first header try to be a hit 53 | app.head('/later-custom-retry-count', function (req, res) { 54 | res.sendStatus(405); // method not allowed 55 | }); 56 | app.get('/later-custom-retry-count', function (req, res) { 57 | laterCustomRetryCounter++; 58 | 59 | if(laterCustomRetryCounter === parseInt(req.query.successNumber)) { 60 | res.sendStatus(200); 61 | }else{ 62 | res.setHeader('retry-after', 1); 63 | res.sendStatus(429); 64 | } 65 | }); 66 | 67 | // prevent first header try to be a hit 68 | app.head('/later-standard-header', function (req, res) { 69 | res.sendStatus(405); // method not allowed 70 | }); 71 | var stdRetried = false; 72 | var stdFirstTry = 0; 73 | app.get('/later', function (req, res) { 74 | var isRetryDelayExpired = stdFirstTry + 1000 < Date.now(); 75 | if(!stdRetried || !isRetryDelayExpired){ 76 | stdFirstTry = Date.now(); 77 | stdRetried = true; 78 | res.setHeader('retry-after', 1); 79 | res.sendStatus(429); 80 | }else{ 81 | res.sendStatus(200); 82 | } 83 | }); 84 | 85 | // prevent first header try to be a hit 86 | app.head('/later-no-header', function (req, res) { 87 | res.sendStatus(405); // method not allowed 88 | }); 89 | var stdNoHeadRetried = false; 90 | var stdNoHeadFirstTry = 0; 91 | app.get('/later-no-header', function (req, res) { 92 | var minTime = stdNoHeadFirstTry + 1000; 93 | var maxTime = minTime + 100; 94 | var now = Date.now(); 95 | var isRetryDelayExpired = minTime < now && now < maxTime; 96 | if(!stdNoHeadRetried || !isRetryDelayExpired){ 97 | stdNoHeadFirstTry = Date.now(); 98 | stdNoHeadRetried = true; 99 | res.sendStatus(429); 100 | }else{ 101 | res.sendStatus(200); 102 | } 103 | }); 104 | 105 | // prevent first header try to be a hit 106 | app.head('/later-non-standard-header', function (req, res) { 107 | res.sendStatus(405); // method not allowed 108 | }); 109 | var nonStdRetried = false; 110 | var nonStdFirstTry = 0; 111 | app.get('/later-non-standard-header', function (req, res) { 112 | var isRetryDelayExpired = nonStdFirstTry + 1000 < Date.now(); 113 | if(!nonStdRetried || !isRetryDelayExpired){ 114 | nonStdFirstTry = Date.now(); 115 | nonStdRetried = true; 116 | res.setHeader('retry-after', '1s'); 117 | res.sendStatus(429); 118 | }else { 119 | res.sendStatus(200); 120 | } 121 | }); 122 | 123 | app.get(encodeURI('/url_with_unicode–'), function (req, res) { 124 | res.sendStatus(200); 125 | }); 126 | 127 | app.get('/url_with_special_chars\\(\\)\\+', function (req, res) { 128 | res.sendStatus(200); 129 | }); 130 | 131 | const server = http.createServer(app); 132 | server.listen(0 /* random open port */, 'localhost', function serverListen(err) { 133 | if (err) { 134 | done(err); 135 | return; 136 | } 137 | // github action uses IPv6 addresses 138 | // there seems missing IPv6 support in upstream libs 139 | if (server.address().address === "::1") { 140 | baseUrl = 'http://localhost:' + server.address().port; 141 | } else { 142 | baseUrl = 'http://' + server.address().address + ':' + server.address().port; 143 | } 144 | done(); 145 | }); 146 | }); 147 | 148 | it('should find that a valid link is alive', function (done) { 149 | linkCheck(baseUrl + '/foo/bar', function (err, result) { 150 | expect(err).to.be(null); 151 | expect(result.link).to.be(baseUrl + '/foo/bar'); 152 | expect(result.status).to.be('alive'); 153 | expect(result.statusCode).to.be(200); 154 | expect(result.err).to.be(null); 155 | done(); 156 | }); 157 | }); 158 | 159 | it('should find that a valid external link with basic authentication is alive', function (done) { 160 | linkCheck(baseUrl + '/basic-auth', { 161 | headers: { 162 | 'Authorization': 'Basic Zm9vOmJhcg==' 163 | }, 164 | }, function (err, result) { 165 | expect(err).to.be(null); 166 | expect(result.status).to.be('alive'); 167 | expect(result.statusCode).to.be(200); 168 | expect(result.err).to.be(null); 169 | done(); 170 | }); 171 | }); 172 | 173 | it('should find that a valid relative link is alive', function (done) { 174 | linkCheck('/foo/bar', { baseUrl: baseUrl }, function (err, result) { 175 | expect(err).to.be(null); 176 | expect(result.link).to.be('/foo/bar'); 177 | expect(result.status).to.be('alive'); 178 | expect(result.statusCode).to.be(200); 179 | expect(result.err).to.be(null); 180 | done(); 181 | }); 182 | }); 183 | 184 | it('should find that an invalid link is dead', function (done) { 185 | linkCheck(baseUrl + '/foo/dead', function (err, result) { 186 | expect(err).to.be(null); 187 | expect(result.link).to.be(baseUrl + '/foo/dead'); 188 | expect(result.status).to.be('dead'); 189 | expect(result.statusCode).to.be(404); 190 | expect(result.err).to.be(null); 191 | done(); 192 | }); 193 | }); 194 | 195 | it('should find that an invalid relative link is dead', function (done) { 196 | linkCheck('/foo/dead', { baseUrl: baseUrl }, function (err, result) { 197 | expect(err).to.be(null); 198 | expect(result.link).to.be('/foo/dead'); 199 | expect(result.status).to.be('dead'); 200 | expect(result.statusCode).to.be(404); 201 | expect(result.err).to.be(null); 202 | done(); 203 | }); 204 | }); 205 | 206 | it('should report no DNS entry as a dead link (http)', function (done) { 207 | linkCheck('http://example.example.example.com/', function (err, result) { 208 | expect(err).to.be(null); 209 | expect(result.link).to.be('http://example.example.example.com/'); 210 | expect(result.status).to.be('dead'); 211 | expect(result.statusCode).to.be(0); 212 | expect(result.err.code).to.be('ENOTFOUND'); 213 | done(); 214 | }); 215 | }); 216 | 217 | it('should report no DNS entry as a dead link (https)', function (done) { 218 | const badLink = 'https://githuuuub.com/tcort/link-check'; 219 | linkCheck(badLink, function (err, result) { 220 | expect(err).to.be(null); 221 | expect(result.link).to.be(badLink); 222 | expect(result.status).to.be('dead'); 223 | expect(result.statusCode).to.be(0); 224 | expect(result.err.code).to.contain('ENOTFOUND'); 225 | done(); 226 | }); 227 | }); 228 | 229 | it('should timeout if there is no response', function (done) { 230 | linkCheck(baseUrl + '/hang', { timeout: '100ms' }, function (err, result) { 231 | expect(err).to.be(null); 232 | expect(result.link).to.be(baseUrl + '/hang'); 233 | expect(result.status).to.be('dead'); 234 | expect(result.statusCode).to.be(0); 235 | expect(result.err.code).to.be('ECONNRESET'); 236 | done(); 237 | }); 238 | }); 239 | 240 | it('should try GET if HEAD fails', function (done) { 241 | linkCheck(baseUrl + '/nohead', function (err, result) { 242 | expect(err).to.be(null); 243 | expect(result.link).to.be(baseUrl + '/nohead'); 244 | expect(result.status).to.be('alive'); 245 | expect(result.statusCode).to.be(200); 246 | expect(result.err).to.be(null); 247 | done(); 248 | }); 249 | }); 250 | 251 | it('should handle redirects', function (done) { 252 | linkCheck(baseUrl + '/foo/redirect', function (err, result) { 253 | expect(err).to.be(null); 254 | expect(result.link).to.be(baseUrl + '/foo/redirect'); 255 | expect(result.status).to.be('alive'); 256 | expect(result.statusCode).to.be(200); 257 | expect(result.err).to.be(null); 258 | done(); 259 | }); 260 | }); 261 | 262 | it('should handle valid mailto', function (done) { 263 | linkCheck('mailto:linuxgeek@gmail.com', function (err, result) { 264 | expect(err).to.be(null); 265 | expect(result.link).to.be('mailto:linuxgeek@gmail.com'); 266 | expect(result.status).to.be('alive'); 267 | done(); 268 | }); 269 | }); 270 | 271 | it('should handle valid mailto with encoded characters in address', function (done) { 272 | linkCheck('mailto:foo%20bar@example.org', function (err, result) { 273 | expect(err).to.be(null); 274 | expect(result.link).to.be('mailto:foo%20bar@example.org'); 275 | expect(result.status).to.be('alive'); 276 | done(); 277 | }); 278 | }); 279 | 280 | it('should handle valid mailto containing hfields', function (done) { 281 | linkCheck('mailto:linuxgeek@gmail.com?subject=caf%C3%A9', function (err, result) { 282 | expect(err).to.be(null); 283 | expect(result.link).to.be('mailto:linuxgeek@gmail.com?subject=caf%C3%A9'); 284 | expect(result.status).to.be('alive'); 285 | done(); 286 | }); 287 | }); 288 | 289 | it('should handle valid mailto with invalid domain without MX record', function (done) { 290 | linkCheck('mailto:linuxgeek@gmai.lcom', function (err, result) { 291 | expect(err).to.be(null); 292 | expect(result.link).to.be('mailto:linuxgeek@gmai.lcom'); 293 | expect(result.status).to.be('dead'); 294 | done(); 295 | }); 296 | }); 297 | 298 | it('should handle invalid mailto', function (done) { 299 | linkCheck('mailto:foo@@bar@@baz', function (err, result) { 300 | expect(err).to.be(null); 301 | expect(result.link).to.be('mailto:foo@@bar@@baz'); 302 | expect(result.status).to.be('dead'); 303 | done(); 304 | }); 305 | }); 306 | 307 | it('should handle file protocol', function(done) { 308 | linkCheck('fixtures/file.md', { baseUrl: 'file://' + __dirname }, function(err, result) { 309 | expect(err).to.be(null); 310 | 311 | expect(result.err).to.be(null); 312 | expect(result.status).to.be('alive'); 313 | done(); 314 | }); 315 | }); 316 | 317 | it('should handle file protocol with fragment', function(done) { 318 | linkCheck('fixtures/file.md#section-1', { baseUrl: 'file://' + __dirname }, function(err, result) { 319 | expect(err).to.be(null); 320 | 321 | expect(result.err).to.be(null); 322 | expect(result.status).to.be('alive'); 323 | done(); 324 | }); 325 | }); 326 | 327 | it('should handle file protocol with query', function(done) { 328 | linkCheck('fixtures/file.md?foo=bar', { baseUrl: 'file://' + __dirname }, function(err, result) { 329 | expect(err).to.be(null); 330 | 331 | expect(result.err).to.be(null); 332 | expect(result.status).to.be('alive'); 333 | done(); 334 | }); 335 | }); 336 | 337 | it('should handle file path containing spaces', function(done) { 338 | linkCheck('fixtures/s p a c e/A.md', { baseUrl: 'file://' + __dirname }, function(err, result) { 339 | expect(err).to.be(null); 340 | 341 | expect(result.err).to.be(null); 342 | expect(result.status).to.be('alive'); 343 | done(); 344 | }); 345 | }); 346 | 347 | it('should handle baseUrl containing spaces', function(done) { 348 | linkCheck('A.md', { baseUrl: 'file://' + __dirname + '/fixtures/s p a c e'}, function(err, result) { 349 | expect(err).to.be(null); 350 | 351 | expect(result.err).to.be(null); 352 | expect(result.status).to.be('alive'); 353 | done(); 354 | }); 355 | }); 356 | 357 | it('should handle file protocol and invalid files', function(done) { 358 | linkCheck('fixtures/missing.md', { baseUrl: 'file://' + __dirname }, function(err, result) { 359 | expect(err).to.be(null); 360 | 361 | expect(result.err.code).to.be('ENOENT'); 362 | expect(result.status).to.be('dead'); 363 | done(); 364 | }); 365 | }); 366 | 367 | it('should ignore file protocol on absolute links', function(done) { 368 | linkCheck(baseUrl + '/foo/bar', { baseUrl: 'file://' }, function(err, result) { 369 | expect(err).to.be(null); 370 | 371 | expect(result.link).to.be(baseUrl + '/foo/bar'); 372 | expect(result.status).to.be('alive'); 373 | expect(result.statusCode).to.be(200); 374 | expect(result.err).to.be(null); 375 | done(); 376 | }); 377 | }); 378 | 379 | it('should ignore file protocol on fragment links', function(done) { 380 | linkCheck('#foobar', { baseUrl: 'file://' }, function(err, result) { 381 | expect(err).to.be(null); 382 | 383 | expect(result.link).to.be('#foobar'); 384 | done(); 385 | }); 386 | }); 387 | 388 | it('should callback with an error on unsupported protocol', function (done) { 389 | linkCheck('gopher://gopher/0/v2/vstat', function (err, result) { 390 | expect(result).to.be(null); 391 | expect(err).to.be.an(Error); 392 | done(); 393 | }); 394 | }); 395 | 396 | it('should handle redirect loops', function (done) { 397 | linkCheck(baseUrl + '/loop', function (err, result) { 398 | expect(err).to.be(null); 399 | expect(result.link).to.be(baseUrl + '/loop'); 400 | expect(result.status).to.be('dead'); 401 | expect(result.statusCode).to.be(0); 402 | expect(result.err.message).to.contain('Max redirects reached'); 403 | done(); 404 | }); 405 | }); 406 | 407 | it('should honour response codes in opts.aliveStatusCodes[]', function (done) { 408 | linkCheck(baseUrl + '/notfound', { aliveStatusCodes: [ 404, 200 ] }, function (err, result) { 409 | expect(err).to.be(null); 410 | expect(result.link).to.be(baseUrl + '/notfound'); 411 | expect(result.status).to.be('alive'); 412 | expect(result.statusCode).to.be(404); 413 | done(); 414 | }); 415 | }); 416 | 417 | it('should honour regexps in opts.aliveStatusCodes[]', function (done) { 418 | linkCheck(baseUrl + '/notfound', { aliveStatusCodes: [ 200, /^[45][0-9]{2}$/ ] }, function (err, result) { 419 | expect(err).to.be(null); 420 | expect(result.link).to.be(baseUrl + '/notfound'); 421 | expect(result.status).to.be('alive'); 422 | expect(result.statusCode).to.be(404); 423 | done(); 424 | }); 425 | }); 426 | 427 | it('should honour opts.aliveStatusCodes[]', function (done) { 428 | linkCheck(baseUrl + '/notfound', { aliveStatusCodes: [ 200 ] }, function (err, result) { 429 | expect(err).to.be(null); 430 | expect(result.link).to.be(baseUrl + '/notfound'); 431 | expect(result.status).to.be('dead'); 432 | expect(result.statusCode).to.be(404); 433 | done(); 434 | }); 435 | }); 436 | 437 | it('should retry after the provided delay on HTTP 429 with standard header', function (done) { 438 | linkCheck(baseUrl + '/later', { retryOn429: true }, function (err, result) { 439 | expect(err).to.be(null); 440 | expect(result.err).to.be(null); 441 | expect(result.link).to.be(baseUrl + '/later'); 442 | expect(result.status).to.be('alive'); 443 | expect(result.statusCode).to.be(200); 444 | done(); 445 | }); 446 | }); 447 | 448 | it('should retry after the provided delay on HTTP 429 with non standard header, and return a warning', function (done) { 449 | linkCheck(baseUrl + '/later-non-standard-header', { retryOn429: true }, function (err, result) { 450 | expect(err).to.be(null); 451 | expect(result.err).not.to.be(null); 452 | expect(result.err).to.contain("Server returned a non standard \'retry-after\' header."); 453 | expect(result.link).to.be(baseUrl + '/later-non-standard-header'); 454 | expect(result.status).to.be('alive'); 455 | expect(result.statusCode).to.be(200); 456 | done(); 457 | }); 458 | }); 459 | 460 | it('should retry after 1s delay on HTTP 429 without header', function (done) { 461 | linkCheck(baseUrl + '/later-no-header', { retryOn429: true, fallbackRetryDelay: '1s' }, function (err, result) { 462 | expect(err).to.be(null); 463 | expect(result.err).to.be(null); 464 | expect(result.link).to.be(baseUrl + '/later-no-header'); 465 | expect(result.status).to.be('alive'); 466 | expect(result.statusCode).to.be(200); 467 | done(); 468 | }); 469 | }); 470 | 471 | // 2 is default retry so test with custom 3 472 | it('should retry 3 times for 429 status codes', function(done) { 473 | laterCustomRetryCounter = 0; 474 | linkCheck(baseUrl + '/later-custom-retry-count?successNumber=3', { retryOn429: true, retryCount: 3 }, function(err, result) { 475 | expect(err).to.be(null); 476 | expect(result.err).to.be(null); 477 | expect(result.status).to.be('alive'); 478 | expect(result.statusCode).to.be(200); 479 | done(); 480 | }); 481 | }); 482 | 483 | // See issue #23 484 | it('should handle non URL encoded unicode chars in URLs', function(done) { 485 | //last char is EN DASH 486 | linkCheck(baseUrl + '/url_with_unicode–', function(err, result) { 487 | expect(err).to.be(null); 488 | expect(result.err).to.be(null); 489 | expect(result.status).to.be('alive'); 490 | expect(result.statusCode).to.be(200); 491 | done(); 492 | }); 493 | }); 494 | 495 | // See issues #34 and #40 496 | it('should not URL encode already encoded characters', function(done) { 497 | linkCheck(baseUrl + '/url_with_special_chars%28%29%2B', function(err, result) { 498 | expect(err).to.be(null); 499 | expect(result.err).to.be(null); 500 | expect(result.status).to.be('alive'); 501 | expect(result.statusCode).to.be(200); 502 | done(); 503 | }); 504 | }); 505 | 506 | it('should support hash links', function (done) { 507 | linkCheck('#foo', { anchors: ['#foo'] }, function (err, result) { 508 | expect(err).to.be(null); 509 | expect(result.err).to.be(null); 510 | expect(result.status).to.be('alive'); 511 | expect(result.statusCode).to.be(200); 512 | linkCheck('#bar', { anchors: ['#foo'] }, function (err, result) { 513 | expect(err).to.be(null); 514 | expect(result.err).to.be(null); 515 | expect(result.status).to.be('dead'); 516 | expect(result.statusCode).to.be(404); 517 | done(); 518 | }); 519 | }); 520 | }); 521 | 522 | }); 523 | --------------------------------------------------------------------------------