From 63a6402866c8bf6541e3a00abc14b0c8526e4070 Mon Sep 17 00:00:00 2001 From: Dan Roscigno Date: Mon, 27 Jan 2025 18:03:06 -0500 Subject: [PATCH] [Doc] improve PDF (#55497) (cherry picked from commit ecfce31ba776e8ed472129a7f206aa8e07c8f4f5) --- docs/docusaurus/PDF/.env.sample | 3 + docs/docusaurus/PDF/.gitignore | 2 + docs/docusaurus/PDF/README.md | 198 +-- docs/docusaurus/PDF/StarRocks.png | Bin 0 -> 40486 bytes docs/docusaurus/PDF/URLS.txt.example | 656 --------- docs/docusaurus/PDF/clean | 3 + docs/docusaurus/PDF/docker-compose.yaml | 32 - .../PDF/docusaurus-puppeteer-pdf.js | 131 ++ docs/docusaurus/PDF/generatePdf.js | 101 -- docs/docusaurus/PDF/package.json | 16 + docs/docusaurus/PDF/yarn.lock | 1254 +++++++++++++++++ 11 files changed, 1512 insertions(+), 884 deletions(-) create mode 100644 docs/docusaurus/PDF/.env.sample create mode 100644 docs/docusaurus/PDF/StarRocks.png delete mode 100644 docs/docusaurus/PDF/URLS.txt.example create mode 100755 docs/docusaurus/PDF/clean delete mode 100644 docs/docusaurus/PDF/docker-compose.yaml create mode 100644 docs/docusaurus/PDF/docusaurus-puppeteer-pdf.js delete mode 100644 docs/docusaurus/PDF/generatePdf.js create mode 100644 docs/docusaurus/PDF/package.json create mode 100644 docs/docusaurus/PDF/yarn.lock diff --git a/docs/docusaurus/PDF/.env.sample b/docs/docusaurus/PDF/.env.sample new file mode 100644 index 00000000000000..4ab82367826b9c --- /dev/null +++ b/docs/docusaurus/PDF/.env.sample @@ -0,0 +1,3 @@ +COVER_IMAGE=./StarRocks.png +COVER_TITLE="StarRocks 3.3" +COPYRIGHT="Copyright (c) 2024 The Linux Foundation" diff --git a/docs/docusaurus/PDF/.gitignore b/docs/docusaurus/PDF/.gitignore index 8a8198003d1d5d..1167846aee1e70 100644 --- a/docs/docusaurus/PDF/.gitignore +++ b/docs/docusaurus/PDF/.gitignore @@ -1,4 +1,6 @@ .venv +tmp/** +.env *.pdf URLs.txt pdf/** diff --git a/docs/docusaurus/PDF/README.md b/docs/docusaurus/PDF/README.md index 5b777b19a57b8d..e88563c36c8014 100644 --- a/docs/docusaurus/PDF/README.md +++ b/docs/docusaurus/PDF/README.md @@ -1,162 +1,170 @@ +# Generate a PDF version of the docs -# Generate PDFs from the StarRocks Docusaurus documentation site +This was developed to run on a Mac system with an M2 chip. Please open an issue if you try this on another architecture and have problems. Node.js code to: -1. Generate the ordered list of URLs from the documentation. This is done using code from `docusaurus-prince-pdf`. -2. Convert each page to a PDF file with Gotenberg. -3. Combine the individual PDF files using Ghostscript and `pdfcombine`. +1. Generate the ordered list of URLs from documentation built with Docusaurus. This is done using code from [`docusaurus-prince-pdf`](https://github.com/signcl/docusaurus-prince-pdf) +2. Open each page with [`puppeteer`](https://pptr.dev/) and save the content (without nav or the footer) as a PDF file +3. Combine the individual PDF files using [pdftk-java](https://gitlab.com/pdftk-java/pdftk/-/blob/master/README.md?ref_type=heads) -## Clone this repo +## Onetime setup -Clone this repo to your machine. +### Clone this repo -## Choose the branch that you want a PDF for +Clone this repo to your machine. -When you launch the PDF conversion environment, it will use the active branch. So, if you want a PDF for version 3.3: +### Node.js -```bash -git switch branch-3.3 -``` +This is tested with Node.js version 21. -## Launch the conversion environment +Use Node.js version 21. You can install Node.js using the instructions at [nodejs.org](https://nodejs.org/en/download). -The conversion process uses Docker Compose. Launch the environment by running the following command from the `starrocks/docs/docusaurus/PDF/` directory. +### Puppeteer -The `--wait-timeout 400` will give the services 400 seconds to get to a healthy state. This is to allow both Docusaurus and Gotenberg to become ready to handle requests. On my machine it takes about 200 seconds for Docusaurus to build the docs and start serving them. +Add `puppeteer` and other dependencies by running this command in the repo directory `starrocks/docs/docusaurus/PDF/`. ```bash -cd starrocks/docs/docusaurus/PDF -docker compose up --detach --wait --wait-timeout 400 --build +yarn install ``` -> Tip -> -> All of the `docker compose` commands must be run from the `starrocks/docs/docusaurus/PDF/` directory. +### pdftk-java -## Check the status - -> Tip -> -> If you do not have `jq` installed just run `docker compose ps`. The ouput using `jq` is easier to read, but you can get by with the more basic command. +`pdftk-java` should be installed using Homebrew on a macOS system ```bash -docker compose ps --format json | jq '{Service: .Service, State: .State, Status: .Status}' +brew install pdftk-java ``` -Expected output: +## Use + +### Configuration + +There is a sample `.env` file, `.env.sample`, that you can copy to `.env`. This file specifies an image, title to place on the cover, and a Copyright notice. Here is the sample: ```bash -{ - "Service": "docusaurus", - "State": "running", - "Status": "Up 14 minutes" -} -{ - "Service": "gotenberg", - "State": "running", - "Status": "Up 2 hours (healthy)" -} +COVER_IMAGE=./StarRocks.png +COVER_TITLE="StarRocks 3.3" +COPYRIGHT="Copyright (c) 2024 The Linux Foundation" ``` -## Get the URL of the "home" page +- Copy `.env.sample` to `.env` +- Edit the file as needed -### Check to see if Docusaurus is serving the pages +> Note: +> +> For the `COVER_IMAGE` Use a PNG or JPEG. -From the `PDF` directory check the logs of the `docusaurus` service: +### Build your Docusaurus site and serve it -```bash -docker compose logs -f docusaurus -``` +It seems to be necessary to run `yarn serve` rather than ~`yarn start`~ to have `docusaurus-prince-pdf` crawl the pages. I expect that there is a CSS class difference between development and production modes of Docusaurus. -When Docusaurus is ready you will see this line at the end of the log output: +If you are using the Docker scripts from [StarRocks](https://github.com/StarRocks/starrocks/tree/main/docs/docusaurus/scripts) then open another shell and: ```bash -docusaurus-1 | [SUCCESS] Serving "build" directory at: http://0.0.0.0:3000/ +cd starrocks/docs/docusaurus +./scripts/docker-image.sh && ./scripts/docker-build.sh ``` -Stop watching the logs with CTRL-c +### Get the URL of the "home" page -### Find the initial URL +Find the URL of the first page to crawl. It needs to be the landing, or home page of the site as the next step will generate a set of PDF files, one for each page of your site by extracting the landing page and looking for the "Next" button at the bottom right corner of each Docusaurus page. If you start from any page other than the first one, then you will only get a portion of the pages. For Chinese language StarRocks documentation served using the `./scripts/docker-build.sh` script this will be: -First open the docs by launching a browser to the URL at the end of the log output, which should be [http://0.0.0.0:3000/](http://0.0.0.0:3000/). - -Next, change to the Chinese documentation if you are generating a PDF document of the Chinese documentation. - -Copy the URL of the starting page of the documentation that you would like to generate a PDF for. +```bash +http://localhost:3000/zh/docs/introduction/StarRocks_intro/ +``` -Save the URL. +### Generate a list of pages (URLs) -## Open a shell in the PDF build environment +This command will crawl the docs and list the URLs in order: -Launch a shell from the `starrocks/docs/docusaurus/PDF` directory: +> Tip +> +> The rest of the commands should be run from this directory: +> +> ```bash +> starrocks/docs/docusaurus/PDF/ +> ``` +> +> Substitute the URL you just copied for the URL below: ```bash -docker compose exec -ti docusaurus bash +npx docusaurus-prince-pdf --list-only \ + --file URLs.txt \ + -u http://localhost:3000/zh/docs/introduction/StarRocks_intro/ ``` -and `cd` into the `PDF` directory: +
+ Expand to see URLs.txt sample +This is the file format, using the StarRocks developer docs as an example: ```bash -cd /app/docusaurus/PDF +http://localhost:3000/zh/docs/developers/build-starrocks/Build_in_docker/ +http://localhost:3000/zh/docs/developers/build-starrocks/build_starrocks_on_ubuntu/ +http://localhost:3000/zh/docs/developers/build-starrocks/handbook/ +http://localhost:3000/zh/docs/developers/code-style-guides/protobuf-guides/ +http://localhost:3000/zh/docs/developers/code-style-guides/restful-api-standard/ +http://localhost:3000/zh/docs/developers/code-style-guides/thrift-guides/ +http://localhost:3000/zh/docs/developers/debuginfo/ +http://localhost:3000/zh/docs/developers/development-environment/IDEA/ +http://localhost:3000/zh/docs/developers/development-environment/ide-setup/ +http://localhost:3000/zh/docs/developers/trace-tools/Trace/% ``` -## Crawl the docs and generate the PDFs +
-Run the command: -> Tip -> -> The URL in the code sample is for the Chinese documentation, remove the `/zh/` if you want English. +### Generate PDF files for each Docusaurus page + +This reads the `URLs.txt` generated above and: +1. Creates a cover page +2. creates PDF files for each URL in the file ```bash -node generatePdf.js http://0.0.0.0:3000/zh/docs/introduction/StarRocks_intro/ +node docusaurus-puppeteer-pdf.js ``` -## Join the individual PDF files +### Combine the individual PDFs -> Note: -> -> Change the name of the PDF output file as needed, in the example this is `StarRocks_33` +The previous step generated a PDF file for each Docusaurus page, combine the individual pages with `pdftk-java`: ```bash -cd ../../PDFoutput/ -pdftk 00*pdf output StarRocks_33.pdf +pdftk 0*pdf output docs.pdf ``` -## Finished file +### Cleanup -The individual PDF files and the combined file will be on your local machine in `starrocks/docs/PDFoutput/` +There are now 900+ temporary PDF files in the directory, remove them with: -## Customizing the docs site for PDF +```bash +./clean +``` -Gotenberg generates the PDF files without the side navigation, header, and footer as these components are not displayed when the `media` is set to `print`. In our docs it does not make sense to have the breadcrumbs, edit URLs, or Feedback widget show. These are filtered out using CSS by adding `display: none` to the classes of these objects when `@media print`. +## Customizing the docs site for PDF -Removing the Feedback form from the PDF can be done with CSS. This snippet is added to the Docusaurus CSS file `src/css/custom.css`: +Some things do not make sense to have in the PDF, like the Feedback form at the bottom of the page. Removing the Feedback form from the PDF can be done with CSS. This snippet is added to the Docusaurus CSS file `docs/docusaurus/src/css/custom.css`: ```css -/* When we generate PDF files we do not need to show the: - - edit URL - - Feedback widget - - breadcrumbs -*/ +/* When we generate PDF files: + + - avoid breaks in the middle of: + - code blocks + - admonitions (notes, tips, etc.) + + - we do not need to show the: + - feedback widget. + - edit this page + - breadcrumbs + + */ @media print { - .feedback_Ak7m { - display: none; - } - - .theme-doc-footer-edit-meta-row { - display: none; - }; + .theme-code-block , .theme-admonition { + break-inside: avoid; + } +} - .breadcrumbs { +@media print { + .theme-edit-this-page , .feedback_Ak7m , .theme-doc-breadcrumbs { display: none; - }; + } } ``` - -## Links - -- [`docusaurus-prince-pdf`](https://github.com/signcl/docusaurus-prince-pdf) -- [`Gotenberg`](https://pptr.dev/) -- [`pdftk`](https://gitlab.com/pdftk-java/pdftk) -- [Ghostscript](https://www.ghostscript.com/) diff --git a/docs/docusaurus/PDF/StarRocks.png b/docs/docusaurus/PDF/StarRocks.png new file mode 100644 index 0000000000000000000000000000000000000000..7600edce2b22d451a461206c5b179d1ca5bfc56c GIT binary patch literal 40486 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 - /bin/bash -c " - cd /app/docusaurus && - npm install -g docusaurus-prince-pdf@1.2.1 && - yarn install && - yarn build && - yarn serve -p 3000 -h 0.0.0.0 && - tail -f /dev/null - " - diff --git a/docs/docusaurus/PDF/docusaurus-puppeteer-pdf.js b/docs/docusaurus/PDF/docusaurus-puppeteer-pdf.js new file mode 100644 index 00000000000000..8cfbc4c6388108 --- /dev/null +++ b/docs/docusaurus/PDF/docusaurus-puppeteer-pdf.js @@ -0,0 +1,131 @@ +'use strict'; +require('dotenv').config() +const fs = require('node:fs'); +const readline = require('node:readline'); +const puppeteer = require('puppeteer'); +const scrollToBottom = require('scroll-to-bottomjs'); +const PDFDocument = require('pdfkit'); + +function coverPage() { + // Create a document + const doc = new PDFDocument({size: 'A4'}); + + doc.pipe(fs.createWriteStream('0000.pdf')); + + doc.image(process.env.COVER_IMAGE, { + fit: [200, 200], + align: 'center', + valign: 'center' + }); + + doc + .fontSize(25) + .fillColor("black") + // position text over 70 and down 150 + .text(process.env.COVER_TITLE, 70, 300) + .fontSize(11) + .text(process.env.COPYRIGHT, 70, 650); + + // Finalize PDF file + doc.end(); + +} + +// cover page is 0.pdf, so start `i` at 1 +var i = 1; + +async function requestPage(url) { + const browser = await puppeteer.launch({ + headless: 'shell', + userDataDir: './tmp', + args: [ + '--disable-features=IsolateOrigins', + '--disable-site-isolation-trials', + '--autoplay-policy=user-gesture-required', + '--disable-background-networking', + '--disable-background-timer-throttling', + '--disable-backgrounding-occluded-windows', + '--disable-breakpad', + '--disable-client-side-phishing-detection', + '--disable-component-update', + '--disable-default-apps', + '--disable-dev-shm-usage', + '--disable-domain-reliability', + '--disable-extensions', + '--disable-features=AudioServiceOutOfProcess', + '--disable-hang-monitor', + '--disable-ipc-flooding-protection', + '--disable-notifications', + '--disable-offer-store-unmasked-wallet-cards', + '--disable-popup-blocking', + '--disable-print-preview', + '--disable-prompt-on-repost', + '--disable-renderer-backgrounding', + '--disable-setuid-sandbox', + '--disable-speech-api', + '--disable-sync', + '--hide-scrollbars', + '--ignore-gpu-blacklist', + '--metrics-recording-only', + '--mute-audio', + '--no-default-browser-check', + '--no-first-run', + '--no-pings', + '--no-sandbox', + '--no-zygote', + '--password-store=basic', + '--use-gl=swiftshader', + '--use-mock-keychain'] + }); + const fileName = (String(i).padStart(4, '0')).concat('.', 'pdf'); + const page = await browser.newPage(); + + await page.goto(url, { waitUntil: 'domcontentloaded', }); + await page.evaluate(scrollToBottom); + + await page.pdf({ + outline: true, + path: fileName, + format: 'A4', + margin: { + top: '0.5in', + bottom: '0.5in', + left: '0.5in', + right: '0.5in', + }, + }); + + // Get the details to write the YAML file + // We need title and filename + const pageTitle = await page.title(); + const cleanedTitle = pageTitle.replaceAll('\[', '').replaceAll('\]', '').replaceAll(':', '').replaceAll(' | StarRocks', '').replaceAll(' | CelerData', '') + const pageDetails = ` - file: ${fileName}\n title: ${cleanedTitle}\n`; + + console.log(`Title is ${cleanedTitle}`); + console.log(`Filename is ` + fileName ); + i++; + + await browser.close(); +} + +async function processLineByLine() { + const fileStream = fs.createReadStream('URLs.txt'); + + const rl = readline.createInterface({ + input: fileStream, + crlfDelay: Infinity + }); + + for await (const line of rl) { + // Each line in input.txt will be successively available here as `line`. + console.log(`URL: ${line}`); + await requestPage(line).then(resp => { + console.log(`done.\n`); + }).catch(err => { + console.log(err); + }); + } +} + +coverPage(); +processLineByLine(); diff --git a/docs/docusaurus/PDF/generatePdf.js b/docs/docusaurus/PDF/generatePdf.js deleted file mode 100644 index ce28f27c8be905..00000000000000 --- a/docs/docusaurus/PDF/generatePdf.js +++ /dev/null @@ -1,101 +0,0 @@ -const fs = require('node:fs'); -const readline = require('node:readline'); -const axios = require('axios'); -const cheerio = require('cheerio'); -const process = require('process'); -const util = require('node:util'); - -function getUrls(url) { - var execSync = require('child_process').execSync; - - // the URL that the user has is to `0.0.0.0` or `localhost`, - // which needs to be modified to the `docusaurus` service - // in the Docker compose environment - let docusaurusUrl = - url.replace("localhost", "docusaurus").replace("0.0.0.0", "docusaurus"); - - var command = `npx docusaurus-prince-pdf --list-only -u ${docusaurusUrl} --include-index --file URLs.txt` - - try { - const {stdout, stderr} = execSync(command); - } catch (error) { - console.log(error); - } -}; - - -async function callGotenberg(docusaurusUrl, fileName) { - - //const path = require("path"); - const FormData = require("form-data"); - - try { - // Convert URL content to PDF using Gotenberg - const form = new FormData(); - form.append('url', `${docusaurusUrl}`) - form.append('waitDelay', `3s`) - form.append('generateDocumentOutline', `true`) - - const response = await axios.post( - "http://gotenberg:3000/forms/chromium/convert/url", - form, - { - headers: form.getHeaders(), - responseType: "arraybuffer", - } - ); - - if (response.status !== 200) { - throw new Error(`Failed to convert file: ${response.statusText}`); - } - - const buffer = await response.data; - - // Save the converted file - fs.writeFileSync(fileName, buffer); - //console.log('wrote URL content from %s to PDF file %s', docusaurusUrl, fileName); - - } catch (err) { - console.error(err.message || err); - } -}; - -async function processLineByLine() { - const fileStream = fs.createReadStream('URLs.txt'); - - const rl = readline.createInterface({ - input: fileStream, - crlfDelay: Infinity - }); - console.log("Generating PDFs"); - for await (const line of rl) { - // Each line in URLs.txt will be successively available here as `line`. - //console.log(`URL: ${line}`); - await requestPage(line).then(resp => { - //console.log(`done.\n`); - }).catch(err => { - console.log(err); - }); - } - console.log(" done"); -} - -async function requestPage(url) { - const fileName = '../../PDFoutput/'.concat(String(i).padStart(4, '0')).concat('.', 'pdf'); - await callGotenberg(url, fileName); - process.stdout.write("."); - i++; -} - - -function main() { - // startingUrl is the URL for the first page of the docs - // Get all of the URLs and write to URLs.txt - console.log("Crawling from %s", startingUrl); - getUrls(startingUrl); - processLineByLine(); -}; - -var i = 0; -const startingUrl = process.argv[2]; -main(); diff --git a/docs/docusaurus/PDF/package.json b/docs/docusaurus/PDF/package.json new file mode 100644 index 00000000000000..ea4eaea94e5a8a --- /dev/null +++ b/docs/docusaurus/PDF/package.json @@ -0,0 +1,16 @@ +{ + "name": "scrape-to-pdf", + "version": "1.0.0", + "description": "scrape Docusaurus docs and generate PDF", + "main": "docusaurus-puppeteer-pdf.js", + "repository": "git@github.com:DanRoscigno/scrape-to-pdf.git", + "author": "DanRoscigno ", + "license": "MIT", + "private": false, + "dependencies": { + "dotenv": "^16.4.5", + "pdfkit": "^0.15.1", + "puppeteer": "^23.7.0", + "scroll-to-bottomjs": "^1.1.0" + } +} diff --git a/docs/docusaurus/PDF/yarn.lock b/docs/docusaurus/PDF/yarn.lock new file mode 100644 index 00000000000000..131b977cd6cc1a --- /dev/null +++ b/docs/docusaurus/PDF/yarn.lock @@ -0,0 +1,1254 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@puppeteer/browsers@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.4.1.tgz#7afd271199cc920ece2ff25109278be0a3e8a225" + integrity sha512-0kdAbmic3J09I6dT8e9vE2JOCSt13wHCW5x/ly8TSt2bDtuIWe2TgLZZDHdcziw9AVCzflMAXCrVyRIhIs44Ng== + dependencies: + debug "^4.3.7" + extract-zip "^2.0.1" + progress "^2.0.3" + proxy-agent "^6.4.0" + semver "^7.6.3" + tar-fs "^3.0.6" + unbzip2-stream "^1.4.3" + yargs "^17.7.2" + +"@swc/helpers@^0.3.13": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.3.17.tgz#7c1b91f43c77e2bba99492162a498d465ef253d5" + integrity sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q== + dependencies: + tslib "^2.4.0" + +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + +"@types/node@*": + version "22.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" + integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ== + dependencies: + undici-types "~6.19.8" + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +b4a@^1.6.4: + version "1.6.7" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" + integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== + +bare-events@^2.0.0, bare-events@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.0.tgz#305b511e262ffd8b9d5616b056464f8e1b3329cc" + integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A== + +bare-fs@^2.1.1: + version "2.3.5" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.5.tgz#05daa8e8206aeb46d13c2fe25a2cd3797b0d284a" + integrity sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw== + dependencies: + bare-events "^2.0.0" + bare-path "^2.0.0" + bare-stream "^2.0.0" + +bare-os@^2.1.0: + version "2.4.4" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.4.4.tgz#01243392eb0a6e947177bb7c8a45123d45c9b1a9" + integrity sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ== + +bare-path@^2.0.0, bare-path@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" + integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== + dependencies: + bare-os "^2.1.0" + +bare-stream@^2.0.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.3.2.tgz#3bc62b429bcf850d2f265719b7a49ee0630a3ae4" + integrity sha512-EFZHSIBkDgSHIwj2l2QZfP4U5OcD4xFAOwhSb/vlr9PIqyGJGvB/nfClJbcnh3EY4jtPE4zsb5ztae96bVF79A== + dependencies: + streamx "^2.20.0" + +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + +base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +basic-ftp@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" + integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== + +brotli@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" + integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== + dependencies: + base64-js "^1.1.2" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer@^5.2.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chromium-bidi@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.8.0.tgz#ffd79dad7db1fcc874f1c55fcf46ded05a884269" + integrity sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug== + dependencies: + mitt "3.0.1" + urlpattern-polyfill "10.0.0" + zod "3.23.8" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +data-uri-to-buffer@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" + integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== + +debug@4, debug@^4.1.1, debug@^4.3.4, debug@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +deep-equal@^2.0.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.13" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + +devtools-protocol@0.0.1367902: + version "0.0.1367902" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz#7333bfc4466c5a54a4c6de48a9dfbcb4b811660c" + integrity sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg== + +dfa@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" + integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== + +dotenv@^16.4.5: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +fast-fifo@^1.2.0, fast-fifo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fontkit@^1.8.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-1.9.0.tgz#95729cc9f24995fb068ea53aea2f1f193e323f2b" + integrity sha512-HkW/8Lrk8jl18kzQHvAw9aTHe1cqsyx5sDnxncx652+CIfhawokEPkeM3BoIC+z/Xv7a0yMr0f3pRRwhGH455g== + dependencies: + "@swc/helpers" "^0.3.13" + brotli "^1.3.2" + clone "^2.1.2" + deep-equal "^2.0.5" + dfa "^1.2.0" + restructure "^2.0.1" + tiny-inflate "^1.0.3" + unicode-properties "^1.3.1" + unicode-trie "^2.0.0" + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-uri@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.3.tgz#0d26697bc13cf91092e519aa63aa60ee5b6f385a" + integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.2" + debug "^4.3.4" + fs-extra "^11.2.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-bigints@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +https-proxy-agent@^7.0.3, https-proxy-agent@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" + integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== + dependencies: + agent-base "^7.0.2" + debug "4" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +internal-slot@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +jpeg-exif@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/jpeg-exif/-/jpeg-exif-1.1.4.tgz#781a65b6cd74f62cb1c493511020f8d3577a1c2b" + integrity sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +linebreak@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +mitt@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + +object-inspect@^1.13.1: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +pac-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz#0fb02496bd9fb8ae7eb11cfd98386daaac442f58" + integrity sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.0.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.5" + pac-resolver "^7.0.1" + socks-proxy-agent "^8.0.4" + +pac-resolver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" + integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== + dependencies: + degenerator "^5.0.0" + netmask "^2.0.2" + +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +pdfkit@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/pdfkit/-/pdfkit-0.15.1.tgz#c2b5d451b0508965737482c2239e5e0f697de848" + integrity sha512-sleaMQXbQ/Dk+38HlxdiMT6Lmw5+HoNc4vkJR1Tb9XGALuB1xrfdWYbDFta70F3jCrVkhA2DiQ52D7jbysGZrw== + dependencies: + crypto-js "^4.2.0" + fontkit "^1.8.1" + jpeg-exif "^1.1.4" + linebreak "^1.0.2" + png-js "^1.0.0" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picocolors@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +png-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" + integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proxy-agent@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.4.0.tgz#b4e2dd51dee2b377748aef8d45604c2d7608652d" + integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + http-proxy-agent "^7.0.1" + https-proxy-agent "^7.0.3" + lru-cache "^7.14.1" + pac-proxy-agent "^7.0.1" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.2" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +puppeteer-core@23.8.0: + version "23.8.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-23.8.0.tgz#745be0a509734c65bd678c08bc9418b0f142cf36" + integrity sha512-c2ymGN2M//We7pC+JhP2dE/g4+qnT89BO+EMSZyJmecN3DN6RNqErA7eH7DrWoNIcU75r2nP4VHa4pswAL6NVg== + dependencies: + "@puppeteer/browsers" "2.4.1" + chromium-bidi "0.8.0" + debug "^4.3.7" + devtools-protocol "0.0.1367902" + typed-query-selector "^2.12.0" + ws "^8.18.0" + +puppeteer@^23.7.0: + version "23.8.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-23.8.0.tgz#24f623223ee7fd74f495a36620f940a2eca9ac88" + integrity sha512-MFWDMWoCcOpwNwQIjA9gPKWrEUbj8bLCzkK56w5lZPMUT6wK4FfpgOEPxKffVmXEMYMZzgcjxzqy15b/Q1ibaw== + dependencies: + "@puppeteer/browsers" "2.4.1" + chromium-bidi "0.8.0" + cosmiconfig "^9.0.0" + devtools-protocol "0.0.1367902" + puppeteer-core "23.8.0" + typed-query-selector "^2.12.0" + +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + +regexp.prototype.flags@^1.5.1: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +restructure@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/restructure/-/restructure-2.0.1.tgz#4199745466cfc9bb9e1647746a4c902b7b0049d1" + integrity sha512-e0dOpjm5DseomnXx2M5lpdZ5zoHqF1+bqdMJUohoYVVQa7cBdnk7fdmeI6byNWP/kiME72EeTiSypTCVnpLiDg== + +scroll-to-bottomjs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/scroll-to-bottomjs/-/scroll-to-bottomjs-1.1.0.tgz#06589ea5c398742cae4bb56664fa132c8f095123" + integrity sha512-+e7MRrUwY7M1V93ebqxIyPwIC8rPkvcmmmdSrOnNnCpbDP2Fpva3B6RadoRQ+ubZoYdYxye3Cculgbzb/CZiGw== + +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +side-channel@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^8.0.2, socks-proxy-agent@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c" + integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw== + dependencies: + agent-base "^7.1.1" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + +streamx@^2.15.0, streamx@^2.20.0: + version "2.20.2" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.20.2.tgz#6a8911959d6f307c19781a1d19ecd94b5f042d78" + integrity sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA== + dependencies: + fast-fifo "^1.3.2" + queue-tick "^1.0.1" + text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +tar-fs@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^2.1.1" + bare-path "^2.1.0" + +tar-stream@^3.1.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +text-decoder@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.1.tgz#e173f5121d97bfa3ff8723429ad5ba92e1ead67e" + integrity sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ== + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== + +tslib@^2.0.1, tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +typed-query-selector@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" + integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== + +unbzip2-stream@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +undici-types@~6.19.8: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +unicode-properties@^1.3.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" + integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== + dependencies: + base64-js "^1.3.0" + unicode-trie "^2.0.0" + +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +urlpattern-polyfill@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" + integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-collection@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.13: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +zod@3.23.8: + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==