├── .gitignore ├── .npmrc ├── .github ├── release.yml ├── workflows │ ├── main.yml │ ├── pr.yml │ ├── publish_npm.yaml │ └── publish_release.yaml ├── renovate.json └── FUNDING.yml ├── src ├── utils.js ├── debuglog.js ├── progress.js ├── naming.js ├── getDataByUrl.js ├── download2mp3.js ├── flv2mp3.js ├── _flv2mp3.js └── download.js ├── README.md ├── LICENSE ├── package.json ├── index.js ├── CHANGELOG.md └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea 3 | *.flv 4 | *.mp3 5 | *.log 6 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /.github/release.yml: -------------------------------------------------------------------------------- 1 | changelog: 2 | exclude: 3 | authors: 4 | - renovate-bot 5 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | export const sleep = (time) => 2 | new Promise((resolve) => setTimeout(resolve, time)); 3 | -------------------------------------------------------------------------------- /src/debuglog.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import { join } from 'path'; 3 | 4 | export function debuglog(data) { 5 | fs.appendFileSync( 6 | join(process.cwd(), 'bilibili-video2mp3-error.log'), 7 | data.toString() + '\n', 8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: main 2 | on: 3 | push: 4 | branches: 5 | - master 6 | jobs: 7 | lint: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | - uses: pnpm/action-setup@v2.4.1 12 | with: 13 | version: 7.5.2 14 | run_install: true 15 | - run: npm run lint 16 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base", 4 | ":pinAllExceptPeerDependencies" 5 | ], 6 | "packageRules": [ 7 | { 8 | "matchUpdateTypes": [ 9 | "minor", 10 | "patch" 11 | ], 12 | "matchCurrentVersion": "!/^0/", 13 | "automerge": true 14 | } 15 | ], 16 | "automergeType": "branch" 17 | } 18 | -------------------------------------------------------------------------------- /.github/workflows/pr.yml: -------------------------------------------------------------------------------- 1 | name: pull request 2 | on: 3 | pull_request: 4 | branches: 5 | - master 6 | jobs: 7 | lint: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | - uses: pnpm/action-setup@v2.4.1 12 | with: 13 | version: 7.5.2 14 | run_install: true 15 | - run: npm run lint 16 | -------------------------------------------------------------------------------- /src/progress.js: -------------------------------------------------------------------------------- 1 | import Progress from 'multi-progress'; 2 | 3 | const multi = new Progress(process.stderr); 4 | 5 | export function createProgressBar(index, title, total) { 6 | return multi.newBar(`${index} [:bar] :percent :etas :status ${title}`, { 7 | complete: '=', 8 | incomplete: ' ', 9 | width: 30, 10 | total: total, 11 | // renderThrottle: 1000, 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /src/naming.js: -------------------------------------------------------------------------------- 1 | import { program } from 'commander'; 2 | 3 | export function getName(index, title, author, date) { 4 | const argv = program.opts(); 5 | return ( 6 | argv.naming 7 | .replace('INDEX', index) 8 | .replace('TITLE', title) 9 | .replace('AUTHOR', author) 10 | .replace('DATE', date) 11 | // leading - cause ffmpeg command fail 12 | .replace(/^-*/, '') 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /.github/workflows/publish_npm.yaml: -------------------------------------------------------------------------------- 1 | name: publish npm 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*' 7 | 8 | jobs: 9 | deploy_npm: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/setup-node@v4 13 | with: 14 | node-version: 'lts/*' 15 | registry-url: 'https://registry.npmjs.org' 16 | - uses: actions/checkout@v4 17 | - name: Publish NPM 18 | run: npm publish 19 | env: 20 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 21 | -------------------------------------------------------------------------------- /.github/workflows/publish_release.yaml: -------------------------------------------------------------------------------- 1 | name: publish release 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*' 7 | 8 | jobs: 9 | deploy_release: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | - name: Create Release 14 | id: create_release 15 | uses: actions/create-release@v1 16 | env: 17 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 18 | with: 19 | tag_name: ${{ github.ref }} 20 | release_name: Release ${{ github.ref }} 21 | draft: false 22 | prerelease: false 23 | -------------------------------------------------------------------------------- /src/getDataByUrl.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | export async function getDataByUrl(url) { 4 | const { data } = await axios.get(url); 5 | // console.log('--------data------------'); 6 | // console.log(data); 7 | // console.log('--------------------'); 8 | // end by this: 9 | // ;(function(){var s;(s=document.currentScript||document.scripts[document.scripts.length-1]).parentNode.removeChild(s);}()); 10 | const initialStateStr = data.match( 11 | /__INITIAL_STATE__=(.*?);\(function\(\)/, 12 | )[1]; 13 | // console.log('--------initialStateStr------------'); 14 | // console.log(initialStateStr); 15 | // console.log('--------------------'); 16 | return JSON.parse(initialStateStr); 17 | } 18 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ['https://www.paypal.com/paypalme/wxsm'] 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bilibili-video2mp3 2 | 3 | A tool to download all videos and convert to mp3 inside a video set of bilibili (also works for single video, of course). 4 | 5 | You will need node.js (recommended 16+) installed. 6 | 7 | ```bash 8 | # options document 9 | npx bv2mp3 --help 10 | 11 | # download from a video set 12 | npx bv2mp3 --url=https://www.bilibili.com/video/BV1yZ4y1X7v3 13 | 14 | # download from multiple video set 15 | npx bv2mp3 --url=A --url=B 16 | 17 | # download with custom file name 18 | npx bv2mp3 --naming=INDEX-TITLE-yousa-DATE --url=A --url=B 19 | ``` 20 | 21 | Enjoy! 22 | 23 | ## Caveats 24 | 25 | We used to use [@ffmpeg/ffmpeg](https://github.com/ffmpegwasm/ffmpeg.wasm) for video converting, which does not require ffmpeg installed from operating system. However, it does not support Node.js 18+. 26 | 27 | Therefore, if you're using Node.js 18+, this lib will switch to os ffmpeg installation automatically, make sure it's in your path! visit [their website](https://ffmpeg.org/) for installation instruction. 28 | 29 | ## License 30 | 31 | MIT -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Kairui Guo 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 | -------------------------------------------------------------------------------- /src/download2mp3.js: -------------------------------------------------------------------------------- 1 | import { download } from './download.js'; 2 | import { flv2mp3 } from './flv2mp3.js'; 3 | import * as fs from 'fs'; 4 | import { program } from 'commander'; 5 | import { sleep } from './utils.js'; 6 | import { resolve } from 'path'; 7 | 8 | export async function download2mp3({ url, index }) { 9 | const argv = program.opts(); 10 | const offsetIndex = (argv.indexOffset || 0) + index; 11 | let b; 12 | try { 13 | const { filename, bar } = await download(url, offsetIndex); 14 | b = bar; 15 | if (!argv.skipMp3) { 16 | bar.tick({ status: 'converting' }); 17 | await flv2mp3(filename); 18 | await fs.promises.unlink(filename); 19 | } 20 | bar.tick({ status: 'done' }); 21 | } catch (err) { 22 | b?.tick({ status: 'error' }); 23 | if (argv.debug) { 24 | const logFile = resolve(process.cwd(), 'bilibili-video2mp3-error.log'); 25 | await fs.promises.appendFile( 26 | logFile, 27 | `index: ${offsetIndex} 28 | url: ${url} 29 | err: ${err.message} 30 | stack: ${err.stack} 31 | 32 | 33 | `, 34 | ); 35 | } 36 | await sleep(2000); 37 | await download2mp3({ url, index }); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/flv2mp3.js: -------------------------------------------------------------------------------- 1 | import { exec } from 'child_process'; 2 | import { join } from 'path'; 3 | import url from 'url'; 4 | import path from 'path'; 5 | import { program } from 'commander'; 6 | 7 | const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); 8 | 9 | export function flv2mp3(filename) { 10 | const nodeVersion = Number(process.versions.node.split('.')[0]); 11 | // console.log(nodeVersion); 12 | if (nodeVersion >= 18) { 13 | const mp3 = filename.replace('.flv', '.mp3'); 14 | return new Promise((resolve, reject) => { 15 | const argv = program.opts(); 16 | exec( 17 | `ffmpeg -y ${argv.ffmpeg 18 | .split(' ') 19 | .map((v) => v.trim()) 20 | .filter((v) => !!v) 21 | .join(' ')} -i "${filename}" -q:a 0 "${mp3}"`, 22 | (err) => { 23 | if (err) { 24 | reject(err); 25 | } else { 26 | // console.log(`${mp3} converted`); 27 | resolve(); 28 | } 29 | }, 30 | ); 31 | }); 32 | } 33 | return new Promise((resolve, reject) => { 34 | const argv = program.opts(); 35 | // because ffmpeg.wasm can only run one command a time, 36 | // we use child process to run it concurrently 37 | exec( 38 | `node ${join(__dirname, '_flv2mp3.js')} "${filename}" "${argv.ffmpeg}"`, 39 | { cwd: process.cwd() }, 40 | (error) => { 41 | if (error) { 42 | reject(error); 43 | } else { 44 | resolve(); 45 | } 46 | }, 47 | ); 48 | }); 49 | } 50 | -------------------------------------------------------------------------------- /src/_flv2mp3.js: -------------------------------------------------------------------------------- 1 | import { fetchFile, createFFmpeg } from '@ffmpeg/ffmpeg'; 2 | import * as fs from 'fs'; 3 | import { resolve } from 'path'; 4 | import { uniqueId } from 'lodash-es'; 5 | // import { debuglog } from './debuglog.js'; 6 | 7 | (async () => { 8 | let filename = process.argv[2]; 9 | let ff = process.argv[3]; 10 | // debuglog(`start: ${filename}`) 11 | let ffmpeg = createFFmpeg({ log: false }); 12 | await ffmpeg.load(); 13 | try { 14 | const id = uniqueId(); 15 | const mp3 = filename.replace('.flv', '.mp3'); 16 | const memBefore = `${id}before.flv`; 17 | const memAfter = `${id}after.mp3`; 18 | ffmpeg.FS( 19 | 'writeFile', 20 | memBefore, 21 | await fetchFile(resolve(process.cwd(), filename)), 22 | ); 23 | // ffmpeg -y -i ${filename} -q:a 0 ${mp3} 24 | let ffArgs = ['-y']; 25 | if (ff) { 26 | ffArgs = [ 27 | ...ffArgs, 28 | ...ff 29 | .split(' ') 30 | .map((v) => v.trim()) 31 | .filter((v) => !!v), 32 | ]; 33 | } 34 | ffArgs = [...ffArgs, '-i', memBefore, '-q:a', '0', memAfter]; 35 | 36 | await ffmpeg.run(...ffArgs); 37 | await fs.promises.writeFile( 38 | resolve(process.cwd(), mp3), 39 | ffmpeg.FS('readFile', memAfter), 40 | ); 41 | ffmpeg.FS('unlink', memBefore); 42 | ffmpeg.FS('unlink', memAfter); 43 | // debuglog(`done: ${filename}`); 44 | process.exit(0); 45 | } catch (err) { 46 | // debuglog(`error: ${filename}`); 47 | // debuglog(err); 48 | process.exit(1); 49 | } 50 | })(); 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bv2mp3", 3 | "version": "3.1.0", 4 | "description": "A tool to download all videos and convert to mp3 inside a video set of bilibili (also works for single video, of course).", 5 | "bin": "index.js", 6 | "type": "module", 7 | "author": "wxsms@foxmail.com", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/wxsms/bilibili-video2mp3.git" 11 | }, 12 | "license": "MIT", 13 | "bugs": { 14 | "url": "https://github.com/wxsms/bilibili-video2mp3/issues" 15 | }, 16 | "homepage": "https://github.com/wxsms/bilibili-video2mp3", 17 | "engines": { 18 | "node": ">=16.0.0" 19 | }, 20 | "scripts": { 21 | "lint": "npx eslint . --fix", 22 | "changelog": "conventional-changelog -p conventionalcommits -i CHANGELOG.md -s -r 0" 23 | }, 24 | "dependencies": { 25 | "@ffmpeg/core": "0.11.0", 26 | "@ffmpeg/ffmpeg": "0.11.6", 27 | "axios": "1.7.9", 28 | "commander": "11.1.0", 29 | "filenamify": "6.0.0", 30 | "lodash-es": "4.17.21", 31 | "minimist": "1.2.8", 32 | "multi-progress": "4.0.0", 33 | "progress": "2.0.3" 34 | }, 35 | "devDependencies": { 36 | "conventional-changelog-cli": "4.1.0", 37 | "eslint": "8.57.1", 38 | "eslint-config-prettier": "9.1.0", 39 | "eslint-plugin-prettier": "5.2.1", 40 | "prettier": "3.4.2" 41 | }, 42 | "eslintConfig": { 43 | "env": { 44 | "es6": true, 45 | "node": true 46 | }, 47 | "extends": [ 48 | "eslint:recommended", 49 | "prettier" 50 | ], 51 | "plugins": [ 52 | "prettier" 53 | ], 54 | "parserOptions": { 55 | "ecmaVersion": 2020, 56 | "sourceType": "module" 57 | }, 58 | "rules": { 59 | "prettier/prettier": [ 60 | "error", 61 | { 62 | "semi": true, 63 | "singleQuote": true, 64 | "endOfLine": "auto" 65 | } 66 | ] 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/download.js: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import { getDataByUrl } from './getDataByUrl.js'; 3 | import { createProgressBar } from './progress.js'; 4 | import { getName } from './naming.js'; 5 | import axios from 'axios'; 6 | import filenamify from 'filenamify'; 7 | 8 | async function _download(url, title, filename, index) { 9 | // console.log('download', url) 10 | // let startByte = 0; 11 | try { 12 | // const stat = await fs.promises.stat(filename); 13 | // startByte = stat.size + 1; 14 | await fs.promises.stat(filename); 15 | await fs.promises.unlink(filename); 16 | } catch (err) { 17 | // ignore 18 | } 19 | return new Promise((resolve, reject) => { 20 | axios({ 21 | url, 22 | method: 'GET', 23 | responseType: 'stream', 24 | headers: { 25 | Range: `bytes=${0}-`, 26 | }, 27 | }) 28 | .then(({ data, headers }) => { 29 | const writeStream = fs.createWriteStream(filename); 30 | const total = parseInt(headers['content-length'], 10); 31 | const bar = createProgressBar(index, title, total); 32 | let failed = false; 33 | data.pipe(writeStream); 34 | data.on('data', (chunk) => { 35 | if (failed) { 36 | return; 37 | } 38 | bar.tick(chunk.length, { status: 'downloading' }); 39 | }); 40 | data.on('end', () => { 41 | if (failed) { 42 | return; 43 | } 44 | writeStream.close(); 45 | resolve(bar); 46 | }); 47 | data.on('error', (err) => { 48 | failed = true; 49 | bar.tick(total); 50 | bar.tick({ status: 'error' }); 51 | writeStream.close(); 52 | reject(err); 53 | }); 54 | }) 55 | .catch((err) => { 56 | reject(err); 57 | }); 58 | }); 59 | } 60 | 61 | export async function download(url, index) { 62 | const data = await getDataByUrl(url); 63 | // console.log(initialState); 64 | const { videoData } = data; 65 | const { pages } = videoData; 66 | const isSingle = pages.length === 1; 67 | // const aid = videoData.aid; 68 | const pid = data.p; 69 | const cid = pages[pid - 1].cid; 70 | const title = (isSingle ? videoData.title : pages[pid - 1].part).replace( 71 | /\s/g, 72 | '-', 73 | ); 74 | const date = new Date(videoData.ctime * 1000); 75 | const dateString = `${date.getFullYear()}-${ 76 | date.getMonth() + 1 77 | }-${date.getDate()}`; 78 | const author = videoData.owner.name; 79 | const filename = filenamify( 80 | `${getName(index, title, author, dateString)}.flv`, 81 | ); 82 | // console.log('aid:', aid); 83 | // console.log('pid:', pid); 84 | // console.log('cid:', cid); 85 | 86 | const playUrl = `https://api.bilibili.com/x/player/playurl?fnval=80&cid=${cid}&bvid=${videoData.bvid}`; 87 | // console.log(playUrl); 88 | 89 | const playResult = await axios.get(playUrl); 90 | // console.log(playResult); 91 | const videoDownloadUrl = playResult.data.data.dash.audio[0].baseUrl; 92 | // console.log(videoDownloadUrl); 93 | const bar = await _download(videoDownloadUrl, title, filename, index); 94 | return { filename, bar }; 95 | } 96 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import { program, InvalidArgumentError } from 'commander'; 3 | import { download2mp3 } from './src/download2mp3.js'; 4 | import { getDataByUrl } from './src/getDataByUrl.js'; 5 | import { createRequire } from 'module'; 6 | import { sleep } from './src/utils.js'; 7 | import axios from 'axios'; 8 | 9 | const require = createRequire(import.meta.url); 10 | const pkg = require('./package.json'); 11 | program.version(pkg.version); 12 | 13 | axios.defaults.headers = { 14 | referer: 'https://www.bilibili.com/', 15 | 'user-agent': 16 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0', 17 | }; 18 | axios.defaults.timeout = 0; 19 | 20 | function validateInt(value) { 21 | // parseInt takes a string and a radix 22 | const parsedValue = parseInt(value, 10); 23 | if (isNaN(parsedValue)) { 24 | throw new InvalidArgumentError('Not a number.'); 25 | } 26 | return parsedValue; 27 | } 28 | 29 | program 30 | .requiredOption( 31 | '-u, --url [urls...]', 32 | `the video set (or single) url of bilibili, can input multiple urls.`, 33 | ) 34 | .option( 35 | '-t, --threads ', 36 | 'how many download threads.', 37 | validateInt, 38 | 10, 39 | ) 40 | .option( 41 | '-n, --naming ', 42 | `change the downloaded files' naming pattern. available: INDEX, TITLE, AUTHOR, DATE`, 43 | 'TITLE-AUTHOR-DATE', 44 | ) 45 | .option( 46 | '--from ', 47 | 'limit to page download from, 1-based.', 48 | validateInt, 49 | ) 50 | .option('--to ', 'limit to page download to, 1-based.', validateInt) 51 | .option( 52 | '--index-offset ', 53 | 'offset added to INDEX while saved.', 54 | validateInt, 55 | 0, 56 | ) 57 | .option('-ff --ffmpeg ', 'additional options applied to ffmpeg', '') 58 | .option( 59 | '--skip-mp3', 60 | 'skip the mp3 transform and keep downloaded file as video.', 61 | false, 62 | ) 63 | .option('--debug', 'enable debug log.', false); 64 | 65 | program.parse(process.argv); 66 | const argv = program.opts(); 67 | // console.log(argv); 68 | 69 | (async function () { 70 | const urls = typeof argv.url === 'string' ? [argv.url] : argv.url; 71 | let pages = []; 72 | 73 | for (let url of urls) { 74 | url = url.trim(); 75 | console.log(`Fetching pages for:`, url); 76 | const data = await getDataByUrl(url); 77 | // console.log(data); 78 | // console.log(`total threads: ${data.videoData.pages.length}`); 79 | pages = [ 80 | ...pages, 81 | ...data.videoData.pages.map((value, index) => { 82 | const p = index + 1; 83 | return url.indexOf('p=') > 0 84 | ? url.replace(/p=\d+/, `p=${p}`) 85 | : `${url.replace(/\?.+/, '')}?p=${p}`; 86 | }), 87 | ]; 88 | } 89 | pages = pages 90 | .map((value, index) => { 91 | return { 92 | url: value, 93 | index: index + 1, 94 | }; 95 | }) 96 | .filter( 97 | ({ index }) => 98 | !( 99 | (typeof argv.from === 'number' && index < argv.from) || 100 | (typeof argv.to === 'number' && index > argv.to) 101 | ), 102 | ); 103 | // console.log('Pages:', pages); 104 | 105 | let maxThreads = argv.threads; 106 | let currentThreads = 0; 107 | let finished = 0; 108 | 109 | for (const page of pages) { 110 | while (currentThreads === maxThreads) { 111 | // wait for available thread 112 | await sleep(100); 113 | } 114 | currentThreads += 1; 115 | download2mp3(page).finally(() => { 116 | currentThreads -= 1; 117 | finished += 1; 118 | if (finished === pages.length) { 119 | process.exit(0); 120 | } 121 | }); 122 | } 123 | })(); 124 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### [2.0.6](https://github.com/wxsms/bilibili-video2mp3/compare/v2.0.5...v2.0.6) (2022-07-29) 2 | 3 | ### [2.0.5](https://github.com/wxsms/bilibili-video2mp3/compare/v2.0.4...v2.0.5) (2022-07-29) 4 | 5 | ### [2.0.4](https://github.com/wxsms/bilibili-video2mp3/compare/v2.0.3...v2.0.4) (2022-07-05) 6 | 7 | ### [2.0.3](https://github.com/wxsms/bilibili-video2mp3/compare/v2.0.2...v2.0.3) (2022-01-23) 8 | 9 | 10 | ### Bug Fixes 11 | 12 | * indexoffset option ([b981e73](https://github.com/wxsms/bilibili-video2mp3/commit/b981e73e063394460fb226f730ce9ab0c4254c18)) 13 | 14 | ### [2.0.2](https://github.com/wxsms/bilibili-video2mp3/compare/v2.0.1...v2.0.2) (2022-01-23) 15 | 16 | 17 | ### Bug Fixes 18 | 19 | * indexoffset option ([a34791e](https://github.com/wxsms/bilibili-video2mp3/commit/a34791ed633170c130410090839a38516dd0cd8c)) 20 | 21 | ### [2.0.1](https://github.com/wxsms/bilibili-video2mp3/compare/v2.0.0...v2.0.1) (2022-01-22) 22 | 23 | 24 | ### Bug Fixes 25 | 26 | * minor tweaks ([07cb9f6](https://github.com/wxsms/bilibili-video2mp3/commit/07cb9f64d8173034f5b6ee23ab6f935f562c2d45)) 27 | 28 | ## [2.0.0](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.8...v2.0.0) (2022-01-22) 29 | 30 | 31 | ### Features 32 | 33 | * change package name ([46bf80d](https://github.com/wxsms/bilibili-video2mp3/commit/46bf80d2daed8f9ddcec2ca25b4ccb751478f361)) 34 | 35 | ### [1.0.8](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.7...v1.0.8) (2022-01-22) 36 | 37 | 38 | ### Bug Fixes 39 | 40 | * 2mp3 fail stuck process ([b525cd4](https://github.com/wxsms/bilibili-video2mp3/commit/b525cd44bd32b30f1600c652aa16625c72a78843)) 41 | * print log only when debug option provided ([4166a39](https://github.com/wxsms/bilibili-video2mp3/commit/4166a39502b4252b4986a04daf4bbb7d10798905)) 42 | 43 | ### [1.0.7](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.6...v1.0.7) (2022-01-22) 44 | 45 | 46 | ### Bug Fixes 47 | 48 | * download crash ([006532a](https://github.com/wxsms/bilibili-video2mp3/commit/006532a6808fd4a3ac546a33fd5e165a38332c93)) 49 | 50 | ### [1.0.6](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.5...v1.0.6) (2022-01-22) 51 | 52 | 53 | ### Bug Fixes 54 | 55 | * remove renderThrottle ([348b3fa](https://github.com/wxsms/bilibili-video2mp3/commit/348b3fa61301c5530a173f23b1fa6b814bcef078)) 56 | * throw on socket error ([7d94698](https://github.com/wxsms/bilibili-video2mp3/commit/7d946988306438cf444b3b0b6e1c254fa3acce94)) 57 | 58 | ### [1.0.5](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.4...v1.0.5) (2022-01-22) 59 | 60 | 61 | ### Bug Fixes 62 | 63 | * progress bar align ([5ed2a07](https://github.com/wxsms/bilibili-video2mp3/commit/5ed2a07345386b59b63a9b905ad544eba713fa54)) 64 | 65 | ### [1.0.4](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.3...v1.0.4) (2022-01-22) 66 | 67 | 68 | ### Bug Fixes 69 | 70 | * progress bar align ([97cde9f](https://github.com/wxsms/bilibili-video2mp3/commit/97cde9f7bfaaf0c780cf688675646d9ef9330ad6)) 71 | 72 | ### [1.0.3](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.2...v1.0.3) (2022-01-22) 73 | 74 | 75 | ### Bug Fixes 76 | 77 | * ensure progress bar order ([80697c4](https://github.com/wxsms/bilibili-video2mp3/commit/80697c4d306ec0ba37c374586ef97d8ea081220b)) 78 | * ffmpeg.wasm can only run one command at a time ([4392357](https://github.com/wxsms/bilibili-video2mp3/commit/43923579a9654a127faa10573aa6e92f9c82b0fc)) 79 | * proccess exit problem ([6863225](https://github.com/wxsms/bilibili-video2mp3/commit/68632257a4d89c29de3fc2d91c0f0fc00147cdd8)) 80 | 81 | ### [1.0.2](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.1...v1.0.2) (2022-01-22) 82 | 83 | 84 | ### Bug Fixes 85 | 86 | * exit ffmpeg to free memery after transform done ([90914e8](https://github.com/wxsms/bilibili-video2mp3/commit/90914e860062bc75bea8f7553533df6c9792bdfd)) 87 | 88 | ### [1.0.1](https://github.com/wxsms/bilibili-video2mp3/compare/v1.0.0...v1.0.1) (2022-01-22) 89 | 90 | 91 | ### Bug Fixes 92 | 93 | * command line argv ([fd5bffd](https://github.com/wxsms/bilibili-video2mp3/commit/fd5bffd03e3f49f9d007a37bcb93b0a034ed06dd)) 94 | 95 | ## [1.0.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.9.0...v1.0.0) (2022-01-22) 96 | 97 | 98 | ### Features 99 | 100 | * commander ([fa1847f](https://github.com/wxsms/bilibili-video2mp3/commit/fa1847f3edbf45e501b1d8839fd7085b05b82771)) 101 | * use [@ffmpeg](https://github.com/ffmpeg) wasm ([a817471](https://github.com/wxsms/bilibili-video2mp3/commit/a817471c0f241431d9ea62f420ec6e8b21d166e1)) 102 | * use axios ([4f7b066](https://github.com/wxsms/bilibili-video2mp3/commit/4f7b06648dcad6eca8d111ce5a876794b2fef13d)) 103 | 104 | ## [0.9.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.8.1...v0.9.0) (2022-01-03) 105 | 106 | 107 | ### Features 108 | 109 | * add index-offset ([45182c7](https://github.com/wxsms/bilibili-video2mp3/commit/45182c731095ea9900eb7bf76e2e08e5e7144830)) 110 | * naming pattern add INDEX ([91ab5f4](https://github.com/wxsms/bilibili-video2mp3/commit/91ab5f48ee3986d7cc2b1777c14d57414508a749)) 111 | 112 | ### [0.8.1](https://github.com/wxsms/bilibili-video2mp3/compare/v0.8.0...v0.8.1) (2022-01-02) 113 | 114 | 115 | ### Bug Fixes 116 | 117 | * leading - cause ffmpeg command fail ([dd1084d](https://github.com/wxsms/bilibili-video2mp3/commit/dd1084d960422925cccce744db38ed258cccb76c)) 118 | 119 | ## [0.8.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.7.0...v0.8.0) (2022-01-02) 120 | 121 | 122 | ### Features 123 | 124 | * add naming option ([ba7cc97](https://github.com/wxsms/bilibili-video2mp3/commit/ba7cc97f67055f2ebc63d581deba83985532ffbe)) 125 | 126 | ## [0.7.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.6.4...v0.7.0) (2021-12-30) 127 | 128 | 129 | ### Features 130 | 131 | * add from/to ([c847ce8](https://github.com/wxsms/bilibili-video2mp3/commit/c847ce855d126da7f2dd44046856787453488552)) 132 | * add threads options ([221672c](https://github.com/wxsms/bilibili-video2mp3/commit/221672cdc789b1a1340cf55e2e33d2d18ffb2145)) 133 | * remove useless code ([c410a18](https://github.com/wxsms/bilibili-video2mp3/commit/c410a18b1e4225c68f8404617478e7e6c1b0445c)) 134 | 135 | ### [0.6.4](https://github.com/wxsms/bilibili-video2mp3/compare/v0.6.3...v0.6.4) (2021-12-30) 136 | 137 | 138 | ### Bug Fixes 139 | 140 | * translate whitespace in filename ([bcbe5c4](https://github.com/wxsms/bilibili-video2mp3/commit/bcbe5c44a9def85137d38616d4992f96aa95118b)) 141 | 142 | ### [0.6.3](https://github.com/wxsms/bilibili-video2mp3/compare/v0.6.2...v0.6.3) (2021-12-30) 143 | 144 | 145 | ### Bug Fixes 146 | 147 | * add download retry ([f778058](https://github.com/wxsms/bilibili-video2mp3/commit/f778058086d97e5ca62dd3b9df68504130dd9e6a)) 148 | * ffmpeg stuck if file exist ([75875fe](https://github.com/wxsms/bilibili-video2mp3/commit/75875fe2c5e189538faef601b0e7ffbe12bb1786)) 149 | 150 | ### [0.6.2](https://github.com/wxsms/bilibili-video2mp3/compare/v0.6.1...v0.6.2) (2021-12-30) 151 | 152 | 153 | ### Bug Fixes 154 | 155 | * chunk pages in case of too much in one video ([b0ac18e](https://github.com/wxsms/bilibili-video2mp3/commit/b0ac18e52a73a5608e4a558d23e001da331e3281)) 156 | 157 | ### [0.6.1](https://github.com/wxsms/bilibili-video2mp3/compare/v0.6.0...v0.6.1) (2021-12-30) 158 | 159 | 160 | ### Bug Fixes 161 | 162 | * multiple url not work in windows ([29a52f8](https://github.com/wxsms/bilibili-video2mp3/commit/29a52f8cd203a1cd873ab8e86c9f5e1915ca4c51)) 163 | 164 | ## [0.6.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.5.0...v0.6.0) (2021-12-30) 165 | 166 | 167 | ### Features 168 | 169 | * add help ([42d2e71](https://github.com/wxsms/bilibili-video2mp3/commit/42d2e713c720edece6156ce676ffe99eb12e208f)) 170 | 171 | ## [0.5.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.4.0...v0.5.0) (2021-12-30) 172 | 173 | 174 | ### Features 175 | 176 | * allow multi url ([8a3650c](https://github.com/wxsms/bilibili-video2mp3/commit/8a3650c4fb86fe86dfb220ae5c03b22fefde5340)) 177 | * allow skip mp3 ([6948f35](https://github.com/wxsms/bilibili-video2mp3/commit/6948f3528199cba2c1fe840f40171cae1fc22a3d)) 178 | 179 | ## [0.4.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.3.0...v0.4.0) (2021-12-29) 180 | 181 | 182 | ### Features 183 | 184 | * add progressbar ([fac9dab](https://github.com/wxsms/bilibili-video2mp3/commit/fac9dabe747b5601e7548b8d0a21f43f2e8c3065)) 185 | 186 | ## [0.3.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.2.1...v0.3.0) (2021-12-29) 187 | 188 | 189 | ### Features 190 | 191 | * allow author option ([c18ef4d](https://github.com/wxsms/bilibili-video2mp3/commit/c18ef4da07eb41ed892666e7742859556b07a8ab)) 192 | 193 | ### [0.2.1](https://github.com/wxsms/bilibili-video2mp3/compare/v0.2.0...v0.2.1) (2021-12-29) 194 | 195 | 196 | ### Bug Fixes 197 | 198 | * increase mp3 quality ([22e31dd](https://github.com/wxsms/bilibili-video2mp3/commit/22e31dd63b79a10f7c0e86bb14f494650b4ddd36)) 199 | 200 | ## [0.2.0](https://github.com/wxsms/bilibili-video2mp3/compare/v0.1.0...v0.2.0) (2021-12-29) 201 | 202 | ## 0.1.0 (2021-12-29) 203 | 204 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@ffmpeg/core': 9 | specifier: 0.11.0 10 | version: 0.11.0 11 | '@ffmpeg/ffmpeg': 12 | specifier: 0.11.6 13 | version: 0.11.6 14 | axios: 15 | specifier: 1.7.9 16 | version: 1.7.9 17 | commander: 18 | specifier: 11.1.0 19 | version: 11.1.0 20 | filenamify: 21 | specifier: 6.0.0 22 | version: 6.0.0 23 | lodash-es: 24 | specifier: 4.17.21 25 | version: 4.17.21 26 | minimist: 27 | specifier: 1.2.8 28 | version: 1.2.8 29 | multi-progress: 30 | specifier: 4.0.0 31 | version: 4.0.0(progress@2.0.3) 32 | progress: 33 | specifier: 2.0.3 34 | version: 2.0.3 35 | 36 | devDependencies: 37 | conventional-changelog-cli: 38 | specifier: 4.1.0 39 | version: 4.1.0 40 | eslint: 41 | specifier: 8.57.1 42 | version: 8.57.1 43 | eslint-config-prettier: 44 | specifier: 9.1.0 45 | version: 9.1.0(eslint@8.57.1) 46 | eslint-plugin-prettier: 47 | specifier: 5.2.1 48 | version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.4.2) 49 | prettier: 50 | specifier: 3.4.2 51 | version: 3.4.2 52 | 53 | packages: 54 | 55 | /@babel/code-frame@7.26.2: 56 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 57 | engines: {node: '>=6.9.0'} 58 | dependencies: 59 | '@babel/helper-validator-identifier': 7.25.9 60 | js-tokens: 4.0.0 61 | picocolors: 1.1.1 62 | dev: true 63 | 64 | /@babel/helper-validator-identifier@7.25.9: 65 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 66 | engines: {node: '>=6.9.0'} 67 | dev: true 68 | 69 | /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): 70 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 71 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 72 | peerDependencies: 73 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 74 | dependencies: 75 | eslint: 8.57.1 76 | eslint-visitor-keys: 3.4.3 77 | dev: true 78 | 79 | /@eslint-community/regexpp@4.12.1: 80 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 81 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 82 | dev: true 83 | 84 | /@eslint/eslintrc@2.1.4: 85 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 86 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 87 | dependencies: 88 | ajv: 6.12.6 89 | debug: 4.3.7 90 | espree: 9.6.1 91 | globals: 13.24.0 92 | ignore: 5.3.2 93 | import-fresh: 3.3.0 94 | js-yaml: 4.1.0 95 | minimatch: 3.1.2 96 | strip-json-comments: 3.1.1 97 | transitivePeerDependencies: 98 | - supports-color 99 | dev: true 100 | 101 | /@eslint/js@8.57.1: 102 | resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} 103 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 104 | dev: true 105 | 106 | /@ffmpeg/core@0.11.0: 107 | resolution: {integrity: sha512-9Tt/+2PMpkGPXUK8n6He9G8Y+qR6qmCPSCw9iEKZxHHOvJ9BE/r0Fccj+YgDZTlyu6rXxc9x6EqCaFBIt7qzjA==} 108 | dev: false 109 | 110 | /@ffmpeg/ffmpeg@0.11.6: 111 | resolution: {integrity: sha512-uN8J8KDjADEavPhNva6tYO9Fj0lWs9z82swF3YXnTxWMBoFLGq3LZ6FLlIldRKEzhOBKnkVfA8UnFJuvGvNxcA==} 112 | engines: {node: '>=12.16.1'} 113 | dependencies: 114 | is-url: 1.2.4 115 | node-fetch: 2.7.0 116 | regenerator-runtime: 0.13.11 117 | resolve-url: 0.2.1 118 | transitivePeerDependencies: 119 | - encoding 120 | dev: false 121 | 122 | /@humanwhocodes/config-array@0.13.0: 123 | resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} 124 | engines: {node: '>=10.10.0'} 125 | deprecated: Use @eslint/config-array instead 126 | dependencies: 127 | '@humanwhocodes/object-schema': 2.0.3 128 | debug: 4.3.7 129 | minimatch: 3.1.2 130 | transitivePeerDependencies: 131 | - supports-color 132 | dev: true 133 | 134 | /@humanwhocodes/module-importer@1.0.1: 135 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 136 | engines: {node: '>=12.22'} 137 | dev: true 138 | 139 | /@humanwhocodes/object-schema@2.0.3: 140 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 141 | deprecated: Use @eslint/object-schema instead 142 | dev: true 143 | 144 | /@hutson/parse-repository-url@5.0.0: 145 | resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} 146 | engines: {node: '>=10.13.0'} 147 | dev: true 148 | 149 | /@nodelib/fs.scandir@2.1.5: 150 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 151 | engines: {node: '>= 8'} 152 | dependencies: 153 | '@nodelib/fs.stat': 2.0.5 154 | run-parallel: 1.2.0 155 | dev: true 156 | 157 | /@nodelib/fs.stat@2.0.5: 158 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 159 | engines: {node: '>= 8'} 160 | dev: true 161 | 162 | /@nodelib/fs.walk@1.2.8: 163 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 164 | engines: {node: '>= 8'} 165 | dependencies: 166 | '@nodelib/fs.scandir': 2.1.5 167 | fastq: 1.17.1 168 | dev: true 169 | 170 | /@pkgr/core@0.1.1: 171 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 172 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 173 | dev: true 174 | 175 | /@types/normalize-package-data@2.4.4: 176 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 177 | dev: true 178 | 179 | /@ungap/structured-clone@1.2.0: 180 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 181 | dev: true 182 | 183 | /JSONStream@1.3.5: 184 | resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} 185 | hasBin: true 186 | dependencies: 187 | jsonparse: 1.3.1 188 | through: 2.3.8 189 | dev: true 190 | 191 | /acorn-jsx@5.3.2(acorn@8.14.0): 192 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 193 | peerDependencies: 194 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 195 | dependencies: 196 | acorn: 8.14.0 197 | dev: true 198 | 199 | /acorn@8.14.0: 200 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 201 | engines: {node: '>=0.4.0'} 202 | hasBin: true 203 | dev: true 204 | 205 | /add-stream@1.0.0: 206 | resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} 207 | dev: true 208 | 209 | /ajv@6.12.6: 210 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 211 | dependencies: 212 | fast-deep-equal: 3.1.3 213 | fast-json-stable-stringify: 2.1.0 214 | json-schema-traverse: 0.4.1 215 | uri-js: 4.4.1 216 | dev: true 217 | 218 | /ansi-regex@5.0.1: 219 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 220 | engines: {node: '>=8'} 221 | dev: true 222 | 223 | /ansi-styles@4.3.0: 224 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 225 | engines: {node: '>=8'} 226 | dependencies: 227 | color-convert: 2.0.1 228 | dev: true 229 | 230 | /argparse@2.0.1: 231 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 232 | dev: true 233 | 234 | /array-ify@1.0.0: 235 | resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} 236 | dev: true 237 | 238 | /asynckit@0.4.0: 239 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 240 | dev: false 241 | 242 | /axios@1.7.9: 243 | resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} 244 | dependencies: 245 | follow-redirects: 1.15.9 246 | form-data: 4.0.1 247 | proxy-from-env: 1.1.0 248 | transitivePeerDependencies: 249 | - debug 250 | dev: false 251 | 252 | /balanced-match@1.0.2: 253 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 254 | dev: true 255 | 256 | /brace-expansion@1.1.11: 257 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 258 | dependencies: 259 | balanced-match: 1.0.2 260 | concat-map: 0.0.1 261 | dev: true 262 | 263 | /callsites@3.1.0: 264 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 265 | engines: {node: '>=6'} 266 | dev: true 267 | 268 | /chalk@4.1.2: 269 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 270 | engines: {node: '>=10'} 271 | dependencies: 272 | ansi-styles: 4.3.0 273 | supports-color: 7.2.0 274 | dev: true 275 | 276 | /color-convert@2.0.1: 277 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 278 | engines: {node: '>=7.0.0'} 279 | dependencies: 280 | color-name: 1.1.4 281 | dev: true 282 | 283 | /color-name@1.1.4: 284 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 285 | dev: true 286 | 287 | /combined-stream@1.0.8: 288 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 289 | engines: {node: '>= 0.8'} 290 | dependencies: 291 | delayed-stream: 1.0.0 292 | dev: false 293 | 294 | /commander@11.1.0: 295 | resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} 296 | engines: {node: '>=16'} 297 | dev: false 298 | 299 | /compare-func@2.0.0: 300 | resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} 301 | dependencies: 302 | array-ify: 1.0.0 303 | dot-prop: 5.3.0 304 | dev: true 305 | 306 | /concat-map@0.0.1: 307 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 308 | dev: true 309 | 310 | /conventional-changelog-angular@7.0.0: 311 | resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} 312 | engines: {node: '>=16'} 313 | dependencies: 314 | compare-func: 2.0.0 315 | dev: true 316 | 317 | /conventional-changelog-atom@4.0.0: 318 | resolution: {integrity: sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==} 319 | engines: {node: '>=16'} 320 | dev: true 321 | 322 | /conventional-changelog-cli@4.1.0: 323 | resolution: {integrity: sha512-MscvILWZ6nWOoC+p/3Nn3D2cVLkjeQjyZPUr0bQ+vUORE/SPrkClJh8BOoMNpS4yk+zFJ5LlgXACxH6XGQoRXA==} 324 | engines: {node: '>=16'} 325 | hasBin: true 326 | dependencies: 327 | add-stream: 1.0.0 328 | conventional-changelog: 5.1.0 329 | meow: 12.1.1 330 | tempfile: 5.0.0 331 | dev: true 332 | 333 | /conventional-changelog-codemirror@4.0.0: 334 | resolution: {integrity: sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==} 335 | engines: {node: '>=16'} 336 | dev: true 337 | 338 | /conventional-changelog-conventionalcommits@7.0.2: 339 | resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} 340 | engines: {node: '>=16'} 341 | dependencies: 342 | compare-func: 2.0.0 343 | dev: true 344 | 345 | /conventional-changelog-core@7.0.0: 346 | resolution: {integrity: sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==} 347 | engines: {node: '>=16'} 348 | dependencies: 349 | '@hutson/parse-repository-url': 5.0.0 350 | add-stream: 1.0.0 351 | conventional-changelog-writer: 7.0.1 352 | conventional-commits-parser: 5.0.0 353 | git-raw-commits: 4.0.0 354 | git-semver-tags: 7.0.1 355 | hosted-git-info: 7.0.2 356 | normalize-package-data: 6.0.2 357 | read-pkg: 8.1.0 358 | read-pkg-up: 10.1.0 359 | dev: true 360 | 361 | /conventional-changelog-ember@4.0.0: 362 | resolution: {integrity: sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==} 363 | engines: {node: '>=16'} 364 | dev: true 365 | 366 | /conventional-changelog-eslint@5.0.0: 367 | resolution: {integrity: sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==} 368 | engines: {node: '>=16'} 369 | dev: true 370 | 371 | /conventional-changelog-express@4.0.0: 372 | resolution: {integrity: sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==} 373 | engines: {node: '>=16'} 374 | dev: true 375 | 376 | /conventional-changelog-jquery@5.0.0: 377 | resolution: {integrity: sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==} 378 | engines: {node: '>=16'} 379 | dev: true 380 | 381 | /conventional-changelog-jshint@4.0.0: 382 | resolution: {integrity: sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==} 383 | engines: {node: '>=16'} 384 | dependencies: 385 | compare-func: 2.0.0 386 | dev: true 387 | 388 | /conventional-changelog-preset-loader@4.1.0: 389 | resolution: {integrity: sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==} 390 | engines: {node: '>=16'} 391 | dev: true 392 | 393 | /conventional-changelog-writer@7.0.1: 394 | resolution: {integrity: sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==} 395 | engines: {node: '>=16'} 396 | hasBin: true 397 | dependencies: 398 | conventional-commits-filter: 4.0.0 399 | handlebars: 4.7.8 400 | json-stringify-safe: 5.0.1 401 | meow: 12.1.1 402 | semver: 7.6.3 403 | split2: 4.2.0 404 | dev: true 405 | 406 | /conventional-changelog@5.1.0: 407 | resolution: {integrity: sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==} 408 | engines: {node: '>=16'} 409 | dependencies: 410 | conventional-changelog-angular: 7.0.0 411 | conventional-changelog-atom: 4.0.0 412 | conventional-changelog-codemirror: 4.0.0 413 | conventional-changelog-conventionalcommits: 7.0.2 414 | conventional-changelog-core: 7.0.0 415 | conventional-changelog-ember: 4.0.0 416 | conventional-changelog-eslint: 5.0.0 417 | conventional-changelog-express: 4.0.0 418 | conventional-changelog-jquery: 5.0.0 419 | conventional-changelog-jshint: 4.0.0 420 | conventional-changelog-preset-loader: 4.1.0 421 | dev: true 422 | 423 | /conventional-commits-filter@4.0.0: 424 | resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==} 425 | engines: {node: '>=16'} 426 | dev: true 427 | 428 | /conventional-commits-parser@5.0.0: 429 | resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} 430 | engines: {node: '>=16'} 431 | hasBin: true 432 | dependencies: 433 | JSONStream: 1.3.5 434 | is-text-path: 2.0.0 435 | meow: 12.1.1 436 | split2: 4.2.0 437 | dev: true 438 | 439 | /cross-spawn@7.0.3: 440 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 441 | engines: {node: '>= 8'} 442 | dependencies: 443 | path-key: 3.1.1 444 | shebang-command: 2.0.0 445 | which: 2.0.2 446 | dev: true 447 | 448 | /dargs@8.1.0: 449 | resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} 450 | engines: {node: '>=12'} 451 | dev: true 452 | 453 | /debug@4.3.7: 454 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 455 | engines: {node: '>=6.0'} 456 | peerDependencies: 457 | supports-color: '*' 458 | peerDependenciesMeta: 459 | supports-color: 460 | optional: true 461 | dependencies: 462 | ms: 2.1.3 463 | dev: true 464 | 465 | /deep-is@0.1.4: 466 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 467 | dev: true 468 | 469 | /delayed-stream@1.0.0: 470 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 471 | engines: {node: '>=0.4.0'} 472 | dev: false 473 | 474 | /doctrine@3.0.0: 475 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 476 | engines: {node: '>=6.0.0'} 477 | dependencies: 478 | esutils: 2.0.3 479 | dev: true 480 | 481 | /dot-prop@5.3.0: 482 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} 483 | engines: {node: '>=8'} 484 | dependencies: 485 | is-obj: 2.0.0 486 | dev: true 487 | 488 | /error-ex@1.3.2: 489 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 490 | dependencies: 491 | is-arrayish: 0.2.1 492 | dev: true 493 | 494 | /escape-string-regexp@4.0.0: 495 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 496 | engines: {node: '>=10'} 497 | dev: true 498 | 499 | /eslint-config-prettier@9.1.0(eslint@8.57.1): 500 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 501 | hasBin: true 502 | peerDependencies: 503 | eslint: '>=7.0.0' 504 | dependencies: 505 | eslint: 8.57.1 506 | dev: true 507 | 508 | /eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.4.2): 509 | resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 510 | engines: {node: ^14.18.0 || >=16.0.0} 511 | peerDependencies: 512 | '@types/eslint': '>=8.0.0' 513 | eslint: '>=8.0.0' 514 | eslint-config-prettier: '*' 515 | prettier: '>=3.0.0' 516 | peerDependenciesMeta: 517 | '@types/eslint': 518 | optional: true 519 | eslint-config-prettier: 520 | optional: true 521 | dependencies: 522 | eslint: 8.57.1 523 | eslint-config-prettier: 9.1.0(eslint@8.57.1) 524 | prettier: 3.4.2 525 | prettier-linter-helpers: 1.0.0 526 | synckit: 0.9.2 527 | dev: true 528 | 529 | /eslint-scope@7.2.2: 530 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 531 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 532 | dependencies: 533 | esrecurse: 4.3.0 534 | estraverse: 5.3.0 535 | dev: true 536 | 537 | /eslint-visitor-keys@3.4.3: 538 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 539 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 540 | dev: true 541 | 542 | /eslint@8.57.1: 543 | resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} 544 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 545 | deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. 546 | hasBin: true 547 | dependencies: 548 | '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) 549 | '@eslint-community/regexpp': 4.12.1 550 | '@eslint/eslintrc': 2.1.4 551 | '@eslint/js': 8.57.1 552 | '@humanwhocodes/config-array': 0.13.0 553 | '@humanwhocodes/module-importer': 1.0.1 554 | '@nodelib/fs.walk': 1.2.8 555 | '@ungap/structured-clone': 1.2.0 556 | ajv: 6.12.6 557 | chalk: 4.1.2 558 | cross-spawn: 7.0.3 559 | debug: 4.3.7 560 | doctrine: 3.0.0 561 | escape-string-regexp: 4.0.0 562 | eslint-scope: 7.2.2 563 | eslint-visitor-keys: 3.4.3 564 | espree: 9.6.1 565 | esquery: 1.6.0 566 | esutils: 2.0.3 567 | fast-deep-equal: 3.1.3 568 | file-entry-cache: 6.0.1 569 | find-up: 5.0.0 570 | glob-parent: 6.0.2 571 | globals: 13.24.0 572 | graphemer: 1.4.0 573 | ignore: 5.3.2 574 | imurmurhash: 0.1.4 575 | is-glob: 4.0.3 576 | is-path-inside: 3.0.3 577 | js-yaml: 4.1.0 578 | json-stable-stringify-without-jsonify: 1.0.1 579 | levn: 0.4.1 580 | lodash.merge: 4.6.2 581 | minimatch: 3.1.2 582 | natural-compare: 1.4.0 583 | optionator: 0.9.4 584 | strip-ansi: 6.0.1 585 | text-table: 0.2.0 586 | transitivePeerDependencies: 587 | - supports-color 588 | dev: true 589 | 590 | /espree@9.6.1: 591 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 592 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 593 | dependencies: 594 | acorn: 8.14.0 595 | acorn-jsx: 5.3.2(acorn@8.14.0) 596 | eslint-visitor-keys: 3.4.3 597 | dev: true 598 | 599 | /esquery@1.6.0: 600 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 601 | engines: {node: '>=0.10'} 602 | dependencies: 603 | estraverse: 5.3.0 604 | dev: true 605 | 606 | /esrecurse@4.3.0: 607 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 608 | engines: {node: '>=4.0'} 609 | dependencies: 610 | estraverse: 5.3.0 611 | dev: true 612 | 613 | /estraverse@5.3.0: 614 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 615 | engines: {node: '>=4.0'} 616 | dev: true 617 | 618 | /esutils@2.0.3: 619 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 620 | engines: {node: '>=0.10.0'} 621 | dev: true 622 | 623 | /fast-deep-equal@3.1.3: 624 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 625 | dev: true 626 | 627 | /fast-diff@1.3.0: 628 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 629 | dev: true 630 | 631 | /fast-json-stable-stringify@2.1.0: 632 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 633 | dev: true 634 | 635 | /fast-levenshtein@2.0.6: 636 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 637 | dev: true 638 | 639 | /fastq@1.17.1: 640 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 641 | dependencies: 642 | reusify: 1.0.4 643 | dev: true 644 | 645 | /file-entry-cache@6.0.1: 646 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 647 | engines: {node: ^10.12.0 || >=12.0.0} 648 | dependencies: 649 | flat-cache: 3.2.0 650 | dev: true 651 | 652 | /filename-reserved-regex@3.0.0: 653 | resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} 654 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 655 | dev: false 656 | 657 | /filenamify@6.0.0: 658 | resolution: {integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==} 659 | engines: {node: '>=16'} 660 | dependencies: 661 | filename-reserved-regex: 3.0.0 662 | dev: false 663 | 664 | /find-up@5.0.0: 665 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 666 | engines: {node: '>=10'} 667 | dependencies: 668 | locate-path: 6.0.0 669 | path-exists: 4.0.0 670 | dev: true 671 | 672 | /find-up@6.3.0: 673 | resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} 674 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 675 | dependencies: 676 | locate-path: 7.2.0 677 | path-exists: 5.0.0 678 | dev: true 679 | 680 | /flat-cache@3.2.0: 681 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 682 | engines: {node: ^10.12.0 || >=12.0.0} 683 | dependencies: 684 | flatted: 3.3.1 685 | keyv: 4.5.4 686 | rimraf: 3.0.2 687 | dev: true 688 | 689 | /flatted@3.3.1: 690 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 691 | dev: true 692 | 693 | /follow-redirects@1.15.9: 694 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 695 | engines: {node: '>=4.0'} 696 | peerDependencies: 697 | debug: '*' 698 | peerDependenciesMeta: 699 | debug: 700 | optional: true 701 | dev: false 702 | 703 | /form-data@4.0.1: 704 | resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} 705 | engines: {node: '>= 6'} 706 | dependencies: 707 | asynckit: 0.4.0 708 | combined-stream: 1.0.8 709 | mime-types: 2.1.35 710 | dev: false 711 | 712 | /fs.realpath@1.0.0: 713 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 714 | dev: true 715 | 716 | /git-raw-commits@4.0.0: 717 | resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} 718 | engines: {node: '>=16'} 719 | hasBin: true 720 | dependencies: 721 | dargs: 8.1.0 722 | meow: 12.1.1 723 | split2: 4.2.0 724 | dev: true 725 | 726 | /git-semver-tags@7.0.1: 727 | resolution: {integrity: sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==} 728 | engines: {node: '>=16'} 729 | hasBin: true 730 | dependencies: 731 | meow: 12.1.1 732 | semver: 7.6.3 733 | dev: true 734 | 735 | /glob-parent@6.0.2: 736 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 737 | engines: {node: '>=10.13.0'} 738 | dependencies: 739 | is-glob: 4.0.3 740 | dev: true 741 | 742 | /glob@7.2.3: 743 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 744 | deprecated: Glob versions prior to v9 are no longer supported 745 | dependencies: 746 | fs.realpath: 1.0.0 747 | inflight: 1.0.6 748 | inherits: 2.0.4 749 | minimatch: 3.1.2 750 | once: 1.4.0 751 | path-is-absolute: 1.0.1 752 | dev: true 753 | 754 | /globals@13.24.0: 755 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 756 | engines: {node: '>=8'} 757 | dependencies: 758 | type-fest: 0.20.2 759 | dev: true 760 | 761 | /graphemer@1.4.0: 762 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 763 | dev: true 764 | 765 | /handlebars@4.7.8: 766 | resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} 767 | engines: {node: '>=0.4.7'} 768 | hasBin: true 769 | dependencies: 770 | minimist: 1.2.8 771 | neo-async: 2.6.2 772 | source-map: 0.6.1 773 | wordwrap: 1.0.0 774 | optionalDependencies: 775 | uglify-js: 3.19.3 776 | dev: true 777 | 778 | /has-flag@4.0.0: 779 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 780 | engines: {node: '>=8'} 781 | dev: true 782 | 783 | /hosted-git-info@7.0.2: 784 | resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} 785 | engines: {node: ^16.14.0 || >=18.0.0} 786 | dependencies: 787 | lru-cache: 10.4.3 788 | dev: true 789 | 790 | /ignore@5.3.2: 791 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 792 | engines: {node: '>= 4'} 793 | dev: true 794 | 795 | /import-fresh@3.3.0: 796 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 797 | engines: {node: '>=6'} 798 | dependencies: 799 | parent-module: 1.0.1 800 | resolve-from: 4.0.0 801 | dev: true 802 | 803 | /imurmurhash@0.1.4: 804 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 805 | engines: {node: '>=0.8.19'} 806 | dev: true 807 | 808 | /inflight@1.0.6: 809 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 810 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 811 | dependencies: 812 | once: 1.4.0 813 | wrappy: 1.0.2 814 | dev: true 815 | 816 | /inherits@2.0.4: 817 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 818 | dev: true 819 | 820 | /is-arrayish@0.2.1: 821 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 822 | dev: true 823 | 824 | /is-extglob@2.1.1: 825 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 826 | engines: {node: '>=0.10.0'} 827 | dev: true 828 | 829 | /is-glob@4.0.3: 830 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 831 | engines: {node: '>=0.10.0'} 832 | dependencies: 833 | is-extglob: 2.1.1 834 | dev: true 835 | 836 | /is-obj@2.0.0: 837 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 838 | engines: {node: '>=8'} 839 | dev: true 840 | 841 | /is-path-inside@3.0.3: 842 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 843 | engines: {node: '>=8'} 844 | dev: true 845 | 846 | /is-text-path@2.0.0: 847 | resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} 848 | engines: {node: '>=8'} 849 | dependencies: 850 | text-extensions: 2.4.0 851 | dev: true 852 | 853 | /is-url@1.2.4: 854 | resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} 855 | dev: false 856 | 857 | /isexe@2.0.0: 858 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 859 | dev: true 860 | 861 | /js-tokens@4.0.0: 862 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 863 | dev: true 864 | 865 | /js-yaml@4.1.0: 866 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 867 | hasBin: true 868 | dependencies: 869 | argparse: 2.0.1 870 | dev: true 871 | 872 | /json-buffer@3.0.1: 873 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 874 | dev: true 875 | 876 | /json-parse-even-better-errors@3.0.2: 877 | resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} 878 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 879 | dev: true 880 | 881 | /json-schema-traverse@0.4.1: 882 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 883 | dev: true 884 | 885 | /json-stable-stringify-without-jsonify@1.0.1: 886 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 887 | dev: true 888 | 889 | /json-stringify-safe@5.0.1: 890 | resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} 891 | dev: true 892 | 893 | /jsonparse@1.3.1: 894 | resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} 895 | engines: {'0': node >= 0.2.0} 896 | dev: true 897 | 898 | /keyv@4.5.4: 899 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 900 | dependencies: 901 | json-buffer: 3.0.1 902 | dev: true 903 | 904 | /levn@0.4.1: 905 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 906 | engines: {node: '>= 0.8.0'} 907 | dependencies: 908 | prelude-ls: 1.2.1 909 | type-check: 0.4.0 910 | dev: true 911 | 912 | /lines-and-columns@2.0.4: 913 | resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} 914 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 915 | dev: true 916 | 917 | /locate-path@6.0.0: 918 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 919 | engines: {node: '>=10'} 920 | dependencies: 921 | p-locate: 5.0.0 922 | dev: true 923 | 924 | /locate-path@7.2.0: 925 | resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} 926 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 927 | dependencies: 928 | p-locate: 6.0.0 929 | dev: true 930 | 931 | /lodash-es@4.17.21: 932 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 933 | dev: false 934 | 935 | /lodash.merge@4.6.2: 936 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 937 | dev: true 938 | 939 | /lru-cache@10.4.3: 940 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 941 | dev: true 942 | 943 | /meow@12.1.1: 944 | resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} 945 | engines: {node: '>=16.10'} 946 | dev: true 947 | 948 | /mime-db@1.52.0: 949 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 950 | engines: {node: '>= 0.6'} 951 | dev: false 952 | 953 | /mime-types@2.1.35: 954 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 955 | engines: {node: '>= 0.6'} 956 | dependencies: 957 | mime-db: 1.52.0 958 | dev: false 959 | 960 | /minimatch@3.1.2: 961 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 962 | dependencies: 963 | brace-expansion: 1.1.11 964 | dev: true 965 | 966 | /minimist@1.2.8: 967 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 968 | 969 | /ms@2.1.3: 970 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 971 | dev: true 972 | 973 | /multi-progress@4.0.0(progress@2.0.3): 974 | resolution: {integrity: sha512-9zcjyOou3FFCKPXsmkbC3ethv51SFPoA4dJD6TscIp2pUmy26kBDZW6h9XofPELrzseSkuD7r0V+emGEeo39Pg==} 975 | peerDependencies: 976 | progress: ^2.0.0 977 | dependencies: 978 | progress: 2.0.3 979 | dev: false 980 | 981 | /natural-compare@1.4.0: 982 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 983 | dev: true 984 | 985 | /neo-async@2.6.2: 986 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 987 | dev: true 988 | 989 | /node-fetch@2.7.0: 990 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 991 | engines: {node: 4.x || >=6.0.0} 992 | peerDependencies: 993 | encoding: ^0.1.0 994 | peerDependenciesMeta: 995 | encoding: 996 | optional: true 997 | dependencies: 998 | whatwg-url: 5.0.0 999 | dev: false 1000 | 1001 | /normalize-package-data@6.0.2: 1002 | resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} 1003 | engines: {node: ^16.14.0 || >=18.0.0} 1004 | dependencies: 1005 | hosted-git-info: 7.0.2 1006 | semver: 7.6.3 1007 | validate-npm-package-license: 3.0.4 1008 | dev: true 1009 | 1010 | /once@1.4.0: 1011 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1012 | dependencies: 1013 | wrappy: 1.0.2 1014 | dev: true 1015 | 1016 | /optionator@0.9.4: 1017 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1018 | engines: {node: '>= 0.8.0'} 1019 | dependencies: 1020 | deep-is: 0.1.4 1021 | fast-levenshtein: 2.0.6 1022 | levn: 0.4.1 1023 | prelude-ls: 1.2.1 1024 | type-check: 0.4.0 1025 | word-wrap: 1.2.5 1026 | dev: true 1027 | 1028 | /p-limit@3.1.0: 1029 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1030 | engines: {node: '>=10'} 1031 | dependencies: 1032 | yocto-queue: 0.1.0 1033 | dev: true 1034 | 1035 | /p-limit@4.0.0: 1036 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 1037 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1038 | dependencies: 1039 | yocto-queue: 1.1.1 1040 | dev: true 1041 | 1042 | /p-locate@5.0.0: 1043 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1044 | engines: {node: '>=10'} 1045 | dependencies: 1046 | p-limit: 3.1.0 1047 | dev: true 1048 | 1049 | /p-locate@6.0.0: 1050 | resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} 1051 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1052 | dependencies: 1053 | p-limit: 4.0.0 1054 | dev: true 1055 | 1056 | /parent-module@1.0.1: 1057 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1058 | engines: {node: '>=6'} 1059 | dependencies: 1060 | callsites: 3.1.0 1061 | dev: true 1062 | 1063 | /parse-json@7.1.1: 1064 | resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} 1065 | engines: {node: '>=16'} 1066 | dependencies: 1067 | '@babel/code-frame': 7.26.2 1068 | error-ex: 1.3.2 1069 | json-parse-even-better-errors: 3.0.2 1070 | lines-and-columns: 2.0.4 1071 | type-fest: 3.13.1 1072 | dev: true 1073 | 1074 | /path-exists@4.0.0: 1075 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1076 | engines: {node: '>=8'} 1077 | dev: true 1078 | 1079 | /path-exists@5.0.0: 1080 | resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} 1081 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1082 | dev: true 1083 | 1084 | /path-is-absolute@1.0.1: 1085 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1086 | engines: {node: '>=0.10.0'} 1087 | dev: true 1088 | 1089 | /path-key@3.1.1: 1090 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1091 | engines: {node: '>=8'} 1092 | dev: true 1093 | 1094 | /picocolors@1.1.1: 1095 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1096 | dev: true 1097 | 1098 | /prelude-ls@1.2.1: 1099 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1100 | engines: {node: '>= 0.8.0'} 1101 | dev: true 1102 | 1103 | /prettier-linter-helpers@1.0.0: 1104 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1105 | engines: {node: '>=6.0.0'} 1106 | dependencies: 1107 | fast-diff: 1.3.0 1108 | dev: true 1109 | 1110 | /prettier@3.4.2: 1111 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 1112 | engines: {node: '>=14'} 1113 | hasBin: true 1114 | dev: true 1115 | 1116 | /progress@2.0.3: 1117 | resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} 1118 | engines: {node: '>=0.4.0'} 1119 | dev: false 1120 | 1121 | /proxy-from-env@1.1.0: 1122 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1123 | dev: false 1124 | 1125 | /punycode@2.3.1: 1126 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1127 | engines: {node: '>=6'} 1128 | dev: true 1129 | 1130 | /queue-microtask@1.2.3: 1131 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1132 | dev: true 1133 | 1134 | /read-pkg-up@10.1.0: 1135 | resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} 1136 | engines: {node: '>=16'} 1137 | dependencies: 1138 | find-up: 6.3.0 1139 | read-pkg: 8.1.0 1140 | type-fest: 4.26.1 1141 | dev: true 1142 | 1143 | /read-pkg@8.1.0: 1144 | resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} 1145 | engines: {node: '>=16'} 1146 | dependencies: 1147 | '@types/normalize-package-data': 2.4.4 1148 | normalize-package-data: 6.0.2 1149 | parse-json: 7.1.1 1150 | type-fest: 4.26.1 1151 | dev: true 1152 | 1153 | /regenerator-runtime@0.13.11: 1154 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 1155 | dev: false 1156 | 1157 | /resolve-from@4.0.0: 1158 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1159 | engines: {node: '>=4'} 1160 | dev: true 1161 | 1162 | /resolve-url@0.2.1: 1163 | resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} 1164 | deprecated: https://github.com/lydell/resolve-url#deprecated 1165 | dev: false 1166 | 1167 | /reusify@1.0.4: 1168 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1169 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1170 | dev: true 1171 | 1172 | /rimraf@3.0.2: 1173 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1174 | deprecated: Rimraf versions prior to v4 are no longer supported 1175 | hasBin: true 1176 | dependencies: 1177 | glob: 7.2.3 1178 | dev: true 1179 | 1180 | /run-parallel@1.2.0: 1181 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1182 | dependencies: 1183 | queue-microtask: 1.2.3 1184 | dev: true 1185 | 1186 | /semver@7.6.3: 1187 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1188 | engines: {node: '>=10'} 1189 | hasBin: true 1190 | dev: true 1191 | 1192 | /shebang-command@2.0.0: 1193 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1194 | engines: {node: '>=8'} 1195 | dependencies: 1196 | shebang-regex: 3.0.0 1197 | dev: true 1198 | 1199 | /shebang-regex@3.0.0: 1200 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1201 | engines: {node: '>=8'} 1202 | dev: true 1203 | 1204 | /source-map@0.6.1: 1205 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1206 | engines: {node: '>=0.10.0'} 1207 | dev: true 1208 | 1209 | /spdx-correct@3.2.0: 1210 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1211 | dependencies: 1212 | spdx-expression-parse: 3.0.1 1213 | spdx-license-ids: 3.0.20 1214 | dev: true 1215 | 1216 | /spdx-exceptions@2.5.0: 1217 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1218 | dev: true 1219 | 1220 | /spdx-expression-parse@3.0.1: 1221 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1222 | dependencies: 1223 | spdx-exceptions: 2.5.0 1224 | spdx-license-ids: 3.0.20 1225 | dev: true 1226 | 1227 | /spdx-license-ids@3.0.20: 1228 | resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} 1229 | dev: true 1230 | 1231 | /split2@4.2.0: 1232 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 1233 | engines: {node: '>= 10.x'} 1234 | dev: true 1235 | 1236 | /strip-ansi@6.0.1: 1237 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1238 | engines: {node: '>=8'} 1239 | dependencies: 1240 | ansi-regex: 5.0.1 1241 | dev: true 1242 | 1243 | /strip-json-comments@3.1.1: 1244 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1245 | engines: {node: '>=8'} 1246 | dev: true 1247 | 1248 | /supports-color@7.2.0: 1249 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1250 | engines: {node: '>=8'} 1251 | dependencies: 1252 | has-flag: 4.0.0 1253 | dev: true 1254 | 1255 | /synckit@0.9.2: 1256 | resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} 1257 | engines: {node: ^14.18.0 || >=16.0.0} 1258 | dependencies: 1259 | '@pkgr/core': 0.1.1 1260 | tslib: 2.8.1 1261 | dev: true 1262 | 1263 | /temp-dir@3.0.0: 1264 | resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} 1265 | engines: {node: '>=14.16'} 1266 | dev: true 1267 | 1268 | /tempfile@5.0.0: 1269 | resolution: {integrity: sha512-bX655WZI/F7EoTDw9JvQURqAXiPHi8o8+yFxPF2lWYyz1aHnmMRuXWqL6YB6GmeO0o4DIYWHLgGNi/X64T+X4Q==} 1270 | engines: {node: '>=14.18'} 1271 | dependencies: 1272 | temp-dir: 3.0.0 1273 | dev: true 1274 | 1275 | /text-extensions@2.4.0: 1276 | resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} 1277 | engines: {node: '>=8'} 1278 | dev: true 1279 | 1280 | /text-table@0.2.0: 1281 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1282 | dev: true 1283 | 1284 | /through@2.3.8: 1285 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 1286 | dev: true 1287 | 1288 | /tr46@0.0.3: 1289 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1290 | dev: false 1291 | 1292 | /tslib@2.8.1: 1293 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1294 | dev: true 1295 | 1296 | /type-check@0.4.0: 1297 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1298 | engines: {node: '>= 0.8.0'} 1299 | dependencies: 1300 | prelude-ls: 1.2.1 1301 | dev: true 1302 | 1303 | /type-fest@0.20.2: 1304 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1305 | engines: {node: '>=10'} 1306 | dev: true 1307 | 1308 | /type-fest@3.13.1: 1309 | resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} 1310 | engines: {node: '>=14.16'} 1311 | dev: true 1312 | 1313 | /type-fest@4.26.1: 1314 | resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} 1315 | engines: {node: '>=16'} 1316 | dev: true 1317 | 1318 | /uglify-js@3.19.3: 1319 | resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} 1320 | engines: {node: '>=0.8.0'} 1321 | hasBin: true 1322 | requiresBuild: true 1323 | dev: true 1324 | optional: true 1325 | 1326 | /uri-js@4.4.1: 1327 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1328 | dependencies: 1329 | punycode: 2.3.1 1330 | dev: true 1331 | 1332 | /validate-npm-package-license@3.0.4: 1333 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1334 | dependencies: 1335 | spdx-correct: 3.2.0 1336 | spdx-expression-parse: 3.0.1 1337 | dev: true 1338 | 1339 | /webidl-conversions@3.0.1: 1340 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1341 | dev: false 1342 | 1343 | /whatwg-url@5.0.0: 1344 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1345 | dependencies: 1346 | tr46: 0.0.3 1347 | webidl-conversions: 3.0.1 1348 | dev: false 1349 | 1350 | /which@2.0.2: 1351 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1352 | engines: {node: '>= 8'} 1353 | hasBin: true 1354 | dependencies: 1355 | isexe: 2.0.0 1356 | dev: true 1357 | 1358 | /word-wrap@1.2.5: 1359 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1360 | engines: {node: '>=0.10.0'} 1361 | dev: true 1362 | 1363 | /wordwrap@1.0.0: 1364 | resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 1365 | dev: true 1366 | 1367 | /wrappy@1.0.2: 1368 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1369 | dev: true 1370 | 1371 | /yocto-queue@0.1.0: 1372 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1373 | engines: {node: '>=10'} 1374 | dev: true 1375 | 1376 | /yocto-queue@1.1.1: 1377 | resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} 1378 | engines: {node: '>=12.20'} 1379 | dev: true 1380 | --------------------------------------------------------------------------------