├── .github └── workflows │ └── test.yml ├── .gitignore ├── LICENSE ├── README.md ├── action.js ├── action.yml ├── ascii.js ├── dist └── index.js ├── eol-versions.js ├── index.js ├── is-vulnerable.js ├── package-lock.json ├── package.json ├── setup-test.js └── test.js /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | strategy: 13 | matrix: 14 | node-version: [16, 18, 20, 21, 22, 23, 24] 15 | 16 | steps: 17 | - uses: actions/checkout@v3 18 | 19 | - name: Use Node.js 20 | uses: actions/setup-node@v3 21 | with: 22 | node-version: ${{ matrix.node-version }} 23 | 24 | - name: Install 25 | run: | 26 | npm install 27 | 28 | - name: Run validator 29 | run: | 30 | npm run test 31 | 32 | - name: Ensure Build 33 | run: | 34 | npm run build 35 | 36 | old-versions: 37 | runs-on: ubuntu-latest 38 | strategy: 39 | matrix: 40 | node-version: [0.12, 4, 6, 8, 9, 10, 12] 41 | 42 | steps: 43 | - uses: actions/checkout@v3 44 | 45 | - name: Use Node.js 46 | uses: actions/setup-node@v3 47 | with: 48 | node-version: ${{ matrix.node-version }} 49 | 50 | - name: Run test 51 | run: | 52 | node setup-test.js 53 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Microbundle cache 58 | .rpt2_cache/ 59 | .rts2_cache_cjs/ 60 | .rts2_cache_es/ 61 | .rts2_cache_umd/ 62 | 63 | # Optional REPL history 64 | .node_repl_history 65 | 66 | # Output of 'npm pack' 67 | *.tgz 68 | 69 | # Yarn Integrity file 70 | .yarn-integrity 71 | 72 | # dotenv environment variables file 73 | .env 74 | .env.test 75 | .env.production 76 | 77 | # parcel-bundler cache (https://parceljs.org/) 78 | .cache 79 | .parcel-cache 80 | 81 | # Next.js build output 82 | .next 83 | out 84 | 85 | # Nuxt.js build / generate output 86 | .nuxt 87 | 88 | # Gatsby files 89 | .cache/ 90 | # Comment in the public line in if your project uses Gatsby and not Next.js 91 | # https://nextjs.org/blog/next-9-1#public-directory-support 92 | # public 93 | 94 | # vuepress build output 95 | .vuepress/dist 96 | 97 | # Serverless directories 98 | .serverless/ 99 | 100 | # FuseBox cache 101 | .fusebox/ 102 | 103 | # DynamoDB Local files 104 | .dynamodb/ 105 | 106 | # TernJS port file 107 | .tern-port 108 | 109 | # Stores VSCode versions used for testing VSCode extensions 110 | .vscode-test 111 | 112 | # yarn v2 113 | .yarn/cache 114 | .yarn/unplugged 115 | .yarn/build-state.yml 116 | .yarn/install-state.gz 117 | .pnp.* 118 | 119 | # End of https://mrkandreev.name/snippets/gitignore-generator/#Node 120 | 121 | .clinic/ 122 | 123 | tags 124 | tags.* 125 | 126 | schedule.etag 127 | schedule.json 128 | security.etag 129 | security.json 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 RafaelGSS 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # is-my-node-vulnerable 2 | 3 | This package helps ensure the security of your Node.js installation by checking for known vulnerabilities. 4 | It compares the version of Node.js you have installed (`process.version`) to the [Node.js Security Database][] 5 | and alerts you if a vulnerability is found. 6 | 7 | ## Usage 8 | 9 | ``` 10 | npx is-my-node-vulnerable 11 | ``` 12 | 13 | It's strongly recommended to include this as a step in the app CI. 14 | 15 | > [!NOTE] 16 | > For retro-compatibility enthusiasts: This module supports Node.js versions >= v0.12. 17 | > However, npx does not work with those older versions, so you'll need to install the 18 | > package and run index.js manually. If you encounter errors when using npx, it's 19 | > likely because you're using a vulnerable version of Node.js. Please consider upgrading. 20 | 21 | ### Output - When vulnerable 22 | 23 | 24 | ```console 25 | $ node -v 26 | v20.3.0 27 | $ npx is-my-node-vulnerable 28 | 29 | 30 | ██████ █████ ███ ██ ██████ ███████ ██████ 31 | ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ 32 | ██ ██ ███████ ██ ██ ██ ██ ███ █████ ██████ 33 | ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ 34 | ██████ ██ ██ ██ ████ ██████ ███████ ██ ██ 35 | 36 | 37 | The current Node.js version (v20.3.0) is vulnerable to the following CVEs: 38 | 39 | CVE-2023-30581: The use of proto in process.mainModule.proto.require() can bypass the policy mechanism and require modules outside of the policy.json definition 40 | Patched versions: ^16.20.1 || ^18.16.1 || ^20.3.1 41 | ================================================================================================================================================================================== 42 | ``` 43 | 44 | ### Output - When non-vulnerable 45 | 46 | ```console 47 | $ node -v 48 | v20.17.0 49 | $ npx is-my-node-vulnerable 50 | 51 | 52 | █████ ██ ██ ██████ ██████ ██████ ██████ ██ 53 | ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ 54 | ███████ ██ ██ ██ ███ ██ ██ ██ ██ ██ ██ ██ 55 | ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ 56 | ██ ██ ███████ ███████ ██████ ██████ ██████ ██████ ██ 57 | 58 | ``` 59 | 60 | ### Output - when end of life 61 | 62 | ```console 63 | $ node -v 64 | v15.14.0 65 | $ npx is-my-node-vulnerable 66 | ██████ █████ ███ ██ ██████ ███████ ██████ 67 | ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ 68 | ██ ██ ███████ ██ ██ ██ ██ ███ █████ ██████ 69 | ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ 70 | ██████ ██ ██ ██ ████ ██████ ███████ ██ ██ 71 | 72 | 73 | v15.14.0 is end-of-life. There are high chances of being vulnerable. Please upgrade it. 74 | ``` 75 | 76 | End-of-Life versions don't keep track of recent security releases, therefore, it's considered vulnerable by default. 77 | 78 | ## API 79 | 80 | This package also exports a function `isNodeVulnerable` to perform the check at runtime 81 | 82 | > [!NOTE] 83 | > The API is only supported on active Node.js versions (v18.x, v20.x, v22.x, v23.x) 84 | 85 | ```js 86 | import { isNodeVulnerable } from 'is-my-node-vulnerable' 87 | 88 | await isNodeVulnerable('19.0.0') // true 89 | ``` 90 | 91 | Optionally, you can define the platform with the argument `platform` to limit the scope. The available platforms are [the same values](https://nodejs.org/api/os.html#osplatform) available in `os.platform()`. 92 | 93 | ```js 94 | import { isNodeVulnerable } from 'is-my-node-vulnerable' 95 | 96 | await isNodeVulnerable('19.0.0', 'linux') // true 97 | ``` 98 | 99 | [Node.js Security Database]: https://github.com/nodejs/security-wg/tree/main/vuln 100 | 101 | 102 | ## Github Action 103 | 104 | This package also provides a GitHub Action, just include the `node-version` in the yml as follows in order to check a specific version: 105 | 106 | ```yml 107 | name: "Node.js Vulnerabilities" 108 | on: 109 | schedule: 110 | - cron: "0 0 * * *" 111 | 112 | jobs: 113 | is-my-node-vulnerable: 114 | runs-on: ubuntu-latest 115 | steps: 116 | - uses: actions/checkout@v3 117 | - name: Check Node.js 118 | uses: nodejs/is-my-node-vulnerable@v1 119 | with: 120 | node-version: "22.15.0" 121 | ``` 122 | 123 | Optionally, you can define the platform with the argument `platform` to limit the scope. The available platforms are [the same values](https://nodejs.org/api/os.html#osplatform) available in `os.platform()`. 124 | 125 | ```yml 126 | - uses: actions/checkout@v3 127 | - name: Check Node.js 128 | uses: nodejs/is-my-node-vulnerable@v1 129 | with: 130 | node-version: "22.15.0" 131 | platform: "linux" 132 | ``` 133 | -------------------------------------------------------------------------------- /action.js: -------------------------------------------------------------------------------- 1 | const core = require('@actions/core') 2 | const { isNodeVulnerable } = require('./index') 3 | 4 | async function run () { 5 | // Inputs 6 | const nodeVersion = core.getInput('node-version', { required: true }) 7 | const platform = core.getInput('platform', { required: false }) 8 | 9 | core.info(`Checking Node.js version ${nodeVersion} with platform ${platform}...`) 10 | const isVulnerable = await isNodeVulnerable(nodeVersion, platform) 11 | if (isVulnerable) { 12 | core.setFailed(`Node.js version ${nodeVersion} is vulnerable. Please upgrade!`) 13 | } else { 14 | core.info(`Node.js version ${nodeVersion} is OK!`) 15 | } 16 | } 17 | 18 | run() 19 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'is-my-node-vulnerable' 2 | description: 'checks if your Node.js installation is vulnerable to known security vulnerabilities' 3 | author: 'RafaelGSS' 4 | 5 | runs: 6 | using: 'node20' 7 | main: 'dist/index.js' 8 | 9 | inputs: 10 | node-version: 11 | description: 'Node.js version to check' 12 | required: true 13 | default: 'v20.x' 14 | platform: 15 | description: 'Platform to check' 16 | required: false 17 | 18 | # https://actions-cool.github.io/github-action-branding/ 19 | branding: 20 | icon: 'flag' 21 | color: 'red' 22 | -------------------------------------------------------------------------------- /ascii.js: -------------------------------------------------------------------------------- 1 | const util = require('util') 2 | 3 | const danger = '\n' + 4 | '\n' + 5 | '██████ █████ ███ ██ ██████ ███████ ███████\n' + 6 | '██ ██ ██ ██ ████ ██ ██ ██ ██ ██\n' + 7 | '██ ██ ███████ ██ ██ ██ ██ ███ █████ ███████\n' + 8 | '██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██\n' + 9 | '██████ ██ ██ ██ ████ ██████ ███████ ██ ██\n' + 10 | '\n' 11 | 12 | const allGood = '\n' + 13 | '\n' + 14 | ' █████ ██ ██ ██████ ██████ ██████ ██████ ██\n' + 15 | '██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██\n' + 16 | '███████ ██ ██ ██ ███ ██ ██ ██ ██ ██ ██ ██\n' + 17 | '██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██\n' + 18 | '██ ██ ███████ ███████ ██████ ██████ ██████ ██████ ██\n' + 19 | '\n' 20 | 21 | function escapeStyleCode (code) { 22 | return '\u001b[' + code + 'm' 23 | } 24 | 25 | function bold (text) { 26 | var left = '' 27 | var right = '' 28 | const formatCodes = util.inspect.colors.bold 29 | left += escapeStyleCode(formatCodes[0]) 30 | right = escapeStyleCode(formatCodes[1]) + right 31 | return left + text + right 32 | } 33 | 34 | const vulnerableWarning = bold('The current Node.js version (' + process.version + ') is vulnerable to the following CVEs:') 35 | 36 | var separator = '=' 37 | for (var i = 0; i < process.stdout.columns; ++i) { 38 | separator = separator + '=' 39 | } 40 | 41 | module.exports.danger = danger 42 | module.exports.allGood = allGood 43 | module.exports.bold = bold 44 | module.exports.vulnerableWarning = vulnerableWarning 45 | module.exports.separator = separator 46 | -------------------------------------------------------------------------------- /eol-versions.js: -------------------------------------------------------------------------------- 1 | // Sync from https://raw.githubusercontent.com/nodejs/Release/master/schedule.json 2 | // These are the list of versions that might be affected by this module dependencies 3 | const versionMap = { 4 | // v0.12 5 | v0: { 6 | start: '2015-02-06', 7 | end: '2016-12-31' 8 | }, 9 | v4: { 10 | start: '2015-09-08', 11 | lts: '2015-10-12', 12 | maintenance: '2017-04-01', 13 | end: '2018-04-30', 14 | codename: 'Argon' 15 | }, 16 | v5: { 17 | start: '2015-10-29', 18 | maintenance: '2016-04-30', 19 | end: '2016-06-30' 20 | }, 21 | v6: { 22 | start: '2016-04-26', 23 | lts: '2016-10-18', 24 | maintenance: '2018-04-30', 25 | end: '2019-04-30', 26 | codename: 'Boron' 27 | }, 28 | v7: { 29 | start: '2016-10-25', 30 | maintenance: '2017-04-30', 31 | end: '2017-06-30' 32 | }, 33 | v8: { 34 | start: '2017-05-30', 35 | lts: '2017-10-31', 36 | maintenance: '2019-01-01', 37 | end: '2019-12-31', 38 | codename: 'Carbon' 39 | }, 40 | v9: { 41 | start: '2017-10-01', 42 | maintenance: '2018-04-01', 43 | end: '2018-06-30' 44 | }, 45 | v10: { 46 | start: '2018-04-24', 47 | lts: '2018-10-30', 48 | maintenance: '2020-05-19', 49 | end: '2021-04-30', 50 | codename: 'Dubnium' 51 | }, 52 | v11: { 53 | start: '2018-10-23', 54 | maintenance: '2019-04-22', 55 | end: '2019-06-01' 56 | }, 57 | v12: { 58 | start: '2019-04-23', 59 | lts: '2019-10-21', 60 | maintenance: '2020-11-30', 61 | end: '2022-04-30', 62 | codename: 'Erbium' 63 | }, 64 | v13: { 65 | start: '2019-10-22', 66 | maintenance: '2020-04-01', 67 | end: '2020-06-01' 68 | }, 69 | v14: { 70 | start: '2020-04-21', 71 | lts: '2020-10-27', 72 | maintenance: '2021-10-19', 73 | end: '2023-04-30', 74 | codename: 'Fermium' 75 | }, 76 | v15: { 77 | start: '2020-10-20', 78 | maintenance: '2021-04-01', 79 | end: '2021-06-01' 80 | }, 81 | v16: { 82 | start: '2021-04-20', 83 | lts: '2021-10-26', 84 | maintenance: '2022-10-18', 85 | end: '2023-09-11', 86 | codename: 'Gallium' 87 | }, 88 | v17: { 89 | start: '2021-10-19', 90 | maintenance: '2022-04-01', 91 | end: '2022-06-01' 92 | }, 93 | v19: { 94 | start: '2022-10-18', 95 | maintenance: '2023-04-01', 96 | end: '2023-06-01' 97 | } 98 | } 99 | 100 | function isOldEnough (version) { 101 | const versionInfo = getVersionInfo(version) 102 | 103 | if (!versionInfo) { 104 | return false 105 | } else if (!versionInfo.end) { 106 | return true // Versions without an EOL date are considered EOL 107 | } 108 | 109 | const now = new Date() 110 | const end = new Date(versionInfo.end) 111 | return now > end 112 | } 113 | 114 | function getVersionInfo (version) { 115 | const majorVersion = extractMajorVersion(version) 116 | return versionMap[majorVersion] || null 117 | } 118 | 119 | function extractMajorVersion (version) { 120 | // Extracts the major version number from a version string like 'v12.22.12' 121 | const major = version.split('.')[0] 122 | return major 123 | } 124 | 125 | module.exports = isOldEnough 126 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const isOldEnough = require('./eol-versions') 4 | const ascii = require('./ascii') 5 | 6 | // To guarantee support on older versions and do not drastically impact 7 | // the maintenance of this module, we check if process.version is too old 8 | // and throw EOL warning when true. 9 | if (isOldEnough(process.version)) { 10 | console.log(ascii.danger) 11 | const msg = process.version + ' is end-of-life. There are high chances of being vulnerable. Please upgrade it.' 12 | console.log(msg) 13 | process.exit(1) 14 | } else { 15 | // CLI 16 | if (require.main === module) { 17 | require('./is-vulnerable').cli(process.version, require('os').platform()) 18 | } else { 19 | module.exports = { 20 | isNodeVulnerable: require('./is-vulnerable').isNodeVulnerable 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /is-vulnerable.js: -------------------------------------------------------------------------------- 1 | const { danger, allGood, bold, vulnerableWarning, separator } = require('./ascii') 2 | const { request } = require('https') 3 | const fs = require('fs') 4 | const path = require('path') 5 | const satisfies = require('semver/functions/satisfies') 6 | 7 | const STORE = { 8 | security: { 9 | url: 'https://raw.githubusercontent.com/nodejs/security-wg/main/vuln/core/index.json', 10 | jsonFile: path.join(__dirname, 'security.json'), 11 | etagFile: path.join(__dirname, 'security.etag'), 12 | etagValue: '' 13 | }, 14 | schedule: { 15 | url: 'https://raw.githubusercontent.com/nodejs/Release/main/schedule.json', 16 | jsonFile: path.join(__dirname, 'schedule.json'), 17 | etagFile: path.join(__dirname, 'schedule.etag'), 18 | etagValue: '' 19 | } 20 | } 21 | 22 | async function readLocal (file) { 23 | return require(file) 24 | } 25 | 26 | function debug (msg) { 27 | if (process.env.DEBUG) { 28 | console.debug(msg) 29 | } 30 | } 31 | 32 | function loadETag () { 33 | for (const [key, obj] of Object.entries(STORE)) { 34 | if (fs.existsSync(obj.etagFile)) { 35 | debug(`Loading local ETag for '${key}'`) 36 | obj.etagValue = fs.readFileSync(obj.etagFile).toString() 37 | } 38 | } 39 | } 40 | 41 | async function fetchJson (obj) { 42 | await new Promise((resolve) => { 43 | request(obj.url, (res) => { 44 | if (res.statusCode !== 200) { 45 | console.error(`Request to Github returned http status ${res.statusCode}. Aborting...`) 46 | process.nextTick(() => { process.exit(1) }) 47 | } 48 | 49 | const fileStream = fs.createWriteStream(obj.jsonFile) 50 | res.pipe(fileStream) 51 | 52 | fileStream.on('finish', () => { 53 | fileStream.close() 54 | resolve() 55 | }) 56 | 57 | fileStream.on('error', (err) => { 58 | console.error(`Error ${err.message} while writing to '${obj.jsonFile}'. Aborting...`) 59 | process.nextTick(() => { process.exit(1) }) 60 | }) 61 | }).on('error', (err) => { 62 | console.error(`Request to Github returned error ${err.message}. Aborting...`) 63 | process.nextTick(() => { process.exit(1) }) 64 | }).end() 65 | }) 66 | return readLocal(obj.jsonFile) 67 | } 68 | 69 | async function getJson (obj) { 70 | return new Promise((resolve) => { 71 | request(obj.url, { method: 'HEAD' }, (res) => { 72 | if (res.statusCode !== 200) { 73 | console.error(`Request to Github returned http status ${res.statusCode}. Aborting...`) 74 | process.nextTick(() => { process.exit(1) }) 75 | } 76 | 77 | res.on('data', () => {}) 78 | 79 | const { etag } = res.headers 80 | if (!obj.etagValue || obj.eTagValue !== etag || !fs.existsSync(obj.jsonFile)) { 81 | obj.etagValue = etag 82 | fs.writeFileSync(obj.etagFile, etag) 83 | debug('Creating local core.json') 84 | resolve(fetchJson(obj)) 85 | } else { 86 | debug(`No updates from upstream. Getting a cached version: ${obj.jsonFile}`) 87 | resolve(readLocal(obj.jsonFile)) 88 | } 89 | }).on('error', (err) => { 90 | console.error(`Request to Github returned error ${err.message}. Aborting...`) 91 | process.nextTick(() => { process.exit(1) }) 92 | }).end() 93 | }) 94 | } 95 | 96 | const checkPlatform = platform => { 97 | const availablePlatforms = ['aix', 'darwin', 'freebsd', 'linux', 'openbsd', 'sunos', 'win32', 'android'] 98 | if (platform && !availablePlatforms.includes(platform)) { 99 | throw new Error(`platform ${platform} is not valid. Please use ${availablePlatforms.join(',')}.`) 100 | } 101 | } 102 | 103 | const isSystemAffected = (platform, affectedEnvironments) => { 104 | // No platform specified (legacy mode) 105 | if (!platform || !Array.isArray(affectedEnvironments)) { 106 | return true 107 | } 108 | // If the environment is matching or all the environments are affected 109 | if (affectedEnvironments.includes(platform) || affectedEnvironments.includes('all')) { 110 | return true 111 | } 112 | // Default to false 113 | return false 114 | } 115 | 116 | function getVulnerabilityList (currentVersion, data, platform) { 117 | const list = [] 118 | for (const key in data) { 119 | const vuln = data[key] 120 | 121 | if ( 122 | ( 123 | satisfies(currentVersion, vuln.vulnerable) && 124 | !satisfies(currentVersion, vuln.patched) 125 | ) && isSystemAffected(platform, vuln.affectedEnvironments) 126 | ) { 127 | const severity = vuln.severity === 'unknown' ? '' : `(${vuln.severity})` 128 | list.push(`${bold(vuln.cve)}${severity}: ${vuln.overview}\n${bold('Patched versions')}: ${vuln.patched}`) 129 | } 130 | } 131 | return list 132 | } 133 | 134 | async function cli (currentVersion, platform) { 135 | checkPlatform(platform) 136 | 137 | const isEOL = await isNodeEOL(currentVersion) 138 | if (isEOL) { 139 | console.error(danger) 140 | console.error(`${currentVersion} is end-of-life. There are high chances of being vulnerable. Please upgrade it.`) 141 | process.exit(1) 142 | } 143 | 144 | const securityJson = await getJson(STORE.security) 145 | const list = getVulnerabilityList(currentVersion, securityJson, platform) 146 | 147 | if (list.length) { 148 | console.error(danger) 149 | console.error(vulnerableWarning + '\n') 150 | console.error(`${list.join(`\n${separator}\n\n`)}\n${separator}`) 151 | process.exit(1) 152 | } else { 153 | console.info(allGood) 154 | } 155 | } 156 | 157 | async function getVersionInfo (version) { 158 | const scheduleJson = await getJson(STORE.schedule) 159 | 160 | if (scheduleJson[version.toLowerCase()]) { 161 | return scheduleJson[version.toLowerCase()] 162 | } 163 | 164 | for (const [key, value] of Object.entries(scheduleJson)) { 165 | if (satisfies(version, key)) { 166 | return value 167 | } 168 | } 169 | 170 | return null 171 | } 172 | 173 | /** 174 | * @param {string} version 175 | * @returns {Promise} true if the version is end-of-life 176 | */ 177 | async function isNodeEOL (version) { 178 | const myVersionInfo = await getVersionInfo(version) 179 | 180 | if (!myVersionInfo) { 181 | // i.e. isNodeEOL('abcd') or isNodeEOL('lts') or isNodeEOL('99') 182 | throw Error(`Could not fetch version information for ${version}`) 183 | } else if (!myVersionInfo.end) { 184 | // We got a record, but.. 185 | // v0.12.18 etc does not have an EOL date, which probably means too old. 186 | return true 187 | } 188 | 189 | const now = new Date() 190 | const end = new Date(myVersionInfo.end) 191 | return now > end 192 | } 193 | 194 | async function isNodeVulnerable (version, platform) { 195 | checkPlatform(platform) 196 | const isEOL = await isNodeEOL(version) 197 | if (isEOL) { 198 | return true 199 | } 200 | 201 | const coreIndex = await getJson(STORE.security) 202 | const list = getVulnerabilityList(version, coreIndex, platform) 203 | return list.length > 0 204 | } 205 | 206 | if (process.argv[2] !== '-r') { 207 | loadETag() 208 | } 209 | 210 | module.exports = { 211 | isNodeVulnerable, 212 | cli 213 | } 214 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "is-my-node-vulnerable", 3 | "version": "1.6.1", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "is-my-node-vulnerable", 9 | "version": "1.6.1", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@actions/core": "^1.10.0", 13 | "semver": "^7.3.8" 14 | }, 15 | "bin": { 16 | "is-my-node-vulnerable": "index.js" 17 | }, 18 | "devDependencies": { 19 | "@vercel/ncc": "^0.36.1", 20 | "standard": "^17.0.0" 21 | } 22 | }, 23 | "node_modules/@actions/core": { 24 | "version": "1.10.0", 25 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", 26 | "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==", 27 | "dependencies": { 28 | "@actions/http-client": "^2.0.1", 29 | "uuid": "^8.3.2" 30 | } 31 | }, 32 | "node_modules/@actions/http-client": { 33 | "version": "2.0.1", 34 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", 35 | "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", 36 | "dependencies": { 37 | "tunnel": "^0.0.6" 38 | } 39 | }, 40 | "node_modules/@eslint/eslintrc": { 41 | "version": "1.4.1", 42 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", 43 | "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", 44 | "dev": true, 45 | "dependencies": { 46 | "ajv": "^6.12.4", 47 | "debug": "^4.3.2", 48 | "espree": "^9.4.0", 49 | "globals": "^13.19.0", 50 | "ignore": "^5.2.0", 51 | "import-fresh": "^3.2.1", 52 | "js-yaml": "^4.1.0", 53 | "minimatch": "^3.1.2", 54 | "strip-json-comments": "^3.1.1" 55 | }, 56 | "engines": { 57 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 58 | }, 59 | "funding": { 60 | "url": "https://opencollective.com/eslint" 61 | } 62 | }, 63 | "node_modules/@humanwhocodes/config-array": { 64 | "version": "0.11.8", 65 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", 66 | "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", 67 | "dev": true, 68 | "dependencies": { 69 | "@humanwhocodes/object-schema": "^1.2.1", 70 | "debug": "^4.1.1", 71 | "minimatch": "^3.0.5" 72 | }, 73 | "engines": { 74 | "node": ">=10.10.0" 75 | } 76 | }, 77 | "node_modules/@humanwhocodes/module-importer": { 78 | "version": "1.0.1", 79 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 80 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 81 | "dev": true, 82 | "engines": { 83 | "node": ">=12.22" 84 | }, 85 | "funding": { 86 | "type": "github", 87 | "url": "https://github.com/sponsors/nzakas" 88 | } 89 | }, 90 | "node_modules/@humanwhocodes/object-schema": { 91 | "version": "1.2.1", 92 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 93 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 94 | "dev": true 95 | }, 96 | "node_modules/@nodelib/fs.scandir": { 97 | "version": "2.1.5", 98 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 99 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 100 | "dev": true, 101 | "dependencies": { 102 | "@nodelib/fs.stat": "2.0.5", 103 | "run-parallel": "^1.1.9" 104 | }, 105 | "engines": { 106 | "node": ">= 8" 107 | } 108 | }, 109 | "node_modules/@nodelib/fs.stat": { 110 | "version": "2.0.5", 111 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 112 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 113 | "dev": true, 114 | "engines": { 115 | "node": ">= 8" 116 | } 117 | }, 118 | "node_modules/@nodelib/fs.walk": { 119 | "version": "1.2.8", 120 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 121 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 122 | "dev": true, 123 | "dependencies": { 124 | "@nodelib/fs.scandir": "2.1.5", 125 | "fastq": "^1.6.0" 126 | }, 127 | "engines": { 128 | "node": ">= 8" 129 | } 130 | }, 131 | "node_modules/@types/json5": { 132 | "version": "0.0.29", 133 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", 134 | "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", 135 | "dev": true 136 | }, 137 | "node_modules/@vercel/ncc": { 138 | "version": "0.36.1", 139 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.36.1.tgz", 140 | "integrity": "sha512-S4cL7Taa9yb5qbv+6wLgiKVZ03Qfkc4jGRuiUQMQ8HGBD5pcNRnHeYM33zBvJE4/zJGjJJ8GScB+WmTsn9mORw==", 141 | "dev": true, 142 | "bin": { 143 | "ncc": "dist/ncc/cli.js" 144 | } 145 | }, 146 | "node_modules/acorn": { 147 | "version": "8.8.2", 148 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 149 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 150 | "dev": true, 151 | "bin": { 152 | "acorn": "bin/acorn" 153 | }, 154 | "engines": { 155 | "node": ">=0.4.0" 156 | } 157 | }, 158 | "node_modules/acorn-jsx": { 159 | "version": "5.3.2", 160 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 161 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 162 | "dev": true, 163 | "peerDependencies": { 164 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 165 | } 166 | }, 167 | "node_modules/ajv": { 168 | "version": "6.12.6", 169 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 170 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 171 | "dev": true, 172 | "dependencies": { 173 | "fast-deep-equal": "^3.1.1", 174 | "fast-json-stable-stringify": "^2.0.0", 175 | "json-schema-traverse": "^0.4.1", 176 | "uri-js": "^4.2.2" 177 | }, 178 | "funding": { 179 | "type": "github", 180 | "url": "https://github.com/sponsors/epoberezkin" 181 | } 182 | }, 183 | "node_modules/ansi-regex": { 184 | "version": "5.0.1", 185 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 186 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 187 | "dev": true, 188 | "engines": { 189 | "node": ">=8" 190 | } 191 | }, 192 | "node_modules/ansi-styles": { 193 | "version": "4.3.0", 194 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 195 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 196 | "dev": true, 197 | "dependencies": { 198 | "color-convert": "^2.0.1" 199 | }, 200 | "engines": { 201 | "node": ">=8" 202 | }, 203 | "funding": { 204 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 205 | } 206 | }, 207 | "node_modules/argparse": { 208 | "version": "2.0.1", 209 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 210 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 211 | "dev": true 212 | }, 213 | "node_modules/array-includes": { 214 | "version": "3.1.6", 215 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", 216 | "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", 217 | "dev": true, 218 | "dependencies": { 219 | "call-bind": "^1.0.2", 220 | "define-properties": "^1.1.4", 221 | "es-abstract": "^1.20.4", 222 | "get-intrinsic": "^1.1.3", 223 | "is-string": "^1.0.7" 224 | }, 225 | "engines": { 226 | "node": ">= 0.4" 227 | }, 228 | "funding": { 229 | "url": "https://github.com/sponsors/ljharb" 230 | } 231 | }, 232 | "node_modules/array.prototype.flat": { 233 | "version": "1.3.1", 234 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", 235 | "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", 236 | "dev": true, 237 | "dependencies": { 238 | "call-bind": "^1.0.2", 239 | "define-properties": "^1.1.4", 240 | "es-abstract": "^1.20.4", 241 | "es-shim-unscopables": "^1.0.0" 242 | }, 243 | "engines": { 244 | "node": ">= 0.4" 245 | }, 246 | "funding": { 247 | "url": "https://github.com/sponsors/ljharb" 248 | } 249 | }, 250 | "node_modules/array.prototype.flatmap": { 251 | "version": "1.3.1", 252 | "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", 253 | "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", 254 | "dev": true, 255 | "dependencies": { 256 | "call-bind": "^1.0.2", 257 | "define-properties": "^1.1.4", 258 | "es-abstract": "^1.20.4", 259 | "es-shim-unscopables": "^1.0.0" 260 | }, 261 | "engines": { 262 | "node": ">= 0.4" 263 | }, 264 | "funding": { 265 | "url": "https://github.com/sponsors/ljharb" 266 | } 267 | }, 268 | "node_modules/array.prototype.tosorted": { 269 | "version": "1.1.1", 270 | "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", 271 | "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", 272 | "dev": true, 273 | "dependencies": { 274 | "call-bind": "^1.0.2", 275 | "define-properties": "^1.1.4", 276 | "es-abstract": "^1.20.4", 277 | "es-shim-unscopables": "^1.0.0", 278 | "get-intrinsic": "^1.1.3" 279 | } 280 | }, 281 | "node_modules/available-typed-arrays": { 282 | "version": "1.0.5", 283 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 284 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 285 | "dev": true, 286 | "engines": { 287 | "node": ">= 0.4" 288 | }, 289 | "funding": { 290 | "url": "https://github.com/sponsors/ljharb" 291 | } 292 | }, 293 | "node_modules/balanced-match": { 294 | "version": "1.0.2", 295 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 296 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 297 | "dev": true 298 | }, 299 | "node_modules/brace-expansion": { 300 | "version": "1.1.11", 301 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 302 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 303 | "dev": true, 304 | "dependencies": { 305 | "balanced-match": "^1.0.0", 306 | "concat-map": "0.0.1" 307 | } 308 | }, 309 | "node_modules/builtins": { 310 | "version": "5.0.1", 311 | "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", 312 | "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", 313 | "dev": true, 314 | "dependencies": { 315 | "semver": "^7.0.0" 316 | } 317 | }, 318 | "node_modules/call-bind": { 319 | "version": "1.0.2", 320 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 321 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 322 | "dev": true, 323 | "dependencies": { 324 | "function-bind": "^1.1.1", 325 | "get-intrinsic": "^1.0.2" 326 | }, 327 | "funding": { 328 | "url": "https://github.com/sponsors/ljharb" 329 | } 330 | }, 331 | "node_modules/callsites": { 332 | "version": "3.1.0", 333 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 334 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 335 | "dev": true, 336 | "engines": { 337 | "node": ">=6" 338 | } 339 | }, 340 | "node_modules/chalk": { 341 | "version": "4.1.2", 342 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 343 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 344 | "dev": true, 345 | "dependencies": { 346 | "ansi-styles": "^4.1.0", 347 | "supports-color": "^7.1.0" 348 | }, 349 | "engines": { 350 | "node": ">=10" 351 | }, 352 | "funding": { 353 | "url": "https://github.com/chalk/chalk?sponsor=1" 354 | } 355 | }, 356 | "node_modules/color-convert": { 357 | "version": "2.0.1", 358 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 359 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 360 | "dev": true, 361 | "dependencies": { 362 | "color-name": "~1.1.4" 363 | }, 364 | "engines": { 365 | "node": ">=7.0.0" 366 | } 367 | }, 368 | "node_modules/color-name": { 369 | "version": "1.1.4", 370 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 371 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 372 | "dev": true 373 | }, 374 | "node_modules/concat-map": { 375 | "version": "0.0.1", 376 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 377 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 378 | "dev": true 379 | }, 380 | "node_modules/cross-spawn": { 381 | "version": "7.0.3", 382 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 383 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 384 | "dev": true, 385 | "dependencies": { 386 | "path-key": "^3.1.0", 387 | "shebang-command": "^2.0.0", 388 | "which": "^2.0.1" 389 | }, 390 | "engines": { 391 | "node": ">= 8" 392 | } 393 | }, 394 | "node_modules/debug": { 395 | "version": "4.3.4", 396 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 397 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 398 | "dev": true, 399 | "dependencies": { 400 | "ms": "2.1.2" 401 | }, 402 | "engines": { 403 | "node": ">=6.0" 404 | }, 405 | "peerDependenciesMeta": { 406 | "supports-color": { 407 | "optional": true 408 | } 409 | } 410 | }, 411 | "node_modules/deep-is": { 412 | "version": "0.1.4", 413 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 414 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 415 | "dev": true 416 | }, 417 | "node_modules/define-properties": { 418 | "version": "1.1.4", 419 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", 420 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", 421 | "dev": true, 422 | "dependencies": { 423 | "has-property-descriptors": "^1.0.0", 424 | "object-keys": "^1.1.1" 425 | }, 426 | "engines": { 427 | "node": ">= 0.4" 428 | }, 429 | "funding": { 430 | "url": "https://github.com/sponsors/ljharb" 431 | } 432 | }, 433 | "node_modules/doctrine": { 434 | "version": "3.0.0", 435 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 436 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 437 | "dev": true, 438 | "dependencies": { 439 | "esutils": "^2.0.2" 440 | }, 441 | "engines": { 442 | "node": ">=6.0.0" 443 | } 444 | }, 445 | "node_modules/error-ex": { 446 | "version": "1.3.2", 447 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 448 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 449 | "dev": true, 450 | "dependencies": { 451 | "is-arrayish": "^0.2.1" 452 | } 453 | }, 454 | "node_modules/es-abstract": { 455 | "version": "1.21.1", 456 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", 457 | "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", 458 | "dev": true, 459 | "dependencies": { 460 | "available-typed-arrays": "^1.0.5", 461 | "call-bind": "^1.0.2", 462 | "es-set-tostringtag": "^2.0.1", 463 | "es-to-primitive": "^1.2.1", 464 | "function-bind": "^1.1.1", 465 | "function.prototype.name": "^1.1.5", 466 | "get-intrinsic": "^1.1.3", 467 | "get-symbol-description": "^1.0.0", 468 | "globalthis": "^1.0.3", 469 | "gopd": "^1.0.1", 470 | "has": "^1.0.3", 471 | "has-property-descriptors": "^1.0.0", 472 | "has-proto": "^1.0.1", 473 | "has-symbols": "^1.0.3", 474 | "internal-slot": "^1.0.4", 475 | "is-array-buffer": "^3.0.1", 476 | "is-callable": "^1.2.7", 477 | "is-negative-zero": "^2.0.2", 478 | "is-regex": "^1.1.4", 479 | "is-shared-array-buffer": "^1.0.2", 480 | "is-string": "^1.0.7", 481 | "is-typed-array": "^1.1.10", 482 | "is-weakref": "^1.0.2", 483 | "object-inspect": "^1.12.2", 484 | "object-keys": "^1.1.1", 485 | "object.assign": "^4.1.4", 486 | "regexp.prototype.flags": "^1.4.3", 487 | "safe-regex-test": "^1.0.0", 488 | "string.prototype.trimend": "^1.0.6", 489 | "string.prototype.trimstart": "^1.0.6", 490 | "typed-array-length": "^1.0.4", 491 | "unbox-primitive": "^1.0.2", 492 | "which-typed-array": "^1.1.9" 493 | }, 494 | "engines": { 495 | "node": ">= 0.4" 496 | }, 497 | "funding": { 498 | "url": "https://github.com/sponsors/ljharb" 499 | } 500 | }, 501 | "node_modules/es-set-tostringtag": { 502 | "version": "2.0.1", 503 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", 504 | "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", 505 | "dev": true, 506 | "dependencies": { 507 | "get-intrinsic": "^1.1.3", 508 | "has": "^1.0.3", 509 | "has-tostringtag": "^1.0.0" 510 | }, 511 | "engines": { 512 | "node": ">= 0.4" 513 | } 514 | }, 515 | "node_modules/es-shim-unscopables": { 516 | "version": "1.0.0", 517 | "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", 518 | "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", 519 | "dev": true, 520 | "dependencies": { 521 | "has": "^1.0.3" 522 | } 523 | }, 524 | "node_modules/es-to-primitive": { 525 | "version": "1.2.1", 526 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 527 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 528 | "dev": true, 529 | "dependencies": { 530 | "is-callable": "^1.1.4", 531 | "is-date-object": "^1.0.1", 532 | "is-symbol": "^1.0.2" 533 | }, 534 | "engines": { 535 | "node": ">= 0.4" 536 | }, 537 | "funding": { 538 | "url": "https://github.com/sponsors/ljharb" 539 | } 540 | }, 541 | "node_modules/escape-string-regexp": { 542 | "version": "4.0.0", 543 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 544 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 545 | "dev": true, 546 | "engines": { 547 | "node": ">=10" 548 | }, 549 | "funding": { 550 | "url": "https://github.com/sponsors/sindresorhus" 551 | } 552 | }, 553 | "node_modules/eslint": { 554 | "version": "8.32.0", 555 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", 556 | "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", 557 | "dev": true, 558 | "dependencies": { 559 | "@eslint/eslintrc": "^1.4.1", 560 | "@humanwhocodes/config-array": "^0.11.8", 561 | "@humanwhocodes/module-importer": "^1.0.1", 562 | "@nodelib/fs.walk": "^1.2.8", 563 | "ajv": "^6.10.0", 564 | "chalk": "^4.0.0", 565 | "cross-spawn": "^7.0.2", 566 | "debug": "^4.3.2", 567 | "doctrine": "^3.0.0", 568 | "escape-string-regexp": "^4.0.0", 569 | "eslint-scope": "^7.1.1", 570 | "eslint-utils": "^3.0.0", 571 | "eslint-visitor-keys": "^3.3.0", 572 | "espree": "^9.4.0", 573 | "esquery": "^1.4.0", 574 | "esutils": "^2.0.2", 575 | "fast-deep-equal": "^3.1.3", 576 | "file-entry-cache": "^6.0.1", 577 | "find-up": "^5.0.0", 578 | "glob-parent": "^6.0.2", 579 | "globals": "^13.19.0", 580 | "grapheme-splitter": "^1.0.4", 581 | "ignore": "^5.2.0", 582 | "import-fresh": "^3.0.0", 583 | "imurmurhash": "^0.1.4", 584 | "is-glob": "^4.0.0", 585 | "is-path-inside": "^3.0.3", 586 | "js-sdsl": "^4.1.4", 587 | "js-yaml": "^4.1.0", 588 | "json-stable-stringify-without-jsonify": "^1.0.1", 589 | "levn": "^0.4.1", 590 | "lodash.merge": "^4.6.2", 591 | "minimatch": "^3.1.2", 592 | "natural-compare": "^1.4.0", 593 | "optionator": "^0.9.1", 594 | "regexpp": "^3.2.0", 595 | "strip-ansi": "^6.0.1", 596 | "strip-json-comments": "^3.1.0", 597 | "text-table": "^0.2.0" 598 | }, 599 | "bin": { 600 | "eslint": "bin/eslint.js" 601 | }, 602 | "engines": { 603 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 604 | }, 605 | "funding": { 606 | "url": "https://opencollective.com/eslint" 607 | } 608 | }, 609 | "node_modules/eslint-config-standard": { 610 | "version": "17.0.0", 611 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", 612 | "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", 613 | "dev": true, 614 | "funding": [ 615 | { 616 | "type": "github", 617 | "url": "https://github.com/sponsors/feross" 618 | }, 619 | { 620 | "type": "patreon", 621 | "url": "https://www.patreon.com/feross" 622 | }, 623 | { 624 | "type": "consulting", 625 | "url": "https://feross.org/support" 626 | } 627 | ], 628 | "peerDependencies": { 629 | "eslint": "^8.0.1", 630 | "eslint-plugin-import": "^2.25.2", 631 | "eslint-plugin-n": "^15.0.0", 632 | "eslint-plugin-promise": "^6.0.0" 633 | } 634 | }, 635 | "node_modules/eslint-config-standard-jsx": { 636 | "version": "11.0.0", 637 | "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz", 638 | "integrity": "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==", 639 | "dev": true, 640 | "funding": [ 641 | { 642 | "type": "github", 643 | "url": "https://github.com/sponsors/feross" 644 | }, 645 | { 646 | "type": "patreon", 647 | "url": "https://www.patreon.com/feross" 648 | }, 649 | { 650 | "type": "consulting", 651 | "url": "https://feross.org/support" 652 | } 653 | ], 654 | "peerDependencies": { 655 | "eslint": "^8.8.0", 656 | "eslint-plugin-react": "^7.28.0" 657 | } 658 | }, 659 | "node_modules/eslint-import-resolver-node": { 660 | "version": "0.3.7", 661 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", 662 | "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", 663 | "dev": true, 664 | "dependencies": { 665 | "debug": "^3.2.7", 666 | "is-core-module": "^2.11.0", 667 | "resolve": "^1.22.1" 668 | } 669 | }, 670 | "node_modules/eslint-import-resolver-node/node_modules/debug": { 671 | "version": "3.2.7", 672 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 673 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 674 | "dev": true, 675 | "dependencies": { 676 | "ms": "^2.1.1" 677 | } 678 | }, 679 | "node_modules/eslint-module-utils": { 680 | "version": "2.7.4", 681 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", 682 | "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", 683 | "dev": true, 684 | "dependencies": { 685 | "debug": "^3.2.7" 686 | }, 687 | "engines": { 688 | "node": ">=4" 689 | }, 690 | "peerDependenciesMeta": { 691 | "eslint": { 692 | "optional": true 693 | } 694 | } 695 | }, 696 | "node_modules/eslint-module-utils/node_modules/debug": { 697 | "version": "3.2.7", 698 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 699 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 700 | "dev": true, 701 | "dependencies": { 702 | "ms": "^2.1.1" 703 | } 704 | }, 705 | "node_modules/eslint-plugin-es": { 706 | "version": "4.1.0", 707 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", 708 | "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", 709 | "dev": true, 710 | "dependencies": { 711 | "eslint-utils": "^2.0.0", 712 | "regexpp": "^3.0.0" 713 | }, 714 | "engines": { 715 | "node": ">=8.10.0" 716 | }, 717 | "funding": { 718 | "url": "https://github.com/sponsors/mysticatea" 719 | }, 720 | "peerDependencies": { 721 | "eslint": ">=4.19.1" 722 | } 723 | }, 724 | "node_modules/eslint-plugin-es/node_modules/eslint-utils": { 725 | "version": "2.1.0", 726 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 727 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 728 | "dev": true, 729 | "dependencies": { 730 | "eslint-visitor-keys": "^1.1.0" 731 | }, 732 | "engines": { 733 | "node": ">=6" 734 | }, 735 | "funding": { 736 | "url": "https://github.com/sponsors/mysticatea" 737 | } 738 | }, 739 | "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { 740 | "version": "1.3.0", 741 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 742 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 743 | "dev": true, 744 | "engines": { 745 | "node": ">=4" 746 | } 747 | }, 748 | "node_modules/eslint-plugin-import": { 749 | "version": "2.27.5", 750 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", 751 | "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", 752 | "dev": true, 753 | "dependencies": { 754 | "array-includes": "^3.1.6", 755 | "array.prototype.flat": "^1.3.1", 756 | "array.prototype.flatmap": "^1.3.1", 757 | "debug": "^3.2.7", 758 | "doctrine": "^2.1.0", 759 | "eslint-import-resolver-node": "^0.3.7", 760 | "eslint-module-utils": "^2.7.4", 761 | "has": "^1.0.3", 762 | "is-core-module": "^2.11.0", 763 | "is-glob": "^4.0.3", 764 | "minimatch": "^3.1.2", 765 | "object.values": "^1.1.6", 766 | "resolve": "^1.22.1", 767 | "semver": "^6.3.0", 768 | "tsconfig-paths": "^3.14.1" 769 | }, 770 | "engines": { 771 | "node": ">=4" 772 | }, 773 | "peerDependencies": { 774 | "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" 775 | } 776 | }, 777 | "node_modules/eslint-plugin-import/node_modules/debug": { 778 | "version": "3.2.7", 779 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 780 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 781 | "dev": true, 782 | "dependencies": { 783 | "ms": "^2.1.1" 784 | } 785 | }, 786 | "node_modules/eslint-plugin-import/node_modules/doctrine": { 787 | "version": "2.1.0", 788 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 789 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 790 | "dev": true, 791 | "dependencies": { 792 | "esutils": "^2.0.2" 793 | }, 794 | "engines": { 795 | "node": ">=0.10.0" 796 | } 797 | }, 798 | "node_modules/eslint-plugin-import/node_modules/semver": { 799 | "version": "6.3.0", 800 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 801 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 802 | "dev": true, 803 | "bin": { 804 | "semver": "bin/semver.js" 805 | } 806 | }, 807 | "node_modules/eslint-plugin-n": { 808 | "version": "15.6.1", 809 | "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz", 810 | "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==", 811 | "dev": true, 812 | "dependencies": { 813 | "builtins": "^5.0.1", 814 | "eslint-plugin-es": "^4.1.0", 815 | "eslint-utils": "^3.0.0", 816 | "ignore": "^5.1.1", 817 | "is-core-module": "^2.11.0", 818 | "minimatch": "^3.1.2", 819 | "resolve": "^1.22.1", 820 | "semver": "^7.3.8" 821 | }, 822 | "engines": { 823 | "node": ">=12.22.0" 824 | }, 825 | "funding": { 826 | "url": "https://github.com/sponsors/mysticatea" 827 | }, 828 | "peerDependencies": { 829 | "eslint": ">=7.0.0" 830 | } 831 | }, 832 | "node_modules/eslint-plugin-promise": { 833 | "version": "6.1.1", 834 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", 835 | "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", 836 | "dev": true, 837 | "engines": { 838 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 839 | }, 840 | "peerDependencies": { 841 | "eslint": "^7.0.0 || ^8.0.0" 842 | } 843 | }, 844 | "node_modules/eslint-plugin-react": { 845 | "version": "7.32.1", 846 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz", 847 | "integrity": "sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==", 848 | "dev": true, 849 | "dependencies": { 850 | "array-includes": "^3.1.6", 851 | "array.prototype.flatmap": "^1.3.1", 852 | "array.prototype.tosorted": "^1.1.1", 853 | "doctrine": "^2.1.0", 854 | "estraverse": "^5.3.0", 855 | "jsx-ast-utils": "^2.4.1 || ^3.0.0", 856 | "minimatch": "^3.1.2", 857 | "object.entries": "^1.1.6", 858 | "object.fromentries": "^2.0.6", 859 | "object.hasown": "^1.1.2", 860 | "object.values": "^1.1.6", 861 | "prop-types": "^15.8.1", 862 | "resolve": "^2.0.0-next.4", 863 | "semver": "^6.3.0", 864 | "string.prototype.matchall": "^4.0.8" 865 | }, 866 | "engines": { 867 | "node": ">=4" 868 | }, 869 | "peerDependencies": { 870 | "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" 871 | } 872 | }, 873 | "node_modules/eslint-plugin-react/node_modules/doctrine": { 874 | "version": "2.1.0", 875 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 876 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 877 | "dev": true, 878 | "dependencies": { 879 | "esutils": "^2.0.2" 880 | }, 881 | "engines": { 882 | "node": ">=0.10.0" 883 | } 884 | }, 885 | "node_modules/eslint-plugin-react/node_modules/resolve": { 886 | "version": "2.0.0-next.4", 887 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", 888 | "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", 889 | "dev": true, 890 | "dependencies": { 891 | "is-core-module": "^2.9.0", 892 | "path-parse": "^1.0.7", 893 | "supports-preserve-symlinks-flag": "^1.0.0" 894 | }, 895 | "bin": { 896 | "resolve": "bin/resolve" 897 | }, 898 | "funding": { 899 | "url": "https://github.com/sponsors/ljharb" 900 | } 901 | }, 902 | "node_modules/eslint-plugin-react/node_modules/semver": { 903 | "version": "6.3.0", 904 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 905 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 906 | "dev": true, 907 | "bin": { 908 | "semver": "bin/semver.js" 909 | } 910 | }, 911 | "node_modules/eslint-scope": { 912 | "version": "7.1.1", 913 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 914 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 915 | "dev": true, 916 | "dependencies": { 917 | "esrecurse": "^4.3.0", 918 | "estraverse": "^5.2.0" 919 | }, 920 | "engines": { 921 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 922 | } 923 | }, 924 | "node_modules/eslint-utils": { 925 | "version": "3.0.0", 926 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 927 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 928 | "dev": true, 929 | "dependencies": { 930 | "eslint-visitor-keys": "^2.0.0" 931 | }, 932 | "engines": { 933 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 934 | }, 935 | "funding": { 936 | "url": "https://github.com/sponsors/mysticatea" 937 | }, 938 | "peerDependencies": { 939 | "eslint": ">=5" 940 | } 941 | }, 942 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 943 | "version": "2.1.0", 944 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 945 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 946 | "dev": true, 947 | "engines": { 948 | "node": ">=10" 949 | } 950 | }, 951 | "node_modules/eslint-visitor-keys": { 952 | "version": "3.3.0", 953 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 954 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 955 | "dev": true, 956 | "engines": { 957 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 958 | } 959 | }, 960 | "node_modules/espree": { 961 | "version": "9.4.1", 962 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", 963 | "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", 964 | "dev": true, 965 | "dependencies": { 966 | "acorn": "^8.8.0", 967 | "acorn-jsx": "^5.3.2", 968 | "eslint-visitor-keys": "^3.3.0" 969 | }, 970 | "engines": { 971 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 972 | }, 973 | "funding": { 974 | "url": "https://opencollective.com/eslint" 975 | } 976 | }, 977 | "node_modules/esquery": { 978 | "version": "1.4.0", 979 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 980 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 981 | "dev": true, 982 | "dependencies": { 983 | "estraverse": "^5.1.0" 984 | }, 985 | "engines": { 986 | "node": ">=0.10" 987 | } 988 | }, 989 | "node_modules/esrecurse": { 990 | "version": "4.3.0", 991 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 992 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 993 | "dev": true, 994 | "dependencies": { 995 | "estraverse": "^5.2.0" 996 | }, 997 | "engines": { 998 | "node": ">=4.0" 999 | } 1000 | }, 1001 | "node_modules/estraverse": { 1002 | "version": "5.3.0", 1003 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1004 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1005 | "dev": true, 1006 | "engines": { 1007 | "node": ">=4.0" 1008 | } 1009 | }, 1010 | "node_modules/esutils": { 1011 | "version": "2.0.3", 1012 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1013 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1014 | "dev": true, 1015 | "engines": { 1016 | "node": ">=0.10.0" 1017 | } 1018 | }, 1019 | "node_modules/fast-deep-equal": { 1020 | "version": "3.1.3", 1021 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1022 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1023 | "dev": true 1024 | }, 1025 | "node_modules/fast-json-stable-stringify": { 1026 | "version": "2.1.0", 1027 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1028 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1029 | "dev": true 1030 | }, 1031 | "node_modules/fast-levenshtein": { 1032 | "version": "2.0.6", 1033 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1034 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1035 | "dev": true 1036 | }, 1037 | "node_modules/fastq": { 1038 | "version": "1.15.0", 1039 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1040 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1041 | "dev": true, 1042 | "dependencies": { 1043 | "reusify": "^1.0.4" 1044 | } 1045 | }, 1046 | "node_modules/file-entry-cache": { 1047 | "version": "6.0.1", 1048 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1049 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1050 | "dev": true, 1051 | "dependencies": { 1052 | "flat-cache": "^3.0.4" 1053 | }, 1054 | "engines": { 1055 | "node": "^10.12.0 || >=12.0.0" 1056 | } 1057 | }, 1058 | "node_modules/find-up": { 1059 | "version": "5.0.0", 1060 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1061 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1062 | "dev": true, 1063 | "dependencies": { 1064 | "locate-path": "^6.0.0", 1065 | "path-exists": "^4.0.0" 1066 | }, 1067 | "engines": { 1068 | "node": ">=10" 1069 | }, 1070 | "funding": { 1071 | "url": "https://github.com/sponsors/sindresorhus" 1072 | } 1073 | }, 1074 | "node_modules/flat-cache": { 1075 | "version": "3.0.4", 1076 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1077 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1078 | "dev": true, 1079 | "dependencies": { 1080 | "flatted": "^3.1.0", 1081 | "rimraf": "^3.0.2" 1082 | }, 1083 | "engines": { 1084 | "node": "^10.12.0 || >=12.0.0" 1085 | } 1086 | }, 1087 | "node_modules/flatted": { 1088 | "version": "3.2.7", 1089 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 1090 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 1091 | "dev": true 1092 | }, 1093 | "node_modules/for-each": { 1094 | "version": "0.3.3", 1095 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 1096 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 1097 | "dev": true, 1098 | "dependencies": { 1099 | "is-callable": "^1.1.3" 1100 | } 1101 | }, 1102 | "node_modules/fs.realpath": { 1103 | "version": "1.0.0", 1104 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1105 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1106 | "dev": true 1107 | }, 1108 | "node_modules/function-bind": { 1109 | "version": "1.1.1", 1110 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1111 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1112 | "dev": true 1113 | }, 1114 | "node_modules/function.prototype.name": { 1115 | "version": "1.1.5", 1116 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", 1117 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", 1118 | "dev": true, 1119 | "dependencies": { 1120 | "call-bind": "^1.0.2", 1121 | "define-properties": "^1.1.3", 1122 | "es-abstract": "^1.19.0", 1123 | "functions-have-names": "^1.2.2" 1124 | }, 1125 | "engines": { 1126 | "node": ">= 0.4" 1127 | }, 1128 | "funding": { 1129 | "url": "https://github.com/sponsors/ljharb" 1130 | } 1131 | }, 1132 | "node_modules/functions-have-names": { 1133 | "version": "1.2.3", 1134 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 1135 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 1136 | "dev": true, 1137 | "funding": { 1138 | "url": "https://github.com/sponsors/ljharb" 1139 | } 1140 | }, 1141 | "node_modules/get-intrinsic": { 1142 | "version": "1.2.0", 1143 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 1144 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 1145 | "dev": true, 1146 | "dependencies": { 1147 | "function-bind": "^1.1.1", 1148 | "has": "^1.0.3", 1149 | "has-symbols": "^1.0.3" 1150 | }, 1151 | "funding": { 1152 | "url": "https://github.com/sponsors/ljharb" 1153 | } 1154 | }, 1155 | "node_modules/get-stdin": { 1156 | "version": "8.0.0", 1157 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", 1158 | "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", 1159 | "dev": true, 1160 | "engines": { 1161 | "node": ">=10" 1162 | }, 1163 | "funding": { 1164 | "url": "https://github.com/sponsors/sindresorhus" 1165 | } 1166 | }, 1167 | "node_modules/get-symbol-description": { 1168 | "version": "1.0.0", 1169 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 1170 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 1171 | "dev": true, 1172 | "dependencies": { 1173 | "call-bind": "^1.0.2", 1174 | "get-intrinsic": "^1.1.1" 1175 | }, 1176 | "engines": { 1177 | "node": ">= 0.4" 1178 | }, 1179 | "funding": { 1180 | "url": "https://github.com/sponsors/ljharb" 1181 | } 1182 | }, 1183 | "node_modules/glob": { 1184 | "version": "7.2.3", 1185 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1186 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1187 | "dev": true, 1188 | "dependencies": { 1189 | "fs.realpath": "^1.0.0", 1190 | "inflight": "^1.0.4", 1191 | "inherits": "2", 1192 | "minimatch": "^3.1.1", 1193 | "once": "^1.3.0", 1194 | "path-is-absolute": "^1.0.0" 1195 | }, 1196 | "engines": { 1197 | "node": "*" 1198 | }, 1199 | "funding": { 1200 | "url": "https://github.com/sponsors/isaacs" 1201 | } 1202 | }, 1203 | "node_modules/glob-parent": { 1204 | "version": "6.0.2", 1205 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1206 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1207 | "dev": true, 1208 | "dependencies": { 1209 | "is-glob": "^4.0.3" 1210 | }, 1211 | "engines": { 1212 | "node": ">=10.13.0" 1213 | } 1214 | }, 1215 | "node_modules/globals": { 1216 | "version": "13.19.0", 1217 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", 1218 | "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", 1219 | "dev": true, 1220 | "dependencies": { 1221 | "type-fest": "^0.20.2" 1222 | }, 1223 | "engines": { 1224 | "node": ">=8" 1225 | }, 1226 | "funding": { 1227 | "url": "https://github.com/sponsors/sindresorhus" 1228 | } 1229 | }, 1230 | "node_modules/globalthis": { 1231 | "version": "1.0.3", 1232 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 1233 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 1234 | "dev": true, 1235 | "dependencies": { 1236 | "define-properties": "^1.1.3" 1237 | }, 1238 | "engines": { 1239 | "node": ">= 0.4" 1240 | }, 1241 | "funding": { 1242 | "url": "https://github.com/sponsors/ljharb" 1243 | } 1244 | }, 1245 | "node_modules/gopd": { 1246 | "version": "1.0.1", 1247 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1248 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1249 | "dev": true, 1250 | "dependencies": { 1251 | "get-intrinsic": "^1.1.3" 1252 | }, 1253 | "funding": { 1254 | "url": "https://github.com/sponsors/ljharb" 1255 | } 1256 | }, 1257 | "node_modules/graceful-fs": { 1258 | "version": "4.2.10", 1259 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 1260 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 1261 | "dev": true 1262 | }, 1263 | "node_modules/grapheme-splitter": { 1264 | "version": "1.0.4", 1265 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", 1266 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", 1267 | "dev": true 1268 | }, 1269 | "node_modules/has": { 1270 | "version": "1.0.3", 1271 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1272 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1273 | "dev": true, 1274 | "dependencies": { 1275 | "function-bind": "^1.1.1" 1276 | }, 1277 | "engines": { 1278 | "node": ">= 0.4.0" 1279 | } 1280 | }, 1281 | "node_modules/has-bigints": { 1282 | "version": "1.0.2", 1283 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 1284 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 1285 | "dev": true, 1286 | "funding": { 1287 | "url": "https://github.com/sponsors/ljharb" 1288 | } 1289 | }, 1290 | "node_modules/has-flag": { 1291 | "version": "4.0.0", 1292 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1293 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1294 | "dev": true, 1295 | "engines": { 1296 | "node": ">=8" 1297 | } 1298 | }, 1299 | "node_modules/has-property-descriptors": { 1300 | "version": "1.0.0", 1301 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 1302 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 1303 | "dev": true, 1304 | "dependencies": { 1305 | "get-intrinsic": "^1.1.1" 1306 | }, 1307 | "funding": { 1308 | "url": "https://github.com/sponsors/ljharb" 1309 | } 1310 | }, 1311 | "node_modules/has-proto": { 1312 | "version": "1.0.1", 1313 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 1314 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 1315 | "dev": true, 1316 | "engines": { 1317 | "node": ">= 0.4" 1318 | }, 1319 | "funding": { 1320 | "url": "https://github.com/sponsors/ljharb" 1321 | } 1322 | }, 1323 | "node_modules/has-symbols": { 1324 | "version": "1.0.3", 1325 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1326 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1327 | "dev": true, 1328 | "engines": { 1329 | "node": ">= 0.4" 1330 | }, 1331 | "funding": { 1332 | "url": "https://github.com/sponsors/ljharb" 1333 | } 1334 | }, 1335 | "node_modules/has-tostringtag": { 1336 | "version": "1.0.0", 1337 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1338 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1339 | "dev": true, 1340 | "dependencies": { 1341 | "has-symbols": "^1.0.2" 1342 | }, 1343 | "engines": { 1344 | "node": ">= 0.4" 1345 | }, 1346 | "funding": { 1347 | "url": "https://github.com/sponsors/ljharb" 1348 | } 1349 | }, 1350 | "node_modules/ignore": { 1351 | "version": "5.2.4", 1352 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 1353 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 1354 | "dev": true, 1355 | "engines": { 1356 | "node": ">= 4" 1357 | } 1358 | }, 1359 | "node_modules/import-fresh": { 1360 | "version": "3.3.0", 1361 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1362 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1363 | "dev": true, 1364 | "dependencies": { 1365 | "parent-module": "^1.0.0", 1366 | "resolve-from": "^4.0.0" 1367 | }, 1368 | "engines": { 1369 | "node": ">=6" 1370 | }, 1371 | "funding": { 1372 | "url": "https://github.com/sponsors/sindresorhus" 1373 | } 1374 | }, 1375 | "node_modules/imurmurhash": { 1376 | "version": "0.1.4", 1377 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1378 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1379 | "dev": true, 1380 | "engines": { 1381 | "node": ">=0.8.19" 1382 | } 1383 | }, 1384 | "node_modules/inflight": { 1385 | "version": "1.0.6", 1386 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1387 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1388 | "dev": true, 1389 | "dependencies": { 1390 | "once": "^1.3.0", 1391 | "wrappy": "1" 1392 | } 1393 | }, 1394 | "node_modules/inherits": { 1395 | "version": "2.0.4", 1396 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1397 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1398 | "dev": true 1399 | }, 1400 | "node_modules/internal-slot": { 1401 | "version": "1.0.4", 1402 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", 1403 | "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", 1404 | "dev": true, 1405 | "dependencies": { 1406 | "get-intrinsic": "^1.1.3", 1407 | "has": "^1.0.3", 1408 | "side-channel": "^1.0.4" 1409 | }, 1410 | "engines": { 1411 | "node": ">= 0.4" 1412 | } 1413 | }, 1414 | "node_modules/is-array-buffer": { 1415 | "version": "3.0.1", 1416 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", 1417 | "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", 1418 | "dev": true, 1419 | "dependencies": { 1420 | "call-bind": "^1.0.2", 1421 | "get-intrinsic": "^1.1.3", 1422 | "is-typed-array": "^1.1.10" 1423 | }, 1424 | "funding": { 1425 | "url": "https://github.com/sponsors/ljharb" 1426 | } 1427 | }, 1428 | "node_modules/is-arrayish": { 1429 | "version": "0.2.1", 1430 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1431 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 1432 | "dev": true 1433 | }, 1434 | "node_modules/is-bigint": { 1435 | "version": "1.0.4", 1436 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 1437 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 1438 | "dev": true, 1439 | "dependencies": { 1440 | "has-bigints": "^1.0.1" 1441 | }, 1442 | "funding": { 1443 | "url": "https://github.com/sponsors/ljharb" 1444 | } 1445 | }, 1446 | "node_modules/is-boolean-object": { 1447 | "version": "1.1.2", 1448 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 1449 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 1450 | "dev": true, 1451 | "dependencies": { 1452 | "call-bind": "^1.0.2", 1453 | "has-tostringtag": "^1.0.0" 1454 | }, 1455 | "engines": { 1456 | "node": ">= 0.4" 1457 | }, 1458 | "funding": { 1459 | "url": "https://github.com/sponsors/ljharb" 1460 | } 1461 | }, 1462 | "node_modules/is-callable": { 1463 | "version": "1.2.7", 1464 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 1465 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 1466 | "dev": true, 1467 | "engines": { 1468 | "node": ">= 0.4" 1469 | }, 1470 | "funding": { 1471 | "url": "https://github.com/sponsors/ljharb" 1472 | } 1473 | }, 1474 | "node_modules/is-core-module": { 1475 | "version": "2.11.0", 1476 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1477 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1478 | "dev": true, 1479 | "dependencies": { 1480 | "has": "^1.0.3" 1481 | }, 1482 | "funding": { 1483 | "url": "https://github.com/sponsors/ljharb" 1484 | } 1485 | }, 1486 | "node_modules/is-date-object": { 1487 | "version": "1.0.5", 1488 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 1489 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 1490 | "dev": true, 1491 | "dependencies": { 1492 | "has-tostringtag": "^1.0.0" 1493 | }, 1494 | "engines": { 1495 | "node": ">= 0.4" 1496 | }, 1497 | "funding": { 1498 | "url": "https://github.com/sponsors/ljharb" 1499 | } 1500 | }, 1501 | "node_modules/is-extglob": { 1502 | "version": "2.1.1", 1503 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1504 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1505 | "dev": true, 1506 | "engines": { 1507 | "node": ">=0.10.0" 1508 | } 1509 | }, 1510 | "node_modules/is-glob": { 1511 | "version": "4.0.3", 1512 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1513 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1514 | "dev": true, 1515 | "dependencies": { 1516 | "is-extglob": "^2.1.1" 1517 | }, 1518 | "engines": { 1519 | "node": ">=0.10.0" 1520 | } 1521 | }, 1522 | "node_modules/is-negative-zero": { 1523 | "version": "2.0.2", 1524 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 1525 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 1526 | "dev": true, 1527 | "engines": { 1528 | "node": ">= 0.4" 1529 | }, 1530 | "funding": { 1531 | "url": "https://github.com/sponsors/ljharb" 1532 | } 1533 | }, 1534 | "node_modules/is-number-object": { 1535 | "version": "1.0.7", 1536 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 1537 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 1538 | "dev": true, 1539 | "dependencies": { 1540 | "has-tostringtag": "^1.0.0" 1541 | }, 1542 | "engines": { 1543 | "node": ">= 0.4" 1544 | }, 1545 | "funding": { 1546 | "url": "https://github.com/sponsors/ljharb" 1547 | } 1548 | }, 1549 | "node_modules/is-path-inside": { 1550 | "version": "3.0.3", 1551 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1552 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1553 | "dev": true, 1554 | "engines": { 1555 | "node": ">=8" 1556 | } 1557 | }, 1558 | "node_modules/is-regex": { 1559 | "version": "1.1.4", 1560 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1561 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1562 | "dev": true, 1563 | "dependencies": { 1564 | "call-bind": "^1.0.2", 1565 | "has-tostringtag": "^1.0.0" 1566 | }, 1567 | "engines": { 1568 | "node": ">= 0.4" 1569 | }, 1570 | "funding": { 1571 | "url": "https://github.com/sponsors/ljharb" 1572 | } 1573 | }, 1574 | "node_modules/is-shared-array-buffer": { 1575 | "version": "1.0.2", 1576 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 1577 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 1578 | "dev": true, 1579 | "dependencies": { 1580 | "call-bind": "^1.0.2" 1581 | }, 1582 | "funding": { 1583 | "url": "https://github.com/sponsors/ljharb" 1584 | } 1585 | }, 1586 | "node_modules/is-string": { 1587 | "version": "1.0.7", 1588 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 1589 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 1590 | "dev": true, 1591 | "dependencies": { 1592 | "has-tostringtag": "^1.0.0" 1593 | }, 1594 | "engines": { 1595 | "node": ">= 0.4" 1596 | }, 1597 | "funding": { 1598 | "url": "https://github.com/sponsors/ljharb" 1599 | } 1600 | }, 1601 | "node_modules/is-symbol": { 1602 | "version": "1.0.4", 1603 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 1604 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 1605 | "dev": true, 1606 | "dependencies": { 1607 | "has-symbols": "^1.0.2" 1608 | }, 1609 | "engines": { 1610 | "node": ">= 0.4" 1611 | }, 1612 | "funding": { 1613 | "url": "https://github.com/sponsors/ljharb" 1614 | } 1615 | }, 1616 | "node_modules/is-typed-array": { 1617 | "version": "1.1.10", 1618 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", 1619 | "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", 1620 | "dev": true, 1621 | "dependencies": { 1622 | "available-typed-arrays": "^1.0.5", 1623 | "call-bind": "^1.0.2", 1624 | "for-each": "^0.3.3", 1625 | "gopd": "^1.0.1", 1626 | "has-tostringtag": "^1.0.0" 1627 | }, 1628 | "engines": { 1629 | "node": ">= 0.4" 1630 | }, 1631 | "funding": { 1632 | "url": "https://github.com/sponsors/ljharb" 1633 | } 1634 | }, 1635 | "node_modules/is-weakref": { 1636 | "version": "1.0.2", 1637 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 1638 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 1639 | "dev": true, 1640 | "dependencies": { 1641 | "call-bind": "^1.0.2" 1642 | }, 1643 | "funding": { 1644 | "url": "https://github.com/sponsors/ljharb" 1645 | } 1646 | }, 1647 | "node_modules/isexe": { 1648 | "version": "2.0.0", 1649 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1650 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1651 | "dev": true 1652 | }, 1653 | "node_modules/js-sdsl": { 1654 | "version": "4.3.0", 1655 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", 1656 | "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", 1657 | "dev": true, 1658 | "funding": { 1659 | "type": "opencollective", 1660 | "url": "https://opencollective.com/js-sdsl" 1661 | } 1662 | }, 1663 | "node_modules/js-tokens": { 1664 | "version": "4.0.0", 1665 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1666 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1667 | "dev": true 1668 | }, 1669 | "node_modules/js-yaml": { 1670 | "version": "4.1.0", 1671 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1672 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1673 | "dev": true, 1674 | "dependencies": { 1675 | "argparse": "^2.0.1" 1676 | }, 1677 | "bin": { 1678 | "js-yaml": "bin/js-yaml.js" 1679 | } 1680 | }, 1681 | "node_modules/json-parse-better-errors": { 1682 | "version": "1.0.2", 1683 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1684 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 1685 | "dev": true 1686 | }, 1687 | "node_modules/json-schema-traverse": { 1688 | "version": "0.4.1", 1689 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1690 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1691 | "dev": true 1692 | }, 1693 | "node_modules/json-stable-stringify-without-jsonify": { 1694 | "version": "1.0.1", 1695 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1696 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1697 | "dev": true 1698 | }, 1699 | "node_modules/json5": { 1700 | "version": "1.0.2", 1701 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", 1702 | "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", 1703 | "dev": true, 1704 | "dependencies": { 1705 | "minimist": "^1.2.0" 1706 | }, 1707 | "bin": { 1708 | "json5": "lib/cli.js" 1709 | } 1710 | }, 1711 | "node_modules/jsx-ast-utils": { 1712 | "version": "3.3.3", 1713 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", 1714 | "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", 1715 | "dev": true, 1716 | "dependencies": { 1717 | "array-includes": "^3.1.5", 1718 | "object.assign": "^4.1.3" 1719 | }, 1720 | "engines": { 1721 | "node": ">=4.0" 1722 | } 1723 | }, 1724 | "node_modules/levn": { 1725 | "version": "0.4.1", 1726 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1727 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1728 | "dev": true, 1729 | "dependencies": { 1730 | "prelude-ls": "^1.2.1", 1731 | "type-check": "~0.4.0" 1732 | }, 1733 | "engines": { 1734 | "node": ">= 0.8.0" 1735 | } 1736 | }, 1737 | "node_modules/load-json-file": { 1738 | "version": "5.3.0", 1739 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", 1740 | "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", 1741 | "dev": true, 1742 | "dependencies": { 1743 | "graceful-fs": "^4.1.15", 1744 | "parse-json": "^4.0.0", 1745 | "pify": "^4.0.1", 1746 | "strip-bom": "^3.0.0", 1747 | "type-fest": "^0.3.0" 1748 | }, 1749 | "engines": { 1750 | "node": ">=6" 1751 | } 1752 | }, 1753 | "node_modules/load-json-file/node_modules/type-fest": { 1754 | "version": "0.3.1", 1755 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", 1756 | "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", 1757 | "dev": true, 1758 | "engines": { 1759 | "node": ">=6" 1760 | } 1761 | }, 1762 | "node_modules/locate-path": { 1763 | "version": "6.0.0", 1764 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1765 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1766 | "dev": true, 1767 | "dependencies": { 1768 | "p-locate": "^5.0.0" 1769 | }, 1770 | "engines": { 1771 | "node": ">=10" 1772 | }, 1773 | "funding": { 1774 | "url": "https://github.com/sponsors/sindresorhus" 1775 | } 1776 | }, 1777 | "node_modules/lodash.merge": { 1778 | "version": "4.6.2", 1779 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1780 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1781 | "dev": true 1782 | }, 1783 | "node_modules/loose-envify": { 1784 | "version": "1.4.0", 1785 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1786 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1787 | "dev": true, 1788 | "dependencies": { 1789 | "js-tokens": "^3.0.0 || ^4.0.0" 1790 | }, 1791 | "bin": { 1792 | "loose-envify": "cli.js" 1793 | } 1794 | }, 1795 | "node_modules/lru-cache": { 1796 | "version": "6.0.0", 1797 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1798 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1799 | "dependencies": { 1800 | "yallist": "^4.0.0" 1801 | }, 1802 | "engines": { 1803 | "node": ">=10" 1804 | } 1805 | }, 1806 | "node_modules/minimatch": { 1807 | "version": "3.1.2", 1808 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1809 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1810 | "dev": true, 1811 | "dependencies": { 1812 | "brace-expansion": "^1.1.7" 1813 | }, 1814 | "engines": { 1815 | "node": "*" 1816 | } 1817 | }, 1818 | "node_modules/minimist": { 1819 | "version": "1.2.7", 1820 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 1821 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 1822 | "dev": true, 1823 | "funding": { 1824 | "url": "https://github.com/sponsors/ljharb" 1825 | } 1826 | }, 1827 | "node_modules/ms": { 1828 | "version": "2.1.2", 1829 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1830 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1831 | "dev": true 1832 | }, 1833 | "node_modules/natural-compare": { 1834 | "version": "1.4.0", 1835 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1836 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1837 | "dev": true 1838 | }, 1839 | "node_modules/object-assign": { 1840 | "version": "4.1.1", 1841 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1842 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1843 | "dev": true, 1844 | "engines": { 1845 | "node": ">=0.10.0" 1846 | } 1847 | }, 1848 | "node_modules/object-inspect": { 1849 | "version": "1.12.3", 1850 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 1851 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 1852 | "dev": true, 1853 | "funding": { 1854 | "url": "https://github.com/sponsors/ljharb" 1855 | } 1856 | }, 1857 | "node_modules/object-keys": { 1858 | "version": "1.1.1", 1859 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1860 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1861 | "dev": true, 1862 | "engines": { 1863 | "node": ">= 0.4" 1864 | } 1865 | }, 1866 | "node_modules/object.assign": { 1867 | "version": "4.1.4", 1868 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", 1869 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", 1870 | "dev": true, 1871 | "dependencies": { 1872 | "call-bind": "^1.0.2", 1873 | "define-properties": "^1.1.4", 1874 | "has-symbols": "^1.0.3", 1875 | "object-keys": "^1.1.1" 1876 | }, 1877 | "engines": { 1878 | "node": ">= 0.4" 1879 | }, 1880 | "funding": { 1881 | "url": "https://github.com/sponsors/ljharb" 1882 | } 1883 | }, 1884 | "node_modules/object.entries": { 1885 | "version": "1.1.6", 1886 | "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", 1887 | "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", 1888 | "dev": true, 1889 | "dependencies": { 1890 | "call-bind": "^1.0.2", 1891 | "define-properties": "^1.1.4", 1892 | "es-abstract": "^1.20.4" 1893 | }, 1894 | "engines": { 1895 | "node": ">= 0.4" 1896 | } 1897 | }, 1898 | "node_modules/object.fromentries": { 1899 | "version": "2.0.6", 1900 | "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", 1901 | "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", 1902 | "dev": true, 1903 | "dependencies": { 1904 | "call-bind": "^1.0.2", 1905 | "define-properties": "^1.1.4", 1906 | "es-abstract": "^1.20.4" 1907 | }, 1908 | "engines": { 1909 | "node": ">= 0.4" 1910 | }, 1911 | "funding": { 1912 | "url": "https://github.com/sponsors/ljharb" 1913 | } 1914 | }, 1915 | "node_modules/object.hasown": { 1916 | "version": "1.1.2", 1917 | "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", 1918 | "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", 1919 | "dev": true, 1920 | "dependencies": { 1921 | "define-properties": "^1.1.4", 1922 | "es-abstract": "^1.20.4" 1923 | }, 1924 | "funding": { 1925 | "url": "https://github.com/sponsors/ljharb" 1926 | } 1927 | }, 1928 | "node_modules/object.values": { 1929 | "version": "1.1.6", 1930 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", 1931 | "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", 1932 | "dev": true, 1933 | "dependencies": { 1934 | "call-bind": "^1.0.2", 1935 | "define-properties": "^1.1.4", 1936 | "es-abstract": "^1.20.4" 1937 | }, 1938 | "engines": { 1939 | "node": ">= 0.4" 1940 | }, 1941 | "funding": { 1942 | "url": "https://github.com/sponsors/ljharb" 1943 | } 1944 | }, 1945 | "node_modules/once": { 1946 | "version": "1.4.0", 1947 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1948 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1949 | "dev": true, 1950 | "dependencies": { 1951 | "wrappy": "1" 1952 | } 1953 | }, 1954 | "node_modules/optionator": { 1955 | "version": "0.9.1", 1956 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1957 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1958 | "dev": true, 1959 | "dependencies": { 1960 | "deep-is": "^0.1.3", 1961 | "fast-levenshtein": "^2.0.6", 1962 | "levn": "^0.4.1", 1963 | "prelude-ls": "^1.2.1", 1964 | "type-check": "^0.4.0", 1965 | "word-wrap": "^1.2.3" 1966 | }, 1967 | "engines": { 1968 | "node": ">= 0.8.0" 1969 | } 1970 | }, 1971 | "node_modules/p-limit": { 1972 | "version": "3.1.0", 1973 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1974 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1975 | "dev": true, 1976 | "dependencies": { 1977 | "yocto-queue": "^0.1.0" 1978 | }, 1979 | "engines": { 1980 | "node": ">=10" 1981 | }, 1982 | "funding": { 1983 | "url": "https://github.com/sponsors/sindresorhus" 1984 | } 1985 | }, 1986 | "node_modules/p-locate": { 1987 | "version": "5.0.0", 1988 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1989 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1990 | "dev": true, 1991 | "dependencies": { 1992 | "p-limit": "^3.0.2" 1993 | }, 1994 | "engines": { 1995 | "node": ">=10" 1996 | }, 1997 | "funding": { 1998 | "url": "https://github.com/sponsors/sindresorhus" 1999 | } 2000 | }, 2001 | "node_modules/p-try": { 2002 | "version": "2.2.0", 2003 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2004 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2005 | "dev": true, 2006 | "engines": { 2007 | "node": ">=6" 2008 | } 2009 | }, 2010 | "node_modules/parent-module": { 2011 | "version": "1.0.1", 2012 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2013 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2014 | "dev": true, 2015 | "dependencies": { 2016 | "callsites": "^3.0.0" 2017 | }, 2018 | "engines": { 2019 | "node": ">=6" 2020 | } 2021 | }, 2022 | "node_modules/parse-json": { 2023 | "version": "4.0.0", 2024 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 2025 | "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", 2026 | "dev": true, 2027 | "dependencies": { 2028 | "error-ex": "^1.3.1", 2029 | "json-parse-better-errors": "^1.0.1" 2030 | }, 2031 | "engines": { 2032 | "node": ">=4" 2033 | } 2034 | }, 2035 | "node_modules/path-exists": { 2036 | "version": "4.0.0", 2037 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2038 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2039 | "dev": true, 2040 | "engines": { 2041 | "node": ">=8" 2042 | } 2043 | }, 2044 | "node_modules/path-is-absolute": { 2045 | "version": "1.0.1", 2046 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2047 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2048 | "dev": true, 2049 | "engines": { 2050 | "node": ">=0.10.0" 2051 | } 2052 | }, 2053 | "node_modules/path-key": { 2054 | "version": "3.1.1", 2055 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2056 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2057 | "dev": true, 2058 | "engines": { 2059 | "node": ">=8" 2060 | } 2061 | }, 2062 | "node_modules/path-parse": { 2063 | "version": "1.0.7", 2064 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2065 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2066 | "dev": true 2067 | }, 2068 | "node_modules/pify": { 2069 | "version": "4.0.1", 2070 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 2071 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 2072 | "dev": true, 2073 | "engines": { 2074 | "node": ">=6" 2075 | } 2076 | }, 2077 | "node_modules/pkg-conf": { 2078 | "version": "3.1.0", 2079 | "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", 2080 | "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", 2081 | "dev": true, 2082 | "dependencies": { 2083 | "find-up": "^3.0.0", 2084 | "load-json-file": "^5.2.0" 2085 | }, 2086 | "engines": { 2087 | "node": ">=6" 2088 | } 2089 | }, 2090 | "node_modules/pkg-conf/node_modules/find-up": { 2091 | "version": "3.0.0", 2092 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 2093 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 2094 | "dev": true, 2095 | "dependencies": { 2096 | "locate-path": "^3.0.0" 2097 | }, 2098 | "engines": { 2099 | "node": ">=6" 2100 | } 2101 | }, 2102 | "node_modules/pkg-conf/node_modules/locate-path": { 2103 | "version": "3.0.0", 2104 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 2105 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 2106 | "dev": true, 2107 | "dependencies": { 2108 | "p-locate": "^3.0.0", 2109 | "path-exists": "^3.0.0" 2110 | }, 2111 | "engines": { 2112 | "node": ">=6" 2113 | } 2114 | }, 2115 | "node_modules/pkg-conf/node_modules/p-limit": { 2116 | "version": "2.3.0", 2117 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2118 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2119 | "dev": true, 2120 | "dependencies": { 2121 | "p-try": "^2.0.0" 2122 | }, 2123 | "engines": { 2124 | "node": ">=6" 2125 | }, 2126 | "funding": { 2127 | "url": "https://github.com/sponsors/sindresorhus" 2128 | } 2129 | }, 2130 | "node_modules/pkg-conf/node_modules/p-locate": { 2131 | "version": "3.0.0", 2132 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 2133 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 2134 | "dev": true, 2135 | "dependencies": { 2136 | "p-limit": "^2.0.0" 2137 | }, 2138 | "engines": { 2139 | "node": ">=6" 2140 | } 2141 | }, 2142 | "node_modules/pkg-conf/node_modules/path-exists": { 2143 | "version": "3.0.0", 2144 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2145 | "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", 2146 | "dev": true, 2147 | "engines": { 2148 | "node": ">=4" 2149 | } 2150 | }, 2151 | "node_modules/prelude-ls": { 2152 | "version": "1.2.1", 2153 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2154 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2155 | "dev": true, 2156 | "engines": { 2157 | "node": ">= 0.8.0" 2158 | } 2159 | }, 2160 | "node_modules/prop-types": { 2161 | "version": "15.8.1", 2162 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 2163 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 2164 | "dev": true, 2165 | "dependencies": { 2166 | "loose-envify": "^1.4.0", 2167 | "object-assign": "^4.1.1", 2168 | "react-is": "^16.13.1" 2169 | } 2170 | }, 2171 | "node_modules/punycode": { 2172 | "version": "2.3.0", 2173 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 2174 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 2175 | "dev": true, 2176 | "engines": { 2177 | "node": ">=6" 2178 | } 2179 | }, 2180 | "node_modules/queue-microtask": { 2181 | "version": "1.2.3", 2182 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2183 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2184 | "dev": true, 2185 | "funding": [ 2186 | { 2187 | "type": "github", 2188 | "url": "https://github.com/sponsors/feross" 2189 | }, 2190 | { 2191 | "type": "patreon", 2192 | "url": "https://www.patreon.com/feross" 2193 | }, 2194 | { 2195 | "type": "consulting", 2196 | "url": "https://feross.org/support" 2197 | } 2198 | ] 2199 | }, 2200 | "node_modules/react-is": { 2201 | "version": "16.13.1", 2202 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 2203 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", 2204 | "dev": true 2205 | }, 2206 | "node_modules/regexp.prototype.flags": { 2207 | "version": "1.4.3", 2208 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", 2209 | "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", 2210 | "dev": true, 2211 | "dependencies": { 2212 | "call-bind": "^1.0.2", 2213 | "define-properties": "^1.1.3", 2214 | "functions-have-names": "^1.2.2" 2215 | }, 2216 | "engines": { 2217 | "node": ">= 0.4" 2218 | }, 2219 | "funding": { 2220 | "url": "https://github.com/sponsors/ljharb" 2221 | } 2222 | }, 2223 | "node_modules/regexpp": { 2224 | "version": "3.2.0", 2225 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 2226 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 2227 | "dev": true, 2228 | "engines": { 2229 | "node": ">=8" 2230 | }, 2231 | "funding": { 2232 | "url": "https://github.com/sponsors/mysticatea" 2233 | } 2234 | }, 2235 | "node_modules/resolve": { 2236 | "version": "1.22.1", 2237 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 2238 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 2239 | "dev": true, 2240 | "dependencies": { 2241 | "is-core-module": "^2.9.0", 2242 | "path-parse": "^1.0.7", 2243 | "supports-preserve-symlinks-flag": "^1.0.0" 2244 | }, 2245 | "bin": { 2246 | "resolve": "bin/resolve" 2247 | }, 2248 | "funding": { 2249 | "url": "https://github.com/sponsors/ljharb" 2250 | } 2251 | }, 2252 | "node_modules/resolve-from": { 2253 | "version": "4.0.0", 2254 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2255 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2256 | "dev": true, 2257 | "engines": { 2258 | "node": ">=4" 2259 | } 2260 | }, 2261 | "node_modules/reusify": { 2262 | "version": "1.0.4", 2263 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2264 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2265 | "dev": true, 2266 | "engines": { 2267 | "iojs": ">=1.0.0", 2268 | "node": ">=0.10.0" 2269 | } 2270 | }, 2271 | "node_modules/rimraf": { 2272 | "version": "3.0.2", 2273 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2274 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2275 | "dev": true, 2276 | "dependencies": { 2277 | "glob": "^7.1.3" 2278 | }, 2279 | "bin": { 2280 | "rimraf": "bin.js" 2281 | }, 2282 | "funding": { 2283 | "url": "https://github.com/sponsors/isaacs" 2284 | } 2285 | }, 2286 | "node_modules/run-parallel": { 2287 | "version": "1.2.0", 2288 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2289 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2290 | "dev": true, 2291 | "funding": [ 2292 | { 2293 | "type": "github", 2294 | "url": "https://github.com/sponsors/feross" 2295 | }, 2296 | { 2297 | "type": "patreon", 2298 | "url": "https://www.patreon.com/feross" 2299 | }, 2300 | { 2301 | "type": "consulting", 2302 | "url": "https://feross.org/support" 2303 | } 2304 | ], 2305 | "dependencies": { 2306 | "queue-microtask": "^1.2.2" 2307 | } 2308 | }, 2309 | "node_modules/safe-regex-test": { 2310 | "version": "1.0.0", 2311 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", 2312 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", 2313 | "dev": true, 2314 | "dependencies": { 2315 | "call-bind": "^1.0.2", 2316 | "get-intrinsic": "^1.1.3", 2317 | "is-regex": "^1.1.4" 2318 | }, 2319 | "funding": { 2320 | "url": "https://github.com/sponsors/ljharb" 2321 | } 2322 | }, 2323 | "node_modules/semver": { 2324 | "version": "7.3.8", 2325 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 2326 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 2327 | "dependencies": { 2328 | "lru-cache": "^6.0.0" 2329 | }, 2330 | "bin": { 2331 | "semver": "bin/semver.js" 2332 | }, 2333 | "engines": { 2334 | "node": ">=10" 2335 | } 2336 | }, 2337 | "node_modules/shebang-command": { 2338 | "version": "2.0.0", 2339 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2340 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2341 | "dev": true, 2342 | "dependencies": { 2343 | "shebang-regex": "^3.0.0" 2344 | }, 2345 | "engines": { 2346 | "node": ">=8" 2347 | } 2348 | }, 2349 | "node_modules/shebang-regex": { 2350 | "version": "3.0.0", 2351 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2352 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2353 | "dev": true, 2354 | "engines": { 2355 | "node": ">=8" 2356 | } 2357 | }, 2358 | "node_modules/side-channel": { 2359 | "version": "1.0.4", 2360 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 2361 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 2362 | "dev": true, 2363 | "dependencies": { 2364 | "call-bind": "^1.0.0", 2365 | "get-intrinsic": "^1.0.2", 2366 | "object-inspect": "^1.9.0" 2367 | }, 2368 | "funding": { 2369 | "url": "https://github.com/sponsors/ljharb" 2370 | } 2371 | }, 2372 | "node_modules/standard": { 2373 | "version": "17.0.0", 2374 | "resolved": "https://registry.npmjs.org/standard/-/standard-17.0.0.tgz", 2375 | "integrity": "sha512-GlCM9nzbLUkr+TYR5I2WQoIah4wHA2lMauqbyPLV/oI5gJxqhHzhjl9EG2N0lr/nRqI3KCbCvm/W3smxvLaChA==", 2376 | "dev": true, 2377 | "funding": [ 2378 | { 2379 | "type": "github", 2380 | "url": "https://github.com/sponsors/feross" 2381 | }, 2382 | { 2383 | "type": "patreon", 2384 | "url": "https://www.patreon.com/feross" 2385 | }, 2386 | { 2387 | "type": "consulting", 2388 | "url": "https://feross.org/support" 2389 | } 2390 | ], 2391 | "dependencies": { 2392 | "eslint": "^8.13.0", 2393 | "eslint-config-standard": "17.0.0", 2394 | "eslint-config-standard-jsx": "^11.0.0", 2395 | "eslint-plugin-import": "^2.26.0", 2396 | "eslint-plugin-n": "^15.1.0", 2397 | "eslint-plugin-promise": "^6.0.0", 2398 | "eslint-plugin-react": "^7.28.0", 2399 | "standard-engine": "^15.0.0" 2400 | }, 2401 | "bin": { 2402 | "standard": "bin/cmd.js" 2403 | }, 2404 | "engines": { 2405 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2406 | } 2407 | }, 2408 | "node_modules/standard-engine": { 2409 | "version": "15.0.0", 2410 | "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-15.0.0.tgz", 2411 | "integrity": "sha512-4xwUhJNo1g/L2cleysUqUv7/btn7GEbYJvmgKrQ2vd/8pkTmN8cpqAZg+BT8Z1hNeEH787iWUdOpL8fmApLtxA==", 2412 | "dev": true, 2413 | "funding": [ 2414 | { 2415 | "type": "github", 2416 | "url": "https://github.com/sponsors/feross" 2417 | }, 2418 | { 2419 | "type": "patreon", 2420 | "url": "https://www.patreon.com/feross" 2421 | }, 2422 | { 2423 | "type": "consulting", 2424 | "url": "https://feross.org/support" 2425 | } 2426 | ], 2427 | "dependencies": { 2428 | "get-stdin": "^8.0.0", 2429 | "minimist": "^1.2.6", 2430 | "pkg-conf": "^3.1.0", 2431 | "xdg-basedir": "^4.0.0" 2432 | }, 2433 | "engines": { 2434 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2435 | } 2436 | }, 2437 | "node_modules/string.prototype.matchall": { 2438 | "version": "4.0.8", 2439 | "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", 2440 | "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", 2441 | "dev": true, 2442 | "dependencies": { 2443 | "call-bind": "^1.0.2", 2444 | "define-properties": "^1.1.4", 2445 | "es-abstract": "^1.20.4", 2446 | "get-intrinsic": "^1.1.3", 2447 | "has-symbols": "^1.0.3", 2448 | "internal-slot": "^1.0.3", 2449 | "regexp.prototype.flags": "^1.4.3", 2450 | "side-channel": "^1.0.4" 2451 | }, 2452 | "funding": { 2453 | "url": "https://github.com/sponsors/ljharb" 2454 | } 2455 | }, 2456 | "node_modules/string.prototype.trimend": { 2457 | "version": "1.0.6", 2458 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", 2459 | "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", 2460 | "dev": true, 2461 | "dependencies": { 2462 | "call-bind": "^1.0.2", 2463 | "define-properties": "^1.1.4", 2464 | "es-abstract": "^1.20.4" 2465 | }, 2466 | "funding": { 2467 | "url": "https://github.com/sponsors/ljharb" 2468 | } 2469 | }, 2470 | "node_modules/string.prototype.trimstart": { 2471 | "version": "1.0.6", 2472 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", 2473 | "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", 2474 | "dev": true, 2475 | "dependencies": { 2476 | "call-bind": "^1.0.2", 2477 | "define-properties": "^1.1.4", 2478 | "es-abstract": "^1.20.4" 2479 | }, 2480 | "funding": { 2481 | "url": "https://github.com/sponsors/ljharb" 2482 | } 2483 | }, 2484 | "node_modules/strip-ansi": { 2485 | "version": "6.0.1", 2486 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2487 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2488 | "dev": true, 2489 | "dependencies": { 2490 | "ansi-regex": "^5.0.1" 2491 | }, 2492 | "engines": { 2493 | "node": ">=8" 2494 | } 2495 | }, 2496 | "node_modules/strip-bom": { 2497 | "version": "3.0.0", 2498 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 2499 | "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 2500 | "dev": true, 2501 | "engines": { 2502 | "node": ">=4" 2503 | } 2504 | }, 2505 | "node_modules/strip-json-comments": { 2506 | "version": "3.1.1", 2507 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2508 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2509 | "dev": true, 2510 | "engines": { 2511 | "node": ">=8" 2512 | }, 2513 | "funding": { 2514 | "url": "https://github.com/sponsors/sindresorhus" 2515 | } 2516 | }, 2517 | "node_modules/supports-color": { 2518 | "version": "7.2.0", 2519 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2520 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2521 | "dev": true, 2522 | "dependencies": { 2523 | "has-flag": "^4.0.0" 2524 | }, 2525 | "engines": { 2526 | "node": ">=8" 2527 | } 2528 | }, 2529 | "node_modules/supports-preserve-symlinks-flag": { 2530 | "version": "1.0.0", 2531 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2532 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2533 | "dev": true, 2534 | "engines": { 2535 | "node": ">= 0.4" 2536 | }, 2537 | "funding": { 2538 | "url": "https://github.com/sponsors/ljharb" 2539 | } 2540 | }, 2541 | "node_modules/text-table": { 2542 | "version": "0.2.0", 2543 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2544 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 2545 | "dev": true 2546 | }, 2547 | "node_modules/tsconfig-paths": { 2548 | "version": "3.14.1", 2549 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", 2550 | "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", 2551 | "dev": true, 2552 | "dependencies": { 2553 | "@types/json5": "^0.0.29", 2554 | "json5": "^1.0.1", 2555 | "minimist": "^1.2.6", 2556 | "strip-bom": "^3.0.0" 2557 | } 2558 | }, 2559 | "node_modules/tunnel": { 2560 | "version": "0.0.6", 2561 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 2562 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 2563 | "engines": { 2564 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 2565 | } 2566 | }, 2567 | "node_modules/type-check": { 2568 | "version": "0.4.0", 2569 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2570 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2571 | "dev": true, 2572 | "dependencies": { 2573 | "prelude-ls": "^1.2.1" 2574 | }, 2575 | "engines": { 2576 | "node": ">= 0.8.0" 2577 | } 2578 | }, 2579 | "node_modules/type-fest": { 2580 | "version": "0.20.2", 2581 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2582 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2583 | "dev": true, 2584 | "engines": { 2585 | "node": ">=10" 2586 | }, 2587 | "funding": { 2588 | "url": "https://github.com/sponsors/sindresorhus" 2589 | } 2590 | }, 2591 | "node_modules/typed-array-length": { 2592 | "version": "1.0.4", 2593 | "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", 2594 | "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", 2595 | "dev": true, 2596 | "dependencies": { 2597 | "call-bind": "^1.0.2", 2598 | "for-each": "^0.3.3", 2599 | "is-typed-array": "^1.1.9" 2600 | }, 2601 | "funding": { 2602 | "url": "https://github.com/sponsors/ljharb" 2603 | } 2604 | }, 2605 | "node_modules/unbox-primitive": { 2606 | "version": "1.0.2", 2607 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 2608 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 2609 | "dev": true, 2610 | "dependencies": { 2611 | "call-bind": "^1.0.2", 2612 | "has-bigints": "^1.0.2", 2613 | "has-symbols": "^1.0.3", 2614 | "which-boxed-primitive": "^1.0.2" 2615 | }, 2616 | "funding": { 2617 | "url": "https://github.com/sponsors/ljharb" 2618 | } 2619 | }, 2620 | "node_modules/uri-js": { 2621 | "version": "4.4.1", 2622 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2623 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2624 | "dev": true, 2625 | "dependencies": { 2626 | "punycode": "^2.1.0" 2627 | } 2628 | }, 2629 | "node_modules/uuid": { 2630 | "version": "8.3.2", 2631 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 2632 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 2633 | "bin": { 2634 | "uuid": "dist/bin/uuid" 2635 | } 2636 | }, 2637 | "node_modules/which": { 2638 | "version": "2.0.2", 2639 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2640 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2641 | "dev": true, 2642 | "dependencies": { 2643 | "isexe": "^2.0.0" 2644 | }, 2645 | "bin": { 2646 | "node-which": "bin/node-which" 2647 | }, 2648 | "engines": { 2649 | "node": ">= 8" 2650 | } 2651 | }, 2652 | "node_modules/which-boxed-primitive": { 2653 | "version": "1.0.2", 2654 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 2655 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 2656 | "dev": true, 2657 | "dependencies": { 2658 | "is-bigint": "^1.0.1", 2659 | "is-boolean-object": "^1.1.0", 2660 | "is-number-object": "^1.0.4", 2661 | "is-string": "^1.0.5", 2662 | "is-symbol": "^1.0.3" 2663 | }, 2664 | "funding": { 2665 | "url": "https://github.com/sponsors/ljharb" 2666 | } 2667 | }, 2668 | "node_modules/which-typed-array": { 2669 | "version": "1.1.9", 2670 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", 2671 | "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", 2672 | "dev": true, 2673 | "dependencies": { 2674 | "available-typed-arrays": "^1.0.5", 2675 | "call-bind": "^1.0.2", 2676 | "for-each": "^0.3.3", 2677 | "gopd": "^1.0.1", 2678 | "has-tostringtag": "^1.0.0", 2679 | "is-typed-array": "^1.1.10" 2680 | }, 2681 | "engines": { 2682 | "node": ">= 0.4" 2683 | }, 2684 | "funding": { 2685 | "url": "https://github.com/sponsors/ljharb" 2686 | } 2687 | }, 2688 | "node_modules/word-wrap": { 2689 | "version": "1.2.3", 2690 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2691 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2692 | "dev": true, 2693 | "engines": { 2694 | "node": ">=0.10.0" 2695 | } 2696 | }, 2697 | "node_modules/wrappy": { 2698 | "version": "1.0.2", 2699 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2700 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2701 | "dev": true 2702 | }, 2703 | "node_modules/xdg-basedir": { 2704 | "version": "4.0.0", 2705 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", 2706 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", 2707 | "dev": true, 2708 | "engines": { 2709 | "node": ">=8" 2710 | } 2711 | }, 2712 | "node_modules/yallist": { 2713 | "version": "4.0.0", 2714 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2715 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 2716 | }, 2717 | "node_modules/yocto-queue": { 2718 | "version": "0.1.0", 2719 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2720 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2721 | "dev": true, 2722 | "engines": { 2723 | "node": ">=10" 2724 | }, 2725 | "funding": { 2726 | "url": "https://github.com/sponsors/sindresorhus" 2727 | } 2728 | } 2729 | } 2730 | } 2731 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "is-my-node-vulnerable", 3 | "version": "1.6.1", 4 | "description": "package that checks if your Node.js installation is vulnerable to known security vulnerabilities", 5 | "main": "index.js", 6 | "bin": { 7 | "is-my-node-vulnerable": "./index.js" 8 | }, 9 | "keywords": [ 10 | "security", 11 | "nodejs" 12 | ], 13 | "scripts": { 14 | "build": "ncc build action.js -o dist", 15 | "test": "npm run lint && node setup-test.js", 16 | "lint": "standard" 17 | }, 18 | "author": "RafaelGSS ", 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/RafaelGSS/is-my-node-vulnerable" 22 | }, 23 | "standard": { 24 | "ignore": [ 25 | "dist/**", 26 | "ascii.js" 27 | ] 28 | }, 29 | "license": "MIT", 30 | "dependencies": { 31 | "@actions/core": "^1.10.0", 32 | "semver": "^7.3.8" 33 | }, 34 | "devDependencies": { 35 | "standard": "^17.0.0", 36 | "@vercel/ncc": "^0.36.1" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /setup-test.js: -------------------------------------------------------------------------------- 1 | const isOldEnough = require('./eol-versions') 2 | const assert = require('assert') 3 | 4 | // When old enough an error is thrown 5 | if (isOldEnough(process.version)) { 6 | runCompatibilityTest() 7 | } else { 8 | require('./test') 9 | } 10 | 11 | function runCompatibilityTest () { 12 | const childProcess = require('child_process') 13 | const path = require('path') 14 | const isNodeVulnerablePath = path.resolve('./index.js') 15 | const child = childProcess.spawnSync(process.execPath, [isNodeVulnerablePath]) 16 | assert.strictEqual(child.status, 1) 17 | assert(child.stdout.toString().indexOf('is end-of-life. There are high chances of being vulnerable') !== -1) 18 | } 19 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert') 2 | const { isNodeVulnerable } = require('./index') 3 | 4 | async function t () { 5 | // of course, this test is fragile 6 | assert.ok(await isNodeVulnerable('20.5.0')) 7 | assert.ok(await isNodeVulnerable('20.0.0')) 8 | assert.ok(await isNodeVulnerable('19.0.0')) 9 | assert.ok(await isNodeVulnerable('18.0.0')) 10 | assert.ok(await isNodeVulnerable('14.0.0')) 11 | assert.ok(await isNodeVulnerable('16.0.0')) 12 | assert.ok(await isNodeVulnerable('19.6.0')) 13 | assert.ok(await isNodeVulnerable('18.14.0')) 14 | assert.ok(await isNodeVulnerable('16.19.0')) 15 | assert.ok(await isNodeVulnerable('20.8.0')) 16 | assert.ok(await isNodeVulnerable('20.11.0')) 17 | assert.ok(await isNodeVulnerable('23.6.0')) 18 | assert.ok(await isNodeVulnerable('24.0.1')) 19 | 20 | assert.rejects(() => isNodeVulnerable('999'), /Could not fetch version information/) 21 | assert.rejects(() => isNodeVulnerable('Unobtanium'), /Could not fetch version information/) // i.e. not found 22 | assert.rejects(() => isNodeVulnerable('25.0.0'), /Could not fetch version information/) 23 | 24 | // EOL 25 | assert.ok(await isNodeVulnerable('21.0.0')) 26 | assert.ok(await isNodeVulnerable('19.0.0')) 27 | assert.ok(await isNodeVulnerable('16.0.0')) 28 | assert.ok(await isNodeVulnerable('17.0.0')) 29 | assert.ok(await isNodeVulnerable('15.0.0')) 30 | assert.ok(await isNodeVulnerable('13.0.0')) 31 | assert.ok(await isNodeVulnerable('12.0.0')) 32 | assert.ok(await isNodeVulnerable('v0.12.18')) 33 | 34 | // Platform specific 35 | assert.ok(await isNodeVulnerable('22.4.0', 'win32')) 36 | assert.ok(await isNodeVulnerable('19.0.0', 'linux')) 37 | assert.ok(await isNodeVulnerable('18.0.0', 'win32')) 38 | assert.ok(await isNodeVulnerable('14.0.0', 'android')) 39 | assert.rejects(() => isNodeVulnerable('20.0.0', 'non-valid-platform'), /platform non-valid-platform is not valid. Please use aix,darwin,freebsd,linux,openbsd,sunos,win32,android/) 40 | } 41 | 42 | t() 43 | --------------------------------------------------------------------------------