├── .github ├── dependabot.yml └── workflows │ ├── codelimit.yml │ ├── main.yml │ └── stale.yml ├── .gitignore ├── README.md ├── serverless ├── .env.dev ├── api │ └── capture.js ├── package.json ├── public │ ├── favicon.ico │ └── index.html ├── src │ ├── config.js │ ├── helpers.js │ └── helpers.test.js ├── vercel.json └── yarn.lock ├── standalone ├── .dockerignore ├── .env.example ├── Dockerfile ├── package.json ├── src │ ├── config.js │ ├── helpers.js │ ├── helpers.test.js │ └── index.js ├── test │ └── loadtest.sh └── yarn.lock └── static ├── logo_256x256.png └── screenshot.png /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/serverless" 5 | schedule: 6 | interval: weekly 7 | time: "04:00" 8 | open-pull-requests-limit: 10 9 | - package-ecosystem: npm 10 | directory: "/standalone" 11 | schedule: 12 | interval: weekly 13 | time: "04:00" 14 | open-pull-requests-limit: 10 15 | -------------------------------------------------------------------------------- /.github/workflows/codelimit.yml: -------------------------------------------------------------------------------- 1 | name: 'codelimit' 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | ci: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: 'Checkout sources' 16 | uses: actions/checkout@v4 17 | 18 | - name: 'Run CodeLimit' 19 | uses: getcodelimit/codelimit-action@v1 20 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: 'main' 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | banches: 9 | - main 10 | 11 | jobs: 12 | serverless: 13 | runs-on: ubuntu-latest 14 | env: 15 | CI: true 16 | defaults: 17 | run: 18 | working-directory: serverless 19 | steps: 20 | - name: 'Checkout sources' 21 | uses: actions/checkout@v4 22 | 23 | - name: 'Setup NodeJS' 24 | uses: actions/setup-node@v3 25 | with: 26 | node-version: '18.x' 27 | 28 | - name: 'Install dependencies' 29 | run: yarn install 30 | 31 | - name: 'Run tests' 32 | run: yarn test 33 | 34 | standalone: 35 | runs-on: ubuntu-latest 36 | env: 37 | CI: true 38 | defaults: 39 | run: 40 | working-directory: standalone 41 | steps: 42 | - name: 'Checkout repository' 43 | uses: actions/checkout@v4 44 | 45 | - name: 'Setup NodeJS' 46 | uses: actions/setup-node@v3 47 | with: 48 | node-version: '18.x' 49 | 50 | - name: 'Install dependencies' 51 | run: yarn install 52 | 53 | - name: 'Run tests' 54 | run: yarn test 55 | 56 | - name: 'Set up QEMU' 57 | if: ${{ github.actor != 'dependabot[bot]' && 58 | github.event_name == 'push' }} 59 | uses: docker/setup-qemu-action@v3 60 | 61 | - name: 'Set up Docker Buildx' 62 | if: ${{ github.actor != 'dependabot[bot]' && 63 | github.event_name == 'push' }} 64 | uses: docker/setup-buildx-action@v3 65 | 66 | - name: 'Login to DockerHub' 67 | if: ${{ github.actor != 'dependabot[bot]' && 68 | github.event_name == 'push' }} 69 | uses: docker/login-action@v3 70 | with: 71 | username: ${{ secrets.DOCKERHUB_USERNAME }} 72 | password: ${{ secrets.DOCKERHUB_TOKEN }} 73 | 74 | - name: 'Build and push Docker image' 75 | if: ${{ github.actor != 'dependabot[bot]' && 76 | github.event_name == 'push' }} 77 | uses: docker/build-push-action@v6 78 | with: 79 | platforms: linux/amd64,linux/arm64 80 | context: ./standalone/ 81 | file: ./standalone/Dockerfile 82 | push: true 83 | tags: robvanderleek/capture-website-api:latest 84 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: 'Close stale issues and PRs' 2 | on: 3 | schedule: 4 | - cron: '30 1 * * *' 5 | 6 | jobs: 7 | stale: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/stale@v9 11 | with: 12 | stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.' 13 | days-before-stale: 30 14 | days-before-close: 7 15 | exempt-issue-labels: 'pinned,security' 16 | stale-issue-label: 'wontfix' 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .env 3 | **/node_modules/ 4 | **/test/*.png 5 | 6 | # Local Netlify folder 7 | serverless/.netlify 8 | .vercel 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Capture website API 2 | 3 |
4 | 5 | [![Logo](static/logo_256x256.png)](https://www.freepik.com/icon/capture_6276243) 6 | 7 |
8 | 9 |
10 | 11 | ![Screenshot](static/screenshot.png) 12 | 13 |
14 | 15 |
16 | 17 | [![Build Status](https://github.com/robvanderleek/capture-website-api/workflows/main/badge.svg)](https://github.com/robvanderleek/capture-website-api/actions) 18 | [![CodeLimit](https://github.com/robvanderleek/capture-website-api/blob/_codelimit_reports/add-codelimit/badge.svg)](https://github.com/robvanderleek/capture-website-api/blob/_codelimit_reports/add-codelimit/codelimit.md) 19 | [![Dependabot](https://badgen.net/badge/Dependabot/enabled/green?icon=dependabot)](https://dependabot.com/) 20 | [![DockerHub image pulls](https://img.shields.io/docker/pulls/robvanderleek/capture-website-api)](https://hub.docker.com/r/robvanderleek/capture-website-api/) 21 | ![Vercel](https://vercelbadge.vercel.app/api/robvanderleek/capture-website-api) 22 | 23 |
24 | 25 | Capture screenshots of websites as a (host it yourself) API. This project is a 26 | wrapper around this library: https://github.com/sindresorhus/capture-website 27 | 28 | # Installation 29 | 30 | ## Docker 31 | 32 | ### Run pre-built container from Docker Hub 33 | 34 | 1. Pull the image: 35 | ``` 36 | docker pull robvanderleek/capture-website-api 37 | ``` 38 | 39 | 2. Start the container: 40 | ``` 41 | docker run -it -p 8080:8080 robvanderleek/capture-website-api 42 | ``` 43 | 44 | 3. Make screenshot test request: 45 | ``` 46 | curl 'localhost:8080/capture?url=https://news.ycombinator.com/' -o screenshot.png 47 | ``` 48 | 49 | ### Build the docker image and run it 50 | 51 | 1. Clone the repo: 52 | ```shell 53 | git clone git@github.com:robvanderleek/capture-website-api.git 54 | ``` 55 | 56 | 2. Go to the `standalone` directory: 57 | ```shell 58 | cd capture-website-api/standalone 59 | ``` 60 | 61 | 3. Build the image: 62 | ```shell 63 | docker build -t cwa . 64 | ``` 65 | 66 | 4. Start the container: 67 | ```shell 68 | docker run -it -p 8080:8080 cwa 69 | ``` 70 | 71 | 5. Do screenshot test request: 72 | ```shell 73 | curl 'localhost:8080/capture?url=https://www.youtube.com' -o screenshot.png 74 | ``` 75 | 76 | ## Yarn 77 | 78 | Run in a terminal: 79 | 80 | 1. Clone the repo: 81 | ```shell 82 | git clone git@github.com:robvanderleek/capture-website-api.git 83 | ``` 84 | 85 | 2. Go to the `standalone` directory: 86 | ```shell 87 | cd capture-website-api/standalone 88 | ``` 89 | 90 | 3. Install dependencies: 91 | ```shell 92 | yarn 93 | ``` 94 | 95 | 4. Start the server: 96 | ```shell 97 | yarn start 98 | ``` 99 | 100 | 5. Do screenshot test request: 101 | ```shell 102 | curl 'localhost:8080/capture?url=https://www.reddit.com' -o screenshot.png 103 | ``` 104 | 105 | ## Vercel 106 | 107 | Deploy and run on Vercel: 108 | 109 | 1. Clone the repo: 110 | ``` 111 | git clone git@github.com:robvanderleek/capture-website-api.git && cd capture-website-api/serverless 112 | ``` 113 | 114 | 2. Deploy to Vercel: 115 | ```shell 116 | vercel deploy 117 | ``` 118 | 119 | 3. Get site URL: 120 | ```shell 121 | vercel ls 122 | ``` 123 | 124 | 7. Make screenshot test request: 125 | ``` 126 | curl "${SITE_URL}/api/capture?url=https://www.linkedin.com" -o screenshot.png 127 | ``` 128 | 129 | # Usage 130 | 131 | Call the `/capture` endpoint and pass the site URL using the query parameters `url`: 132 | ```shell 133 | curl 'https://capture-website-api.vercel.app/api/capture?url=http://gmail.com' -o screenshot.png 134 | ``` 135 | Simple as that. 136 | 137 | # Configuration 138 | 139 | ## Application options 140 | 141 | Application configuration options can be set as environment veriables or in 142 | a `.env` file in the root folder. There's an example `.env` file in the codebase: [`.env.example`](https://github.com/robvanderleek/capture-website-api/blob/main/.env.example) 143 | 144 | Supported options are: 145 | 146 | | Name | Descrition | Default | 147 | |---|---|---| 148 | | TIMEOUT | Timeout in seconds for loading a web page | 20 | 149 | | CONCURRENCY | Number of captures that run in parallel, more memory allows more captures to run in parallel | 2 | 150 | | MAX_QUEUE_LENGTH | Requests that can't be handled directly are queued until the queue is full | 6 | 151 | | SHOW_RESULTS | Enable web endpoint to show latest capture | false | 152 | | SECRET | Secret string to prevent undesired usage on public endpoints | "" | 153 | 154 | ## Capturing options 155 | 156 | Most of the configuration options from the wrapped `capture-website` library are supported using query parameters. 157 | For example, to capture a site with a 650x350 viewport, no default background and animations disabled use: 158 | ``` 159 | curl 'https://capture-website-api.vercel.app/api/capture?url=http://amazon.com&width=650&height=350&scaleFactor=1&defaultBackground=false&disableAnimations=true&wait_before_screenshot_ms=300' -o screenshot.png 160 | ``` 161 | 162 | See https://github.com/sindresorhus/capture-website for a full list of options. 163 | 164 | ### Capture Delay 165 | 166 | You may require to wait for async requests or animations to finish before capturing the screenshot. There are two ways of doing this, both specified in the query parameters: 167 | 168 | 1. `wait_before_screenshot_ms` (in ms, defaults to `300`) will wait before capturing a screenshot. 169 | 2. For standalone: `capture-website` library's [`delay`](https://github.com/sindresorhus/capture-website#delay) (in seconds) 170 | 171 | ## Use plain Puppeteer 172 | 173 | Sometimes the `capture-website` library has problems capturing sites. You can 174 | try to capture these sites with plain Puppeteer by supplying the query 175 | parameter `plainPuppeteer=true` 176 | 177 | ## Environment variables 178 | 179 | This app looks at two environment variables: 180 | 181 | * `SHOW_RESULTS`: if `true` the latest capture result can be viewed in the 182 | browser by browsing the base url 183 | * `SECRET`: when set all capture requests need to contain a query parameter 184 | `secret` whose value matches the value of this environment variable 185 | 186 | # Development 187 | 188 | To run the serverless version locally, execute `vercel dev` in the root folder 189 | of the repository. 190 | 191 | # Contributing 192 | 193 | If you have suggestions for improvements, or want to report a bug, [open an 194 | issue](https://github.com/robvanderleek/capture-website-api/issues)! 195 | 196 | # License 197 | 198 | [ISC](LICENSE) © 2019 Rob van der Leek 199 | (https://twitter.com/robvanderleek) 200 | -------------------------------------------------------------------------------- /serverless/.env.dev: -------------------------------------------------------------------------------- 1 | CHROME_EXECUTABLE_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" 2 | -------------------------------------------------------------------------------- /serverless/api/capture.js: -------------------------------------------------------------------------------- 1 | const {allowedRequest, doCaptureWork} = require('../src/helpers.js'); 2 | 3 | const handler = async function (request, response) { 4 | if (!allowedRequest(request.query)) { 5 | response.status(403).json({message: 'Go away please'}) 6 | } 7 | const result = await doCaptureWork(request.query); 8 | if (result.statusCode === 200) { 9 | response.status(200).setHeader("Content-Type", `image/${result.responseType}`).send(result.buffer) 10 | } else { 11 | response.status(result.statusCode).json({message: result.message}) 12 | } 13 | } 14 | 15 | module.exports = handler 16 | -------------------------------------------------------------------------------- /serverless/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "capture-website-api-serverless", 3 | "version": "1.0.0", 4 | "description": "", 5 | "exports": "./src/index.js", 6 | "scripts": { 7 | "test": "NODE_OPTIONS=--experimental-vm-modules jest" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@sparticuz/chromium": "^122.0.0", 13 | "dotenv": "^16.0.3", 14 | "puppeteer-core": "^22.5.0" 15 | }, 16 | "devDependencies": { 17 | "@jest/globals": "^28.1.3", 18 | "@types/jest": "^28.1.6", 19 | "@types/node": "^22.13.11", 20 | "jest": "^28.1.3" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /serverless/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robvanderleek/capture-website-api/7d1b8e2c0e5cfadc6f5d079debaa386c66824656/serverless/public/favicon.ico -------------------------------------------------------------------------------- /serverless/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Capture Website API 7 | 23 | 24 | 25 |

Capture Website API

26 | 27 | 28 | -------------------------------------------------------------------------------- /serverless/src/config.js: -------------------------------------------------------------------------------- 1 | const getSecret = () => process.env.SECRET; 2 | 3 | module.exports = { 4 | getSecret: getSecret 5 | } -------------------------------------------------------------------------------- /serverless/src/helpers.js: -------------------------------------------------------------------------------- 1 | const {getSecret} = require('./config.js'); 2 | const puppeteer = require('puppeteer-core'); 3 | const chromium = require("@sparticuz/chromium"); 4 | 5 | async function doCaptureWork(queryParameters) { 6 | const options = await getOptions(queryParameters); 7 | const url = options.url; 8 | console.info('Capturing URL: ' + url + ' ...'); 9 | return await tryWithPuppeteer(url, options); 10 | } 11 | 12 | function allowedRequest(queryParameters) { 13 | const secret = getSecret(); 14 | if (!secret) { 15 | return true; 16 | } 17 | if (!queryParameters || !queryParameters.secret) { 18 | return false; 19 | } 20 | return queryParameters.secret === secret; 21 | } 22 | 23 | async function getOptions(queryParameters) { 24 | const result = parseQueryParameters(queryParameters); 25 | result.launchOptions = { 26 | headless: true, 27 | args: [ 28 | ...chromium.args, 29 | '--no-sandbox', 30 | '--disable-setuid-sandbox', 31 | '--hide-scrollbars', 32 | '--mute-audio', 33 | "--disable-gpu", 34 | "--disable-dev-shm-usage", 35 | "--disable-setuid-sandbox", 36 | "--no-first-run", 37 | "--no-zygote", 38 | '--use-fake-ui-for-media-stream' // Pages that ask for webcam/microphone access 39 | ], 40 | executablePath: process.env.CHROME_EXECUTABLE_PATH || await chromium.executablePath(), 41 | }; 42 | fieldValuesToNumber(result, 'width', 'height', 'quality', 'scaleFactor', 'timeout', 'delay', 'offset'); 43 | return result; 44 | } 45 | 46 | function parseQueryParameters(queryParameters) { 47 | return Object.keys(queryParameters).reduce((params, key) => { 48 | const q = queryParameters[key]; 49 | let value; 50 | try { 51 | value = JSON.parse(q); 52 | } catch { 53 | value = q 54 | } 55 | return { 56 | ...params, 57 | [key]: value 58 | } 59 | }, queryParameters || {}); 60 | } 61 | 62 | async function tryWithPuppeteer(url, options) { 63 | try { 64 | const buffer = await takePlainPuppeteerScreenshot(url, options); 65 | console.info(`Successfully captured URL: ${url}`); 66 | return { 67 | statusCode: 200, 68 | responseType: getResponseType(options), 69 | buffer: buffer 70 | } 71 | } catch (e) { 72 | console.log('Capture failed due to: ' + e.message); 73 | return { 74 | statusCode: 500, 75 | message: e.message 76 | } 77 | } 78 | } 79 | 80 | async function takePlainPuppeteerScreenshot(url, options) { 81 | options.encoding = 'binary'; 82 | options.wait_before_screenshot_ms = options.wait_before_screenshot_ms || 300; 83 | let browser; 84 | let page; 85 | let buffer; 86 | try { 87 | browser = await puppeteer.launch(options.launchOptions); 88 | page = await browser.newPage(); 89 | await page.goto(url); 90 | await setViewport(page, options); 91 | await new Promise(r => setTimeout(r, options.wait_before_screenshot_ms)); 92 | const array = await page.screenshot(); 93 | buffer = Buffer.from(array); 94 | } finally { 95 | await browser.close(); 96 | } 97 | return buffer; 98 | } 99 | 100 | async function setViewport(page, options) { 101 | if (options.width && options.height) { 102 | const viewportOptions = { 103 | width: options.width, 104 | height: options.height, 105 | deviceScaleFactor: options.scaleFactor ? options.scaleFactor : 1 106 | }; 107 | await page.setViewport(viewportOptions); 108 | } 109 | } 110 | 111 | function getResponseType(queryParams) { 112 | if (queryParams.type && queryParams.type === 'jpeg') { 113 | return 'jpg'; 114 | } 115 | return 'png'; 116 | } 117 | 118 | function fieldValuesToNumber(obj, ...fields) { 119 | fields.forEach(f => { 120 | if (obj[f]) { 121 | const val = Number(obj[f]); 122 | obj[f] = Number.isNaN(val) ? obj[f] : val; 123 | } 124 | }); 125 | } 126 | 127 | module.exports = { 128 | doCaptureWork: doCaptureWork, 129 | allowedRequest: allowedRequest, 130 | getResponseType: getResponseType, 131 | fieldValuesToNumber: fieldValuesToNumber 132 | } 133 | -------------------------------------------------------------------------------- /serverless/src/helpers.test.js: -------------------------------------------------------------------------------- 1 | const {allowedRequest, fieldValuesToNumber, getResponseType} = require("./helpers"); 2 | const {expect} = require('@jest/globals'); 3 | 4 | test('all requests are allowed by default', () => { 5 | expect(allowedRequest({})).toBeTruthy(); 6 | }); 7 | 8 | test('all requests are rejected if secret is set and request contains no secret value', () => { 9 | process.env.SECRET = 'hello'; 10 | 11 | expect(allowedRequest({})).toBeFalsy(); 12 | expect(allowedRequest({query: {}})).toBeFalsy(); 13 | 14 | delete process.env.SECRET; 15 | }); 16 | 17 | test('all requests are allowed when secrets match', () => { 18 | process.env.SECRET = 'hello'; 19 | 20 | expect(allowedRequest({secret: 'world'})).toBeFalsy(); 21 | expect(allowedRequest({secret: 'hello'})).toBeTruthy(); 22 | 23 | delete process.env.SECRET; 24 | }); 25 | 26 | test('field values to number', () => { 27 | const obj = {aap: '5', noot: '6', mies: 'seven'}; 28 | 29 | fieldValuesToNumber(obj, 'aap'); 30 | 31 | expect(typeof obj.aap).toBe('number'); 32 | expect(typeof obj.noot).toBe('string'); 33 | expect(typeof obj.mies).toBe('string'); 34 | }); 35 | 36 | test('field values to number, multiple fields', () => { 37 | const obj = {aap: '5', noot: '6', mies: 'seven'}; 38 | 39 | fieldValuesToNumber(obj, 'aap', 'noot'); 40 | 41 | expect(typeof obj.aap).toBe('number'); 42 | expect(typeof obj.noot).toBe('number'); 43 | expect(typeof obj.mies).toBe('string'); 44 | }); 45 | 46 | test('field values to number, no number value', () => { 47 | const obj = {aap: '5', noot: '6', mies: 'seven'}; 48 | 49 | fieldValuesToNumber(obj, 'mies'); 50 | 51 | expect(typeof obj.mies).toBe('string'); 52 | expect(obj.mies).toBe('seven'); 53 | }); 54 | 55 | test('get response type', () => { 56 | expect(getResponseType({})).toBe('png'); 57 | expect(getResponseType({type: 'jpeg'})).toBe('jpg'); 58 | expect(getResponseType({type: 'png'})).toBe('png'); 59 | }); -------------------------------------------------------------------------------- /serverless/vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "functions": { 3 | "api/capture.js": { 4 | "maxDuration": 60, 5 | "memory": 1024 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /serverless/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.2.0": 6 | version "2.3.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" 8 | integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.3.5" 11 | "@jridgewell/trace-mapping" "^0.3.24" 12 | 13 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.26.2": 14 | version "7.26.2" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" 16 | integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== 17 | dependencies: 18 | "@babel/helper-validator-identifier" "^7.25.9" 19 | js-tokens "^4.0.0" 20 | picocolors "^1.0.0" 21 | 22 | "@babel/compat-data@^7.26.8": 23 | version "7.26.8" 24 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" 25 | integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== 26 | 27 | "@babel/core@^7.11.6", "@babel/core@^7.12.3": 28 | version "7.26.10" 29 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" 30 | integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== 31 | dependencies: 32 | "@ampproject/remapping" "^2.2.0" 33 | "@babel/code-frame" "^7.26.2" 34 | "@babel/generator" "^7.26.10" 35 | "@babel/helper-compilation-targets" "^7.26.5" 36 | "@babel/helper-module-transforms" "^7.26.0" 37 | "@babel/helpers" "^7.26.10" 38 | "@babel/parser" "^7.26.10" 39 | "@babel/template" "^7.26.9" 40 | "@babel/traverse" "^7.26.10" 41 | "@babel/types" "^7.26.10" 42 | convert-source-map "^2.0.0" 43 | debug "^4.1.0" 44 | gensync "^1.0.0-beta.2" 45 | json5 "^2.2.3" 46 | semver "^6.3.1" 47 | 48 | "@babel/generator@^7.26.10", "@babel/generator@^7.27.0", "@babel/generator@^7.7.2": 49 | version "7.27.0" 50 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" 51 | integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== 52 | dependencies: 53 | "@babel/parser" "^7.27.0" 54 | "@babel/types" "^7.27.0" 55 | "@jridgewell/gen-mapping" "^0.3.5" 56 | "@jridgewell/trace-mapping" "^0.3.25" 57 | jsesc "^3.0.2" 58 | 59 | "@babel/helper-compilation-targets@^7.26.5": 60 | version "7.27.0" 61 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" 62 | integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== 63 | dependencies: 64 | "@babel/compat-data" "^7.26.8" 65 | "@babel/helper-validator-option" "^7.25.9" 66 | browserslist "^4.24.0" 67 | lru-cache "^5.1.1" 68 | semver "^6.3.1" 69 | 70 | "@babel/helper-module-imports@^7.25.9": 71 | version "7.25.9" 72 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" 73 | integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== 74 | dependencies: 75 | "@babel/traverse" "^7.25.9" 76 | "@babel/types" "^7.25.9" 77 | 78 | "@babel/helper-module-transforms@^7.26.0": 79 | version "7.26.0" 80 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" 81 | integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== 82 | dependencies: 83 | "@babel/helper-module-imports" "^7.25.9" 84 | "@babel/helper-validator-identifier" "^7.25.9" 85 | "@babel/traverse" "^7.25.9" 86 | 87 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": 88 | version "7.26.5" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" 90 | integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== 91 | 92 | "@babel/helper-string-parser@^7.25.9": 93 | version "7.25.9" 94 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" 95 | integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== 96 | 97 | "@babel/helper-validator-identifier@^7.25.9": 98 | version "7.25.9" 99 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" 100 | integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== 101 | 102 | "@babel/helper-validator-option@^7.25.9": 103 | version "7.25.9" 104 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" 105 | integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== 106 | 107 | "@babel/helpers@^7.26.10": 108 | version "7.27.0" 109 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" 110 | integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== 111 | dependencies: 112 | "@babel/template" "^7.27.0" 113 | "@babel/types" "^7.27.0" 114 | 115 | "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0": 116 | version "7.27.0" 117 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" 118 | integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== 119 | dependencies: 120 | "@babel/types" "^7.27.0" 121 | 122 | "@babel/plugin-syntax-async-generators@^7.8.4": 123 | version "7.8.4" 124 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 125 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 126 | dependencies: 127 | "@babel/helper-plugin-utils" "^7.8.0" 128 | 129 | "@babel/plugin-syntax-bigint@^7.8.3": 130 | version "7.8.3" 131 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 132 | integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 133 | dependencies: 134 | "@babel/helper-plugin-utils" "^7.8.0" 135 | 136 | "@babel/plugin-syntax-class-properties@^7.12.13": 137 | version "7.12.13" 138 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 139 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 140 | dependencies: 141 | "@babel/helper-plugin-utils" "^7.12.13" 142 | 143 | "@babel/plugin-syntax-class-static-block@^7.14.5": 144 | version "7.14.5" 145 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" 146 | integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== 147 | dependencies: 148 | "@babel/helper-plugin-utils" "^7.14.5" 149 | 150 | "@babel/plugin-syntax-import-attributes@^7.24.7": 151 | version "7.26.0" 152 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" 153 | integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== 154 | dependencies: 155 | "@babel/helper-plugin-utils" "^7.25.9" 156 | 157 | "@babel/plugin-syntax-import-meta@^7.10.4": 158 | version "7.10.4" 159 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 160 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 161 | dependencies: 162 | "@babel/helper-plugin-utils" "^7.10.4" 163 | 164 | "@babel/plugin-syntax-json-strings@^7.8.3": 165 | version "7.8.3" 166 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 167 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 168 | dependencies: 169 | "@babel/helper-plugin-utils" "^7.8.0" 170 | 171 | "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": 172 | version "7.10.4" 173 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 174 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 175 | dependencies: 176 | "@babel/helper-plugin-utils" "^7.10.4" 177 | 178 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 179 | version "7.8.3" 180 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 181 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 182 | dependencies: 183 | "@babel/helper-plugin-utils" "^7.8.0" 184 | 185 | "@babel/plugin-syntax-numeric-separator@^7.10.4": 186 | version "7.10.4" 187 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 188 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 189 | dependencies: 190 | "@babel/helper-plugin-utils" "^7.10.4" 191 | 192 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 193 | version "7.8.3" 194 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 195 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 196 | dependencies: 197 | "@babel/helper-plugin-utils" "^7.8.0" 198 | 199 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 200 | version "7.8.3" 201 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 202 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 203 | dependencies: 204 | "@babel/helper-plugin-utils" "^7.8.0" 205 | 206 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 207 | version "7.8.3" 208 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 209 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 210 | dependencies: 211 | "@babel/helper-plugin-utils" "^7.8.0" 212 | 213 | "@babel/plugin-syntax-private-property-in-object@^7.14.5": 214 | version "7.14.5" 215 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" 216 | integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== 217 | dependencies: 218 | "@babel/helper-plugin-utils" "^7.14.5" 219 | 220 | "@babel/plugin-syntax-top-level-await@^7.14.5": 221 | version "7.14.5" 222 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 223 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 224 | dependencies: 225 | "@babel/helper-plugin-utils" "^7.14.5" 226 | 227 | "@babel/plugin-syntax-typescript@^7.7.2": 228 | version "7.25.9" 229 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" 230 | integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== 231 | dependencies: 232 | "@babel/helper-plugin-utils" "^7.25.9" 233 | 234 | "@babel/template@^7.26.9", "@babel/template@^7.27.0", "@babel/template@^7.3.3": 235 | version "7.27.0" 236 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" 237 | integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== 238 | dependencies: 239 | "@babel/code-frame" "^7.26.2" 240 | "@babel/parser" "^7.27.0" 241 | "@babel/types" "^7.27.0" 242 | 243 | "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.7.2": 244 | version "7.27.0" 245 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" 246 | integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== 247 | dependencies: 248 | "@babel/code-frame" "^7.26.2" 249 | "@babel/generator" "^7.27.0" 250 | "@babel/parser" "^7.27.0" 251 | "@babel/template" "^7.27.0" 252 | "@babel/types" "^7.27.0" 253 | debug "^4.3.1" 254 | globals "^11.1.0" 255 | 256 | "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.3.3": 257 | version "7.27.0" 258 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" 259 | integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== 260 | dependencies: 261 | "@babel/helper-string-parser" "^7.25.9" 262 | "@babel/helper-validator-identifier" "^7.25.9" 263 | 264 | "@bcoe/v8-coverage@^0.2.3": 265 | version "0.2.3" 266 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 267 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 268 | 269 | "@istanbuljs/load-nyc-config@^1.0.0": 270 | version "1.1.0" 271 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 272 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 273 | dependencies: 274 | camelcase "^5.3.1" 275 | find-up "^4.1.0" 276 | get-package-type "^0.1.0" 277 | js-yaml "^3.13.1" 278 | resolve-from "^5.0.0" 279 | 280 | "@istanbuljs/schema@^0.1.2": 281 | version "0.1.3" 282 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 283 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 284 | 285 | "@jest/console@^28.1.3": 286 | version "28.1.3" 287 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" 288 | integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== 289 | dependencies: 290 | "@jest/types" "^28.1.3" 291 | "@types/node" "*" 292 | chalk "^4.0.0" 293 | jest-message-util "^28.1.3" 294 | jest-util "^28.1.3" 295 | slash "^3.0.0" 296 | 297 | "@jest/core@^28.1.3": 298 | version "28.1.3" 299 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" 300 | integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== 301 | dependencies: 302 | "@jest/console" "^28.1.3" 303 | "@jest/reporters" "^28.1.3" 304 | "@jest/test-result" "^28.1.3" 305 | "@jest/transform" "^28.1.3" 306 | "@jest/types" "^28.1.3" 307 | "@types/node" "*" 308 | ansi-escapes "^4.2.1" 309 | chalk "^4.0.0" 310 | ci-info "^3.2.0" 311 | exit "^0.1.2" 312 | graceful-fs "^4.2.9" 313 | jest-changed-files "^28.1.3" 314 | jest-config "^28.1.3" 315 | jest-haste-map "^28.1.3" 316 | jest-message-util "^28.1.3" 317 | jest-regex-util "^28.0.2" 318 | jest-resolve "^28.1.3" 319 | jest-resolve-dependencies "^28.1.3" 320 | jest-runner "^28.1.3" 321 | jest-runtime "^28.1.3" 322 | jest-snapshot "^28.1.3" 323 | jest-util "^28.1.3" 324 | jest-validate "^28.1.3" 325 | jest-watcher "^28.1.3" 326 | micromatch "^4.0.4" 327 | pretty-format "^28.1.3" 328 | rimraf "^3.0.0" 329 | slash "^3.0.0" 330 | strip-ansi "^6.0.0" 331 | 332 | "@jest/environment@^28.1.3": 333 | version "28.1.3" 334 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" 335 | integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== 336 | dependencies: 337 | "@jest/fake-timers" "^28.1.3" 338 | "@jest/types" "^28.1.3" 339 | "@types/node" "*" 340 | jest-mock "^28.1.3" 341 | 342 | "@jest/expect-utils@^28.1.3": 343 | version "28.1.3" 344 | resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" 345 | integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== 346 | dependencies: 347 | jest-get-type "^28.0.2" 348 | 349 | "@jest/expect@^28.1.3": 350 | version "28.1.3" 351 | resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" 352 | integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== 353 | dependencies: 354 | expect "^28.1.3" 355 | jest-snapshot "^28.1.3" 356 | 357 | "@jest/fake-timers@^28.1.3": 358 | version "28.1.3" 359 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" 360 | integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== 361 | dependencies: 362 | "@jest/types" "^28.1.3" 363 | "@sinonjs/fake-timers" "^9.1.2" 364 | "@types/node" "*" 365 | jest-message-util "^28.1.3" 366 | jest-mock "^28.1.3" 367 | jest-util "^28.1.3" 368 | 369 | "@jest/globals@^28.1.3": 370 | version "28.1.3" 371 | resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" 372 | integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== 373 | dependencies: 374 | "@jest/environment" "^28.1.3" 375 | "@jest/expect" "^28.1.3" 376 | "@jest/types" "^28.1.3" 377 | 378 | "@jest/reporters@^28.1.3": 379 | version "28.1.3" 380 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" 381 | integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== 382 | dependencies: 383 | "@bcoe/v8-coverage" "^0.2.3" 384 | "@jest/console" "^28.1.3" 385 | "@jest/test-result" "^28.1.3" 386 | "@jest/transform" "^28.1.3" 387 | "@jest/types" "^28.1.3" 388 | "@jridgewell/trace-mapping" "^0.3.13" 389 | "@types/node" "*" 390 | chalk "^4.0.0" 391 | collect-v8-coverage "^1.0.0" 392 | exit "^0.1.2" 393 | glob "^7.1.3" 394 | graceful-fs "^4.2.9" 395 | istanbul-lib-coverage "^3.0.0" 396 | istanbul-lib-instrument "^5.1.0" 397 | istanbul-lib-report "^3.0.0" 398 | istanbul-lib-source-maps "^4.0.0" 399 | istanbul-reports "^3.1.3" 400 | jest-message-util "^28.1.3" 401 | jest-util "^28.1.3" 402 | jest-worker "^28.1.3" 403 | slash "^3.0.0" 404 | string-length "^4.0.1" 405 | strip-ansi "^6.0.0" 406 | terminal-link "^2.0.0" 407 | v8-to-istanbul "^9.0.1" 408 | 409 | "@jest/schemas@^28.1.3": 410 | version "28.1.3" 411 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" 412 | integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== 413 | dependencies: 414 | "@sinclair/typebox" "^0.24.1" 415 | 416 | "@jest/source-map@^28.1.2": 417 | version "28.1.2" 418 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" 419 | integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== 420 | dependencies: 421 | "@jridgewell/trace-mapping" "^0.3.13" 422 | callsites "^3.0.0" 423 | graceful-fs "^4.2.9" 424 | 425 | "@jest/test-result@^28.1.3": 426 | version "28.1.3" 427 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" 428 | integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== 429 | dependencies: 430 | "@jest/console" "^28.1.3" 431 | "@jest/types" "^28.1.3" 432 | "@types/istanbul-lib-coverage" "^2.0.0" 433 | collect-v8-coverage "^1.0.0" 434 | 435 | "@jest/test-sequencer@^28.1.3": 436 | version "28.1.3" 437 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" 438 | integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== 439 | dependencies: 440 | "@jest/test-result" "^28.1.3" 441 | graceful-fs "^4.2.9" 442 | jest-haste-map "^28.1.3" 443 | slash "^3.0.0" 444 | 445 | "@jest/transform@^28.1.3": 446 | version "28.1.3" 447 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" 448 | integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== 449 | dependencies: 450 | "@babel/core" "^7.11.6" 451 | "@jest/types" "^28.1.3" 452 | "@jridgewell/trace-mapping" "^0.3.13" 453 | babel-plugin-istanbul "^6.1.1" 454 | chalk "^4.0.0" 455 | convert-source-map "^1.4.0" 456 | fast-json-stable-stringify "^2.0.0" 457 | graceful-fs "^4.2.9" 458 | jest-haste-map "^28.1.3" 459 | jest-regex-util "^28.0.2" 460 | jest-util "^28.1.3" 461 | micromatch "^4.0.4" 462 | pirates "^4.0.4" 463 | slash "^3.0.0" 464 | write-file-atomic "^4.0.1" 465 | 466 | "@jest/types@^28.1.3": 467 | version "28.1.3" 468 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" 469 | integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== 470 | dependencies: 471 | "@jest/schemas" "^28.1.3" 472 | "@types/istanbul-lib-coverage" "^2.0.0" 473 | "@types/istanbul-reports" "^3.0.0" 474 | "@types/node" "*" 475 | "@types/yargs" "^17.0.8" 476 | chalk "^4.0.0" 477 | 478 | "@jridgewell/gen-mapping@^0.3.5": 479 | version "0.3.8" 480 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" 481 | integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== 482 | dependencies: 483 | "@jridgewell/set-array" "^1.2.1" 484 | "@jridgewell/sourcemap-codec" "^1.4.10" 485 | "@jridgewell/trace-mapping" "^0.3.24" 486 | 487 | "@jridgewell/resolve-uri@^3.1.0": 488 | version "3.1.2" 489 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 490 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 491 | 492 | "@jridgewell/set-array@^1.2.1": 493 | version "1.2.1" 494 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" 495 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 496 | 497 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": 498 | version "1.5.0" 499 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 500 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 501 | 502 | "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": 503 | version "0.3.25" 504 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 505 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 506 | dependencies: 507 | "@jridgewell/resolve-uri" "^3.1.0" 508 | "@jridgewell/sourcemap-codec" "^1.4.14" 509 | 510 | "@puppeteer/browsers@2.8.0": 511 | version "2.8.0" 512 | resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.8.0.tgz#9d592933cbefc66c37823770844b8cbac52607dd" 513 | integrity sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ== 514 | dependencies: 515 | debug "^4.4.0" 516 | extract-zip "^2.0.1" 517 | progress "^2.0.3" 518 | proxy-agent "^6.5.0" 519 | semver "^7.7.1" 520 | tar-fs "^3.0.8" 521 | yargs "^17.7.2" 522 | 523 | "@sinclair/typebox@^0.24.1": 524 | version "0.24.51" 525 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" 526 | integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== 527 | 528 | "@sinonjs/commons@^1.7.0": 529 | version "1.8.6" 530 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" 531 | integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== 532 | dependencies: 533 | type-detect "4.0.8" 534 | 535 | "@sinonjs/fake-timers@^9.1.2": 536 | version "9.1.2" 537 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" 538 | integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== 539 | dependencies: 540 | "@sinonjs/commons" "^1.7.0" 541 | 542 | "@sparticuz/chromium@^133.0.0": 543 | version "133.0.0" 544 | resolved "https://registry.yarnpkg.com/@sparticuz/chromium/-/chromium-133.0.0.tgz#515bb917d470828c0ffa5644eced95830f9ce83c" 545 | integrity sha512-wioNxMtSxRI+Y6ymc/UFPX9lY7A1SDgBezjFITH6arwe5CONfWosNDGpgflUGYajxxGktb1k3kjJ83jWzbccBw== 546 | dependencies: 547 | follow-redirects "^1.15.9" 548 | tar-fs "^3.0.8" 549 | 550 | "@tootallnate/quickjs-emscripten@^0.23.0": 551 | version "0.23.0" 552 | resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" 553 | integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== 554 | 555 | "@types/babel__core@^7.1.14": 556 | version "7.20.5" 557 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" 558 | integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== 559 | dependencies: 560 | "@babel/parser" "^7.20.7" 561 | "@babel/types" "^7.20.7" 562 | "@types/babel__generator" "*" 563 | "@types/babel__template" "*" 564 | "@types/babel__traverse" "*" 565 | 566 | "@types/babel__generator@*": 567 | version "7.6.8" 568 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" 569 | integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== 570 | dependencies: 571 | "@babel/types" "^7.0.0" 572 | 573 | "@types/babel__template@*": 574 | version "7.4.4" 575 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" 576 | integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== 577 | dependencies: 578 | "@babel/parser" "^7.1.0" 579 | "@babel/types" "^7.0.0" 580 | 581 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 582 | version "7.20.7" 583 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" 584 | integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== 585 | dependencies: 586 | "@babel/types" "^7.20.7" 587 | 588 | "@types/graceful-fs@^4.1.3": 589 | version "4.1.9" 590 | resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" 591 | integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== 592 | dependencies: 593 | "@types/node" "*" 594 | 595 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 596 | version "2.0.6" 597 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" 598 | integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== 599 | 600 | "@types/istanbul-lib-report@*": 601 | version "3.0.3" 602 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" 603 | integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== 604 | dependencies: 605 | "@types/istanbul-lib-coverage" "*" 606 | 607 | "@types/istanbul-reports@^3.0.0": 608 | version "3.0.4" 609 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" 610 | integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== 611 | dependencies: 612 | "@types/istanbul-lib-report" "*" 613 | 614 | "@types/jest@^28.1.6": 615 | version "28.1.8" 616 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.8.tgz#6936409f3c9724ea431efd412ea0238a0f03b09b" 617 | integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== 618 | dependencies: 619 | expect "^28.0.0" 620 | pretty-format "^28.0.0" 621 | 622 | "@types/node@*", "@types/node@^22.13.11": 623 | version "22.13.14" 624 | resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.14.tgz#70d84ec91013dcd2ba2de35532a5a14c2b4cc912" 625 | integrity sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w== 626 | dependencies: 627 | undici-types "~6.20.0" 628 | 629 | "@types/prettier@^2.1.5": 630 | version "2.7.3" 631 | resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" 632 | integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== 633 | 634 | "@types/stack-utils@^2.0.0": 635 | version "2.0.3" 636 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" 637 | integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== 638 | 639 | "@types/yargs-parser@*": 640 | version "21.0.3" 641 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" 642 | integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== 643 | 644 | "@types/yargs@^17.0.8": 645 | version "17.0.33" 646 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" 647 | integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== 648 | dependencies: 649 | "@types/yargs-parser" "*" 650 | 651 | "@types/yauzl@^2.9.1": 652 | version "2.10.3" 653 | resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" 654 | integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== 655 | dependencies: 656 | "@types/node" "*" 657 | 658 | agent-base@^7.1.0, agent-base@^7.1.2: 659 | version "7.1.3" 660 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" 661 | integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== 662 | 663 | ansi-escapes@^4.2.1: 664 | version "4.3.2" 665 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 666 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 667 | dependencies: 668 | type-fest "^0.21.3" 669 | 670 | ansi-regex@^5.0.1: 671 | version "5.0.1" 672 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 673 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 674 | 675 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 676 | version "4.3.0" 677 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 678 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 679 | dependencies: 680 | color-convert "^2.0.1" 681 | 682 | ansi-styles@^5.0.0: 683 | version "5.2.0" 684 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 685 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 686 | 687 | anymatch@^3.0.3: 688 | version "3.1.3" 689 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 690 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 691 | dependencies: 692 | normalize-path "^3.0.0" 693 | picomatch "^2.0.4" 694 | 695 | argparse@^1.0.7: 696 | version "1.0.10" 697 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 698 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 699 | dependencies: 700 | sprintf-js "~1.0.2" 701 | 702 | ast-types@^0.13.4: 703 | version "0.13.4" 704 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" 705 | integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== 706 | dependencies: 707 | tslib "^2.0.1" 708 | 709 | b4a@^1.6.4: 710 | version "1.6.7" 711 | resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" 712 | integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== 713 | 714 | babel-jest@^28.1.3: 715 | version "28.1.3" 716 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" 717 | integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== 718 | dependencies: 719 | "@jest/transform" "^28.1.3" 720 | "@types/babel__core" "^7.1.14" 721 | babel-plugin-istanbul "^6.1.1" 722 | babel-preset-jest "^28.1.3" 723 | chalk "^4.0.0" 724 | graceful-fs "^4.2.9" 725 | slash "^3.0.0" 726 | 727 | babel-plugin-istanbul@^6.1.1: 728 | version "6.1.1" 729 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" 730 | integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== 731 | dependencies: 732 | "@babel/helper-plugin-utils" "^7.0.0" 733 | "@istanbuljs/load-nyc-config" "^1.0.0" 734 | "@istanbuljs/schema" "^0.1.2" 735 | istanbul-lib-instrument "^5.0.4" 736 | test-exclude "^6.0.0" 737 | 738 | babel-plugin-jest-hoist@^28.1.3: 739 | version "28.1.3" 740 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" 741 | integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== 742 | dependencies: 743 | "@babel/template" "^7.3.3" 744 | "@babel/types" "^7.3.3" 745 | "@types/babel__core" "^7.1.14" 746 | "@types/babel__traverse" "^7.0.6" 747 | 748 | babel-preset-current-node-syntax@^1.0.0: 749 | version "1.1.0" 750 | resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" 751 | integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== 752 | dependencies: 753 | "@babel/plugin-syntax-async-generators" "^7.8.4" 754 | "@babel/plugin-syntax-bigint" "^7.8.3" 755 | "@babel/plugin-syntax-class-properties" "^7.12.13" 756 | "@babel/plugin-syntax-class-static-block" "^7.14.5" 757 | "@babel/plugin-syntax-import-attributes" "^7.24.7" 758 | "@babel/plugin-syntax-import-meta" "^7.10.4" 759 | "@babel/plugin-syntax-json-strings" "^7.8.3" 760 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 761 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 762 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 763 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 764 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 765 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 766 | "@babel/plugin-syntax-private-property-in-object" "^7.14.5" 767 | "@babel/plugin-syntax-top-level-await" "^7.14.5" 768 | 769 | babel-preset-jest@^28.1.3: 770 | version "28.1.3" 771 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" 772 | integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== 773 | dependencies: 774 | babel-plugin-jest-hoist "^28.1.3" 775 | babel-preset-current-node-syntax "^1.0.0" 776 | 777 | balanced-match@^1.0.0: 778 | version "1.0.2" 779 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 780 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 781 | 782 | bare-events@^2.2.0, bare-events@^2.5.4: 783 | version "2.5.4" 784 | resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" 785 | integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== 786 | 787 | bare-fs@^4.0.1: 788 | version "4.0.2" 789 | resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.0.2.tgz#a879c7b5d9242663ef80d75d6b99c2c6701664d6" 790 | integrity sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw== 791 | dependencies: 792 | bare-events "^2.5.4" 793 | bare-path "^3.0.0" 794 | bare-stream "^2.6.4" 795 | 796 | bare-os@^3.0.1: 797 | version "3.6.1" 798 | resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.6.1.tgz#9921f6f59edbe81afa9f56910658422c0f4858d4" 799 | integrity sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g== 800 | 801 | bare-path@^3.0.0: 802 | version "3.0.0" 803 | resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" 804 | integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== 805 | dependencies: 806 | bare-os "^3.0.1" 807 | 808 | bare-stream@^2.6.4: 809 | version "2.6.5" 810 | resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.6.5.tgz#bba8e879674c4c27f7e27805df005c15d7a2ca07" 811 | integrity sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA== 812 | dependencies: 813 | streamx "^2.21.0" 814 | 815 | basic-ftp@^5.0.2: 816 | version "5.0.5" 817 | resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" 818 | integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== 819 | 820 | brace-expansion@^1.1.7: 821 | version "1.1.11" 822 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 823 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 824 | dependencies: 825 | balanced-match "^1.0.0" 826 | concat-map "0.0.1" 827 | 828 | braces@^3.0.3: 829 | version "3.0.3" 830 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 831 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 832 | dependencies: 833 | fill-range "^7.1.1" 834 | 835 | browserslist@^4.24.0: 836 | version "4.24.4" 837 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" 838 | integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== 839 | dependencies: 840 | caniuse-lite "^1.0.30001688" 841 | electron-to-chromium "^1.5.73" 842 | node-releases "^2.0.19" 843 | update-browserslist-db "^1.1.1" 844 | 845 | bser@2.1.1: 846 | version "2.1.1" 847 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 848 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 849 | dependencies: 850 | node-int64 "^0.4.0" 851 | 852 | buffer-crc32@~0.2.3: 853 | version "0.2.13" 854 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 855 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== 856 | 857 | buffer-from@^1.0.0: 858 | version "1.1.2" 859 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 860 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 861 | 862 | callsites@^3.0.0: 863 | version "3.1.0" 864 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 865 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 866 | 867 | camelcase@^5.3.1: 868 | version "5.3.1" 869 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 870 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 871 | 872 | camelcase@^6.2.0: 873 | version "6.3.0" 874 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 875 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 876 | 877 | caniuse-lite@^1.0.30001688: 878 | version "1.0.30001707" 879 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz#c5e104d199e6f4355a898fcd995a066c7eb9bf41" 880 | integrity sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw== 881 | 882 | chalk@^4.0.0: 883 | version "4.1.2" 884 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 885 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 886 | dependencies: 887 | ansi-styles "^4.1.0" 888 | supports-color "^7.1.0" 889 | 890 | char-regex@^1.0.2: 891 | version "1.0.2" 892 | resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 893 | integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 894 | 895 | chromium-bidi@2.1.2: 896 | version "2.1.2" 897 | resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-2.1.2.tgz#b0710279f993128d4e0b41c892209ea093217d97" 898 | integrity sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw== 899 | dependencies: 900 | mitt "^3.0.1" 901 | zod "^3.24.1" 902 | 903 | ci-info@^3.2.0: 904 | version "3.9.0" 905 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" 906 | integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== 907 | 908 | cjs-module-lexer@^1.0.0: 909 | version "1.4.3" 910 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" 911 | integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== 912 | 913 | cliui@^8.0.1: 914 | version "8.0.1" 915 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" 916 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 917 | dependencies: 918 | string-width "^4.2.0" 919 | strip-ansi "^6.0.1" 920 | wrap-ansi "^7.0.0" 921 | 922 | co@^4.6.0: 923 | version "4.6.0" 924 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 925 | integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== 926 | 927 | collect-v8-coverage@^1.0.0: 928 | version "1.0.2" 929 | resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" 930 | integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== 931 | 932 | color-convert@^2.0.1: 933 | version "2.0.1" 934 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 935 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 936 | dependencies: 937 | color-name "~1.1.4" 938 | 939 | color-name@~1.1.4: 940 | version "1.1.4" 941 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 942 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 943 | 944 | concat-map@0.0.1: 945 | version "0.0.1" 946 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 947 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 948 | 949 | convert-source-map@^1.4.0: 950 | version "1.9.0" 951 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 952 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 953 | 954 | convert-source-map@^2.0.0: 955 | version "2.0.0" 956 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" 957 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== 958 | 959 | cross-spawn@^7.0.3: 960 | version "7.0.6" 961 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 962 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 963 | dependencies: 964 | path-key "^3.1.0" 965 | shebang-command "^2.0.0" 966 | which "^2.0.1" 967 | 968 | data-uri-to-buffer@^6.0.2: 969 | version "6.0.2" 970 | resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" 971 | integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== 972 | 973 | debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.0: 974 | version "4.4.0" 975 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" 976 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 977 | dependencies: 978 | ms "^2.1.3" 979 | 980 | dedent@^0.7.0: 981 | version "0.7.0" 982 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 983 | integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== 984 | 985 | deepmerge@^4.2.2: 986 | version "4.3.1" 987 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" 988 | integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== 989 | 990 | degenerator@^5.0.0: 991 | version "5.0.1" 992 | resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" 993 | integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== 994 | dependencies: 995 | ast-types "^0.13.4" 996 | escodegen "^2.1.0" 997 | esprima "^4.0.1" 998 | 999 | detect-newline@^3.0.0: 1000 | version "3.1.0" 1001 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 1002 | integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 1003 | 1004 | devtools-protocol@0.0.1413902: 1005 | version "0.0.1413902" 1006 | resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1413902.tgz#a0f00fe9eb25ab337a8f9656a29e0a1a69f42401" 1007 | integrity sha512-yRtvFD8Oyk7C9Os3GmnFZLu53yAfsnyw1s+mLmHHUK0GQEc9zthHWvS1r67Zqzm5t7v56PILHIVZ7kmFMaL2yQ== 1008 | 1009 | diff-sequences@^28.1.1: 1010 | version "28.1.1" 1011 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" 1012 | integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== 1013 | 1014 | dotenv@^16.0.3: 1015 | version "16.4.7" 1016 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" 1017 | integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== 1018 | 1019 | electron-to-chromium@^1.5.73: 1020 | version "1.5.128" 1021 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.128.tgz#8ea537b369c32527b3cc47df7973bffe5d3c2980" 1022 | integrity sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ== 1023 | 1024 | emittery@^0.10.2: 1025 | version "0.10.2" 1026 | resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" 1027 | integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== 1028 | 1029 | emoji-regex@^8.0.0: 1030 | version "8.0.0" 1031 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1032 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1033 | 1034 | end-of-stream@^1.1.0: 1035 | version "1.4.4" 1036 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 1037 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 1038 | dependencies: 1039 | once "^1.4.0" 1040 | 1041 | error-ex@^1.3.1: 1042 | version "1.3.2" 1043 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1044 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1045 | dependencies: 1046 | is-arrayish "^0.2.1" 1047 | 1048 | escalade@^3.1.1, escalade@^3.2.0: 1049 | version "3.2.0" 1050 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" 1051 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== 1052 | 1053 | escape-string-regexp@^2.0.0: 1054 | version "2.0.0" 1055 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1056 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1057 | 1058 | escodegen@^2.1.0: 1059 | version "2.1.0" 1060 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" 1061 | integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== 1062 | dependencies: 1063 | esprima "^4.0.1" 1064 | estraverse "^5.2.0" 1065 | esutils "^2.0.2" 1066 | optionalDependencies: 1067 | source-map "~0.6.1" 1068 | 1069 | esprima@^4.0.0, esprima@^4.0.1: 1070 | version "4.0.1" 1071 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1072 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1073 | 1074 | estraverse@^5.2.0: 1075 | version "5.3.0" 1076 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1077 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1078 | 1079 | esutils@^2.0.2: 1080 | version "2.0.3" 1081 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1082 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1083 | 1084 | execa@^5.0.0: 1085 | version "5.1.1" 1086 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1087 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1088 | dependencies: 1089 | cross-spawn "^7.0.3" 1090 | get-stream "^6.0.0" 1091 | human-signals "^2.1.0" 1092 | is-stream "^2.0.0" 1093 | merge-stream "^2.0.0" 1094 | npm-run-path "^4.0.1" 1095 | onetime "^5.1.2" 1096 | signal-exit "^3.0.3" 1097 | strip-final-newline "^2.0.0" 1098 | 1099 | exit@^0.1.2: 1100 | version "0.1.2" 1101 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1102 | integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 1103 | 1104 | expect@^28.0.0, expect@^28.1.3: 1105 | version "28.1.3" 1106 | resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" 1107 | integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== 1108 | dependencies: 1109 | "@jest/expect-utils" "^28.1.3" 1110 | jest-get-type "^28.0.2" 1111 | jest-matcher-utils "^28.1.3" 1112 | jest-message-util "^28.1.3" 1113 | jest-util "^28.1.3" 1114 | 1115 | extract-zip@^2.0.1: 1116 | version "2.0.1" 1117 | resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" 1118 | integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== 1119 | dependencies: 1120 | debug "^4.1.1" 1121 | get-stream "^5.1.0" 1122 | yauzl "^2.10.0" 1123 | optionalDependencies: 1124 | "@types/yauzl" "^2.9.1" 1125 | 1126 | fast-fifo@^1.2.0, fast-fifo@^1.3.2: 1127 | version "1.3.2" 1128 | resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" 1129 | integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== 1130 | 1131 | fast-json-stable-stringify@^2.0.0: 1132 | version "2.1.0" 1133 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1134 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1135 | 1136 | fb-watchman@^2.0.0: 1137 | version "2.0.2" 1138 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" 1139 | integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== 1140 | dependencies: 1141 | bser "2.1.1" 1142 | 1143 | fd-slicer@~1.1.0: 1144 | version "1.1.0" 1145 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" 1146 | integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== 1147 | dependencies: 1148 | pend "~1.2.0" 1149 | 1150 | fill-range@^7.1.1: 1151 | version "7.1.1" 1152 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 1153 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 1154 | dependencies: 1155 | to-regex-range "^5.0.1" 1156 | 1157 | find-up@^4.0.0, find-up@^4.1.0: 1158 | version "4.1.0" 1159 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1160 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1161 | dependencies: 1162 | locate-path "^5.0.0" 1163 | path-exists "^4.0.0" 1164 | 1165 | follow-redirects@^1.15.9: 1166 | version "1.15.9" 1167 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" 1168 | integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== 1169 | 1170 | fs.realpath@^1.0.0: 1171 | version "1.0.0" 1172 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1173 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1174 | 1175 | fsevents@^2.3.2: 1176 | version "2.3.3" 1177 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 1178 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 1179 | 1180 | function-bind@^1.1.2: 1181 | version "1.1.2" 1182 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 1183 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 1184 | 1185 | gensync@^1.0.0-beta.2: 1186 | version "1.0.0-beta.2" 1187 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1188 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1189 | 1190 | get-caller-file@^2.0.5: 1191 | version "2.0.5" 1192 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1193 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1194 | 1195 | get-package-type@^0.1.0: 1196 | version "0.1.0" 1197 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1198 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1199 | 1200 | get-stream@^5.1.0: 1201 | version "5.2.0" 1202 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 1203 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 1204 | dependencies: 1205 | pump "^3.0.0" 1206 | 1207 | get-stream@^6.0.0: 1208 | version "6.0.1" 1209 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1210 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1211 | 1212 | get-uri@^6.0.1: 1213 | version "6.0.4" 1214 | resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.4.tgz#6daaee9e12f9759e19e55ba313956883ef50e0a7" 1215 | integrity sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ== 1216 | dependencies: 1217 | basic-ftp "^5.0.2" 1218 | data-uri-to-buffer "^6.0.2" 1219 | debug "^4.3.4" 1220 | 1221 | glob@^7.1.3, glob@^7.1.4: 1222 | version "7.2.3" 1223 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1224 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1225 | dependencies: 1226 | fs.realpath "^1.0.0" 1227 | inflight "^1.0.4" 1228 | inherits "2" 1229 | minimatch "^3.1.1" 1230 | once "^1.3.0" 1231 | path-is-absolute "^1.0.0" 1232 | 1233 | globals@^11.1.0: 1234 | version "11.12.0" 1235 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1236 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1237 | 1238 | graceful-fs@^4.2.9: 1239 | version "4.2.11" 1240 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1241 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1242 | 1243 | has-flag@^4.0.0: 1244 | version "4.0.0" 1245 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1246 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1247 | 1248 | hasown@^2.0.2: 1249 | version "2.0.2" 1250 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 1251 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 1252 | dependencies: 1253 | function-bind "^1.1.2" 1254 | 1255 | html-escaper@^2.0.0: 1256 | version "2.0.2" 1257 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1258 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1259 | 1260 | http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: 1261 | version "7.0.2" 1262 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" 1263 | integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== 1264 | dependencies: 1265 | agent-base "^7.1.0" 1266 | debug "^4.3.4" 1267 | 1268 | https-proxy-agent@^7.0.6: 1269 | version "7.0.6" 1270 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" 1271 | integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== 1272 | dependencies: 1273 | agent-base "^7.1.2" 1274 | debug "4" 1275 | 1276 | human-signals@^2.1.0: 1277 | version "2.1.0" 1278 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1279 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1280 | 1281 | import-local@^3.0.2: 1282 | version "3.2.0" 1283 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" 1284 | integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== 1285 | dependencies: 1286 | pkg-dir "^4.2.0" 1287 | resolve-cwd "^3.0.0" 1288 | 1289 | imurmurhash@^0.1.4: 1290 | version "0.1.4" 1291 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1292 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1293 | 1294 | inflight@^1.0.4: 1295 | version "1.0.6" 1296 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1297 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1298 | dependencies: 1299 | once "^1.3.0" 1300 | wrappy "1" 1301 | 1302 | inherits@2: 1303 | version "2.0.4" 1304 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1305 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1306 | 1307 | ip-address@^9.0.5: 1308 | version "9.0.5" 1309 | resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" 1310 | integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== 1311 | dependencies: 1312 | jsbn "1.1.0" 1313 | sprintf-js "^1.1.3" 1314 | 1315 | is-arrayish@^0.2.1: 1316 | version "0.2.1" 1317 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1318 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1319 | 1320 | is-core-module@^2.16.0: 1321 | version "2.16.1" 1322 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" 1323 | integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== 1324 | dependencies: 1325 | hasown "^2.0.2" 1326 | 1327 | is-fullwidth-code-point@^3.0.0: 1328 | version "3.0.0" 1329 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1330 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1331 | 1332 | is-generator-fn@^2.0.0: 1333 | version "2.1.0" 1334 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1335 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1336 | 1337 | is-number@^7.0.0: 1338 | version "7.0.0" 1339 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1340 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1341 | 1342 | is-stream@^2.0.0: 1343 | version "2.0.1" 1344 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1345 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1346 | 1347 | isexe@^2.0.0: 1348 | version "2.0.0" 1349 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1350 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1351 | 1352 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: 1353 | version "3.2.2" 1354 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" 1355 | integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== 1356 | 1357 | istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: 1358 | version "5.2.1" 1359 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" 1360 | integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== 1361 | dependencies: 1362 | "@babel/core" "^7.12.3" 1363 | "@babel/parser" "^7.14.7" 1364 | "@istanbuljs/schema" "^0.1.2" 1365 | istanbul-lib-coverage "^3.2.0" 1366 | semver "^6.3.0" 1367 | 1368 | istanbul-lib-report@^3.0.0: 1369 | version "3.0.1" 1370 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" 1371 | integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== 1372 | dependencies: 1373 | istanbul-lib-coverage "^3.0.0" 1374 | make-dir "^4.0.0" 1375 | supports-color "^7.1.0" 1376 | 1377 | istanbul-lib-source-maps@^4.0.0: 1378 | version "4.0.1" 1379 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" 1380 | integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== 1381 | dependencies: 1382 | debug "^4.1.1" 1383 | istanbul-lib-coverage "^3.0.0" 1384 | source-map "^0.6.1" 1385 | 1386 | istanbul-reports@^3.1.3: 1387 | version "3.1.7" 1388 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" 1389 | integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== 1390 | dependencies: 1391 | html-escaper "^2.0.0" 1392 | istanbul-lib-report "^3.0.0" 1393 | 1394 | jest-changed-files@^28.1.3: 1395 | version "28.1.3" 1396 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" 1397 | integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== 1398 | dependencies: 1399 | execa "^5.0.0" 1400 | p-limit "^3.1.0" 1401 | 1402 | jest-circus@^28.1.3: 1403 | version "28.1.3" 1404 | resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" 1405 | integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== 1406 | dependencies: 1407 | "@jest/environment" "^28.1.3" 1408 | "@jest/expect" "^28.1.3" 1409 | "@jest/test-result" "^28.1.3" 1410 | "@jest/types" "^28.1.3" 1411 | "@types/node" "*" 1412 | chalk "^4.0.0" 1413 | co "^4.6.0" 1414 | dedent "^0.7.0" 1415 | is-generator-fn "^2.0.0" 1416 | jest-each "^28.1.3" 1417 | jest-matcher-utils "^28.1.3" 1418 | jest-message-util "^28.1.3" 1419 | jest-runtime "^28.1.3" 1420 | jest-snapshot "^28.1.3" 1421 | jest-util "^28.1.3" 1422 | p-limit "^3.1.0" 1423 | pretty-format "^28.1.3" 1424 | slash "^3.0.0" 1425 | stack-utils "^2.0.3" 1426 | 1427 | jest-cli@^28.1.3: 1428 | version "28.1.3" 1429 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" 1430 | integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== 1431 | dependencies: 1432 | "@jest/core" "^28.1.3" 1433 | "@jest/test-result" "^28.1.3" 1434 | "@jest/types" "^28.1.3" 1435 | chalk "^4.0.0" 1436 | exit "^0.1.2" 1437 | graceful-fs "^4.2.9" 1438 | import-local "^3.0.2" 1439 | jest-config "^28.1.3" 1440 | jest-util "^28.1.3" 1441 | jest-validate "^28.1.3" 1442 | prompts "^2.0.1" 1443 | yargs "^17.3.1" 1444 | 1445 | jest-config@^28.1.3: 1446 | version "28.1.3" 1447 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" 1448 | integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== 1449 | dependencies: 1450 | "@babel/core" "^7.11.6" 1451 | "@jest/test-sequencer" "^28.1.3" 1452 | "@jest/types" "^28.1.3" 1453 | babel-jest "^28.1.3" 1454 | chalk "^4.0.0" 1455 | ci-info "^3.2.0" 1456 | deepmerge "^4.2.2" 1457 | glob "^7.1.3" 1458 | graceful-fs "^4.2.9" 1459 | jest-circus "^28.1.3" 1460 | jest-environment-node "^28.1.3" 1461 | jest-get-type "^28.0.2" 1462 | jest-regex-util "^28.0.2" 1463 | jest-resolve "^28.1.3" 1464 | jest-runner "^28.1.3" 1465 | jest-util "^28.1.3" 1466 | jest-validate "^28.1.3" 1467 | micromatch "^4.0.4" 1468 | parse-json "^5.2.0" 1469 | pretty-format "^28.1.3" 1470 | slash "^3.0.0" 1471 | strip-json-comments "^3.1.1" 1472 | 1473 | jest-diff@^28.1.3: 1474 | version "28.1.3" 1475 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" 1476 | integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== 1477 | dependencies: 1478 | chalk "^4.0.0" 1479 | diff-sequences "^28.1.1" 1480 | jest-get-type "^28.0.2" 1481 | pretty-format "^28.1.3" 1482 | 1483 | jest-docblock@^28.1.1: 1484 | version "28.1.1" 1485 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" 1486 | integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== 1487 | dependencies: 1488 | detect-newline "^3.0.0" 1489 | 1490 | jest-each@^28.1.3: 1491 | version "28.1.3" 1492 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" 1493 | integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== 1494 | dependencies: 1495 | "@jest/types" "^28.1.3" 1496 | chalk "^4.0.0" 1497 | jest-get-type "^28.0.2" 1498 | jest-util "^28.1.3" 1499 | pretty-format "^28.1.3" 1500 | 1501 | jest-environment-node@^28.1.3: 1502 | version "28.1.3" 1503 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" 1504 | integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== 1505 | dependencies: 1506 | "@jest/environment" "^28.1.3" 1507 | "@jest/fake-timers" "^28.1.3" 1508 | "@jest/types" "^28.1.3" 1509 | "@types/node" "*" 1510 | jest-mock "^28.1.3" 1511 | jest-util "^28.1.3" 1512 | 1513 | jest-get-type@^28.0.2: 1514 | version "28.0.2" 1515 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" 1516 | integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== 1517 | 1518 | jest-haste-map@^28.1.3: 1519 | version "28.1.3" 1520 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" 1521 | integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== 1522 | dependencies: 1523 | "@jest/types" "^28.1.3" 1524 | "@types/graceful-fs" "^4.1.3" 1525 | "@types/node" "*" 1526 | anymatch "^3.0.3" 1527 | fb-watchman "^2.0.0" 1528 | graceful-fs "^4.2.9" 1529 | jest-regex-util "^28.0.2" 1530 | jest-util "^28.1.3" 1531 | jest-worker "^28.1.3" 1532 | micromatch "^4.0.4" 1533 | walker "^1.0.8" 1534 | optionalDependencies: 1535 | fsevents "^2.3.2" 1536 | 1537 | jest-leak-detector@^28.1.3: 1538 | version "28.1.3" 1539 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" 1540 | integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== 1541 | dependencies: 1542 | jest-get-type "^28.0.2" 1543 | pretty-format "^28.1.3" 1544 | 1545 | jest-matcher-utils@^28.1.3: 1546 | version "28.1.3" 1547 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" 1548 | integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== 1549 | dependencies: 1550 | chalk "^4.0.0" 1551 | jest-diff "^28.1.3" 1552 | jest-get-type "^28.0.2" 1553 | pretty-format "^28.1.3" 1554 | 1555 | jest-message-util@^28.1.3: 1556 | version "28.1.3" 1557 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" 1558 | integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== 1559 | dependencies: 1560 | "@babel/code-frame" "^7.12.13" 1561 | "@jest/types" "^28.1.3" 1562 | "@types/stack-utils" "^2.0.0" 1563 | chalk "^4.0.0" 1564 | graceful-fs "^4.2.9" 1565 | micromatch "^4.0.4" 1566 | pretty-format "^28.1.3" 1567 | slash "^3.0.0" 1568 | stack-utils "^2.0.3" 1569 | 1570 | jest-mock@^28.1.3: 1571 | version "28.1.3" 1572 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" 1573 | integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== 1574 | dependencies: 1575 | "@jest/types" "^28.1.3" 1576 | "@types/node" "*" 1577 | 1578 | jest-pnp-resolver@^1.2.2: 1579 | version "1.2.3" 1580 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" 1581 | integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== 1582 | 1583 | jest-regex-util@^28.0.2: 1584 | version "28.0.2" 1585 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" 1586 | integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== 1587 | 1588 | jest-resolve-dependencies@^28.1.3: 1589 | version "28.1.3" 1590 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" 1591 | integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== 1592 | dependencies: 1593 | jest-regex-util "^28.0.2" 1594 | jest-snapshot "^28.1.3" 1595 | 1596 | jest-resolve@^28.1.3: 1597 | version "28.1.3" 1598 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" 1599 | integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== 1600 | dependencies: 1601 | chalk "^4.0.0" 1602 | graceful-fs "^4.2.9" 1603 | jest-haste-map "^28.1.3" 1604 | jest-pnp-resolver "^1.2.2" 1605 | jest-util "^28.1.3" 1606 | jest-validate "^28.1.3" 1607 | resolve "^1.20.0" 1608 | resolve.exports "^1.1.0" 1609 | slash "^3.0.0" 1610 | 1611 | jest-runner@^28.1.3: 1612 | version "28.1.3" 1613 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" 1614 | integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== 1615 | dependencies: 1616 | "@jest/console" "^28.1.3" 1617 | "@jest/environment" "^28.1.3" 1618 | "@jest/test-result" "^28.1.3" 1619 | "@jest/transform" "^28.1.3" 1620 | "@jest/types" "^28.1.3" 1621 | "@types/node" "*" 1622 | chalk "^4.0.0" 1623 | emittery "^0.10.2" 1624 | graceful-fs "^4.2.9" 1625 | jest-docblock "^28.1.1" 1626 | jest-environment-node "^28.1.3" 1627 | jest-haste-map "^28.1.3" 1628 | jest-leak-detector "^28.1.3" 1629 | jest-message-util "^28.1.3" 1630 | jest-resolve "^28.1.3" 1631 | jest-runtime "^28.1.3" 1632 | jest-util "^28.1.3" 1633 | jest-watcher "^28.1.3" 1634 | jest-worker "^28.1.3" 1635 | p-limit "^3.1.0" 1636 | source-map-support "0.5.13" 1637 | 1638 | jest-runtime@^28.1.3: 1639 | version "28.1.3" 1640 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" 1641 | integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== 1642 | dependencies: 1643 | "@jest/environment" "^28.1.3" 1644 | "@jest/fake-timers" "^28.1.3" 1645 | "@jest/globals" "^28.1.3" 1646 | "@jest/source-map" "^28.1.2" 1647 | "@jest/test-result" "^28.1.3" 1648 | "@jest/transform" "^28.1.3" 1649 | "@jest/types" "^28.1.3" 1650 | chalk "^4.0.0" 1651 | cjs-module-lexer "^1.0.0" 1652 | collect-v8-coverage "^1.0.0" 1653 | execa "^5.0.0" 1654 | glob "^7.1.3" 1655 | graceful-fs "^4.2.9" 1656 | jest-haste-map "^28.1.3" 1657 | jest-message-util "^28.1.3" 1658 | jest-mock "^28.1.3" 1659 | jest-regex-util "^28.0.2" 1660 | jest-resolve "^28.1.3" 1661 | jest-snapshot "^28.1.3" 1662 | jest-util "^28.1.3" 1663 | slash "^3.0.0" 1664 | strip-bom "^4.0.0" 1665 | 1666 | jest-snapshot@^28.1.3: 1667 | version "28.1.3" 1668 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" 1669 | integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== 1670 | dependencies: 1671 | "@babel/core" "^7.11.6" 1672 | "@babel/generator" "^7.7.2" 1673 | "@babel/plugin-syntax-typescript" "^7.7.2" 1674 | "@babel/traverse" "^7.7.2" 1675 | "@babel/types" "^7.3.3" 1676 | "@jest/expect-utils" "^28.1.3" 1677 | "@jest/transform" "^28.1.3" 1678 | "@jest/types" "^28.1.3" 1679 | "@types/babel__traverse" "^7.0.6" 1680 | "@types/prettier" "^2.1.5" 1681 | babel-preset-current-node-syntax "^1.0.0" 1682 | chalk "^4.0.0" 1683 | expect "^28.1.3" 1684 | graceful-fs "^4.2.9" 1685 | jest-diff "^28.1.3" 1686 | jest-get-type "^28.0.2" 1687 | jest-haste-map "^28.1.3" 1688 | jest-matcher-utils "^28.1.3" 1689 | jest-message-util "^28.1.3" 1690 | jest-util "^28.1.3" 1691 | natural-compare "^1.4.0" 1692 | pretty-format "^28.1.3" 1693 | semver "^7.3.5" 1694 | 1695 | jest-util@^28.1.3: 1696 | version "28.1.3" 1697 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" 1698 | integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== 1699 | dependencies: 1700 | "@jest/types" "^28.1.3" 1701 | "@types/node" "*" 1702 | chalk "^4.0.0" 1703 | ci-info "^3.2.0" 1704 | graceful-fs "^4.2.9" 1705 | picomatch "^2.2.3" 1706 | 1707 | jest-validate@^28.1.3: 1708 | version "28.1.3" 1709 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" 1710 | integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== 1711 | dependencies: 1712 | "@jest/types" "^28.1.3" 1713 | camelcase "^6.2.0" 1714 | chalk "^4.0.0" 1715 | jest-get-type "^28.0.2" 1716 | leven "^3.1.0" 1717 | pretty-format "^28.1.3" 1718 | 1719 | jest-watcher@^28.1.3: 1720 | version "28.1.3" 1721 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" 1722 | integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== 1723 | dependencies: 1724 | "@jest/test-result" "^28.1.3" 1725 | "@jest/types" "^28.1.3" 1726 | "@types/node" "*" 1727 | ansi-escapes "^4.2.1" 1728 | chalk "^4.0.0" 1729 | emittery "^0.10.2" 1730 | jest-util "^28.1.3" 1731 | string-length "^4.0.1" 1732 | 1733 | jest-worker@^28.1.3: 1734 | version "28.1.3" 1735 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" 1736 | integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== 1737 | dependencies: 1738 | "@types/node" "*" 1739 | merge-stream "^2.0.0" 1740 | supports-color "^8.0.0" 1741 | 1742 | jest@^28.1.3: 1743 | version "28.1.3" 1744 | resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" 1745 | integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== 1746 | dependencies: 1747 | "@jest/core" "^28.1.3" 1748 | "@jest/types" "^28.1.3" 1749 | import-local "^3.0.2" 1750 | jest-cli "^28.1.3" 1751 | 1752 | js-tokens@^4.0.0: 1753 | version "4.0.0" 1754 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1755 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1756 | 1757 | js-yaml@^3.13.1: 1758 | version "3.14.1" 1759 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1760 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1761 | dependencies: 1762 | argparse "^1.0.7" 1763 | esprima "^4.0.0" 1764 | 1765 | jsbn@1.1.0: 1766 | version "1.1.0" 1767 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" 1768 | integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== 1769 | 1770 | jsesc@^3.0.2: 1771 | version "3.1.0" 1772 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" 1773 | integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== 1774 | 1775 | json-parse-even-better-errors@^2.3.0: 1776 | version "2.3.1" 1777 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1778 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1779 | 1780 | json5@^2.2.3: 1781 | version "2.2.3" 1782 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1783 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1784 | 1785 | kleur@^3.0.3: 1786 | version "3.0.3" 1787 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 1788 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 1789 | 1790 | leven@^3.1.0: 1791 | version "3.1.0" 1792 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 1793 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 1794 | 1795 | lines-and-columns@^1.1.6: 1796 | version "1.2.4" 1797 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1798 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1799 | 1800 | locate-path@^5.0.0: 1801 | version "5.0.0" 1802 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1803 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1804 | dependencies: 1805 | p-locate "^4.1.0" 1806 | 1807 | lru-cache@^5.1.1: 1808 | version "5.1.1" 1809 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 1810 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 1811 | dependencies: 1812 | yallist "^3.0.2" 1813 | 1814 | lru-cache@^7.14.1: 1815 | version "7.18.3" 1816 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" 1817 | integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== 1818 | 1819 | make-dir@^4.0.0: 1820 | version "4.0.0" 1821 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" 1822 | integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== 1823 | dependencies: 1824 | semver "^7.5.3" 1825 | 1826 | makeerror@1.0.12: 1827 | version "1.0.12" 1828 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" 1829 | integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== 1830 | dependencies: 1831 | tmpl "1.0.5" 1832 | 1833 | merge-stream@^2.0.0: 1834 | version "2.0.0" 1835 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1836 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1837 | 1838 | micromatch@^4.0.4: 1839 | version "4.0.8" 1840 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 1841 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 1842 | dependencies: 1843 | braces "^3.0.3" 1844 | picomatch "^2.3.1" 1845 | 1846 | mimic-fn@^2.1.0: 1847 | version "2.1.0" 1848 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1849 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1850 | 1851 | minimatch@^3.0.4, minimatch@^3.1.1: 1852 | version "3.1.2" 1853 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1854 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1855 | dependencies: 1856 | brace-expansion "^1.1.7" 1857 | 1858 | mitt@^3.0.1: 1859 | version "3.0.1" 1860 | resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" 1861 | integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== 1862 | 1863 | ms@^2.1.3: 1864 | version "2.1.3" 1865 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1866 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1867 | 1868 | natural-compare@^1.4.0: 1869 | version "1.4.0" 1870 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1871 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1872 | 1873 | netmask@^2.0.2: 1874 | version "2.0.2" 1875 | resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" 1876 | integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== 1877 | 1878 | node-int64@^0.4.0: 1879 | version "0.4.0" 1880 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 1881 | integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== 1882 | 1883 | node-releases@^2.0.19: 1884 | version "2.0.19" 1885 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" 1886 | integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== 1887 | 1888 | normalize-path@^3.0.0: 1889 | version "3.0.0" 1890 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1891 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1892 | 1893 | npm-run-path@^4.0.1: 1894 | version "4.0.1" 1895 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1896 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1897 | dependencies: 1898 | path-key "^3.0.0" 1899 | 1900 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1901 | version "1.4.0" 1902 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1903 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1904 | dependencies: 1905 | wrappy "1" 1906 | 1907 | onetime@^5.1.2: 1908 | version "5.1.2" 1909 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1910 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1911 | dependencies: 1912 | mimic-fn "^2.1.0" 1913 | 1914 | p-limit@^2.2.0: 1915 | version "2.3.0" 1916 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1917 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1918 | dependencies: 1919 | p-try "^2.0.0" 1920 | 1921 | p-limit@^3.1.0: 1922 | version "3.1.0" 1923 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1924 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1925 | dependencies: 1926 | yocto-queue "^0.1.0" 1927 | 1928 | p-locate@^4.1.0: 1929 | version "4.1.0" 1930 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1931 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1932 | dependencies: 1933 | p-limit "^2.2.0" 1934 | 1935 | p-try@^2.0.0: 1936 | version "2.2.0" 1937 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1938 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1939 | 1940 | pac-proxy-agent@^7.1.0: 1941 | version "7.2.0" 1942 | resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz#9cfaf33ff25da36f6147a20844230ec92c06e5df" 1943 | integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== 1944 | dependencies: 1945 | "@tootallnate/quickjs-emscripten" "^0.23.0" 1946 | agent-base "^7.1.2" 1947 | debug "^4.3.4" 1948 | get-uri "^6.0.1" 1949 | http-proxy-agent "^7.0.0" 1950 | https-proxy-agent "^7.0.6" 1951 | pac-resolver "^7.0.1" 1952 | socks-proxy-agent "^8.0.5" 1953 | 1954 | pac-resolver@^7.0.1: 1955 | version "7.0.1" 1956 | resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" 1957 | integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== 1958 | dependencies: 1959 | degenerator "^5.0.0" 1960 | netmask "^2.0.2" 1961 | 1962 | parse-json@^5.2.0: 1963 | version "5.2.0" 1964 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 1965 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1966 | dependencies: 1967 | "@babel/code-frame" "^7.0.0" 1968 | error-ex "^1.3.1" 1969 | json-parse-even-better-errors "^2.3.0" 1970 | lines-and-columns "^1.1.6" 1971 | 1972 | path-exists@^4.0.0: 1973 | version "4.0.0" 1974 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1975 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1976 | 1977 | path-is-absolute@^1.0.0: 1978 | version "1.0.1" 1979 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1980 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1981 | 1982 | path-key@^3.0.0, path-key@^3.1.0: 1983 | version "3.1.1" 1984 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1985 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1986 | 1987 | path-parse@^1.0.7: 1988 | version "1.0.7" 1989 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1990 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1991 | 1992 | pend@~1.2.0: 1993 | version "1.2.0" 1994 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 1995 | integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== 1996 | 1997 | picocolors@^1.0.0, picocolors@^1.1.1: 1998 | version "1.1.1" 1999 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" 2000 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== 2001 | 2002 | picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: 2003 | version "2.3.1" 2004 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2005 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2006 | 2007 | pirates@^4.0.4: 2008 | version "4.0.7" 2009 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" 2010 | integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== 2011 | 2012 | pkg-dir@^4.2.0: 2013 | version "4.2.0" 2014 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2015 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2016 | dependencies: 2017 | find-up "^4.0.0" 2018 | 2019 | pretty-format@^28.0.0, pretty-format@^28.1.3: 2020 | version "28.1.3" 2021 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" 2022 | integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== 2023 | dependencies: 2024 | "@jest/schemas" "^28.1.3" 2025 | ansi-regex "^5.0.1" 2026 | ansi-styles "^5.0.0" 2027 | react-is "^18.0.0" 2028 | 2029 | progress@^2.0.3: 2030 | version "2.0.3" 2031 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 2032 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 2033 | 2034 | prompts@^2.0.1: 2035 | version "2.4.2" 2036 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" 2037 | integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== 2038 | dependencies: 2039 | kleur "^3.0.3" 2040 | sisteransi "^1.0.5" 2041 | 2042 | proxy-agent@^6.5.0: 2043 | version "6.5.0" 2044 | resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.5.0.tgz#9e49acba8e4ee234aacb539f89ed9c23d02f232d" 2045 | integrity sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A== 2046 | dependencies: 2047 | agent-base "^7.1.2" 2048 | debug "^4.3.4" 2049 | http-proxy-agent "^7.0.1" 2050 | https-proxy-agent "^7.0.6" 2051 | lru-cache "^7.14.1" 2052 | pac-proxy-agent "^7.1.0" 2053 | proxy-from-env "^1.1.0" 2054 | socks-proxy-agent "^8.0.5" 2055 | 2056 | proxy-from-env@^1.1.0: 2057 | version "1.1.0" 2058 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 2059 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 2060 | 2061 | pump@^3.0.0: 2062 | version "3.0.2" 2063 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" 2064 | integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== 2065 | dependencies: 2066 | end-of-stream "^1.1.0" 2067 | once "^1.3.1" 2068 | 2069 | puppeteer-core@^24.4.0: 2070 | version "24.4.0" 2071 | resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.4.0.tgz#a301c58344fe939b487704593681ea9f913fe6f8" 2072 | integrity sha512-eFw66gCnWo0X8Hyf9KxxJtms7a61NJVMiSaWfItsFPzFBsjsWdmcNlBdsA1WVwln6neoHhsG+uTVesKmTREn/g== 2073 | dependencies: 2074 | "@puppeteer/browsers" "2.8.0" 2075 | chromium-bidi "2.1.2" 2076 | debug "^4.4.0" 2077 | devtools-protocol "0.0.1413902" 2078 | typed-query-selector "^2.12.0" 2079 | ws "^8.18.1" 2080 | 2081 | react-is@^18.0.0: 2082 | version "18.3.1" 2083 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" 2084 | integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== 2085 | 2086 | require-directory@^2.1.1: 2087 | version "2.1.1" 2088 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2089 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2090 | 2091 | resolve-cwd@^3.0.0: 2092 | version "3.0.0" 2093 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2094 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2095 | dependencies: 2096 | resolve-from "^5.0.0" 2097 | 2098 | resolve-from@^5.0.0: 2099 | version "5.0.0" 2100 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2101 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2102 | 2103 | resolve.exports@^1.1.0: 2104 | version "1.1.1" 2105 | resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" 2106 | integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== 2107 | 2108 | resolve@^1.20.0: 2109 | version "1.22.10" 2110 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" 2111 | integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== 2112 | dependencies: 2113 | is-core-module "^2.16.0" 2114 | path-parse "^1.0.7" 2115 | supports-preserve-symlinks-flag "^1.0.0" 2116 | 2117 | rimraf@^3.0.0: 2118 | version "3.0.2" 2119 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2120 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2121 | dependencies: 2122 | glob "^7.1.3" 2123 | 2124 | semver@^6.3.0, semver@^6.3.1: 2125 | version "6.3.1" 2126 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" 2127 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 2128 | 2129 | semver@^7.3.5, semver@^7.5.3, semver@^7.7.1: 2130 | version "7.7.1" 2131 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" 2132 | integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== 2133 | 2134 | shebang-command@^2.0.0: 2135 | version "2.0.0" 2136 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2137 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2138 | dependencies: 2139 | shebang-regex "^3.0.0" 2140 | 2141 | shebang-regex@^3.0.0: 2142 | version "3.0.0" 2143 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2144 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2145 | 2146 | signal-exit@^3.0.3, signal-exit@^3.0.7: 2147 | version "3.0.7" 2148 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2149 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2150 | 2151 | sisteransi@^1.0.5: 2152 | version "1.0.5" 2153 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 2154 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 2155 | 2156 | slash@^3.0.0: 2157 | version "3.0.0" 2158 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2159 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2160 | 2161 | smart-buffer@^4.2.0: 2162 | version "4.2.0" 2163 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" 2164 | integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== 2165 | 2166 | socks-proxy-agent@^8.0.5: 2167 | version "8.0.5" 2168 | resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" 2169 | integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== 2170 | dependencies: 2171 | agent-base "^7.1.2" 2172 | debug "^4.3.4" 2173 | socks "^2.8.3" 2174 | 2175 | socks@^2.8.3: 2176 | version "2.8.4" 2177 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.4.tgz#07109755cdd4da03269bda4725baa061ab56d5cc" 2178 | integrity sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ== 2179 | dependencies: 2180 | ip-address "^9.0.5" 2181 | smart-buffer "^4.2.0" 2182 | 2183 | source-map-support@0.5.13: 2184 | version "0.5.13" 2185 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 2186 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 2187 | dependencies: 2188 | buffer-from "^1.0.0" 2189 | source-map "^0.6.0" 2190 | 2191 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 2192 | version "0.6.1" 2193 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2194 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2195 | 2196 | sprintf-js@^1.1.3: 2197 | version "1.1.3" 2198 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" 2199 | integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== 2200 | 2201 | sprintf-js@~1.0.2: 2202 | version "1.0.3" 2203 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2204 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2205 | 2206 | stack-utils@^2.0.3: 2207 | version "2.0.6" 2208 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" 2209 | integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== 2210 | dependencies: 2211 | escape-string-regexp "^2.0.0" 2212 | 2213 | streamx@^2.15.0, streamx@^2.21.0: 2214 | version "2.22.0" 2215 | resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" 2216 | integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== 2217 | dependencies: 2218 | fast-fifo "^1.3.2" 2219 | text-decoder "^1.1.0" 2220 | optionalDependencies: 2221 | bare-events "^2.2.0" 2222 | 2223 | string-length@^4.0.1: 2224 | version "4.0.2" 2225 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" 2226 | integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== 2227 | dependencies: 2228 | char-regex "^1.0.2" 2229 | strip-ansi "^6.0.0" 2230 | 2231 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 2232 | version "4.2.3" 2233 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2234 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2235 | dependencies: 2236 | emoji-regex "^8.0.0" 2237 | is-fullwidth-code-point "^3.0.0" 2238 | strip-ansi "^6.0.1" 2239 | 2240 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2241 | version "6.0.1" 2242 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2243 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2244 | dependencies: 2245 | ansi-regex "^5.0.1" 2246 | 2247 | strip-bom@^4.0.0: 2248 | version "4.0.0" 2249 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2250 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2251 | 2252 | strip-final-newline@^2.0.0: 2253 | version "2.0.0" 2254 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2255 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2256 | 2257 | strip-json-comments@^3.1.1: 2258 | version "3.1.1" 2259 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2260 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2261 | 2262 | supports-color@^7.0.0, supports-color@^7.1.0: 2263 | version "7.2.0" 2264 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2265 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2266 | dependencies: 2267 | has-flag "^4.0.0" 2268 | 2269 | supports-color@^8.0.0: 2270 | version "8.1.1" 2271 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2272 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2273 | dependencies: 2274 | has-flag "^4.0.0" 2275 | 2276 | supports-hyperlinks@^2.0.0: 2277 | version "2.3.0" 2278 | resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" 2279 | integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== 2280 | dependencies: 2281 | has-flag "^4.0.0" 2282 | supports-color "^7.0.0" 2283 | 2284 | supports-preserve-symlinks-flag@^1.0.0: 2285 | version "1.0.0" 2286 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2287 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2288 | 2289 | tar-fs@^3.0.8: 2290 | version "3.0.8" 2291 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.8.tgz#8f62012537d5ff89252d01e48690dc4ebed33ab7" 2292 | integrity sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg== 2293 | dependencies: 2294 | pump "^3.0.0" 2295 | tar-stream "^3.1.5" 2296 | optionalDependencies: 2297 | bare-fs "^4.0.1" 2298 | bare-path "^3.0.0" 2299 | 2300 | tar-stream@^3.1.5: 2301 | version "3.1.7" 2302 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" 2303 | integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== 2304 | dependencies: 2305 | b4a "^1.6.4" 2306 | fast-fifo "^1.2.0" 2307 | streamx "^2.15.0" 2308 | 2309 | terminal-link@^2.0.0: 2310 | version "2.1.1" 2311 | resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" 2312 | integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== 2313 | dependencies: 2314 | ansi-escapes "^4.2.1" 2315 | supports-hyperlinks "^2.0.0" 2316 | 2317 | test-exclude@^6.0.0: 2318 | version "6.0.0" 2319 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2320 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2321 | dependencies: 2322 | "@istanbuljs/schema" "^0.1.2" 2323 | glob "^7.1.4" 2324 | minimatch "^3.0.4" 2325 | 2326 | text-decoder@^1.1.0: 2327 | version "1.2.3" 2328 | resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" 2329 | integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== 2330 | dependencies: 2331 | b4a "^1.6.4" 2332 | 2333 | tmpl@1.0.5: 2334 | version "1.0.5" 2335 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" 2336 | integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== 2337 | 2338 | to-regex-range@^5.0.1: 2339 | version "5.0.1" 2340 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2341 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2342 | dependencies: 2343 | is-number "^7.0.0" 2344 | 2345 | tslib@^2.0.1: 2346 | version "2.8.1" 2347 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" 2348 | integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== 2349 | 2350 | type-detect@4.0.8: 2351 | version "4.0.8" 2352 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2353 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2354 | 2355 | type-fest@^0.21.3: 2356 | version "0.21.3" 2357 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 2358 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 2359 | 2360 | typed-query-selector@^2.12.0: 2361 | version "2.12.0" 2362 | resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" 2363 | integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== 2364 | 2365 | undici-types@~6.20.0: 2366 | version "6.20.0" 2367 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" 2368 | integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== 2369 | 2370 | update-browserslist-db@^1.1.1: 2371 | version "1.1.3" 2372 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" 2373 | integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== 2374 | dependencies: 2375 | escalade "^3.2.0" 2376 | picocolors "^1.1.1" 2377 | 2378 | v8-to-istanbul@^9.0.1: 2379 | version "9.3.0" 2380 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" 2381 | integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== 2382 | dependencies: 2383 | "@jridgewell/trace-mapping" "^0.3.12" 2384 | "@types/istanbul-lib-coverage" "^2.0.1" 2385 | convert-source-map "^2.0.0" 2386 | 2387 | walker@^1.0.8: 2388 | version "1.0.8" 2389 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" 2390 | integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== 2391 | dependencies: 2392 | makeerror "1.0.12" 2393 | 2394 | which@^2.0.1: 2395 | version "2.0.2" 2396 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2397 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2398 | dependencies: 2399 | isexe "^2.0.0" 2400 | 2401 | wrap-ansi@^7.0.0: 2402 | version "7.0.0" 2403 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2404 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2405 | dependencies: 2406 | ansi-styles "^4.0.0" 2407 | string-width "^4.1.0" 2408 | strip-ansi "^6.0.0" 2409 | 2410 | wrappy@1: 2411 | version "1.0.2" 2412 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2413 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2414 | 2415 | write-file-atomic@^4.0.1: 2416 | version "4.0.2" 2417 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" 2418 | integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== 2419 | dependencies: 2420 | imurmurhash "^0.1.4" 2421 | signal-exit "^3.0.7" 2422 | 2423 | ws@^8.18.1: 2424 | version "8.18.1" 2425 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" 2426 | integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== 2427 | 2428 | y18n@^5.0.5: 2429 | version "5.0.8" 2430 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2431 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2432 | 2433 | yallist@^3.0.2: 2434 | version "3.1.1" 2435 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2436 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2437 | 2438 | yargs-parser@^21.1.1: 2439 | version "21.1.1" 2440 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 2441 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 2442 | 2443 | yargs@^17.3.1, yargs@^17.7.2: 2444 | version "17.7.2" 2445 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" 2446 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 2447 | dependencies: 2448 | cliui "^8.0.1" 2449 | escalade "^3.1.1" 2450 | get-caller-file "^2.0.5" 2451 | require-directory "^2.1.1" 2452 | string-width "^4.2.3" 2453 | y18n "^5.0.5" 2454 | yargs-parser "^21.1.1" 2455 | 2456 | yauzl@^2.10.0: 2457 | version "2.10.0" 2458 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" 2459 | integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== 2460 | dependencies: 2461 | buffer-crc32 "~0.2.3" 2462 | fd-slicer "~1.1.0" 2463 | 2464 | yocto-queue@^0.1.0: 2465 | version "0.1.0" 2466 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2467 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2468 | 2469 | zod@^3.24.1: 2470 | version "3.24.2" 2471 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" 2472 | integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== 2473 | -------------------------------------------------------------------------------- /standalone/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /standalone/.env.example: -------------------------------------------------------------------------------- 1 | TIMEOUT=20 2 | CONCURRENCY=2 3 | MAX_QUEUE_LENGTH=6 4 | SHOW_RESULTS=true 5 | SECRET= 6 | -------------------------------------------------------------------------------- /standalone/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18-slim 2 | RUN apt-get update && \ 3 | apt-get install -y \ 4 | fonts-ipafont-gothic \ 5 | fonts-wqy-zenhei \ 6 | fonts-thai-tlwg \ 7 | fonts-kacst \ 8 | curl \ 9 | dumb-init \ 10 | chromium 11 | RUN mkdir -p /usr/share/fonts/emoji \ 12 | && curl --location --silent --show-error -o \ 13 | /usr/share/fonts/emoji/emojione-android.ttf \ 14 | https://github.com/emojione/emojione-assets/releases/download/3.1.2/emojione-android.ttf \ 15 | && chmod -R +rx /usr/share/fonts/ \ 16 | && fc-cache -fv 17 | RUN rm /bin/sh && ln -s /bin/bash /bin/sh 18 | RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \ 19 | && mkdir -p /home/pptruser/Downloads \ 20 | && chown -R pptruser:pptruser /home/pptruser 21 | RUN mkdir /app 22 | COPY package.json yarn.lock app/ 23 | WORKDIR /app 24 | RUN yarn 25 | ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true 26 | ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium 27 | COPY src src 28 | RUN chown -R pptruser:pptruser /app 29 | USER pptruser 30 | ENTRYPOINT ["/usr/bin/dumb-init", "--"] 31 | CMD ["yarn", "start"] 32 | -------------------------------------------------------------------------------- /standalone/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "capture-website-rest", 3 | "version": "1.0.0", 4 | "description": "", 5 | "type": "module", 6 | "exports": "./src/index.js", 7 | "scripts": { 8 | "start": "node ./src/index.js", 9 | "dev": "nodemon src/index.js", 10 | "test": "NODE_OPTIONS=--experimental-vm-modules jest" 11 | }, 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "capture-website": "^4.2.0", 16 | "dotenv": "^16.4.7", 17 | "express": "^4.21.2", 18 | "p-queue": "^7.3.0" 19 | }, 20 | "devDependencies": { 21 | "@jest/globals": "^28.1.3", 22 | "@types/jest": "^28.1.6", 23 | "@types/node": "^22.10.6", 24 | "@types/express": "^5.0.1", 25 | "jest": "^28.1.3", 26 | "nodemon": "^3.1.9" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /standalone/src/config.js: -------------------------------------------------------------------------------- 1 | export const getDefaultTimeoutSeconds = () => parseInt(process.env.TIMEOUT) || 20; 2 | export const getConcurrency = () => parseInt(process.env.CONCURRENCY) || 2; 3 | export const getMaxQueueLength = () => parseInt(process.env.MAX_QUEUE_LENGTH) || 6; 4 | export const getShowResults = () => process.env.SHOW_RESULTS || 'false'; 5 | export const getSecret = () => process.env.SECRET; 6 | -------------------------------------------------------------------------------- /standalone/src/helpers.js: -------------------------------------------------------------------------------- 1 | import captureWebsite from 'capture-website'; 2 | import puppeteer from 'puppeteer'; 3 | import PQueue from "p-queue"; 4 | import {getConcurrency, getDefaultTimeoutSeconds, getSecret, getShowResults} from "./config.js"; 5 | import 'dotenv/config'; 6 | 7 | export const queue = new PQueue({concurrency: getConcurrency()}); 8 | 9 | const latest = { 10 | capture: undefined, 11 | url: undefined, 12 | date: undefined 13 | }; 14 | 15 | export function showResults() { 16 | const showResults = getShowResults(); 17 | return showResults && showResults === 'true'; 18 | } 19 | 20 | export async function doCaptureWork(queryParameters) { 21 | latest.date = new Date(); 22 | const options = getOptions(queryParameters); 23 | const url = options.url; 24 | latest.url = url; 25 | console.info('Capturing URL: ' + url + ' ...'); 26 | if (options.plainPuppeteer === 'true') { 27 | return await tryWithPuppeteer(url, options); 28 | } else { 29 | try { 30 | const array = await captureWebsite.buffer(url, options); 31 | const buffer = Buffer.from(array); 32 | console.info(`Successfully captured URL: ${url}`); 33 | latest.capture = buffer; 34 | return { 35 | statusCode: 200, 36 | responseType: getResponseType(options), 37 | buffer: buffer 38 | } 39 | } catch (e) { 40 | console.error(e); 41 | console.info(`Capture website failed for URL: ${url}`); 42 | console.info('Retrying with plain Puppeteer...'); 43 | return await tryWithPuppeteer(url, options); 44 | } 45 | } 46 | } 47 | 48 | export function allowedRequest(queryParameters) { 49 | const secret = getSecret(); 50 | if (!secret) { 51 | return true; 52 | } 53 | if (!queryParameters || !queryParameters.secret) { 54 | return false; 55 | } 56 | return queryParameters.secret === secret; 57 | } 58 | 59 | export function getOptions(queryParameters) { 60 | const result = parseQueryParameters(queryParameters); 61 | result.launchOptions = { 62 | // headless: false, 63 | args: [ 64 | '--no-sandbox', 65 | '--disable-setuid-sandbox', 66 | '--hide-scrollbars', 67 | '--mute-audio', 68 | '--use-fake-ui-for-media-stream' // Pages that ask for webcam/microphone access 69 | ] 70 | }; 71 | if (!result.timeout) { 72 | result.timeout = getDefaultTimeoutSeconds(); 73 | } 74 | fieldValuesToNumber(result, 'width', 'height', 'quality', 'scaleFactor', 'timeout', 'delay', 'offset'); 75 | return result; 76 | } 77 | 78 | function parseQueryParameters(queryParameters) { 79 | return Object.keys(queryParameters).reduce((params, key) => { 80 | const q = queryParameters[key]; 81 | let value; 82 | try { 83 | value = JSON.parse(q); 84 | } catch { 85 | value = q 86 | } 87 | return { 88 | ...params, 89 | [key]: value 90 | } 91 | }, queryParameters || {}); 92 | } 93 | 94 | async function tryWithPuppeteer(url, options) { 95 | try { 96 | const buffer = await takePlainPuppeteerScreenshot(url, options); 97 | console.info(`Successfully captured URL: ${url}`); 98 | latest.capture = buffer; 99 | return { 100 | statusCode: 200, 101 | responseType: getResponseType(options), 102 | buffer: buffer 103 | } 104 | } catch (e) { 105 | console.log('Capture failed due to: ' + e.message); 106 | return { 107 | statusCode: 500, 108 | message: e.message 109 | } 110 | } 111 | } 112 | 113 | async function takePlainPuppeteerScreenshot(url, options) { 114 | options.encoding = 'binary'; 115 | options.wait_before_screenshot_ms = options.wait_before_screenshot_ms || 300; 116 | let browser; 117 | let page; 118 | let buffer; 119 | try { 120 | browser = await puppeteer.launch(options.launchOptions); 121 | page = await browser.newPage(); 122 | await page.goto(url); 123 | await setViewport(page, options); 124 | await new Promise(r => setTimeout(r, options.wait_before_screenshot_ms)); 125 | const array = await page.screenshot(); 126 | buffer = Buffer.from(array); 127 | } finally { 128 | await browser.close(); 129 | } 130 | return buffer; 131 | } 132 | 133 | async function setViewport(page, options) { 134 | if (options.width && options.height) { 135 | const viewportOptions = { 136 | width: options.width, 137 | height: options.height, 138 | deviceScaleFactor: options.scaleFactor ? options.scaleFactor : 1 139 | }; 140 | await page.setViewport(viewportOptions); 141 | } 142 | } 143 | 144 | export function getResponseType(queryParams) { 145 | if (queryParams.type && queryParams.type === 'jpeg') { 146 | return 'jpg'; 147 | } 148 | return 'png'; 149 | } 150 | 151 | export function fieldValuesToNumber(obj, ...fields) { 152 | fields.forEach(f => { 153 | if (obj[f]) { 154 | const val = Number(obj[f]); 155 | obj[f] = Number.isNaN(val) ? obj[f] : val; 156 | } 157 | }); 158 | } 159 | 160 | export function latestCapturePage(req, res) { 161 | let page = ''; 162 | page += '\n'; 163 | page += '\n'; 164 | page += '

Latest capture

'; 165 | if (latest.capture) { 166 | const latestEndpoint = '/latest'; 167 | page += '

Date: ' + latest.date + '

\n'; 168 | page += `Latest capture\n`; 169 | } else { 170 | page += '

No capture found!

\n'; 171 | } 172 | page += '\n'; 173 | page += '\n'; 174 | res.send(page); 175 | } 176 | 177 | export function latestCapture(req, res) { 178 | res.type('png'); 179 | res.send(latest.capture); 180 | } 181 | -------------------------------------------------------------------------------- /standalone/src/helpers.test.js: -------------------------------------------------------------------------------- 1 | import { 2 | allowedRequest, 3 | doCaptureWork, 4 | fieldValuesToNumber, 5 | getOptions, 6 | getResponseType, 7 | latestCapturePage, 8 | showResults 9 | } from "./helpers"; 10 | import {expect, jest} from '@jest/globals' 11 | 12 | 13 | test('show results default off', () => { 14 | expect(showResults()).toBeFalsy(); 15 | }); 16 | 17 | test('show results on with environment variable', () => { 18 | process.env.SHOW_RESULTS = 'true'; 19 | 20 | expect(showResults()).toBeTruthy(); 21 | 22 | process.env.SHOW_RESULTS = undefined; 23 | }); 24 | 25 | test('generate homepage', () => { 26 | const res = {send: jest.fn()}; 27 | 28 | latestCapturePage({}, res); 29 | 30 | expect(res.send).toBeCalledTimes(1); 31 | }); 32 | 33 | test('all requests are allowed by default', () => { 34 | expect(allowedRequest({})).toBeTruthy(); 35 | }); 36 | 37 | test('all requests are rejected if secret is set and request contains no secret value', () => { 38 | process.env.SECRET = 'hello'; 39 | 40 | expect(allowedRequest({})).toBeFalsy(); 41 | expect(allowedRequest({query: {}})).toBeFalsy(); 42 | 43 | delete process.env.SECRET; 44 | }); 45 | 46 | test('all requests are allowed when secrets match', () => { 47 | process.env.SECRET = 'hello'; 48 | 49 | expect(allowedRequest({secret: 'world'})).toBeFalsy(); 50 | expect(allowedRequest({secret: 'hello'})).toBeTruthy(); 51 | 52 | delete process.env.SECRET; 53 | }); 54 | 55 | test('field values to number', () => { 56 | const obj = {aap: '5', noot: '6', mies: 'seven'}; 57 | 58 | fieldValuesToNumber(obj, 'aap'); 59 | 60 | expect(typeof obj.aap).toBe('number'); 61 | expect(typeof obj.noot).toBe('string'); 62 | expect(typeof obj.mies).toBe('string'); 63 | }); 64 | 65 | test('field values to number, multiple fields', () => { 66 | const obj = {aap: '5', noot: '6', mies: 'seven'}; 67 | 68 | fieldValuesToNumber(obj, 'aap', 'noot'); 69 | 70 | expect(typeof obj.aap).toBe('number'); 71 | expect(typeof obj.noot).toBe('number'); 72 | expect(typeof obj.mies).toBe('string'); 73 | }); 74 | 75 | test('field values to number, no number value', () => { 76 | const obj = {aap: '5', noot: '6', mies: 'seven'}; 77 | 78 | fieldValuesToNumber(obj, 'mies'); 79 | 80 | expect(typeof obj.mies).toBe('string'); 81 | expect(obj.mies).toBe('seven'); 82 | }); 83 | 84 | test('get response type', () => { 85 | expect(getResponseType({})).toBe('png'); 86 | expect(getResponseType({type: 'jpeg'})).toBe('jpg'); 87 | expect(getResponseType({type: 'png'})).toBe('png'); 88 | }); 89 | 90 | test('do real capture', async () => { 91 | const queryParameters = {url: 'https://robvanderleek.github.io'}; 92 | let resultType = undefined; 93 | let resultBuffer = undefined; 94 | 95 | function type(t) { 96 | resultType = t; 97 | 98 | function send(buffer) { 99 | resultBuffer = buffer; 100 | } 101 | 102 | return {send: send}; 103 | } 104 | 105 | const res = {type: type}; 106 | 107 | const result = await doCaptureWork(queryParameters); 108 | res.type(result.responseType).send(result.buffer); 109 | 110 | expect(resultType).toBe('png'); 111 | expect(resultBuffer).toBeDefined(); 112 | }, 10000); 113 | 114 | test('get options', () => { 115 | const result = getOptions({ 116 | 'url': 'https://amazon.com', 117 | 'width': '650', 118 | 'height': '350', 119 | }); 120 | expect(result.width).toBe(650); 121 | expect(result.height).toBe(350); 122 | }) -------------------------------------------------------------------------------- /standalone/src/index.js: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import {doCaptureWork, latestCapture, latestCapturePage, queue, showResults, allowedRequest} from "./helpers.js"; 3 | import {getConcurrency, getMaxQueueLength} from "./config.js"; 4 | 5 | const port = process.env.PORT || 8080; 6 | const app = express(); 7 | 8 | async function capture(req, res) { 9 | if (!allowedRequest(req.query)) { 10 | res.status(403).send('Go away please'); 11 | return; 12 | } 13 | if (queue.size >= getMaxQueueLength()) { 14 | res.status(429).send('Maximum queue size reached, try again later'); 15 | return; 16 | } 17 | if (queue.pending >= getConcurrency()) { 18 | console.log('Queueing request...'); 19 | } 20 | await queue.add(async () => { 21 | const result = await doCaptureWork(req.query); 22 | if (result.statusCode === 200) { 23 | res.status(result.statusCode).type(result.responseType).send(result.buffer); 24 | } else { 25 | res.status(result.statusCode).send(result.message); 26 | } 27 | }); 28 | } 29 | 30 | app.get('/capture', capture); 31 | 32 | if (showResults()) { 33 | app.get('/', latestCapturePage); 34 | app.get('/latest', latestCapture); 35 | } 36 | 37 | app.listen(port, () => console.log(`listening at port ${port}...`)); -------------------------------------------------------------------------------- /standalone/test/loadtest.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | curl 'localhost:8080/capture?url=https://www.reddit.com' -o 1.png -s & 3 | sleep 1 4 | curl 'localhost:8080/capture?url=https://www.twitter.com' -o 2.png -s & 5 | sleep 1 6 | curl 'localhost:8080/capture?url=https://www.youtube.com' -o 3.png -s & 7 | sleep 1 8 | curl 'localhost:8080/capture?url=https://www.reddit.com' -o 4.png -s & 9 | sleep 1 10 | curl 'localhost:8080/capture?url=https://www.twitter.com' -o 5.png -s & 11 | sleep 1 12 | curl 'localhost:8080/capture?url=https://www.youtube.com' -o 6.png -s & 13 | sleep 1 14 | curl 'localhost:8080/capture?url=https://www.reddit.com' -o 7.png -s & 15 | sleep 1 16 | curl 'localhost:8080/capture?url=https://www.twitter.com' -o 8.png -s & 17 | sleep 1 18 | curl 'localhost:8080/capture?url=https://www.youtube.com' -o 9.png -s & 19 | sleep 1 20 | curl 'localhost:8080/capture?url=https://www.reddit.com' -o 10.png -s & 21 | sleep 1 22 | curl 'localhost:8080/capture?url=https://www.twitter.com' -o 11.png -s & 23 | sleep 1 24 | curl 'localhost:8080/capture?url=https://www.youtube.com' -o 12.png -s & 25 | sleep 1 26 | curl 'localhost:8080/capture?url=https://www.reddit.com' -o 13.png -s & 27 | sleep 1 28 | curl 'localhost:8080/capture?url=https://www.twitter.com' -o 14.png -s & 29 | sleep 1 30 | curl 'localhost:8080/capture?url=https://www.youtube.com' -o 15.png -s & 31 | -------------------------------------------------------------------------------- /static/logo_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robvanderleek/capture-website-api/7d1b8e2c0e5cfadc6f5d079debaa386c66824656/static/logo_256x256.png -------------------------------------------------------------------------------- /static/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robvanderleek/capture-website-api/7d1b8e2c0e5cfadc6f5d079debaa386c66824656/static/screenshot.png --------------------------------------------------------------------------------