├── .nvmrc ├── .npmrc ├── types ├── logger.d.ts ├── sites │ ├── Amazon.d.ts │ ├── Crutchfield.d.ts │ └── HomeDepot.d.ts ├── site-manager.d.ts ├── PriceFinder.d.ts ├── Site.d.ts └── site-utils.d.ts ├── tsconfig-build.json ├── jest.config.ts ├── src ├── logger.ts ├── sites │ ├── Crutchfield.ts │ ├── Amazon.ts │ └── HomeDepot.ts ├── Site.ts ├── site-manager.ts ├── site-utils.ts └── PriceFinder.ts ├── .gitignore ├── .npmignore ├── .editorconfig ├── tsconfig.json ├── test ├── e2e │ ├── HomeDepot.e2e.test.ts │ ├── Crutchfield.e2e.test.ts │ ├── testHelper.ts │ └── Amazon.e2e.test.ts └── unit │ ├── site-manager.test.ts │ ├── sites │ ├── Amazon.test.ts │ ├── Crutchfield.test.ts │ └── HomeDepot.test.ts │ ├── PriceFinder.test.ts │ └── site-utils.test.ts ├── rome.json ├── .github └── workflows │ └── ci.js.yml ├── LICENSE ├── package.json ├── README.md ├── CHANGELOG.md └── yarn.lock /.nvmrc: -------------------------------------------------------------------------------- 1 | v18 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | -------------------------------------------------------------------------------- /types/logger.d.ts: -------------------------------------------------------------------------------- 1 | declare const logger: import("pino").Logger<{ 2 | level: string; 3 | }>; 4 | export default logger; 5 | -------------------------------------------------------------------------------- /tsconfig-build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": [ 4 | "**/*.test.ts", 5 | "**/e2e/testHelper.ts" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'jest'; 2 | 3 | const config: Config = { 4 | verbose: true, 5 | preset: 'ts-jest', 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /src/logger.ts: -------------------------------------------------------------------------------- 1 | import pino from 'pino'; 2 | 3 | // https://github.com/pinojs/pino/blob/master/docs/api.md#pinooptions-destination--logger 4 | const logger = pino({ 5 | level: 'info', 6 | }); 7 | 8 | export default logger; 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | 4 | # testing 5 | /coverage 6 | 7 | # production 8 | /build 9 | 10 | # misc 11 | .DS_Store 12 | 13 | # debug 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # testing 2 | /test 3 | /coverage 4 | jest.config.ts 5 | 6 | # config 7 | .editorconfig 8 | .github/ 9 | .nvmrc 10 | rome.json 11 | tsconfig-build.json 12 | tsconfig.json 13 | 14 | # debug 15 | npm-debug.log* 16 | yarn-debug.log* 17 | yarn-error.log* 18 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node18/tsconfig.json", 3 | "compilerOptions": { 4 | "declaration": true, 5 | "declarationDir": "types", 6 | "outDir": "build", 7 | "strict": true, 8 | }, 9 | "include": [ 10 | "src", 11 | "test" 12 | ], 13 | "exclude": [ 14 | "node_modules" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /types/sites/Amazon.d.ts: -------------------------------------------------------------------------------- 1 | import Site from '../Site'; 2 | import { CheerioAPI } from 'cheerio'; 3 | export default class Amazon implements Site { 4 | protected uri: string; 5 | constructor(uri: string); 6 | getURIForPageData(): string; 7 | findPriceOnPage($: CheerioAPI): number; 8 | static isSite(uri: string): boolean; 9 | } 10 | -------------------------------------------------------------------------------- /types/sites/Crutchfield.d.ts: -------------------------------------------------------------------------------- 1 | import Site from '../Site'; 2 | import { CheerioAPI } from 'cheerio'; 3 | export default class Crutchfield implements Site { 4 | protected uri: string; 5 | constructor(uri: string); 6 | getURIForPageData(): string; 7 | findPriceOnPage($: CheerioAPI): number; 8 | static isSite(uri: string): boolean; 9 | } 10 | -------------------------------------------------------------------------------- /types/sites/HomeDepot.d.ts: -------------------------------------------------------------------------------- 1 | import Site from '../Site'; 2 | import { CheerioAPI } from 'cheerio'; 3 | export default class HomeDepot implements Site { 4 | protected uri: string; 5 | constructor(uri: string); 6 | getURIForPageData(): string; 7 | findPriceOnPage($: CheerioAPI): number; 8 | static isSite(uri: string): boolean; 9 | } 10 | -------------------------------------------------------------------------------- /test/e2e/HomeDepot.e2e.test.ts: -------------------------------------------------------------------------------- 1 | import { priceFinder, verifyPrice } from './testHelper'; 2 | 3 | describe('price-finder for HomeDepot URIs', () => { 4 | // Ladder 5 | const uri = 'https://www.homedepot.com/p/product/100662617'; 6 | 7 | it('should respond with a price', async () => { 8 | const price = await priceFinder.findItemPrice(uri); 9 | verifyPrice(price); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /rome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.rome.tools/schemas/12.1.3/schema.json", 3 | "organizeImports": { 4 | "enabled": true 5 | }, 6 | "linter": { 7 | "enabled": true, 8 | "rules": { 9 | "recommended": true 10 | } 11 | }, 12 | "formatter": { 13 | "indentStyle": "space" 14 | }, 15 | "javascript": { 16 | "formatter": { 17 | "quoteStyle": "single" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/e2e/Crutchfield.e2e.test.ts: -------------------------------------------------------------------------------- 1 | import { priceFinder, verifyPrice } from './testHelper'; 2 | 3 | describe('price-finder for Crutchfield URIs', () => { 4 | // Headphones 5 | const uri = 6 | 'https://www.crutchfield.com/p_158WF1KX5B/Sony-WF-1000XM5-Black.html?tp=60828'; 7 | 8 | it('should respond with a price', async () => { 9 | const price = await priceFinder.findItemPrice(uri); 10 | verifyPrice(price); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /types/site-manager.d.ts: -------------------------------------------------------------------------------- 1 | import Site from './Site'; 2 | declare class SiteManager { 3 | sites: typeof Site[]; 4 | constructor(); 5 | /** 6 | * Loads a Site that can handle the given URI. If no matches are found, 7 | * an Error is thrown. 8 | * 9 | * @param {string} uri The URI for a website 10 | * @return {Site} The Site which can handle the URI 11 | */ 12 | loadSite(uri: string): Site; 13 | } 14 | declare const _default: SiteManager; 15 | export default _default; 16 | -------------------------------------------------------------------------------- /test/e2e/testHelper.ts: -------------------------------------------------------------------------------- 1 | import PriceFinder from '../../src/PriceFinder'; 2 | 3 | // set the price-finder retry sleep time to 5 seconds 4 | // (in an attempt to avoid spamming these sites should we need to retry) 5 | const RETRY_SLEEP_TIME = 5000; 6 | 7 | // create a single instance of price-finder that will be used by e2e tests 8 | export const priceFinder = new PriceFinder({ 9 | retrySleepTime: RETRY_SLEEP_TIME, 10 | }); 11 | 12 | export function verifyPrice(price: number | undefined) { 13 | expect(price).toBeDefined(); 14 | 15 | // we can't guarantee the price, so just make sure it's a positive number 16 | expect(price).toBeGreaterThanOrEqual(0); 17 | } 18 | -------------------------------------------------------------------------------- /types/PriceFinder.d.ts: -------------------------------------------------------------------------------- 1 | interface Config { 2 | retrySleepTime: number; 3 | retryStatusCodes: number[]; 4 | } 5 | interface Options { 6 | retrySleepTime?: number; 7 | retryStatusCodes?: number[]; 8 | } 9 | export default class PriceFinder { 10 | config: Config; 11 | constructor(options?: Options | undefined); 12 | /** 13 | * Scrapes a website specified by the uri and finds the item price. 14 | * 15 | * @param {string} uri The uri of the website to scan 16 | * @return {number | undefined} the item price if found 17 | * @throws Error if the scrape fails 18 | */ 19 | findItemPrice(uri: string): Promise; 20 | private pageScrape; 21 | } 22 | export {}; 23 | -------------------------------------------------------------------------------- /test/e2e/Amazon.e2e.test.ts: -------------------------------------------------------------------------------- 1 | import { priceFinder, verifyPrice } from './testHelper'; 2 | 3 | /* 4 | * I've seen some CAPTCHA's from Amazon if you hit them too much too often, 5 | * so be fairly easy here. We need to try to hit the balance of testing that 6 | * the code works for Amazon, while not testing *too* much that CAPTCHA's 7 | * are thrown and the tests fail (and our IP is blacklisted). 8 | */ 9 | describe('price-finder for Amazon URIs', () => { 10 | describe('testing a Music (physical disc) item', () => { 11 | // Led Zeppelin II vinyl 12 | const uri = 'https://www.amazon.com/Led-Zeppelin-II/dp/B00IXHBUG0'; 13 | 14 | it('should respond with a price', async () => { 15 | const price = await priceFinder.findItemPrice(uri); 16 | verifyPrice(price); 17 | }); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /.github/workflows/ci.js.yml: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs 2 | on: 3 | push: 4 | branches: [master] 5 | pull_request: 6 | branches: [master] 7 | 8 | jobs: 9 | build: 10 | name: CI 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [16.x, 18.x] 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Use Node.js ${{ matrix.node-version }} 20 | uses: actions/setup-node@v3 21 | with: 22 | node-version: ${{ matrix.node-version }} 23 | cache: 'yarn' 24 | - name: Install dependencies 25 | run: yarn --frozen-lockfile 26 | - name: Run lint 27 | run: yarn lint 28 | - name: Run tests 29 | run: yarn test 30 | - name: Run build 31 | run: yarn build 32 | -------------------------------------------------------------------------------- /types/Site.d.ts: -------------------------------------------------------------------------------- 1 | import { CheerioAPI } from 'cheerio'; 2 | export default abstract class Site { 3 | /** 4 | * Returns the URI used to find the page data 5 | * (most likely the same URI used in constructing this Site) 6 | * 7 | * @return {string} The URI used to find the page data 8 | */ 9 | abstract getURIForPageData(): string; 10 | /** 11 | * Returns the price found on the page 12 | * 13 | * @param {CheerioAPI} $ jQuery object used to search the page 14 | * @return {number} The price found on the page 15 | */ 16 | abstract findPriceOnPage($: CheerioAPI): number; 17 | /** 18 | * Returns true if this site supports the incoming URI 19 | * 20 | * @param {string} uri The URI to test 21 | * @return {boolean} true if this Site supports the URI, false otherwise 22 | */ 23 | static isSite(uri: string): boolean; 24 | } 25 | -------------------------------------------------------------------------------- /test/unit/site-manager.test.ts: -------------------------------------------------------------------------------- 1 | import Site from '../../src/Site'; 2 | import siteManager from '../../src/site-manager'; 3 | 4 | const KNOWN_SITE = 'www.amazon.com/123/product'; 5 | const BAD_SITE = 'www.bad_uri.bad'; 6 | 7 | describe('The Site Manager', () => { 8 | it('should throw an exception for an unknown uri', () => { 9 | expect(() => { 10 | siteManager.loadSite(BAD_SITE); 11 | }).toThrow(/site not found for uri/); 12 | }); 13 | 14 | it('should return the site for a known URI', () => { 15 | const site = siteManager.loadSite(KNOWN_SITE); 16 | expect(site).toBeTruthy(); 17 | }); 18 | 19 | describe('loading a specific site', () => { 20 | let site: Site; 21 | 22 | beforeEach(() => { 23 | site = siteManager.loadSite(KNOWN_SITE); 24 | }); 25 | 26 | it('should exist', () => { 27 | expect(site).toBeTruthy(); 28 | }); 29 | 30 | it('should have site operations available', () => { 31 | expect(typeof site.findPriceOnPage).toEqual('function'); 32 | }); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022 Dylan Smith 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /types/site-utils.d.ts: -------------------------------------------------------------------------------- 1 | export declare const categories: Readonly<{ 2 | BOOKS: "Books"; 3 | CAMERA_VIDEO: "Camera & Video"; 4 | DIGITAL_MUSIC: "Digital Music"; 5 | ELECTRONICS: "Electronics"; 6 | HEALTH_PERSONAL_CARE: "Health & Personal Care"; 7 | HOME_AUDIO: "Home Audio"; 8 | HOUSEHOLD: "Household"; 9 | KINDLE_BOOKS: "Kindle Books"; 10 | LUGGAGE: "Luggage"; 11 | MOBILE: "Mobile Phones"; 12 | MOBILE_APPS: "Mobile Apps"; 13 | MOVIES_TV: "Movies & TV"; 14 | MUSIC: "Music"; 15 | OTHER: "Other"; 16 | TELEVISION_VIDEO: "Television & Video"; 17 | TOYS_GAMES: "Toys & Games"; 18 | VIDEO_GAMES: "Video Games"; 19 | }>; 20 | /** 21 | * Finds content on a page, returning either the text or null. 22 | * 23 | * @param {any} $ jQuery-like object 24 | * @param {Array} selectors An array of selectors to search with 25 | * @return {String | null} The content found (or null) 26 | */ 27 | export declare function findContentOnPage($: any, selectors: Array): string | null; 28 | export declare function processPrice(priceStringInput: string): number; 29 | -------------------------------------------------------------------------------- /src/sites/Crutchfield.ts: -------------------------------------------------------------------------------- 1 | import Site from '../Site'; 2 | import logger from '../logger'; 3 | import * as siteUtils from '../site-utils'; 4 | import { CheerioAPI } from 'cheerio'; 5 | 6 | export default class Crutchfield implements Site { 7 | constructor(protected uri: string) { 8 | if (!Crutchfield.isSite(uri)) { 9 | throw new Error(`invalid uri for Crutchfield: ${uri}`); 10 | } 11 | } 12 | 13 | getURIForPageData(): string { 14 | return this.uri; 15 | } 16 | 17 | findPriceOnPage($: CheerioAPI): number { 18 | const selectors = ['.pricing-wrapper .price.js-price']; 19 | 20 | const priceString = siteUtils.findContentOnPage($, selectors); 21 | 22 | if (!priceString) { 23 | logger.error('price not found on Crutchfield page, uri: %s', this.uri); 24 | return -1; 25 | } 26 | 27 | const price = siteUtils.processPrice(priceString); 28 | 29 | return price; 30 | } 31 | 32 | static isSite(uri: string): boolean { 33 | if (uri.indexOf('www.crutchfield.com') > -1) { 34 | return true; 35 | } else { 36 | return false; 37 | } 38 | } 39 | } 40 | 41 | module.exports = Crutchfield; 42 | -------------------------------------------------------------------------------- /src/Site.ts: -------------------------------------------------------------------------------- 1 | import { CheerioAPI } from 'cheerio'; 2 | 3 | export default abstract class Site { 4 | /** 5 | * Returns the URI used to find the page data 6 | * (most likely the same URI used in constructing this Site) 7 | * 8 | * @return {string} The URI used to find the page data 9 | */ 10 | abstract getURIForPageData(): string; 11 | 12 | /** 13 | * Returns the price found on the page 14 | * 15 | * @param {CheerioAPI} $ jQuery object used to search the page 16 | * @return {number} The price found on the page 17 | */ 18 | abstract findPriceOnPage($: CheerioAPI): number; 19 | 20 | /** 21 | * Returns true if this site supports the incoming URI 22 | * 23 | * @param {string} uri The URI to test 24 | * @return {boolean} true if this Site supports the URI, false otherwise 25 | */ 26 | static isSite(uri: string): boolean { 27 | /* 28 | * interfaces can not have static methods. 29 | * abstract classes can't have static abstract methods. 30 | * so, we're left with creating the method, but throwing an error 31 | * until the subsclass overrides it. 32 | */ 33 | throw new Error('implement me!'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/sites/Amazon.ts: -------------------------------------------------------------------------------- 1 | import Site from '../Site'; 2 | import logger from '../logger'; 3 | import * as siteUtils from '../site-utils'; 4 | import { CheerioAPI } from 'cheerio'; 5 | 6 | export default class Amazon implements Site { 7 | constructor(protected uri: string) { 8 | // error check to make sure this is a valid uri for Amazon 9 | if (!Amazon.isSite(uri)) { 10 | throw new Error(`invalid uri for Amazon: ${uri}`); 11 | } 12 | } 13 | 14 | getURIForPageData(): string { 15 | return this.uri; 16 | } 17 | 18 | findPriceOnPage($: CheerioAPI): number { 19 | // find the price on the page 20 | const priceString = $('#twister-plus-price-data-price').val(); 21 | 22 | // were we successful? 23 | if (!priceString) { 24 | logger.error($('body').text().trim()); 25 | logger.error('price not found on amazon page, uri: %s', this.uri); 26 | return -1; 27 | } 28 | 29 | // process the price string 30 | const price = siteUtils.processPrice(priceString); 31 | 32 | return price; 33 | } 34 | 35 | static isSite(uri: string): boolean { 36 | // (attempt) to support more countries than just amazon.com 37 | // we'll see how many we can actually support... 38 | if (uri.indexOf('www.amazon.') > -1) { 39 | return true; 40 | } else { 41 | return false; 42 | } 43 | } 44 | } 45 | 46 | module.exports = Amazon; 47 | -------------------------------------------------------------------------------- /src/sites/HomeDepot.ts: -------------------------------------------------------------------------------- 1 | import Site from '../Site'; 2 | import logger from '../logger'; 3 | import * as siteUtils from '../site-utils'; 4 | import { CheerioAPI } from 'cheerio'; 5 | 6 | export default class HomeDepot implements Site { 7 | constructor(protected uri: string) { 8 | // error check to make sure this is a valid uri for Home Depot 9 | if (!HomeDepot.isSite(uri)) { 10 | throw new Error(`invalid uri for Home Depot: ${uri}`); 11 | } 12 | } 13 | 14 | getURIForPageData(): string { 15 | return this.uri; 16 | } 17 | 18 | findPriceOnPage($: CheerioAPI): number { 19 | // find the price on the page 20 | const selectors = ['.price-format__main-price']; 21 | 22 | // find the price on the page 23 | const priceString = siteUtils.findContentOnPage($, selectors); 24 | 25 | // were we successful? 26 | if (!priceString) { 27 | // logger.error($('body').text().trim()); 28 | logger.error('price not found on Home Depot page, uri: %s', this.uri); 29 | return -1; 30 | } 31 | 32 | // process the price string 33 | const price = siteUtils.processPrice(priceString); 34 | 35 | // return price; 36 | return price; 37 | } 38 | 39 | static isSite(uri: string): boolean { 40 | if (uri.indexOf('www.homedepot.com') > -1) { 41 | return true; 42 | } else { 43 | return false; 44 | } 45 | } 46 | } 47 | 48 | module.exports = HomeDepot; 49 | -------------------------------------------------------------------------------- /src/site-manager.ts: -------------------------------------------------------------------------------- 1 | import Site from './Site'; 2 | import logger from './logger'; 3 | import fs from 'fs'; 4 | 5 | interface SiteClass { 6 | new (uri: string): Site; 7 | } 8 | 9 | function loadAllSites() { 10 | const sites: typeof Site[] = []; 11 | 12 | // reads all the files from the sites directory 13 | fs.readdirSync(`${__dirname}/sites`).forEach((site) => { 14 | // for each one, load it into the sites array 15 | logger.debug('loading site module: %s', site); 16 | sites.push(require(`./sites/${site}`)); 17 | }); 18 | 19 | // return all sites loaded 20 | return sites; 21 | } 22 | 23 | class SiteManager { 24 | sites: typeof Site[]; 25 | constructor() { 26 | logger.debug('initializing SiteManager'); 27 | // first, load all the sites we have available 28 | this.sites = loadAllSites(); 29 | } 30 | 31 | /** 32 | * Loads a Site that can handle the given URI. If no matches are found, 33 | * an Error is thrown. 34 | * 35 | * @param {string} uri The URI for a website 36 | * @return {Site} The Site which can handle the URI 37 | */ 38 | loadSite(uri: string): Site { 39 | logger.debug('attempting to find site for uri: %s', uri); 40 | 41 | // loop over all our sites 42 | for (let i = 0; i < this.sites.length; i++) { 43 | const siteClass = this.sites[i]; 44 | // if one matches... 45 | if (siteClass.isSite(uri)) { 46 | logger.debug('match found, using site: %s', siteClass.name); 47 | 48 | // return a new instance of it passing in the URI 49 | const Class: SiteClass = siteClass as unknown as SiteClass; 50 | return new Class(uri); 51 | } 52 | } 53 | 54 | // no sites were found to handle the given URI, throw an Error 55 | // (maybe some nice person will contribute code to handle this site :) 56 | throw new Error(`site not found for uri (please help contribute!): ${uri}`); 57 | } 58 | } 59 | 60 | export default new SiteManager(); 61 | -------------------------------------------------------------------------------- /test/unit/sites/Amazon.test.ts: -------------------------------------------------------------------------------- 1 | import Amazon from '../../../src/sites/Amazon'; 2 | import * as cheerio from 'cheerio'; 3 | 4 | const VALID_URI = 'http://www.amazon.com/123/product'; 5 | const INVALID_URI = 'http://www.bad.com/123/product'; 6 | 7 | describe('The Amazon Site', () => { 8 | describe('isSite() function', () => { 9 | it('should return true for a correct site', () => { 10 | expect(Amazon.isSite(VALID_URI)).toEqual(true); 11 | }); 12 | 13 | it('should return false for a bad site', () => { 14 | expect(Amazon.isSite(INVALID_URI)).toEqual(false); 15 | }); 16 | }); 17 | 18 | it('should throw an exception trying to create a new Amazon with an incorrect uri', () => { 19 | expect(() => { 20 | new Amazon(INVALID_URI); 21 | }).toThrow(/invalid uri for Amazon/); 22 | }); 23 | 24 | describe('a new Amazon Site', () => { 25 | let amazon: Amazon; 26 | 27 | beforeEach(() => { 28 | amazon = new Amazon(VALID_URI); 29 | }); 30 | 31 | it('should return the same URI for getURIForPageData()', () => { 32 | expect(amazon.getURIForPageData()).toEqual(VALID_URI); 33 | }); 34 | 35 | describe('with a populated page', () => { 36 | let $: cheerio.CheerioAPI; 37 | let bad$: cheerio.CheerioAPI; 38 | let price: number; 39 | 40 | beforeEach(() => { 41 | price = 9.99; 42 | 43 | $ = cheerio.load( 44 | ``, 45 | ); 46 | bad$ = cheerio.load('

Nothin here

'); 47 | }); 48 | 49 | it('should return the price when displayed on the page', () => { 50 | const priceFound = amazon.findPriceOnPage($); 51 | expect(priceFound).toEqual(price); 52 | }); 53 | 54 | it('should return -1 when the price is not found', () => { 55 | const priceFound = amazon.findPriceOnPage(bad$); 56 | expect(priceFound).toEqual(-1); 57 | }); 58 | }); 59 | }); 60 | }); 61 | -------------------------------------------------------------------------------- /test/unit/sites/Crutchfield.test.ts: -------------------------------------------------------------------------------- 1 | import Crutchfield from '../../../src/sites/Crutchfield'; 2 | import * as cheerio from 'cheerio'; 3 | 4 | const VALID_URI = 'http://www.crutchfield.com/product'; 5 | const INVALID_URI = 'http://www.bad.com/product'; 6 | 7 | describe('The Crutchfield Site', () => { 8 | describe('isSite() function', () => { 9 | it('should return true for a correct site', () => { 10 | expect(Crutchfield.isSite(VALID_URI)).toEqual(true); 11 | }); 12 | 13 | it('should return false for a bad site', () => { 14 | expect(Crutchfield.isSite(INVALID_URI)).toEqual(false); 15 | }); 16 | }); 17 | 18 | it('should throw an exception trying to create a new Crutchfield with an incorrect uri', () => { 19 | expect(() => { 20 | new Crutchfield(INVALID_URI); 21 | }).toThrow(/invalid uri for Crutchfield/); 22 | }); 23 | 24 | describe('a new Crutchfield Site', () => { 25 | let site: Crutchfield; 26 | 27 | beforeEach(() => { 28 | site = new Crutchfield(VALID_URI); 29 | }); 30 | 31 | it('should return the same URI for getURIForPageData()', () => { 32 | expect(site.getURIForPageData()).toEqual(VALID_URI); 33 | }); 34 | 35 | describe('with a populated page', () => { 36 | let $: cheerio.CheerioAPI; 37 | let bad$: cheerio.CheerioAPI; 38 | let price: number; 39 | 40 | beforeEach(() => { 41 | price = 499.0; 42 | 43 | $ = cheerio.load( 44 | `
$${price}
`, 45 | ); 46 | bad$ = cheerio.load('

Nothin here

'); 47 | }); 48 | 49 | it('should return the price when displayed on the page', () => { 50 | const priceFound = site.findPriceOnPage($); 51 | expect(priceFound).toEqual(price); 52 | }); 53 | 54 | it('should return -1 when the price is not found', () => { 55 | const priceFound = site.findPriceOnPage(bad$); 56 | expect(priceFound).toEqual(-1); 57 | }); 58 | }); 59 | }); 60 | }); 61 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "price-finder", 3 | "description": "Finds the prices of retail items online", 4 | "version": "6.0.0-alpha.3", 5 | "engines": { 6 | "node": ">=16" 7 | }, 8 | "author": { 9 | "name": "Dylan Smith" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/dylants/price-finder.git" 14 | }, 15 | "bugs": { 16 | "url": "https://github.com/dylants/price-finder/issues" 17 | }, 18 | "homepage": "https://github.com/dylants/price-finder", 19 | "license": "MIT", 20 | "keywords": [ 21 | "price", 22 | "finder", 23 | "scan", 24 | "scrape", 25 | "store", 26 | "cost", 27 | "product", 28 | "retail", 29 | "item", 30 | "amazon" 31 | ], 32 | "main": "./build/PriceFinder.js", 33 | "types": "./types/PriceFinder.d.ts", 34 | "scripts": { 35 | "build:ts": "tsc -p tsconfig-build.json", 36 | "build": "yarn clean:build && yarn build:ts", 37 | "check-types": "tsc --noemit", 38 | "clean:build": "rimraf build coverage", 39 | "clean:dependencies": "rimraf node_modules", 40 | "clean": "yarn clean:build && yarn clean:dependencies", 41 | "lint": "yarn rome:check && yarn rome:format && yarn check-types", 42 | "rome:check": "yarn rome check src/ test/", 43 | "rome:format": "yarn rome format src/ test/", 44 | "test": "jest test/unit", 45 | "test:e2e": "jest test/e2e", 46 | "test:e2e:single": "jest $1", 47 | "test:watch": "yarn test --watch" 48 | }, 49 | "dependencies": { 50 | "accounting": "0.4.1", 51 | "async": "3.2.4", 52 | "cheerio": "1.0.0-rc.12", 53 | "lodash": "4.17.21", 54 | "pino": "8.7.0", 55 | "superagent": "8.0.3" 56 | }, 57 | "devDependencies": { 58 | "@tsconfig/node18": "1.0.1", 59 | "@types/accounting": "0.4.2", 60 | "@types/async": "3.2.15", 61 | "@types/jest": "29.2.3", 62 | "@types/lodash": "4.14.190", 63 | "@types/node": "18.11.9", 64 | "@types/superagent": "4.1.16", 65 | "jest": "29.3.1", 66 | "nock": "13.2.9", 67 | "rimraf": "5.0.1", 68 | "rome": "12.1.3", 69 | "ts-jest": "29.0.3", 70 | "ts-node": "10.9.1", 71 | "typescript": "4.9.3" 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /test/unit/sites/HomeDepot.test.ts: -------------------------------------------------------------------------------- 1 | import HomeDepot from '../../../src/sites/HomeDepot'; 2 | import * as cheerio from 'cheerio'; 3 | 4 | const VALID_URI = 'http://www.homedepot.com/product'; 5 | const INVALID_URI = 'http://www.bad.com/product'; 6 | 7 | describe('The HomeDepot Site', () => { 8 | describe('isSite() function', () => { 9 | it('should return true for a correct site', () => { 10 | expect(HomeDepot.isSite(VALID_URI)).toEqual(true); 11 | }); 12 | 13 | it('should return false for a bad site', () => { 14 | expect(HomeDepot.isSite(INVALID_URI)).toEqual(false); 15 | }); 16 | }); 17 | 18 | it('should throw an exception trying to create a new HomeDepot with an incorrect uri', () => { 19 | expect(() => { 20 | new HomeDepot(INVALID_URI); 21 | }).toThrow(/invalid uri for Home Depot/); 22 | }); 23 | 24 | describe('a new HomeDepot Site', () => { 25 | let homeDepot: HomeDepot; 26 | 27 | beforeEach(() => { 28 | homeDepot = new HomeDepot(VALID_URI); 29 | }); 30 | 31 | it('should return the same URI for getURIForPageData()', () => { 32 | expect(homeDepot.getURIForPageData()).toEqual(VALID_URI); 33 | }); 34 | 35 | describe('with a populated page', () => { 36 | let $: cheerio.CheerioAPI; 37 | let bad$: cheerio.CheerioAPI; 38 | let price: number; 39 | 40 | beforeEach(() => { 41 | price = 29.97; 42 | 43 | $ = cheerio.load( 44 | '
' + 45 | '$2997' + 46 | '
', 47 | ); 48 | bad$ = cheerio.load('

Nothin here

'); 49 | }); 50 | 51 | it('should return the price when displayed on the page', () => { 52 | const priceFound = homeDepot.findPriceOnPage($); 53 | expect(priceFound).toEqual(price); 54 | }); 55 | 56 | it('should return -1 when the price is not found', () => { 57 | const priceFound = homeDepot.findPriceOnPage(bad$); 58 | expect(priceFound).toEqual(-1); 59 | }); 60 | }); 61 | }); 62 | }); 63 | -------------------------------------------------------------------------------- /test/unit/PriceFinder.test.ts: -------------------------------------------------------------------------------- 1 | import PriceFinder from '../../src/PriceFinder'; 2 | import nock from 'nock'; 3 | 4 | describe('PriceFinder', () => { 5 | let priceFinder: PriceFinder; 6 | beforeAll(() => { 7 | nock.disableNetConnect(); 8 | nock.enableNetConnect('127.0.0.1'); 9 | }); 10 | 11 | afterAll(() => { 12 | nock.cleanAll(); 13 | nock.enableNetConnect(); 14 | }); 15 | 16 | describe('default priceFinder with no options', () => { 17 | beforeEach(() => { 18 | priceFinder = new PriceFinder(); 19 | }); 20 | 21 | it('should throw an exception in findItemPrice() when presented with an unsupported URI', async () => { 22 | expect( 23 | async () => await priceFinder.findItemPrice('www.bad_uri.bad'), 24 | ).rejects.toThrow(); 25 | }); 26 | 27 | it('should have the default options set', () => { 28 | const config = priceFinder.config; 29 | expect(config).toBeDefined(); 30 | expect(config.retrySleepTime).toEqual(1000); 31 | expect(config.retryStatusCodes).toEqual([503]); 32 | }); 33 | 34 | describe('with an Amazon URI and valid mock request data', () => { 35 | const testPrice = 19.99; 36 | 37 | beforeEach(() => { 38 | // set request to return a specific body 39 | nock('http://www.amazon.com') 40 | .get('/product/cat-in-the-hat') 41 | .reply( 42 | 200, 43 | ``, 44 | ); 45 | }); 46 | 47 | it('should return the item price', async () => { 48 | const price = await priceFinder.findItemPrice( 49 | 'http://www.amazon.com/product/cat-in-the-hat', 50 | ); 51 | expect(price).toEqual(testPrice); 52 | }); 53 | }); 54 | 55 | describe('when the response status code is 404', () => { 56 | beforeEach(() => { 57 | nock('http://www.amazon.com').get('/product/cat-in-the-hat').reply(404); 58 | }); 59 | 60 | it('should return an error for findItemPrice()', async () => { 61 | expect( 62 | async () => 63 | await priceFinder.findItemPrice( 64 | 'http://www.amazon.com/product/cat-in-the-hat', 65 | ), 66 | ).rejects.toThrow(); 67 | }); 68 | }); 69 | 70 | describe('with a valid URI and invalid mock request data', () => { 71 | beforeEach(() => { 72 | nock('http://www.amazon.com') 73 | .get('/product/cat-in-the-hat') 74 | .reply(200, '

Nothin here

'); 75 | }); 76 | 77 | it('should return an error for findItemPrice()', async () => { 78 | expect( 79 | async () => 80 | await priceFinder.findItemPrice( 81 | 'http://www.amazon.com/product/cat-in-the-hat', 82 | ), 83 | ).rejects.toThrowError(); 84 | }); 85 | }); 86 | }); 87 | 88 | describe('with options supplied', () => { 89 | it('should use the correct options', () => { 90 | const retryStatusCodes = [300, 301, 302]; 91 | const retrySleepTime = 4000; 92 | 93 | // override some, but not all... 94 | priceFinder = new PriceFinder({ 95 | retrySleepTime, 96 | }); 97 | expect(priceFinder.config.retryStatusCodes).toEqual([503]); 98 | expect(priceFinder.config.retrySleepTime).toEqual(retrySleepTime); 99 | 100 | // override all 101 | priceFinder = new PriceFinder({ 102 | retrySleepTime, 103 | retryStatusCodes, 104 | }); 105 | expect(priceFinder.config.retryStatusCodes).toEqual(retryStatusCodes); 106 | expect(priceFinder.config.retrySleepTime).toEqual(retrySleepTime); 107 | }); 108 | }); 109 | }); 110 | -------------------------------------------------------------------------------- /test/unit/site-utils.test.ts: -------------------------------------------------------------------------------- 1 | import * as siteUtils from '../../src/site-utils'; 2 | import * as cheerio from 'cheerio'; 3 | 4 | describe('The Site Utils', () => { 5 | it('should have categories', () => { 6 | expect(siteUtils.categories).toBeTruthy(); 7 | }); 8 | 9 | it('should be at least 1 category in categories', () => { 10 | const keys = Object.keys(siteUtils.categories); 11 | expect(keys.length).toBeGreaterThan(0); 12 | }); 13 | 14 | it('should have some known categories', () => { 15 | expect(siteUtils.categories.MUSIC).toEqual('Music'); 16 | expect(siteUtils.categories.VIDEO_GAMES).toEqual('Video Games'); 17 | expect(siteUtils.categories.BOOKS).toEqual('Books'); 18 | }); 19 | 20 | describe('findContentOnPage() with a populated page', () => { 21 | let $: cheerio.CheerioAPI; 22 | 23 | beforeEach(() => { 24 | $ = cheerio.load(` 25 |
$9.99
26 |
$1.99
27 |
$2.99
28 |
$3.99
29 |
30 |
$12.34
31 |
32 |
33 |
$56.78
34 |
35 | `); 36 | }); 37 | 38 | it('should return the price given the correct selector', () => { 39 | const selectors = ['#price-tag']; 40 | 41 | const price = siteUtils.findContentOnPage($, selectors); 42 | 43 | expect(price).toEqual('$9.99'); 44 | }); 45 | 46 | it('should return the price given the multiple matches for selector', () => { 47 | const selectors = ['.multi-price']; 48 | 49 | const price = siteUtils.findContentOnPage($, selectors); 50 | 51 | expect(price).toEqual('$1.99'); 52 | }); 53 | 54 | it('should return the price given a first() element', () => { 55 | const jQuery = $('.outer-multi').first(); 56 | 57 | const selectors = ['.inner']; 58 | 59 | const price = siteUtils.findContentOnPage(jQuery, selectors); 60 | 61 | expect(price).toEqual('$12.34'); 62 | }); 63 | 64 | it('should return null given incorrect selector', () => { 65 | const selectors = ['#name-tag']; 66 | 67 | const price = siteUtils.findContentOnPage($, selectors); 68 | 69 | expect(price).toBeNull(); 70 | }); 71 | }); 72 | 73 | describe('processPrice()', () => { 74 | it('should process $ price correctly', () => { 75 | expect(siteUtils.processPrice('$3.99')).toEqual(3.99); 76 | }); 77 | 78 | it('should process USD price correctly', () => { 79 | expect(siteUtils.processPrice('USD 3.99')).toEqual(3.99); 80 | }); 81 | 82 | it('should process EUR price correctly', () => { 83 | expect(siteUtils.processPrice('EUR 79,40')).toEqual(79.4); 84 | }); 85 | 86 | it('should process eur price correctly', () => { 87 | expect(siteUtils.processPrice('eur 79,40')).toEqual(79.4); 88 | }); 89 | 90 | it('should process Euros price correctly', () => { 91 | expect(siteUtils.processPrice('Euros 79,40')).toEqual(79.4); 92 | }); 93 | 94 | it('should process € price correctly', () => { 95 | expect(siteUtils.processPrice('€ 79,40')).toEqual(79.4); 96 | }); 97 | 98 | it('should process YEN_TEXT price correctly', () => { 99 | expect(siteUtils.processPrice('7,940 円')).toEqual(7940); 100 | }); 101 | 102 | it('should process YEN_SYMBOL price correctly', () => { 103 | expect(siteUtils.processPrice('¥ 7,940')).toEqual(7940); 104 | }); 105 | 106 | it('should process £ price correctly', () => { 107 | expect(siteUtils.processPrice('£3.99')).toEqual(3.99); 108 | }); 109 | 110 | it('should process GBP price correctly', () => { 111 | expect(siteUtils.processPrice('GBP 3.99')).toEqual(3.99); 112 | }); 113 | 114 | it('should process R (INR) price correctly', () => { 115 | expect(siteUtils.processPrice('R 9,444')).toEqual(9444); 116 | }); 117 | 118 | it('should process INR price correctly', () => { 119 | expect(siteUtils.processPrice('INR 9,444')).toEqual(9444); 120 | }); 121 | 122 | it('should process a price without a currency correctly', () => { 123 | expect(siteUtils.processPrice('35')).toEqual(35); 124 | }); 125 | 126 | it('should process a non-price correctly', () => { 127 | expect(siteUtils.processPrice('no')).toEqual(-1); 128 | }); 129 | }); 130 | }); 131 | -------------------------------------------------------------------------------- /src/site-utils.ts: -------------------------------------------------------------------------------- 1 | import logger from './logger'; 2 | import accounting from 'accounting'; 3 | import _ from 'lodash'; 4 | 5 | const isNumber = (value: string) => !Number.isNaN(parseFloat(value)); 6 | 7 | // Represents the various categories of an online item 8 | export const categories = Object.freeze({ 9 | BOOKS: 'Books', 10 | CAMERA_VIDEO: 'Camera & Video', 11 | DIGITAL_MUSIC: 'Digital Music', 12 | ELECTRONICS: 'Electronics', 13 | HEALTH_PERSONAL_CARE: 'Health & Personal Care', 14 | HOME_AUDIO: 'Home Audio', 15 | HOUSEHOLD: 'Household', 16 | KINDLE_BOOKS: 'Kindle Books', 17 | LUGGAGE: 'Luggage', 18 | MOBILE: 'Mobile Phones', 19 | MOBILE_APPS: 'Mobile Apps', 20 | MOVIES_TV: 'Movies & TV', 21 | MUSIC: 'Music', 22 | OTHER: 'Other', 23 | TELEVISION_VIDEO: 'Television & Video', 24 | TOYS_GAMES: 'Toys & Games', 25 | VIDEO_GAMES: 'Video Games', 26 | }); 27 | 28 | /** 29 | * Finds content on a page, returning either the text or null. 30 | * 31 | * @param {any} $ jQuery-like object 32 | * @param {Array} selectors An array of selectors to search with 33 | * @return {String | null} The content found (or null) 34 | */ 35 | export function findContentOnPage( 36 | // TODO can we do better here than any? 37 | // rome-ignore lint/suspicious/noExplicitAny: use any for now 38 | $: any, 39 | selectors: Array, 40 | ): string | null { 41 | logger.debug('selectors: %j', selectors); 42 | 43 | // use the find() API in case we're handed an inner jquery object 44 | const jQuery = _.isFunction($.find) ? $.find.bind($) : $; 45 | 46 | // loop until we find the content, or we exhaust our selectors 47 | for (let i = 0; i < selectors.length; i++) { 48 | const content = jQuery(selectors[i]); 49 | if (!_.isEmpty(content)) { 50 | logger.debug('found content with selector: %s', selectors[i]); 51 | 52 | // if it's an array, return the first element 53 | if (content.length && content.length > 1) { 54 | logger.debug('content is an array, attempting to return first entry'); 55 | return jQuery(selectors[i]) 56 | .first() 57 | .text() 58 | .trim(); 59 | } else if (_.isFunction(content.text) && content.text().trim()) { 60 | // if we have text, return it 61 | return content.text().trim(); 62 | } else { 63 | // nothing here, keep looking 64 | } 65 | } 66 | } 67 | 68 | // if we've not found anything, return null to signify that 69 | return null; 70 | } 71 | 72 | const DOLLAR_PREFIX = '$'; 73 | const DOLLAR_TEXT = 'usd'; 74 | const EURO_TEXT_PREFIX = 'eur'; 75 | const EURO_SYMBOL_PREFIX = '€'; 76 | const YEN_TEXT_PREFIX = '円'; 77 | const YEN_SYMBOL_PREFIX = '¥'; 78 | const GBP_SYMBOL_PREFIX = '£'; 79 | const GBP_TEXT_PREFIX = 'gbp'; 80 | const INR_SYMBOL_PREFIX = 'r'; 81 | const INR_TEXT_PREFIX = 'inr'; 82 | 83 | export function processPrice(priceStringInput: string): number { 84 | const priceString = priceStringInput.toLowerCase(); 85 | 86 | logger.debug('price string (lowercased): %s', priceString); 87 | 88 | // currency specific processing 89 | let price; 90 | if ( 91 | _.includes(priceString, DOLLAR_PREFIX) || 92 | _.includes(priceString, DOLLAR_TEXT) 93 | ) { 94 | logger.debug('found dollar in price, converting to number...'); 95 | price = accounting.unformat(priceString); 96 | } else if ( 97 | _.includes(priceString, EURO_TEXT_PREFIX) || 98 | _.includes(priceString, EURO_SYMBOL_PREFIX) 99 | ) { 100 | logger.debug('found euro in price, converting to number...'); 101 | price = accounting.unformat(priceString, ','); 102 | } else if ( 103 | _.includes(priceString, YEN_TEXT_PREFIX) || 104 | _.includes(priceString, YEN_SYMBOL_PREFIX) 105 | ) { 106 | logger.debug('found yen in price, converting to number...'); 107 | price = accounting.unformat(priceString); 108 | } else if ( 109 | _.includes(priceString, GBP_SYMBOL_PREFIX) || 110 | _.includes(priceString, GBP_TEXT_PREFIX) 111 | ) { 112 | logger.debug('found gbp in price, converting to number...'); 113 | price = accounting.unformat(priceString); 114 | } else if ( 115 | _.includes(priceString, INR_SYMBOL_PREFIX) || 116 | _.includes(priceString, INR_TEXT_PREFIX) 117 | ) { 118 | logger.debug('found inr in price, converting to number...'); 119 | price = accounting.unformat(priceString); 120 | } else { 121 | // if no currency symbol was found, verify it is a number 122 | logger.debug('no currency symbol was found, verifying this is a number'); 123 | if (!isNumber(priceString)) { 124 | logger.debug( 125 | 'price string is NOT a number, unable to process, returning -1', 126 | ); 127 | price = -1; 128 | } else { 129 | logger.debug('price string is a number, using defaults to convert...'); 130 | price = accounting.unformat(priceString); 131 | } 132 | } 133 | 134 | logger.debug('price (post-process): %s', price); 135 | return price; 136 | } 137 | -------------------------------------------------------------------------------- /src/PriceFinder.ts: -------------------------------------------------------------------------------- 1 | import Site from './Site'; 2 | import logger from './logger'; 3 | import siteManager from './site-manager'; 4 | import async, { AsyncBooleanResultCallback } from 'async'; 5 | import * as cheerio from 'cheerio'; 6 | import _ from 'lodash'; 7 | import request from 'superagent'; 8 | 9 | interface Config { 10 | retrySleepTime: number; 11 | retryStatusCodes: number[]; 12 | } 13 | 14 | interface Options { 15 | retrySleepTime?: number; 16 | retryStatusCodes?: number[]; 17 | } 18 | 19 | const DEFAULT_OPTIONS = { 20 | retrySleepTime: 1000, 21 | retryStatusCodes: [503], 22 | }; 23 | 24 | export default class PriceFinder { 25 | public config: Config; 26 | constructor(options: Options | undefined = undefined) { 27 | logger.debug('initializing PriceFinder'); 28 | logger.debug('user supplied options: %j', options); 29 | 30 | // merge options, taking the user supplied if duplicates exist 31 | this.config = _.extend(DEFAULT_OPTIONS, options); 32 | logger.debug('merged config: %j', this.config); 33 | } 34 | 35 | /** 36 | * Scrapes a website specified by the uri and finds the item price. 37 | * 38 | * @param {string} uri The uri of the website to scan 39 | * @return {number | undefined} the item price if found 40 | * @throws Error if the scrape fails 41 | */ 42 | async findItemPrice(uri: string): Promise { 43 | logger.debug('findItemPrice with uri: %s', uri); 44 | 45 | let site: Site; 46 | try { 47 | site = siteManager.loadSite(uri); 48 | } catch (error) { 49 | logger.error('error loading site: ', error); 50 | throw error; 51 | } 52 | 53 | logger.debug('scraping the page...'); 54 | 55 | // page scrape the site to load the page data 56 | return new Promise((resolve, reject) => 57 | this.pageScrape(site, (err, pageData) => { 58 | if (err) { 59 | logger.error('error retrieving pageData: ', err); 60 | return reject(err); 61 | } 62 | 63 | logger.debug('pageData found, loading price from site...'); 64 | 65 | // find the price on the website 66 | const price = site.findPriceOnPage(pageData); 67 | 68 | // error check 69 | if (price === -1) { 70 | logger.error('unable to find price'); 71 | return reject(Error(`unable to find price for uri: ${uri}`)); 72 | } 73 | 74 | logger.debug('price found, returning price: %s', price); 75 | 76 | // return the item price 77 | return resolve(price); 78 | }), 79 | ); 80 | } 81 | 82 | // ================================================== 83 | // ============== PRIVATE FUNCTIONS ================= 84 | // ================================================== 85 | private pageScrape( 86 | site: Site, 87 | callback: ( 88 | err: Error | null | undefined, 89 | pageData: cheerio.CheerioAPI, 90 | ) => void, 91 | ) { 92 | let pageData: cheerio.CheerioAPI; 93 | 94 | async.whilst( 95 | // run until we get page data 96 | (cb: AsyncBooleanResultCallback) => cb(null, !pageData), 97 | 98 | // hit the site to get the item details 99 | (whilstCallback) => { 100 | logger.debug('scraping uri: %s', site.getURIForPageData()); 101 | request 102 | .get(site.getURIForPageData()) 103 | .set('User-Agent', 'Mozilla') 104 | .set('Accept-Language', 'en-US') 105 | .set('Accept', 'text/html') 106 | // TODO any type 107 | // rome-ignore lint/suspicious/noExplicitAny: use any for now 108 | .end((err: any, response: request.Response) => { 109 | if (err) { 110 | return whilstCallback(err); 111 | } 112 | 113 | if (response) { 114 | if (response.statusCode === 200) { 115 | logger.debug('response statusCode is 200, retrieving pageData'); 116 | 117 | // load the text of the page through cheerio 118 | pageData = cheerio.load(response.text); 119 | 120 | return whilstCallback(null); 121 | } else if ( 122 | this.config.retryStatusCodes.indexOf(response.statusCode) > -1 123 | ) { 124 | // if we get a statusCode that we should retry, try again 125 | logger.debug( 126 | 'response status part of retryStatusCodes, status: %s, retrying...', 127 | response.statusCode, 128 | ); 129 | 130 | logger.debug(`sleeping for: ${this.config.retrySleepTime}ms`); 131 | return setTimeout( 132 | () => whilstCallback(), 133 | this.config.retrySleepTime, 134 | ); 135 | } else { 136 | // else it's a bad response status, all stop 137 | return whilstCallback( 138 | new Error(`response status: ${response.statusCode}`), 139 | ); 140 | } 141 | } else { 142 | return whilstCallback(new Error('no response object found!')); 143 | } 144 | }); 145 | }, 146 | 147 | // once we have the pageData, or error, return 148 | (err) => callback(err, pageData), 149 | ); 150 | } 151 | } 152 | 153 | module.exports = PriceFinder; 154 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # price-finder # 2 | 3 | [![NPM Version][npm-image]][npm-url] 4 | [![NPM Downloads][downloads-image]][downloads-url] 5 | 6 | Finds the price of retail items online by scraping the web page. 7 | 8 | ## Quick Example ## 9 | 10 | ```typescript 11 | import PriceFinder from 'price-finder'; 12 | const priceFinder = new PriceFinder(); 13 | 14 | // Led Zeppelin II vinyl (from Amazon) 15 | const uri = 'https://www.amazon.com/Led-Zeppelin-II/dp/B00IXHBUG0'; 16 | const price = await priceFinder.findItemPrice(uri); 17 | console.log(price); // 22.97 18 | ``` 19 | 20 | ## Price Finder Documentation ## 21 | 22 | - [Configuration Options](#configuration-options) 23 | - [API](#api) 24 | - [findItemPrice(uri)](#async-finditempriceuri-string-number) 25 | - [Debugging Price Finder](#debugging-price-finder) 26 | - [Supported Sites](#supported-sites) 27 | - [Contributing](#contributing) 28 | - [Tests](#tests) 29 | - [Adding Sites](#adding-sites) 30 | - [Releasing](#releasing) 31 | 32 | ### Configuration Options ### 33 | 34 | When creating a new PriceFinder object, a configuration object can be specified. 35 | The following options are configurable: 36 | 37 | - `retryStatusCodes` : An array of status codes (Numbers) which when returned 38 | from the page scrape request, will trigger a retry request (meaning it will 39 | attempt to scrape the page again). Defaults to `[503]`. 40 | - `retrySleepTime` : If a retry status code is returned from a page scrape 41 | request, this is the amount of time (in milliseconds) that the code will sleep 42 | prior to re-issuing the request. Defaults to `1000` (ms). 43 | 44 | For example: 45 | 46 | ```typescript 47 | import PriceFinder from 'price-finder'; 48 | 49 | const priceFinder = new PriceFinder({ 50 | retrySleepTime: 2000, 51 | }); 52 | ``` 53 | 54 | ### API ### 55 | 56 | #### `async findItemPrice(uri: string): number` #### 57 | 58 | Given a `uri` (that is for a [supported site](#supported-sites)), this function will scrape the page and attempt to find the current price listed on the page. The result will be returned asynchronously. 59 | 60 | If problems occur during processing, an Error will be thrown. 61 | 62 | ### Debugging Price Finder ### 63 | 64 | The pino package is used within price-finder to output debugging information useful in tracking down any potential issues. 65 | 66 | ### Supported Sites ### 67 | 68 | The current supported sites are listed below. 69 | 70 | - Amazon 71 | - Crutchfield (requires Node 16) 72 | - Home Depot 73 | 74 | Don't see your site listed? Please consider [contributing](#contributing) to the project! 75 | 76 | ### Contributing ### 77 | 78 | The price-finder project is a [Node.js](http://nodejs.org/) module, so before cloning the repository make sure node is installed. Once cloned, install dependencies by issuing: 79 | 80 | ``` 81 | $ yarn 82 | ``` 83 | 84 | #### Tests #### 85 | 86 | The project uses [Jest](https://jestjs.io/) for tests (please add tests for any new features). 87 | 88 | ##### Unit Tests ##### 89 | 90 | To run the unit tests execute: 91 | 92 | ``` 93 | $ yarn test 94 | ``` 95 | 96 | These tests can be run in watch mode, listening for any file changes and re-running when that occurs. To do so execute: 97 | 98 | ``` 99 | $ yarn test:watch 100 | ``` 101 | 102 | ##### End To End Tests ##### 103 | 104 | End-to-end tests exist which will test the price-finder module using real URIs, scraping the pages to verify the code works correctly. 105 | 106 | _Note that these tests should be run on a limited basis while coding since some sites have been known to throw up CAPTCHA's after repeated, automated page requests._ 107 | 108 | To execute the end to end tests run: 109 | 110 | ``` 111 | $ yarn test:e2e 112 | ``` 113 | 114 | To execute a specific end to end test run: 115 | 116 | ``` 117 | $ yarn test:e2e:single test/e2e/ 118 | ``` 119 | 120 | #### Adding Sites #### 121 | 122 | This project was built to easily drop in support for new sites. The `site-manager` iterates over all files contained within the `sites` directory, and adds it to the list of available sites. When a request is issued to price-finder to look up a price, it asks each site if the `uri` is supported by the site, and if so, uses that site to find the price. 123 | 124 | 1. Create a new `Site` in `src/sites`: 125 | 126 | ```typescript 127 | export default class MySite implements Site { 128 | 129 | ... 130 | 131 | } 132 | ``` 133 | 134 | 2. Add unit and e2e tests for the site 135 | 136 | - unit: `test/unit/sites/MySite.test.ts` 137 | 138 | - e2e: `test/e2e/MySite.e2e.test.ts` 139 | 140 | 3. Add site to [Supported Sites](#supported-sites) 141 | 142 | 4. Create pull request to submit! 143 | 144 | #### Releasing #### 145 | 146 | (These notes require admin permissions) 147 | 148 | 1. Update `package.json` with new version. 149 | 150 | 2. Update `CHANGELOG.md` with new version along with included PRs and short description. 151 | 152 | 3. Run `yarn build` 153 | 154 | 4. Create pull request for release with updated files. Merge. 155 | 156 | 5. Git tag: 157 | 158 | ``` 159 | $ git tag -a < version > 160 | (enter in message "Tag < version >" and include changelog message) 161 | 162 | $ git show < version > (shows data on specific tag) 163 | 164 | $ git push origin —tags (push all tags to remote) 165 | ``` 166 | 167 | 6. GitHub release: 168 | 169 | * Go to releases, click "Draft a new release" 170 | * Select the tag from the drop down list 171 | * Release title is version: "< version >" 172 | * Description is changelog message 173 | 174 | 7. npm publish: 175 | 176 | ``` 177 | $ npm publish 178 | ``` 179 | 180 | ## Etc ## 181 | 182 | - [Contributors](https://github.com/dylants/price-finder/graphs/contributors) 183 | - [![License][license-image]][license-url] 184 | - [![Node Version][node-image]][node-url] 185 | 186 | [npm-image]: https://img.shields.io/npm/v/price-finder.svg 187 | [npm-url]: https://npmjs.org/package/price-finder 188 | [downloads-image]: https://img.shields.io/npm/dm/price-finder.svg 189 | [downloads-url]: https://npmjs.org/package/price-finder 190 | [license-image]: https://img.shields.io/github/license/dylants/price-finder.svg 191 | [license-url]: LICENSE 192 | [node-image]: https://img.shields.io/node/v/price-finder.svg 193 | [node-url]: https://npmjs.org/package/price-finder 194 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # v6.0.0-alpha.3 2 | 3 | - [#144](https://github.com/dylants/price-finder/pull/144) chore: update readme: creating new site, releasing 4 | - [#145](https://github.com/dylants/price-finder/pull/145) chore: support node 16, single e2e 5 | - [#146](https://github.com/dylants/price-finder/pull/146) feat: add Crutchfield site 6 | 7 | # v6.0.0-alpha.2 8 | 9 | - [#143](https://github.com/dylants/price-finder/pull/143) Include build resources 10 | 11 | # v6.0.0-alpha.1 12 | 13 | - [#141](https://github.com/dylants/price-finder/pull/141) Add support for HomeDepot.com 14 | 15 | # v6.0.0-alpha.0 16 | 17 | - [#137](https://github.com/dylants/price-finder/pull/137) Start of v6, which includes: 18 | * Upgrade the project to use Typescript 19 | * Switch to using Jest for tests, and remove Travis in place of Github Actions 20 | * Change the main signature of PriceFinder to return a Promise, rather than use callbacks 21 | * Reduce the scope of PriceFinder to solely return the item's price 22 | * All the Sites needed updating, so remove the legacy and start anew, with only Amazon 23 | * Remove Eslint and replace it with Rome 24 | - [#138](https://github.com/dylants/price-finder/pull/138) Fixes for npm publish 25 | 26 | # v5.0.2 27 | 28 | Bug Fixes: 29 | 30 | - [#125](https://github.com/dylants/price-finder/pull/125) Amazon fixes: add selectors for price and category 31 | - [#126](https://github.com/dylants/price-finder/pull/126) Update dependencies 32 | - [#127](https://github.com/dylants/price-finder/pull/127) Enable end to end tests in CI. Fix Crutchfield and Best Buy (re-enabling support). 33 | 34 | 35 | # v5.0.1 36 | 37 | Bug Fixes: 38 | 39 | - [#122](https://github.com/dylants/price-finder/pull/122) Fix sites, update dependencies. Also disable some e2e tests for Best Buy (support for this site is unknown at this time). 40 | 41 | # v5.0.0 42 | 43 | New Features and Bug Fixes: 44 | 45 | - [#120](https://github.com/dylants/price-finder/pull/120) **Breaking Change:** Update dependencies, fix broken sites, fix linting errors, remove support for Node 4 and 6. Also disable some e2e tests for Greenman Gaming, Infibeam, and Priceminister (support for those sites is unknown at this time). Closes [#119](https://github.com/dylants/price-finder/issues/119) 46 | 47 | 48 | # v4.3.1 49 | 50 | Bug Fixes: 51 | 52 | - [#114](https://github.com/dylants/price-finder/pull/114) Amazon fixes, e2e fixes, closes [#112](https://github.com/dylants/price-finder/issues/112) and [#113](https://github.com/dylants/price-finder/issues/113) 53 | 54 | # v4.3.0 55 | 56 | New Features: 57 | 58 | - [#105](https://github.com/dylants/price-finder/pull/105) Add support for Thinkgeek (@maxmill) 59 | 60 | Additional changes made in this release: 61 | 62 | - [#109](https://github.com/dylants/price-finder/pull/109) Update dependencies / eslint changes 63 | - [#110](https://github.com/dylants/price-finder/pull/110) Remove support for Flipkart 64 | 65 | # v4.2.0 66 | 67 | New Features: 68 | 69 | - [#103](https://github.com/dylants/price-finder/pull/103) Add support for Target.com 70 | 71 | Bug Fixes: 72 | 73 | - [#100](https://github.com/dylants/price-finder/pull/100) Fix Flipkart 74 | - [#101](https://github.com/dylants/price-finder/pull/101) Fix PriceMinister 75 | - [#102](https://github.com/dylants/price-finder/pull/102) Defaults for no currency symbol, fix Amazon video games 76 | 77 | # v4.1.0 78 | 79 | New Features: 80 | 81 | - [#95](https://github.com/dylants/price-finder/pull/95) Add Walmart Support (@rajkumarpb) 82 | 83 | Bug Fixes: 84 | 85 | - [#93](https://github.com/dylants/price-finder/pull/93) Update Best Buy category query 86 | - [#94](https://github.com/dylants/price-finder/pull/94) Site fixes, test fixes, travis improvements 87 | 88 | # v4.0.0 89 | 90 | New Features: 91 | 92 | - [#64](https://github.com/dylants/price-finder/pull/64) **Breaking Change:** Switch from `request` to `superagent` internally, remove HTTP request header configuration support 93 | - [#67](https://github.com/dylants/price-finder/pull/67) Add support for Flipkart (@rajkumarpb) 94 | - [#68](https://github.com/dylants/price-finder/pull/68) Add support for GOG.com 95 | - [#71](https://github.com/dylants/price-finder/pull/71) Snapdeal Added (@rajkumarpb) 96 | - [#74](https://github.com/dylants/price-finder/pull/74) Greenman Gaming Added (@rajkumarpb) 97 | - [#75](https://github.com/dylants/price-finder/pull/75) **Breaking Change:** Best Buy supports both scraping and API, remove API key within price-finder configuration 98 | 99 | Bug Fixes: 100 | 101 | - [#85](https://github.com/dylants/price-finder/pull/85) Attempt to fix PriceMinister e2e tests 102 | 103 | Additional changes made in the release: 104 | 105 | - [#87](https://github.com/dylants/price-finder/pull/87) Move from Jasmine to Mocha for internal tests 106 | 107 | # v3.1.0 108 | 109 | New Features: 110 | 111 | - [#45](https://github.com/dylants/price-finder/pull/45) Add support for Newegg (@rajkumarpb) 112 | - [#55](https://github.com/dylants/price-finder/pull/55) E2E tests: refactor and add to Travis CI 113 | - [#56](https://github.com/dylants/price-finder/pull/56) Add support for Infibeam (@rajkumarpb) 114 | 115 | Bug Fixes: 116 | 117 | - [#50](https://github.com/dylants/price-finder/pull/50) Fix Newegg e2e test, closes [#49](https://github.com/dylants/price-finder/issues/49) 118 | - [#51](https://github.com/dylants/price-finder/pull/51) Correct callback error string, closes [#48](https://github.com/dylants/price-finder/issues/48) 119 | 120 | # v3.0.0 121 | 122 | New Features: 123 | 124 | - [#36](https://github.com/dylants/price-finder/pull/36) **Breaking Change:** Update to ES6 syntax, apply Airbnb style guide, remove support for Node v0.10, v0.12, and iojs, closes [#28](https://github.com/dylants/price-finder/issues/28) 125 | - [#39](https://github.com/dylants/price-finder/pull/39) Add Node v5 test coverage to Travis CI (to go along with Node v4) 126 | - [#40](https://github.com/dylants/price-finder/pull/40) Use `siteUtils.processPrice` where possible, closes [#29](https://github.com/dylants/price-finder/issues/29) 127 | - [#41](https://github.com/dylants/price-finder/pull/41) Add support for Steam (.com), closes [#38](https://github.com/dylants/price-finder/issues/38) 128 | 129 | Bug Fixes: 130 | 131 | - [#43](https://github.com/dylants/price-finder/pull/43) Improve Steam query 132 | 133 | During this release a Yeoman generator was created for help in adding sites: https://github.com/dylants/generator-price-finder-site 134 | 135 | # v2.4.0 136 | 137 | New Features: 138 | 139 | - [#35](https://github.com/dylants/price-finder/pull/35) Add support for GBP prices (@maiis) 140 | 141 | Bug Fixes: 142 | 143 | - [#34](https://github.com/dylants/price-finder/pull/34) Add selector to help find luggage items, closes [#33](https://github.com/dylants/price-finder/issues/33) 144 | 145 | # v2.3.0 146 | 147 | New Features: 148 | 149 | - [#32](https://github.com/dylants/price-finder/pull/32) Add support for Japanese Yen, closes [#30](https://github.com/dylants/price-finder/issues/30) (@devil-tamachan) 150 | 151 | Bug Fixes: 152 | 153 | - [36434ea](https://github.com/dylants/price-finder/commit/36434eaff7f53dc15c08b547646e105b27affdfd) Fix for Amazon books 154 | 155 | # v2.2.0 156 | 157 | New Features: 158 | 159 | - [#23](https://github.com/dylants/price-finder/pull/23) Update Travis CI versions to include Node v4, closes [#20](https://github.com/dylants/price-finder/issues/20) 160 | - [#24](https://github.com/dylants/price-finder/pull/24) Support additional currencies to support additional Amazon sites, closes [#19](https://github.com/dylants/price-finder/issues/19) 161 | - [#26](https://github.com/dylants/price-finder/pull/26) Add support for Nintendo.com, closes [#15](https://github.com/dylants/price-finder/issues/15) 162 | - [cb69abe](https://github.com/dylants/price-finder/commit/cb69abe96bbfe026a12f91947c004c736027cb27) Add `test-e2e-single` npm script 163 | - [c488c9e](https://github.com/dylants/price-finder/commit/c488c9e224f668b50fe01930b33f9eadd0121fc2) Correct license in `package.json` 164 | - [#27](https://github.com/dylants/price-finder/pull/27) Improve PriceMinister scraping (@Shuunen) 165 | 166 | Bug Fixes: 167 | 168 | - [#22](https://github.com/dylants/price-finder/pull/22) Fix for Amazon books accordion, closes [#21](https://github.com/dylants/price-finder/issues/21) 169 | 170 | # v2.1.2 171 | 172 | Bug Fixes: 173 | 174 | - [#16](https://github.com/dylants/price-finder/pull/16) Fix Amazon books price selector, closes [#13](https://github.com/dylants/price-finder/issues/13) 175 | - [#17](https://github.com/dylants/price-finder/pull/17) Fix eBags price selector, closes [#14](https://github.com/dylants/price-finder/issues/14) 176 | 177 | # v2.1.1 178 | 179 | Bug Fixes: 180 | 181 | - Fix locator for Amazon book price, and narrow the scope for the title of a book 182 | 183 | # v2.1.0 184 | 185 | New Features: 186 | 187 | - Support the new `playstation` URLs for the Sony Store 188 | - Add more jshint'ing, include Grunt to test process 189 | - Fully populate the changelog 190 | - Improve error handling for Best Buy site code 191 | - Add support for eBags.com 192 | - Enable debug logging by default for end to end tests 193 | - Update dependencies to latest 194 | 195 | Bug Fixes: 196 | 197 | - Fix the Google Play site to support new page layout for some categories 198 | - Replace stale links in e2e tests 199 | 200 | # v2.0.0 201 | 202 | New Features: 203 | 204 | - Switch Best Buy from a page scrape to an API call to gather price information. For more information on how to obtain an API key, please visit https://developer.bestbuy.com. 205 | - Add change log 206 | 207 | # v1.3.0 208 | 209 | New Features: 210 | 211 | - Add PriceMinister support 212 | 213 | # v1.2.1 214 | 215 | New Features: 216 | 217 | - Update cheerio and debug-caller to latest versions, and internal logger because of the changes. 218 | 219 | # v1.2.0 220 | 221 | New Features: 222 | 223 | - Switch to using debug-caller instead of just debug 224 | - Update dependencies to latest 225 | - Run with 0.12, 0.10, and io.js in Travis 226 | 227 | Bug Fixes: 228 | 229 | - Fix failing e2e test 230 | 231 | # v1.1.1 232 | 233 | Bug Fixes: 234 | 235 | - Includes updates to Amazon and Crutchfield finder logic to account for page changes. 236 | 237 | # v1.1.0 238 | 239 | New Features: 240 | 241 | - Include better support for Amazon books 242 | 243 | # v1.0.0 244 | 245 | Release 1.0.0, move off of the 0.X.X releases (this has been stable long enough). 246 | 247 | New Features: 248 | 249 | - Include support for Crutchfield.com 250 | 251 | Bug Fixes: 252 | 253 | - Minor test fixes 254 | 255 | # v0.4.3 256 | 257 | New Features: 258 | 259 | - Add support for GameStop 260 | - Update readme a bit, include table of contents for documentation section 261 | - Update dependencies to latest 262 | 263 | # v0.4.2 264 | 265 | New Features: 266 | 267 | - Add support for the Sony Entertainment Network Store 268 | 269 | # v0.4.1 270 | 271 | Bug Fixes: 272 | 273 | - Update dependencies to latest 274 | 275 | # v0.4.0 276 | 277 | New Features: 278 | 279 | - Use of debug package for debugging 280 | - New configuration options 281 | - Updated dependencies 282 | 283 | # v0.3.2 284 | 285 | Bug Fixes: 286 | 287 | - Limit the files included in the installed package. 288 | 289 | # v0.3.1 290 | 291 | Bug Fixes: 292 | 293 | - Update dependencies to latest, update code to match dependency changes 294 | 295 | # v0.3.0 296 | 297 | New Features: 298 | 299 | - Export PriceFinder class rather than instance: To allow the user to configure PriceFinder, export the class rather than the instance. The user can then pass in an options object which specifies configuration. Also add a debug parameter which enables debugging the PriceFinder object. 300 | - Update the tests to account for the change. Test the debug parameter. 301 | - Update the readme to include this information, and additional updates while we're at it. 302 | 303 | # v0.2.0 304 | 305 | New Features: 306 | 307 | - Item details (category and item name) support for BestBuy and Google Play Store 308 | - Refactor tests to separate out unit tests and end-to-end tests, which actually test using the price-finder module to find the item details. 309 | 310 | Bug Fixes: 311 | 312 | - Minor fixes. 313 | 314 | # v0.1.1 315 | 316 | Bug Fixes: 317 | 318 | - Includes bug fix to read the sites files using the __dirname value for relative lookup. 319 | 320 | # v0.1.0 321 | 322 | Initial release of price-finder, which includes support for: 323 | 324 | - Amazon (price and item details) 325 | - Google Play (only price) 326 | - Best Buy (only price) 327 | 328 | Please see the README for more information. 329 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.2.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" 8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.1.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": 14 | version "7.18.6" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 16 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 17 | dependencies: 18 | "@babel/highlight" "^7.18.6" 19 | 20 | "@babel/compat-data@^7.20.0": 21 | version "7.20.1" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.1.tgz#f2e6ef7790d8c8dbf03d379502dcc246dcce0b30" 23 | integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== 24 | 25 | "@babel/core@^7.11.6", "@babel/core@^7.12.3": 26 | version "7.20.2" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" 28 | integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== 29 | dependencies: 30 | "@ampproject/remapping" "^2.1.0" 31 | "@babel/code-frame" "^7.18.6" 32 | "@babel/generator" "^7.20.2" 33 | "@babel/helper-compilation-targets" "^7.20.0" 34 | "@babel/helper-module-transforms" "^7.20.2" 35 | "@babel/helpers" "^7.20.1" 36 | "@babel/parser" "^7.20.2" 37 | "@babel/template" "^7.18.10" 38 | "@babel/traverse" "^7.20.1" 39 | "@babel/types" "^7.20.2" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.1" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.20.1", "@babel/generator@^7.20.2", "@babel/generator@^7.7.2": 47 | version "7.20.4" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.4.tgz#4d9f8f0c30be75fd90a0562099a26e5839602ab8" 49 | integrity sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA== 50 | dependencies: 51 | "@babel/types" "^7.20.2" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | jsesc "^2.5.1" 54 | 55 | "@babel/helper-compilation-targets@^7.20.0": 56 | version "7.20.0" 57 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" 58 | integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== 59 | dependencies: 60 | "@babel/compat-data" "^7.20.0" 61 | "@babel/helper-validator-option" "^7.18.6" 62 | browserslist "^4.21.3" 63 | semver "^6.3.0" 64 | 65 | "@babel/helper-environment-visitor@^7.18.9": 66 | version "7.18.9" 67 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 68 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 69 | 70 | "@babel/helper-function-name@^7.19.0": 71 | version "7.19.0" 72 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" 73 | integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== 74 | dependencies: 75 | "@babel/template" "^7.18.10" 76 | "@babel/types" "^7.19.0" 77 | 78 | "@babel/helper-hoist-variables@^7.18.6": 79 | version "7.18.6" 80 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" 81 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== 82 | dependencies: 83 | "@babel/types" "^7.18.6" 84 | 85 | "@babel/helper-module-imports@^7.18.6": 86 | version "7.18.6" 87 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" 88 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== 89 | dependencies: 90 | "@babel/types" "^7.18.6" 91 | 92 | "@babel/helper-module-transforms@^7.20.2": 93 | version "7.20.2" 94 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" 95 | integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== 96 | dependencies: 97 | "@babel/helper-environment-visitor" "^7.18.9" 98 | "@babel/helper-module-imports" "^7.18.6" 99 | "@babel/helper-simple-access" "^7.20.2" 100 | "@babel/helper-split-export-declaration" "^7.18.6" 101 | "@babel/helper-validator-identifier" "^7.19.1" 102 | "@babel/template" "^7.18.10" 103 | "@babel/traverse" "^7.20.1" 104 | "@babel/types" "^7.20.2" 105 | 106 | "@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.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": 107 | version "7.20.2" 108 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" 109 | integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== 110 | 111 | "@babel/helper-simple-access@^7.20.2": 112 | version "7.20.2" 113 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" 114 | integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== 115 | dependencies: 116 | "@babel/types" "^7.20.2" 117 | 118 | "@babel/helper-split-export-declaration@^7.18.6": 119 | version "7.18.6" 120 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 121 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 122 | dependencies: 123 | "@babel/types" "^7.18.6" 124 | 125 | "@babel/helper-string-parser@^7.19.4": 126 | version "7.19.4" 127 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" 128 | integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== 129 | 130 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": 131 | version "7.19.1" 132 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 133 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 134 | 135 | "@babel/helper-validator-option@^7.18.6": 136 | version "7.18.6" 137 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" 138 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== 139 | 140 | "@babel/helpers@^7.20.1": 141 | version "7.20.1" 142 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.1.tgz#2ab7a0fcb0a03b5bf76629196ed63c2d7311f4c9" 143 | integrity sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg== 144 | dependencies: 145 | "@babel/template" "^7.18.10" 146 | "@babel/traverse" "^7.20.1" 147 | "@babel/types" "^7.20.0" 148 | 149 | "@babel/highlight@^7.18.6": 150 | version "7.18.6" 151 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 152 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 153 | dependencies: 154 | "@babel/helper-validator-identifier" "^7.18.6" 155 | chalk "^2.0.0" 156 | js-tokens "^4.0.0" 157 | 158 | "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2": 159 | version "7.20.3" 160 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" 161 | integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== 162 | 163 | "@babel/plugin-syntax-async-generators@^7.8.4": 164 | version "7.8.4" 165 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 166 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 167 | dependencies: 168 | "@babel/helper-plugin-utils" "^7.8.0" 169 | 170 | "@babel/plugin-syntax-bigint@^7.8.3": 171 | version "7.8.3" 172 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 173 | integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 174 | dependencies: 175 | "@babel/helper-plugin-utils" "^7.8.0" 176 | 177 | "@babel/plugin-syntax-class-properties@^7.8.3": 178 | version "7.12.13" 179 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 180 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 181 | dependencies: 182 | "@babel/helper-plugin-utils" "^7.12.13" 183 | 184 | "@babel/plugin-syntax-import-meta@^7.8.3": 185 | version "7.10.4" 186 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 187 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 188 | dependencies: 189 | "@babel/helper-plugin-utils" "^7.10.4" 190 | 191 | "@babel/plugin-syntax-json-strings@^7.8.3": 192 | version "7.8.3" 193 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 194 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 195 | dependencies: 196 | "@babel/helper-plugin-utils" "^7.8.0" 197 | 198 | "@babel/plugin-syntax-jsx@^7.7.2": 199 | version "7.18.6" 200 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" 201 | integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== 202 | dependencies: 203 | "@babel/helper-plugin-utils" "^7.18.6" 204 | 205 | "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": 206 | version "7.10.4" 207 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 208 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 209 | dependencies: 210 | "@babel/helper-plugin-utils" "^7.10.4" 211 | 212 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 213 | version "7.8.3" 214 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 215 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 216 | dependencies: 217 | "@babel/helper-plugin-utils" "^7.8.0" 218 | 219 | "@babel/plugin-syntax-numeric-separator@^7.8.3": 220 | version "7.10.4" 221 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 222 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 223 | dependencies: 224 | "@babel/helper-plugin-utils" "^7.10.4" 225 | 226 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 227 | version "7.8.3" 228 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 229 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 230 | dependencies: 231 | "@babel/helper-plugin-utils" "^7.8.0" 232 | 233 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 234 | version "7.8.3" 235 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 236 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 237 | dependencies: 238 | "@babel/helper-plugin-utils" "^7.8.0" 239 | 240 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 241 | version "7.8.3" 242 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 243 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 244 | dependencies: 245 | "@babel/helper-plugin-utils" "^7.8.0" 246 | 247 | "@babel/plugin-syntax-top-level-await@^7.8.3": 248 | version "7.14.5" 249 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 250 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 251 | dependencies: 252 | "@babel/helper-plugin-utils" "^7.14.5" 253 | 254 | "@babel/plugin-syntax-typescript@^7.7.2": 255 | version "7.20.0" 256 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" 257 | integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== 258 | dependencies: 259 | "@babel/helper-plugin-utils" "^7.19.0" 260 | 261 | "@babel/template@^7.18.10", "@babel/template@^7.3.3": 262 | version "7.18.10" 263 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" 264 | integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== 265 | dependencies: 266 | "@babel/code-frame" "^7.18.6" 267 | "@babel/parser" "^7.18.10" 268 | "@babel/types" "^7.18.10" 269 | 270 | "@babel/traverse@^7.20.1", "@babel/traverse@^7.7.2": 271 | version "7.20.1" 272 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" 273 | integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== 274 | dependencies: 275 | "@babel/code-frame" "^7.18.6" 276 | "@babel/generator" "^7.20.1" 277 | "@babel/helper-environment-visitor" "^7.18.9" 278 | "@babel/helper-function-name" "^7.19.0" 279 | "@babel/helper-hoist-variables" "^7.18.6" 280 | "@babel/helper-split-export-declaration" "^7.18.6" 281 | "@babel/parser" "^7.20.1" 282 | "@babel/types" "^7.20.0" 283 | debug "^4.1.0" 284 | globals "^11.1.0" 285 | 286 | "@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3": 287 | version "7.20.2" 288 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" 289 | integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== 290 | dependencies: 291 | "@babel/helper-string-parser" "^7.19.4" 292 | "@babel/helper-validator-identifier" "^7.19.1" 293 | to-fast-properties "^2.0.0" 294 | 295 | "@bcoe/v8-coverage@^0.2.3": 296 | version "0.2.3" 297 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 298 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 299 | 300 | "@cspotcode/source-map-support@^0.8.0": 301 | version "0.8.1" 302 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 303 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 304 | dependencies: 305 | "@jridgewell/trace-mapping" "0.3.9" 306 | 307 | "@isaacs/cliui@^8.0.2": 308 | version "8.0.2" 309 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" 310 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== 311 | dependencies: 312 | string-width "^5.1.2" 313 | string-width-cjs "npm:string-width@^4.2.0" 314 | strip-ansi "^7.0.1" 315 | strip-ansi-cjs "npm:strip-ansi@^6.0.1" 316 | wrap-ansi "^8.1.0" 317 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" 318 | 319 | "@istanbuljs/load-nyc-config@^1.0.0": 320 | version "1.1.0" 321 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 322 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 323 | dependencies: 324 | camelcase "^5.3.1" 325 | find-up "^4.1.0" 326 | get-package-type "^0.1.0" 327 | js-yaml "^3.13.1" 328 | resolve-from "^5.0.0" 329 | 330 | "@istanbuljs/schema@^0.1.2": 331 | version "0.1.3" 332 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 333 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 334 | 335 | "@jest/console@^29.3.1": 336 | version "29.3.1" 337 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.3.1.tgz#3e3f876e4e47616ea3b1464b9fbda981872e9583" 338 | integrity sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg== 339 | dependencies: 340 | "@jest/types" "^29.3.1" 341 | "@types/node" "*" 342 | chalk "^4.0.0" 343 | jest-message-util "^29.3.1" 344 | jest-util "^29.3.1" 345 | slash "^3.0.0" 346 | 347 | "@jest/core@^29.3.1": 348 | version "29.3.1" 349 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.3.1.tgz#bff00f413ff0128f4debec1099ba7dcd649774a1" 350 | integrity sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw== 351 | dependencies: 352 | "@jest/console" "^29.3.1" 353 | "@jest/reporters" "^29.3.1" 354 | "@jest/test-result" "^29.3.1" 355 | "@jest/transform" "^29.3.1" 356 | "@jest/types" "^29.3.1" 357 | "@types/node" "*" 358 | ansi-escapes "^4.2.1" 359 | chalk "^4.0.0" 360 | ci-info "^3.2.0" 361 | exit "^0.1.2" 362 | graceful-fs "^4.2.9" 363 | jest-changed-files "^29.2.0" 364 | jest-config "^29.3.1" 365 | jest-haste-map "^29.3.1" 366 | jest-message-util "^29.3.1" 367 | jest-regex-util "^29.2.0" 368 | jest-resolve "^29.3.1" 369 | jest-resolve-dependencies "^29.3.1" 370 | jest-runner "^29.3.1" 371 | jest-runtime "^29.3.1" 372 | jest-snapshot "^29.3.1" 373 | jest-util "^29.3.1" 374 | jest-validate "^29.3.1" 375 | jest-watcher "^29.3.1" 376 | micromatch "^4.0.4" 377 | pretty-format "^29.3.1" 378 | slash "^3.0.0" 379 | strip-ansi "^6.0.0" 380 | 381 | "@jest/environment@^29.3.1": 382 | version "29.3.1" 383 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.3.1.tgz#eb039f726d5fcd14698acd072ac6576d41cfcaa6" 384 | integrity sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag== 385 | dependencies: 386 | "@jest/fake-timers" "^29.3.1" 387 | "@jest/types" "^29.3.1" 388 | "@types/node" "*" 389 | jest-mock "^29.3.1" 390 | 391 | "@jest/expect-utils@^29.3.1": 392 | version "29.3.1" 393 | resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.3.1.tgz#531f737039e9b9e27c42449798acb5bba01935b6" 394 | integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g== 395 | dependencies: 396 | jest-get-type "^29.2.0" 397 | 398 | "@jest/expect@^29.3.1": 399 | version "29.3.1" 400 | resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.3.1.tgz#456385b62894349c1d196f2d183e3716d4c6a6cd" 401 | integrity sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg== 402 | dependencies: 403 | expect "^29.3.1" 404 | jest-snapshot "^29.3.1" 405 | 406 | "@jest/fake-timers@^29.3.1": 407 | version "29.3.1" 408 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.3.1.tgz#b140625095b60a44de820876d4c14da1aa963f67" 409 | integrity sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A== 410 | dependencies: 411 | "@jest/types" "^29.3.1" 412 | "@sinonjs/fake-timers" "^9.1.2" 413 | "@types/node" "*" 414 | jest-message-util "^29.3.1" 415 | jest-mock "^29.3.1" 416 | jest-util "^29.3.1" 417 | 418 | "@jest/globals@^29.3.1": 419 | version "29.3.1" 420 | resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.3.1.tgz#92be078228e82d629df40c3656d45328f134a0c6" 421 | integrity sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q== 422 | dependencies: 423 | "@jest/environment" "^29.3.1" 424 | "@jest/expect" "^29.3.1" 425 | "@jest/types" "^29.3.1" 426 | jest-mock "^29.3.1" 427 | 428 | "@jest/reporters@^29.3.1": 429 | version "29.3.1" 430 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.3.1.tgz#9a6d78c109608e677c25ddb34f907b90e07b4310" 431 | integrity sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA== 432 | dependencies: 433 | "@bcoe/v8-coverage" "^0.2.3" 434 | "@jest/console" "^29.3.1" 435 | "@jest/test-result" "^29.3.1" 436 | "@jest/transform" "^29.3.1" 437 | "@jest/types" "^29.3.1" 438 | "@jridgewell/trace-mapping" "^0.3.15" 439 | "@types/node" "*" 440 | chalk "^4.0.0" 441 | collect-v8-coverage "^1.0.0" 442 | exit "^0.1.2" 443 | glob "^7.1.3" 444 | graceful-fs "^4.2.9" 445 | istanbul-lib-coverage "^3.0.0" 446 | istanbul-lib-instrument "^5.1.0" 447 | istanbul-lib-report "^3.0.0" 448 | istanbul-lib-source-maps "^4.0.0" 449 | istanbul-reports "^3.1.3" 450 | jest-message-util "^29.3.1" 451 | jest-util "^29.3.1" 452 | jest-worker "^29.3.1" 453 | slash "^3.0.0" 454 | string-length "^4.0.1" 455 | strip-ansi "^6.0.0" 456 | v8-to-istanbul "^9.0.1" 457 | 458 | "@jest/schemas@^29.0.0": 459 | version "29.0.0" 460 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" 461 | integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== 462 | dependencies: 463 | "@sinclair/typebox" "^0.24.1" 464 | 465 | "@jest/source-map@^29.2.0": 466 | version "29.2.0" 467 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" 468 | integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ== 469 | dependencies: 470 | "@jridgewell/trace-mapping" "^0.3.15" 471 | callsites "^3.0.0" 472 | graceful-fs "^4.2.9" 473 | 474 | "@jest/test-result@^29.3.1": 475 | version "29.3.1" 476 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.3.1.tgz#92cd5099aa94be947560a24610aa76606de78f50" 477 | integrity sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw== 478 | dependencies: 479 | "@jest/console" "^29.3.1" 480 | "@jest/types" "^29.3.1" 481 | "@types/istanbul-lib-coverage" "^2.0.0" 482 | collect-v8-coverage "^1.0.0" 483 | 484 | "@jest/test-sequencer@^29.3.1": 485 | version "29.3.1" 486 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.3.1.tgz#fa24b3b050f7a59d48f7ef9e0b782ab65123090d" 487 | integrity sha512-IqYvLbieTv20ArgKoAMyhLHNrVHJfzO6ARZAbQRlY4UGWfdDnLlZEF0BvKOMd77uIiIjSZRwq3Jb3Fa3I8+2UA== 488 | dependencies: 489 | "@jest/test-result" "^29.3.1" 490 | graceful-fs "^4.2.9" 491 | jest-haste-map "^29.3.1" 492 | slash "^3.0.0" 493 | 494 | "@jest/transform@^29.3.1": 495 | version "29.3.1" 496 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.3.1.tgz#1e6bd3da4af50b5c82a539b7b1f3770568d6e36d" 497 | integrity sha512-8wmCFBTVGYqFNLWfcOWoVuMuKYPUBTnTMDkdvFtAYELwDOl9RGwOsvQWGPFxDJ8AWY9xM/8xCXdqmPK3+Q5Lug== 498 | dependencies: 499 | "@babel/core" "^7.11.6" 500 | "@jest/types" "^29.3.1" 501 | "@jridgewell/trace-mapping" "^0.3.15" 502 | babel-plugin-istanbul "^6.1.1" 503 | chalk "^4.0.0" 504 | convert-source-map "^2.0.0" 505 | fast-json-stable-stringify "^2.1.0" 506 | graceful-fs "^4.2.9" 507 | jest-haste-map "^29.3.1" 508 | jest-regex-util "^29.2.0" 509 | jest-util "^29.3.1" 510 | micromatch "^4.0.4" 511 | pirates "^4.0.4" 512 | slash "^3.0.0" 513 | write-file-atomic "^4.0.1" 514 | 515 | "@jest/types@^29.3.1": 516 | version "29.3.1" 517 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" 518 | integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== 519 | dependencies: 520 | "@jest/schemas" "^29.0.0" 521 | "@types/istanbul-lib-coverage" "^2.0.0" 522 | "@types/istanbul-reports" "^3.0.0" 523 | "@types/node" "*" 524 | "@types/yargs" "^17.0.8" 525 | chalk "^4.0.0" 526 | 527 | "@jridgewell/gen-mapping@^0.1.0": 528 | version "0.1.1" 529 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" 530 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 531 | dependencies: 532 | "@jridgewell/set-array" "^1.0.0" 533 | "@jridgewell/sourcemap-codec" "^1.4.10" 534 | 535 | "@jridgewell/gen-mapping@^0.3.2": 536 | version "0.3.2" 537 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 538 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 539 | dependencies: 540 | "@jridgewell/set-array" "^1.0.1" 541 | "@jridgewell/sourcemap-codec" "^1.4.10" 542 | "@jridgewell/trace-mapping" "^0.3.9" 543 | 544 | "@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": 545 | version "3.1.0" 546 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 547 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 548 | 549 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": 550 | version "1.1.2" 551 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 552 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 553 | 554 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 555 | version "1.4.14" 556 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 557 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 558 | 559 | "@jridgewell/trace-mapping@0.3.9": 560 | version "0.3.9" 561 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 562 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 563 | dependencies: 564 | "@jridgewell/resolve-uri" "^3.0.3" 565 | "@jridgewell/sourcemap-codec" "^1.4.10" 566 | 567 | "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": 568 | version "0.3.17" 569 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 570 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 571 | dependencies: 572 | "@jridgewell/resolve-uri" "3.1.0" 573 | "@jridgewell/sourcemap-codec" "1.4.14" 574 | 575 | "@pkgjs/parseargs@^0.11.0": 576 | version "0.11.0" 577 | resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" 578 | integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== 579 | 580 | "@rometools/cli-darwin-arm64@12.1.3": 581 | version "12.1.3" 582 | resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-arm64/-/cli-darwin-arm64-12.1.3.tgz#b00fe225e34047c4dac63588e237b11ebec47694" 583 | integrity sha512-AmFTUDYjBuEGQp/Wwps+2cqUr+qhR7gyXAUnkL5psCuNCz3807TrUq/ecOoct5MIavGJTH6R4aaSL6+f+VlBEg== 584 | 585 | "@rometools/cli-darwin-x64@12.1.3": 586 | version "12.1.3" 587 | resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-x64/-/cli-darwin-x64-12.1.3.tgz#e5bbf02afb1aab7447e743092245dea992b4b29f" 588 | integrity sha512-k8MbWna8q4LRlb005N2X+JS1UQ+s3ZLBBvwk4fP8TBxlAJXUz17jLLu/Fi+7DTTEmMhM84TWj4FDKW+rNar28g== 589 | 590 | "@rometools/cli-linux-arm64@12.1.3": 591 | version "12.1.3" 592 | resolved "https://registry.yarnpkg.com/@rometools/cli-linux-arm64/-/cli-linux-arm64-12.1.3.tgz#e75b01b74c134edc811e21fa7e1e440602930d59" 593 | integrity sha512-X/uLhJ2/FNA3nu5TiyeNPqiD3OZoFfNfRvw6a3ut0jEREPvEn72NI7WPijH/gxSz55znfQ7UQ6iM4DZumUknJg== 594 | 595 | "@rometools/cli-linux-x64@12.1.3": 596 | version "12.1.3" 597 | resolved "https://registry.yarnpkg.com/@rometools/cli-linux-x64/-/cli-linux-x64-12.1.3.tgz#2b9f4a68079783f275d4d27df83e4fa2220ec6fc" 598 | integrity sha512-csP17q1eWiUXx9z6Jr/JJPibkplyKIwiWPYNzvPCGE8pHlKhwZj3YHRuu7Dm/4EOqx0XFIuqqWZUYm9bkIC8xg== 599 | 600 | "@rometools/cli-win32-arm64@12.1.3": 601 | version "12.1.3" 602 | resolved "https://registry.yarnpkg.com/@rometools/cli-win32-arm64/-/cli-win32-arm64-12.1.3.tgz#714acb67ac4ea4c15e2bc6aea4dd290c76c8efc6" 603 | integrity sha512-RymHWeod57EBOJY4P636CgUwYA6BQdkQjh56XKk4pLEHO6X1bFyMet2XL7KlHw5qOTalzuzf5jJqUs+vf3jdXQ== 604 | 605 | "@rometools/cli-win32-x64@12.1.3": 606 | version "12.1.3" 607 | resolved "https://registry.yarnpkg.com/@rometools/cli-win32-x64/-/cli-win32-x64-12.1.3.tgz#b4f53491d2ca8f1234b3613b7cc73418ad8d76bb" 608 | integrity sha512-yHSKYidqJMV9nADqg78GYA+cZ0hS1twANAjiFibQdXj9aGzD+s/IzIFEIi/U/OBLvWYg/SCw0QVozi2vTlKFDQ== 609 | 610 | "@sinclair/typebox@^0.24.1": 611 | version "0.24.51" 612 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" 613 | integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== 614 | 615 | "@sinonjs/commons@^1.7.0": 616 | version "1.8.5" 617 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.5.tgz#e280c94c95f206dcfd5aca00a43f2156b758c764" 618 | integrity sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA== 619 | dependencies: 620 | type-detect "4.0.8" 621 | 622 | "@sinonjs/fake-timers@^9.1.2": 623 | version "9.1.2" 624 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" 625 | integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== 626 | dependencies: 627 | "@sinonjs/commons" "^1.7.0" 628 | 629 | "@tsconfig/node10@^1.0.7": 630 | version "1.0.9" 631 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 632 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 633 | 634 | "@tsconfig/node12@^1.0.7": 635 | version "1.0.11" 636 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 637 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 638 | 639 | "@tsconfig/node14@^1.0.0": 640 | version "1.0.3" 641 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 642 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 643 | 644 | "@tsconfig/node16@^1.0.2": 645 | version "1.0.3" 646 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" 647 | integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== 648 | 649 | "@tsconfig/node18@1.0.1": 650 | version "1.0.1" 651 | resolved "https://registry.yarnpkg.com/@tsconfig/node18/-/node18-1.0.1.tgz#ea5b375a9ead6b09ccbd70c3894ea069829ea1bb" 652 | integrity sha512-sNFeK6X2ATlhlvzyH4kKYQlfHXE2f2/wxtB9ClvYXevWpmwkUT7VaSrjIN9E76Qebz8qP5JOJJ9jD3QoD/Z9TA== 653 | 654 | "@types/accounting@0.4.2": 655 | version "0.4.2" 656 | resolved "https://registry.yarnpkg.com/@types/accounting/-/accounting-0.4.2.tgz#81239fc56bc62511a3d3ff535dde2e0bbf3c53c1" 657 | integrity sha512-M8W6tsLZguGdRaSQMmg58PUM/5HgoDuBGVyMiYNGi0FZkLzJDjUBGGYRYj1J9OWELCTqfux+ogVyKObCzfWJgg== 658 | 659 | "@types/async@3.2.15": 660 | version "3.2.15" 661 | resolved "https://registry.yarnpkg.com/@types/async/-/async-3.2.15.tgz#26d4768fdda0e466f18d6c9918ca28cc89a4e1fe" 662 | integrity sha512-PAmPfzvFA31mRoqZyTVsgJMsvbynR429UTTxhmfsUCrWGh3/fxOrzqBtaTPJsn4UtzTv4Vb0+/O7CARWb69N4g== 663 | 664 | "@types/babel__core@^7.1.14": 665 | version "7.1.20" 666 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.20.tgz#e168cdd612c92a2d335029ed62ac94c95b362359" 667 | integrity sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ== 668 | dependencies: 669 | "@babel/parser" "^7.1.0" 670 | "@babel/types" "^7.0.0" 671 | "@types/babel__generator" "*" 672 | "@types/babel__template" "*" 673 | "@types/babel__traverse" "*" 674 | 675 | "@types/babel__generator@*": 676 | version "7.6.4" 677 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" 678 | integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== 679 | dependencies: 680 | "@babel/types" "^7.0.0" 681 | 682 | "@types/babel__template@*": 683 | version "7.4.1" 684 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" 685 | integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== 686 | dependencies: 687 | "@babel/parser" "^7.1.0" 688 | "@babel/types" "^7.0.0" 689 | 690 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 691 | version "7.18.2" 692 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" 693 | integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== 694 | dependencies: 695 | "@babel/types" "^7.3.0" 696 | 697 | "@types/cookiejar@*": 698 | version "2.1.2" 699 | resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8" 700 | integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== 701 | 702 | "@types/graceful-fs@^4.1.3": 703 | version "4.1.5" 704 | resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" 705 | integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== 706 | dependencies: 707 | "@types/node" "*" 708 | 709 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 710 | version "2.0.4" 711 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" 712 | integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== 713 | 714 | "@types/istanbul-lib-report@*": 715 | version "3.0.0" 716 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 717 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 718 | dependencies: 719 | "@types/istanbul-lib-coverage" "*" 720 | 721 | "@types/istanbul-reports@^3.0.0": 722 | version "3.0.1" 723 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" 724 | integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== 725 | dependencies: 726 | "@types/istanbul-lib-report" "*" 727 | 728 | "@types/jest@29.2.3": 729 | version "29.2.3" 730 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.3.tgz#f5fd88e43e5a9e4221ca361e23790d48fcf0a211" 731 | integrity sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w== 732 | dependencies: 733 | expect "^29.0.0" 734 | pretty-format "^29.0.0" 735 | 736 | "@types/lodash@4.14.190": 737 | version "4.14.190" 738 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.190.tgz#d8e99647af141c63902d0ca53cf2b34d2df33545" 739 | integrity sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw== 740 | 741 | "@types/node@*", "@types/node@18.11.9": 742 | version "18.11.9" 743 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" 744 | integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== 745 | 746 | "@types/prettier@^2.1.5": 747 | version "2.7.1" 748 | resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" 749 | integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== 750 | 751 | "@types/stack-utils@^2.0.0": 752 | version "2.0.1" 753 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" 754 | integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== 755 | 756 | "@types/superagent@4.1.16": 757 | version "4.1.16" 758 | resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.16.tgz#12c9c16f232f9d89beab91d69368f96ce8e2d881" 759 | integrity sha512-tLfnlJf6A5mB6ddqF159GqcDizfzbMUB1/DeT59/wBNqzRTNNKsaw79A/1TZ84X+f/EwWH8FeuSkjlCLyqS/zQ== 760 | dependencies: 761 | "@types/cookiejar" "*" 762 | "@types/node" "*" 763 | 764 | "@types/yargs-parser@*": 765 | version "21.0.0" 766 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" 767 | integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== 768 | 769 | "@types/yargs@^17.0.8": 770 | version "17.0.14" 771 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.14.tgz#0943473052c24bd8cf2d1de25f1a710259327237" 772 | integrity sha512-9Pj7abXoW1RSTcZaL2Hk6G2XyLMlp5ECdVC/Zf2p/KBjC3srijLGgRAXOBjtFrJoIrvxdTKyKDA14bEcbxBaWw== 773 | dependencies: 774 | "@types/yargs-parser" "*" 775 | 776 | abort-controller@^3.0.0: 777 | version "3.0.0" 778 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 779 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 780 | dependencies: 781 | event-target-shim "^5.0.0" 782 | 783 | accounting@0.4.1: 784 | version "0.4.1" 785 | resolved "https://registry.yarnpkg.com/accounting/-/accounting-0.4.1.tgz#87dd4103eff7f4460f1e186f5c677ed6cf566883" 786 | integrity sha512-RU6KY9Y5wllyaCNBo1W11ZOTnTHMMgOZkIwdOOs6W5ibMTp72i4xIbEA48djxVGqMNTUNbvrP/1nWg5Af5m2gQ== 787 | 788 | acorn-walk@^8.1.1: 789 | version "8.2.0" 790 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 791 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 792 | 793 | acorn@^8.4.1: 794 | version "8.8.1" 795 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" 796 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== 797 | 798 | ansi-escapes@^4.2.1: 799 | version "4.3.2" 800 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 801 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 802 | dependencies: 803 | type-fest "^0.21.3" 804 | 805 | ansi-regex@^5.0.1: 806 | version "5.0.1" 807 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 808 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 809 | 810 | ansi-regex@^6.0.1: 811 | version "6.0.1" 812 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" 813 | integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 814 | 815 | ansi-styles@^3.2.1: 816 | version "3.2.1" 817 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 818 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 819 | dependencies: 820 | color-convert "^1.9.0" 821 | 822 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 823 | version "4.3.0" 824 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 825 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 826 | dependencies: 827 | color-convert "^2.0.1" 828 | 829 | ansi-styles@^5.0.0: 830 | version "5.2.0" 831 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 832 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 833 | 834 | ansi-styles@^6.1.0: 835 | version "6.2.1" 836 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 837 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 838 | 839 | anymatch@^3.0.3: 840 | version "3.1.3" 841 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 842 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 843 | dependencies: 844 | normalize-path "^3.0.0" 845 | picomatch "^2.0.4" 846 | 847 | arg@^4.1.0: 848 | version "4.1.3" 849 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 850 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 851 | 852 | argparse@^1.0.7: 853 | version "1.0.10" 854 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 855 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 856 | dependencies: 857 | sprintf-js "~1.0.2" 858 | 859 | asap@^2.0.0: 860 | version "2.0.6" 861 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 862 | integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== 863 | 864 | async@3.2.4: 865 | version "3.2.4" 866 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" 867 | integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== 868 | 869 | asynckit@^0.4.0: 870 | version "0.4.0" 871 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 872 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 873 | 874 | atomic-sleep@^1.0.0: 875 | version "1.0.0" 876 | resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" 877 | integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== 878 | 879 | babel-jest@^29.3.1: 880 | version "29.3.1" 881 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44" 882 | integrity sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA== 883 | dependencies: 884 | "@jest/transform" "^29.3.1" 885 | "@types/babel__core" "^7.1.14" 886 | babel-plugin-istanbul "^6.1.1" 887 | babel-preset-jest "^29.2.0" 888 | chalk "^4.0.0" 889 | graceful-fs "^4.2.9" 890 | slash "^3.0.0" 891 | 892 | babel-plugin-istanbul@^6.1.1: 893 | version "6.1.1" 894 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" 895 | integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== 896 | dependencies: 897 | "@babel/helper-plugin-utils" "^7.0.0" 898 | "@istanbuljs/load-nyc-config" "^1.0.0" 899 | "@istanbuljs/schema" "^0.1.2" 900 | istanbul-lib-instrument "^5.0.4" 901 | test-exclude "^6.0.0" 902 | 903 | babel-plugin-jest-hoist@^29.2.0: 904 | version "29.2.0" 905 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" 906 | integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== 907 | dependencies: 908 | "@babel/template" "^7.3.3" 909 | "@babel/types" "^7.3.3" 910 | "@types/babel__core" "^7.1.14" 911 | "@types/babel__traverse" "^7.0.6" 912 | 913 | babel-preset-current-node-syntax@^1.0.0: 914 | version "1.0.1" 915 | resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" 916 | integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== 917 | dependencies: 918 | "@babel/plugin-syntax-async-generators" "^7.8.4" 919 | "@babel/plugin-syntax-bigint" "^7.8.3" 920 | "@babel/plugin-syntax-class-properties" "^7.8.3" 921 | "@babel/plugin-syntax-import-meta" "^7.8.3" 922 | "@babel/plugin-syntax-json-strings" "^7.8.3" 923 | "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" 924 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 925 | "@babel/plugin-syntax-numeric-separator" "^7.8.3" 926 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 927 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 928 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 929 | "@babel/plugin-syntax-top-level-await" "^7.8.3" 930 | 931 | babel-preset-jest@^29.2.0: 932 | version "29.2.0" 933 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" 934 | integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== 935 | dependencies: 936 | babel-plugin-jest-hoist "^29.2.0" 937 | babel-preset-current-node-syntax "^1.0.0" 938 | 939 | balanced-match@^1.0.0: 940 | version "1.0.2" 941 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 942 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 943 | 944 | base64-js@^1.3.1: 945 | version "1.5.1" 946 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 947 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 948 | 949 | boolbase@^1.0.0: 950 | version "1.0.0" 951 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 952 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 953 | 954 | brace-expansion@^1.1.7: 955 | version "1.1.11" 956 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 957 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 958 | dependencies: 959 | balanced-match "^1.0.0" 960 | concat-map "0.0.1" 961 | 962 | brace-expansion@^2.0.1: 963 | version "2.0.1" 964 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 965 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 966 | dependencies: 967 | balanced-match "^1.0.0" 968 | 969 | braces@^3.0.2: 970 | version "3.0.2" 971 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 972 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 973 | dependencies: 974 | fill-range "^7.0.1" 975 | 976 | browserslist@^4.21.3: 977 | version "4.21.4" 978 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" 979 | integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== 980 | dependencies: 981 | caniuse-lite "^1.0.30001400" 982 | electron-to-chromium "^1.4.251" 983 | node-releases "^2.0.6" 984 | update-browserslist-db "^1.0.9" 985 | 986 | bs-logger@0.x: 987 | version "0.2.6" 988 | resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" 989 | integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== 990 | dependencies: 991 | fast-json-stable-stringify "2.x" 992 | 993 | bser@2.1.1: 994 | version "2.1.1" 995 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 996 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 997 | dependencies: 998 | node-int64 "^0.4.0" 999 | 1000 | buffer-from@^1.0.0: 1001 | version "1.1.2" 1002 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 1003 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 1004 | 1005 | buffer@^6.0.3: 1006 | version "6.0.3" 1007 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 1008 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 1009 | dependencies: 1010 | base64-js "^1.3.1" 1011 | ieee754 "^1.2.1" 1012 | 1013 | call-bind@^1.0.0: 1014 | version "1.0.2" 1015 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 1016 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 1017 | dependencies: 1018 | function-bind "^1.1.1" 1019 | get-intrinsic "^1.0.2" 1020 | 1021 | callsites@^3.0.0: 1022 | version "3.1.0" 1023 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 1024 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 1025 | 1026 | camelcase@^5.3.1: 1027 | version "5.3.1" 1028 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 1029 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 1030 | 1031 | camelcase@^6.2.0: 1032 | version "6.3.0" 1033 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 1034 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 1035 | 1036 | caniuse-lite@^1.0.30001400: 1037 | version "1.0.30001434" 1038 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" 1039 | integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== 1040 | 1041 | chalk@^2.0.0: 1042 | version "2.4.2" 1043 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1044 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1045 | dependencies: 1046 | ansi-styles "^3.2.1" 1047 | escape-string-regexp "^1.0.5" 1048 | supports-color "^5.3.0" 1049 | 1050 | chalk@^4.0.0: 1051 | version "4.1.2" 1052 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1053 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1054 | dependencies: 1055 | ansi-styles "^4.1.0" 1056 | supports-color "^7.1.0" 1057 | 1058 | char-regex@^1.0.2: 1059 | version "1.0.2" 1060 | resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 1061 | integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 1062 | 1063 | cheerio-select@^2.1.0: 1064 | version "2.1.0" 1065 | resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" 1066 | integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== 1067 | dependencies: 1068 | boolbase "^1.0.0" 1069 | css-select "^5.1.0" 1070 | css-what "^6.1.0" 1071 | domelementtype "^2.3.0" 1072 | domhandler "^5.0.3" 1073 | domutils "^3.0.1" 1074 | 1075 | cheerio@1.0.0-rc.12: 1076 | version "1.0.0-rc.12" 1077 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" 1078 | integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== 1079 | dependencies: 1080 | cheerio-select "^2.1.0" 1081 | dom-serializer "^2.0.0" 1082 | domhandler "^5.0.3" 1083 | domutils "^3.0.1" 1084 | htmlparser2 "^8.0.1" 1085 | parse5 "^7.0.0" 1086 | parse5-htmlparser2-tree-adapter "^7.0.0" 1087 | 1088 | ci-info@^3.2.0: 1089 | version "3.7.0" 1090 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.0.tgz#6d01b3696c59915b6ce057e4aa4adfc2fa25f5ef" 1091 | integrity sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog== 1092 | 1093 | cjs-module-lexer@^1.0.0: 1094 | version "1.2.2" 1095 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" 1096 | integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== 1097 | 1098 | cliui@^8.0.1: 1099 | version "8.0.1" 1100 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" 1101 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 1102 | dependencies: 1103 | string-width "^4.2.0" 1104 | strip-ansi "^6.0.1" 1105 | wrap-ansi "^7.0.0" 1106 | 1107 | co@^4.6.0: 1108 | version "4.6.0" 1109 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 1110 | integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== 1111 | 1112 | collect-v8-coverage@^1.0.0: 1113 | version "1.0.1" 1114 | resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" 1115 | integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== 1116 | 1117 | color-convert@^1.9.0: 1118 | version "1.9.3" 1119 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1120 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1121 | dependencies: 1122 | color-name "1.1.3" 1123 | 1124 | color-convert@^2.0.1: 1125 | version "2.0.1" 1126 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1127 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1128 | dependencies: 1129 | color-name "~1.1.4" 1130 | 1131 | color-name@1.1.3: 1132 | version "1.1.3" 1133 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1134 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 1135 | 1136 | color-name@~1.1.4: 1137 | version "1.1.4" 1138 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1139 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1140 | 1141 | combined-stream@^1.0.8: 1142 | version "1.0.8" 1143 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 1144 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 1145 | dependencies: 1146 | delayed-stream "~1.0.0" 1147 | 1148 | component-emitter@^1.3.0: 1149 | version "1.3.0" 1150 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 1151 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 1152 | 1153 | concat-map@0.0.1: 1154 | version "0.0.1" 1155 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1156 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 1157 | 1158 | convert-source-map@^1.6.0, convert-source-map@^1.7.0: 1159 | version "1.9.0" 1160 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 1161 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 1162 | 1163 | convert-source-map@^2.0.0: 1164 | version "2.0.0" 1165 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" 1166 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== 1167 | 1168 | cookiejar@^2.1.3: 1169 | version "2.1.3" 1170 | resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" 1171 | integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== 1172 | 1173 | create-require@^1.1.0: 1174 | version "1.1.1" 1175 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 1176 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 1177 | 1178 | cross-spawn@^7.0.0, cross-spawn@^7.0.3: 1179 | version "7.0.3" 1180 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1181 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 1182 | dependencies: 1183 | path-key "^3.1.0" 1184 | shebang-command "^2.0.0" 1185 | which "^2.0.1" 1186 | 1187 | css-select@^5.1.0: 1188 | version "5.1.0" 1189 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" 1190 | integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== 1191 | dependencies: 1192 | boolbase "^1.0.0" 1193 | css-what "^6.1.0" 1194 | domhandler "^5.0.2" 1195 | domutils "^3.0.1" 1196 | nth-check "^2.0.1" 1197 | 1198 | css-what@^6.1.0: 1199 | version "6.1.0" 1200 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" 1201 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== 1202 | 1203 | debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: 1204 | version "4.3.4" 1205 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1206 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1207 | dependencies: 1208 | ms "2.1.2" 1209 | 1210 | dedent@^0.7.0: 1211 | version "0.7.0" 1212 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 1213 | integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== 1214 | 1215 | deepmerge@^4.2.2: 1216 | version "4.2.2" 1217 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 1218 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 1219 | 1220 | delayed-stream@~1.0.0: 1221 | version "1.0.0" 1222 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1223 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 1224 | 1225 | detect-newline@^3.0.0: 1226 | version "3.1.0" 1227 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 1228 | integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 1229 | 1230 | dezalgo@1.0.3: 1231 | version "1.0.3" 1232 | resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" 1233 | integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== 1234 | dependencies: 1235 | asap "^2.0.0" 1236 | wrappy "1" 1237 | 1238 | diff-sequences@^29.3.1: 1239 | version "29.3.1" 1240 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e" 1241 | integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ== 1242 | 1243 | diff@^4.0.1: 1244 | version "4.0.2" 1245 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 1246 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 1247 | 1248 | dom-serializer@^2.0.0: 1249 | version "2.0.0" 1250 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" 1251 | integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== 1252 | dependencies: 1253 | domelementtype "^2.3.0" 1254 | domhandler "^5.0.2" 1255 | entities "^4.2.0" 1256 | 1257 | domelementtype@^2.3.0: 1258 | version "2.3.0" 1259 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 1260 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 1261 | 1262 | domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: 1263 | version "5.0.3" 1264 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" 1265 | integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== 1266 | dependencies: 1267 | domelementtype "^2.3.0" 1268 | 1269 | domutils@^3.0.1: 1270 | version "3.0.1" 1271 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" 1272 | integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== 1273 | dependencies: 1274 | dom-serializer "^2.0.0" 1275 | domelementtype "^2.3.0" 1276 | domhandler "^5.0.1" 1277 | 1278 | eastasianwidth@^0.2.0: 1279 | version "0.2.0" 1280 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 1281 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 1282 | 1283 | electron-to-chromium@^1.4.251: 1284 | version "1.4.284" 1285 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" 1286 | integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== 1287 | 1288 | emittery@^0.13.1: 1289 | version "0.13.1" 1290 | resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" 1291 | integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== 1292 | 1293 | emoji-regex@^8.0.0: 1294 | version "8.0.0" 1295 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1296 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1297 | 1298 | emoji-regex@^9.2.2: 1299 | version "9.2.2" 1300 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 1301 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 1302 | 1303 | entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: 1304 | version "4.4.0" 1305 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" 1306 | integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== 1307 | 1308 | error-ex@^1.3.1: 1309 | version "1.3.2" 1310 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1311 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1312 | dependencies: 1313 | is-arrayish "^0.2.1" 1314 | 1315 | escalade@^3.1.1: 1316 | version "3.1.1" 1317 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1318 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1319 | 1320 | escape-string-regexp@^1.0.5: 1321 | version "1.0.5" 1322 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1323 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1324 | 1325 | escape-string-regexp@^2.0.0: 1326 | version "2.0.0" 1327 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1328 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1329 | 1330 | esprima@^4.0.0: 1331 | version "4.0.1" 1332 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1333 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1334 | 1335 | event-target-shim@^5.0.0: 1336 | version "5.0.1" 1337 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 1338 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 1339 | 1340 | events@^3.3.0: 1341 | version "3.3.0" 1342 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 1343 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 1344 | 1345 | execa@^5.0.0: 1346 | version "5.1.1" 1347 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1348 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1349 | dependencies: 1350 | cross-spawn "^7.0.3" 1351 | get-stream "^6.0.0" 1352 | human-signals "^2.1.0" 1353 | is-stream "^2.0.0" 1354 | merge-stream "^2.0.0" 1355 | npm-run-path "^4.0.1" 1356 | onetime "^5.1.2" 1357 | signal-exit "^3.0.3" 1358 | strip-final-newline "^2.0.0" 1359 | 1360 | exit@^0.1.2: 1361 | version "0.1.2" 1362 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1363 | integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 1364 | 1365 | expect@^29.0.0, expect@^29.3.1: 1366 | version "29.3.1" 1367 | resolved "https://registry.yarnpkg.com/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6" 1368 | integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA== 1369 | dependencies: 1370 | "@jest/expect-utils" "^29.3.1" 1371 | jest-get-type "^29.2.0" 1372 | jest-matcher-utils "^29.3.1" 1373 | jest-message-util "^29.3.1" 1374 | jest-util "^29.3.1" 1375 | 1376 | fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: 1377 | version "2.1.0" 1378 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1379 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1380 | 1381 | fast-redact@^3.1.1: 1382 | version "3.1.2" 1383 | resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.1.2.tgz#d58e69e9084ce9fa4c1a6fa98a3e1ecf5d7839aa" 1384 | integrity sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw== 1385 | 1386 | fast-safe-stringify@^2.1.1: 1387 | version "2.1.1" 1388 | resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" 1389 | integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== 1390 | 1391 | fb-watchman@^2.0.0: 1392 | version "2.0.2" 1393 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" 1394 | integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== 1395 | dependencies: 1396 | bser "2.1.1" 1397 | 1398 | fill-range@^7.0.1: 1399 | version "7.0.1" 1400 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1401 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1402 | dependencies: 1403 | to-regex-range "^5.0.1" 1404 | 1405 | find-up@^4.0.0, find-up@^4.1.0: 1406 | version "4.1.0" 1407 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1408 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1409 | dependencies: 1410 | locate-path "^5.0.0" 1411 | path-exists "^4.0.0" 1412 | 1413 | foreground-child@^3.1.0: 1414 | version "3.1.1" 1415 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" 1416 | integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== 1417 | dependencies: 1418 | cross-spawn "^7.0.0" 1419 | signal-exit "^4.0.1" 1420 | 1421 | form-data@^4.0.0: 1422 | version "4.0.0" 1423 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 1424 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 1425 | dependencies: 1426 | asynckit "^0.4.0" 1427 | combined-stream "^1.0.8" 1428 | mime-types "^2.1.12" 1429 | 1430 | formidable@^2.0.1: 1431 | version "2.0.1" 1432 | resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" 1433 | integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== 1434 | dependencies: 1435 | dezalgo "1.0.3" 1436 | hexoid "1.0.0" 1437 | once "1.4.0" 1438 | qs "6.9.3" 1439 | 1440 | fs.realpath@^1.0.0: 1441 | version "1.0.0" 1442 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1443 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1444 | 1445 | fsevents@^2.3.2: 1446 | version "2.3.2" 1447 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1448 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1449 | 1450 | function-bind@^1.1.1: 1451 | version "1.1.1" 1452 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1453 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1454 | 1455 | gensync@^1.0.0-beta.2: 1456 | version "1.0.0-beta.2" 1457 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1458 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1459 | 1460 | get-caller-file@^2.0.5: 1461 | version "2.0.5" 1462 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1463 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1464 | 1465 | get-intrinsic@^1.0.2: 1466 | version "1.1.3" 1467 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" 1468 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== 1469 | dependencies: 1470 | function-bind "^1.1.1" 1471 | has "^1.0.3" 1472 | has-symbols "^1.0.3" 1473 | 1474 | get-package-type@^0.1.0: 1475 | version "0.1.0" 1476 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1477 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1478 | 1479 | get-stream@^6.0.0: 1480 | version "6.0.1" 1481 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1482 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1483 | 1484 | glob@^10.2.5: 1485 | version "10.3.3" 1486 | resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b" 1487 | integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw== 1488 | dependencies: 1489 | foreground-child "^3.1.0" 1490 | jackspeak "^2.0.3" 1491 | minimatch "^9.0.1" 1492 | minipass "^5.0.0 || ^6.0.2 || ^7.0.0" 1493 | path-scurry "^1.10.1" 1494 | 1495 | glob@^7.1.3, glob@^7.1.4: 1496 | version "7.2.3" 1497 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1498 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1499 | dependencies: 1500 | fs.realpath "^1.0.0" 1501 | inflight "^1.0.4" 1502 | inherits "2" 1503 | minimatch "^3.1.1" 1504 | once "^1.3.0" 1505 | path-is-absolute "^1.0.0" 1506 | 1507 | globals@^11.1.0: 1508 | version "11.12.0" 1509 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1510 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1511 | 1512 | graceful-fs@^4.2.9: 1513 | version "4.2.10" 1514 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1515 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1516 | 1517 | has-flag@^3.0.0: 1518 | version "3.0.0" 1519 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1520 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1521 | 1522 | has-flag@^4.0.0: 1523 | version "4.0.0" 1524 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1525 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1526 | 1527 | has-symbols@^1.0.3: 1528 | version "1.0.3" 1529 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1530 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1531 | 1532 | has@^1.0.3: 1533 | version "1.0.3" 1534 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1535 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1536 | dependencies: 1537 | function-bind "^1.1.1" 1538 | 1539 | hexoid@1.0.0: 1540 | version "1.0.0" 1541 | resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" 1542 | integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== 1543 | 1544 | html-escaper@^2.0.0: 1545 | version "2.0.2" 1546 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1547 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1548 | 1549 | htmlparser2@^8.0.1: 1550 | version "8.0.1" 1551 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" 1552 | integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== 1553 | dependencies: 1554 | domelementtype "^2.3.0" 1555 | domhandler "^5.0.2" 1556 | domutils "^3.0.1" 1557 | entities "^4.3.0" 1558 | 1559 | human-signals@^2.1.0: 1560 | version "2.1.0" 1561 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1562 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1563 | 1564 | ieee754@^1.2.1: 1565 | version "1.2.1" 1566 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1567 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1568 | 1569 | import-local@^3.0.2: 1570 | version "3.1.0" 1571 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1572 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1573 | dependencies: 1574 | pkg-dir "^4.2.0" 1575 | resolve-cwd "^3.0.0" 1576 | 1577 | imurmurhash@^0.1.4: 1578 | version "0.1.4" 1579 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1580 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1581 | 1582 | inflight@^1.0.4: 1583 | version "1.0.6" 1584 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1585 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1586 | dependencies: 1587 | once "^1.3.0" 1588 | wrappy "1" 1589 | 1590 | inherits@2: 1591 | version "2.0.4" 1592 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1593 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1594 | 1595 | is-arrayish@^0.2.1: 1596 | version "0.2.1" 1597 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1598 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1599 | 1600 | is-core-module@^2.9.0: 1601 | version "2.11.0" 1602 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 1603 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 1604 | dependencies: 1605 | has "^1.0.3" 1606 | 1607 | is-fullwidth-code-point@^3.0.0: 1608 | version "3.0.0" 1609 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1610 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1611 | 1612 | is-generator-fn@^2.0.0: 1613 | version "2.1.0" 1614 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1615 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1616 | 1617 | is-number@^7.0.0: 1618 | version "7.0.0" 1619 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1620 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1621 | 1622 | is-stream@^2.0.0: 1623 | version "2.0.1" 1624 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1625 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1626 | 1627 | isexe@^2.0.0: 1628 | version "2.0.0" 1629 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1630 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1631 | 1632 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: 1633 | version "3.2.0" 1634 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" 1635 | integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== 1636 | 1637 | istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: 1638 | version "5.2.1" 1639 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" 1640 | integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== 1641 | dependencies: 1642 | "@babel/core" "^7.12.3" 1643 | "@babel/parser" "^7.14.7" 1644 | "@istanbuljs/schema" "^0.1.2" 1645 | istanbul-lib-coverage "^3.2.0" 1646 | semver "^6.3.0" 1647 | 1648 | istanbul-lib-report@^3.0.0: 1649 | version "3.0.0" 1650 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1651 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1652 | dependencies: 1653 | istanbul-lib-coverage "^3.0.0" 1654 | make-dir "^3.0.0" 1655 | supports-color "^7.1.0" 1656 | 1657 | istanbul-lib-source-maps@^4.0.0: 1658 | version "4.0.1" 1659 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" 1660 | integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== 1661 | dependencies: 1662 | debug "^4.1.1" 1663 | istanbul-lib-coverage "^3.0.0" 1664 | source-map "^0.6.1" 1665 | 1666 | istanbul-reports@^3.1.3: 1667 | version "3.1.5" 1668 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" 1669 | integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== 1670 | dependencies: 1671 | html-escaper "^2.0.0" 1672 | istanbul-lib-report "^3.0.0" 1673 | 1674 | jackspeak@^2.0.3: 1675 | version "2.2.1" 1676 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" 1677 | integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== 1678 | dependencies: 1679 | "@isaacs/cliui" "^8.0.2" 1680 | optionalDependencies: 1681 | "@pkgjs/parseargs" "^0.11.0" 1682 | 1683 | jest-changed-files@^29.2.0: 1684 | version "29.2.0" 1685 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" 1686 | integrity sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA== 1687 | dependencies: 1688 | execa "^5.0.0" 1689 | p-limit "^3.1.0" 1690 | 1691 | jest-circus@^29.3.1: 1692 | version "29.3.1" 1693 | resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.3.1.tgz#177d07c5c0beae8ef2937a67de68f1e17bbf1b4a" 1694 | integrity sha512-wpr26sEvwb3qQQbdlmei+gzp6yoSSoSL6GsLPxnuayZSMrSd5Ka7IjAvatpIernBvT2+Ic6RLTg+jSebScmasg== 1695 | dependencies: 1696 | "@jest/environment" "^29.3.1" 1697 | "@jest/expect" "^29.3.1" 1698 | "@jest/test-result" "^29.3.1" 1699 | "@jest/types" "^29.3.1" 1700 | "@types/node" "*" 1701 | chalk "^4.0.0" 1702 | co "^4.6.0" 1703 | dedent "^0.7.0" 1704 | is-generator-fn "^2.0.0" 1705 | jest-each "^29.3.1" 1706 | jest-matcher-utils "^29.3.1" 1707 | jest-message-util "^29.3.1" 1708 | jest-runtime "^29.3.1" 1709 | jest-snapshot "^29.3.1" 1710 | jest-util "^29.3.1" 1711 | p-limit "^3.1.0" 1712 | pretty-format "^29.3.1" 1713 | slash "^3.0.0" 1714 | stack-utils "^2.0.3" 1715 | 1716 | jest-cli@^29.3.1: 1717 | version "29.3.1" 1718 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.3.1.tgz#e89dff427db3b1df50cea9a393ebd8640790416d" 1719 | integrity sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ== 1720 | dependencies: 1721 | "@jest/core" "^29.3.1" 1722 | "@jest/test-result" "^29.3.1" 1723 | "@jest/types" "^29.3.1" 1724 | chalk "^4.0.0" 1725 | exit "^0.1.2" 1726 | graceful-fs "^4.2.9" 1727 | import-local "^3.0.2" 1728 | jest-config "^29.3.1" 1729 | jest-util "^29.3.1" 1730 | jest-validate "^29.3.1" 1731 | prompts "^2.0.1" 1732 | yargs "^17.3.1" 1733 | 1734 | jest-config@^29.3.1: 1735 | version "29.3.1" 1736 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.3.1.tgz#0bc3dcb0959ff8662957f1259947aedaefb7f3c6" 1737 | integrity sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg== 1738 | dependencies: 1739 | "@babel/core" "^7.11.6" 1740 | "@jest/test-sequencer" "^29.3.1" 1741 | "@jest/types" "^29.3.1" 1742 | babel-jest "^29.3.1" 1743 | chalk "^4.0.0" 1744 | ci-info "^3.2.0" 1745 | deepmerge "^4.2.2" 1746 | glob "^7.1.3" 1747 | graceful-fs "^4.2.9" 1748 | jest-circus "^29.3.1" 1749 | jest-environment-node "^29.3.1" 1750 | jest-get-type "^29.2.0" 1751 | jest-regex-util "^29.2.0" 1752 | jest-resolve "^29.3.1" 1753 | jest-runner "^29.3.1" 1754 | jest-util "^29.3.1" 1755 | jest-validate "^29.3.1" 1756 | micromatch "^4.0.4" 1757 | parse-json "^5.2.0" 1758 | pretty-format "^29.3.1" 1759 | slash "^3.0.0" 1760 | strip-json-comments "^3.1.1" 1761 | 1762 | jest-diff@^29.3.1: 1763 | version "29.3.1" 1764 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.3.1.tgz#d8215b72fed8f1e647aed2cae6c752a89e757527" 1765 | integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw== 1766 | dependencies: 1767 | chalk "^4.0.0" 1768 | diff-sequences "^29.3.1" 1769 | jest-get-type "^29.2.0" 1770 | pretty-format "^29.3.1" 1771 | 1772 | jest-docblock@^29.2.0: 1773 | version "29.2.0" 1774 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" 1775 | integrity sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A== 1776 | dependencies: 1777 | detect-newline "^3.0.0" 1778 | 1779 | jest-each@^29.3.1: 1780 | version "29.3.1" 1781 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.3.1.tgz#bc375c8734f1bb96625d83d1ca03ef508379e132" 1782 | integrity sha512-qrZH7PmFB9rEzCSl00BWjZYuS1BSOH8lLuC0azQE9lQrAx3PWGKHTDudQiOSwIy5dGAJh7KA0ScYlCP7JxvFYA== 1783 | dependencies: 1784 | "@jest/types" "^29.3.1" 1785 | chalk "^4.0.0" 1786 | jest-get-type "^29.2.0" 1787 | jest-util "^29.3.1" 1788 | pretty-format "^29.3.1" 1789 | 1790 | jest-environment-node@^29.3.1: 1791 | version "29.3.1" 1792 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.3.1.tgz#5023b32472b3fba91db5c799a0d5624ad4803e74" 1793 | integrity sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag== 1794 | dependencies: 1795 | "@jest/environment" "^29.3.1" 1796 | "@jest/fake-timers" "^29.3.1" 1797 | "@jest/types" "^29.3.1" 1798 | "@types/node" "*" 1799 | jest-mock "^29.3.1" 1800 | jest-util "^29.3.1" 1801 | 1802 | jest-get-type@^29.2.0: 1803 | version "29.2.0" 1804 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" 1805 | integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== 1806 | 1807 | jest-haste-map@^29.3.1: 1808 | version "29.3.1" 1809 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.3.1.tgz#af83b4347f1dae5ee8c2fb57368dc0bb3e5af843" 1810 | integrity sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A== 1811 | dependencies: 1812 | "@jest/types" "^29.3.1" 1813 | "@types/graceful-fs" "^4.1.3" 1814 | "@types/node" "*" 1815 | anymatch "^3.0.3" 1816 | fb-watchman "^2.0.0" 1817 | graceful-fs "^4.2.9" 1818 | jest-regex-util "^29.2.0" 1819 | jest-util "^29.3.1" 1820 | jest-worker "^29.3.1" 1821 | micromatch "^4.0.4" 1822 | walker "^1.0.8" 1823 | optionalDependencies: 1824 | fsevents "^2.3.2" 1825 | 1826 | jest-leak-detector@^29.3.1: 1827 | version "29.3.1" 1828 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.3.1.tgz#95336d020170671db0ee166b75cd8ef647265518" 1829 | integrity sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA== 1830 | dependencies: 1831 | jest-get-type "^29.2.0" 1832 | pretty-format "^29.3.1" 1833 | 1834 | jest-matcher-utils@^29.3.1: 1835 | version "29.3.1" 1836 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz#6e7f53512f80e817dfa148672bd2d5d04914a572" 1837 | integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ== 1838 | dependencies: 1839 | chalk "^4.0.0" 1840 | jest-diff "^29.3.1" 1841 | jest-get-type "^29.2.0" 1842 | pretty-format "^29.3.1" 1843 | 1844 | jest-message-util@^29.3.1: 1845 | version "29.3.1" 1846 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb" 1847 | integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== 1848 | dependencies: 1849 | "@babel/code-frame" "^7.12.13" 1850 | "@jest/types" "^29.3.1" 1851 | "@types/stack-utils" "^2.0.0" 1852 | chalk "^4.0.0" 1853 | graceful-fs "^4.2.9" 1854 | micromatch "^4.0.4" 1855 | pretty-format "^29.3.1" 1856 | slash "^3.0.0" 1857 | stack-utils "^2.0.3" 1858 | 1859 | jest-mock@^29.3.1: 1860 | version "29.3.1" 1861 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.3.1.tgz#60287d92e5010979d01f218c6b215b688e0f313e" 1862 | integrity sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA== 1863 | dependencies: 1864 | "@jest/types" "^29.3.1" 1865 | "@types/node" "*" 1866 | jest-util "^29.3.1" 1867 | 1868 | jest-pnp-resolver@^1.2.2: 1869 | version "1.2.3" 1870 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" 1871 | integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== 1872 | 1873 | jest-regex-util@^29.2.0: 1874 | version "29.2.0" 1875 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" 1876 | integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== 1877 | 1878 | jest-resolve-dependencies@^29.3.1: 1879 | version "29.3.1" 1880 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.3.1.tgz#a6a329708a128e68d67c49f38678a4a4a914c3bf" 1881 | integrity sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA== 1882 | dependencies: 1883 | jest-regex-util "^29.2.0" 1884 | jest-snapshot "^29.3.1" 1885 | 1886 | jest-resolve@^29.3.1: 1887 | version "29.3.1" 1888 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.3.1.tgz#9a4b6b65387a3141e4a40815535c7f196f1a68a7" 1889 | integrity sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw== 1890 | dependencies: 1891 | chalk "^4.0.0" 1892 | graceful-fs "^4.2.9" 1893 | jest-haste-map "^29.3.1" 1894 | jest-pnp-resolver "^1.2.2" 1895 | jest-util "^29.3.1" 1896 | jest-validate "^29.3.1" 1897 | resolve "^1.20.0" 1898 | resolve.exports "^1.1.0" 1899 | slash "^3.0.0" 1900 | 1901 | jest-runner@^29.3.1: 1902 | version "29.3.1" 1903 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.3.1.tgz#a92a879a47dd096fea46bb1517b0a99418ee9e2d" 1904 | integrity sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA== 1905 | dependencies: 1906 | "@jest/console" "^29.3.1" 1907 | "@jest/environment" "^29.3.1" 1908 | "@jest/test-result" "^29.3.1" 1909 | "@jest/transform" "^29.3.1" 1910 | "@jest/types" "^29.3.1" 1911 | "@types/node" "*" 1912 | chalk "^4.0.0" 1913 | emittery "^0.13.1" 1914 | graceful-fs "^4.2.9" 1915 | jest-docblock "^29.2.0" 1916 | jest-environment-node "^29.3.1" 1917 | jest-haste-map "^29.3.1" 1918 | jest-leak-detector "^29.3.1" 1919 | jest-message-util "^29.3.1" 1920 | jest-resolve "^29.3.1" 1921 | jest-runtime "^29.3.1" 1922 | jest-util "^29.3.1" 1923 | jest-watcher "^29.3.1" 1924 | jest-worker "^29.3.1" 1925 | p-limit "^3.1.0" 1926 | source-map-support "0.5.13" 1927 | 1928 | jest-runtime@^29.3.1: 1929 | version "29.3.1" 1930 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.3.1.tgz#21efccb1a66911d6d8591276a6182f520b86737a" 1931 | integrity sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A== 1932 | dependencies: 1933 | "@jest/environment" "^29.3.1" 1934 | "@jest/fake-timers" "^29.3.1" 1935 | "@jest/globals" "^29.3.1" 1936 | "@jest/source-map" "^29.2.0" 1937 | "@jest/test-result" "^29.3.1" 1938 | "@jest/transform" "^29.3.1" 1939 | "@jest/types" "^29.3.1" 1940 | "@types/node" "*" 1941 | chalk "^4.0.0" 1942 | cjs-module-lexer "^1.0.0" 1943 | collect-v8-coverage "^1.0.0" 1944 | glob "^7.1.3" 1945 | graceful-fs "^4.2.9" 1946 | jest-haste-map "^29.3.1" 1947 | jest-message-util "^29.3.1" 1948 | jest-mock "^29.3.1" 1949 | jest-regex-util "^29.2.0" 1950 | jest-resolve "^29.3.1" 1951 | jest-snapshot "^29.3.1" 1952 | jest-util "^29.3.1" 1953 | slash "^3.0.0" 1954 | strip-bom "^4.0.0" 1955 | 1956 | jest-snapshot@^29.3.1: 1957 | version "29.3.1" 1958 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.3.1.tgz#17bcef71a453adc059a18a32ccbd594b8cc4e45e" 1959 | integrity sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA== 1960 | dependencies: 1961 | "@babel/core" "^7.11.6" 1962 | "@babel/generator" "^7.7.2" 1963 | "@babel/plugin-syntax-jsx" "^7.7.2" 1964 | "@babel/plugin-syntax-typescript" "^7.7.2" 1965 | "@babel/traverse" "^7.7.2" 1966 | "@babel/types" "^7.3.3" 1967 | "@jest/expect-utils" "^29.3.1" 1968 | "@jest/transform" "^29.3.1" 1969 | "@jest/types" "^29.3.1" 1970 | "@types/babel__traverse" "^7.0.6" 1971 | "@types/prettier" "^2.1.5" 1972 | babel-preset-current-node-syntax "^1.0.0" 1973 | chalk "^4.0.0" 1974 | expect "^29.3.1" 1975 | graceful-fs "^4.2.9" 1976 | jest-diff "^29.3.1" 1977 | jest-get-type "^29.2.0" 1978 | jest-haste-map "^29.3.1" 1979 | jest-matcher-utils "^29.3.1" 1980 | jest-message-util "^29.3.1" 1981 | jest-util "^29.3.1" 1982 | natural-compare "^1.4.0" 1983 | pretty-format "^29.3.1" 1984 | semver "^7.3.5" 1985 | 1986 | jest-util@^29.0.0, jest-util@^29.3.1: 1987 | version "29.3.1" 1988 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" 1989 | integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== 1990 | dependencies: 1991 | "@jest/types" "^29.3.1" 1992 | "@types/node" "*" 1993 | chalk "^4.0.0" 1994 | ci-info "^3.2.0" 1995 | graceful-fs "^4.2.9" 1996 | picomatch "^2.2.3" 1997 | 1998 | jest-validate@^29.3.1: 1999 | version "29.3.1" 2000 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.3.1.tgz#d56fefaa2e7d1fde3ecdc973c7f7f8f25eea704a" 2001 | integrity sha512-N9Lr3oYR2Mpzuelp1F8negJR3YE+L1ebk1rYA5qYo9TTY3f9OWdptLoNSPP9itOCBIRBqjt/S5XHlzYglLN67g== 2002 | dependencies: 2003 | "@jest/types" "^29.3.1" 2004 | camelcase "^6.2.0" 2005 | chalk "^4.0.0" 2006 | jest-get-type "^29.2.0" 2007 | leven "^3.1.0" 2008 | pretty-format "^29.3.1" 2009 | 2010 | jest-watcher@^29.3.1: 2011 | version "29.3.1" 2012 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.3.1.tgz#3341547e14fe3c0f79f9c3a4c62dbc3fc977fd4a" 2013 | integrity sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg== 2014 | dependencies: 2015 | "@jest/test-result" "^29.3.1" 2016 | "@jest/types" "^29.3.1" 2017 | "@types/node" "*" 2018 | ansi-escapes "^4.2.1" 2019 | chalk "^4.0.0" 2020 | emittery "^0.13.1" 2021 | jest-util "^29.3.1" 2022 | string-length "^4.0.1" 2023 | 2024 | jest-worker@^29.3.1: 2025 | version "29.3.1" 2026 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.3.1.tgz#e9462161017a9bb176380d721cab022661da3d6b" 2027 | integrity sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw== 2028 | dependencies: 2029 | "@types/node" "*" 2030 | jest-util "^29.3.1" 2031 | merge-stream "^2.0.0" 2032 | supports-color "^8.0.0" 2033 | 2034 | jest@29.3.1: 2035 | version "29.3.1" 2036 | resolved "https://registry.yarnpkg.com/jest/-/jest-29.3.1.tgz#c130c0d551ae6b5459b8963747fed392ddbde122" 2037 | integrity sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA== 2038 | dependencies: 2039 | "@jest/core" "^29.3.1" 2040 | "@jest/types" "^29.3.1" 2041 | import-local "^3.0.2" 2042 | jest-cli "^29.3.1" 2043 | 2044 | js-tokens@^4.0.0: 2045 | version "4.0.0" 2046 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 2047 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 2048 | 2049 | js-yaml@^3.13.1: 2050 | version "3.14.1" 2051 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 2052 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 2053 | dependencies: 2054 | argparse "^1.0.7" 2055 | esprima "^4.0.0" 2056 | 2057 | jsesc@^2.5.1: 2058 | version "2.5.2" 2059 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 2060 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 2061 | 2062 | json-parse-even-better-errors@^2.3.0: 2063 | version "2.3.1" 2064 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 2065 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 2066 | 2067 | json-stringify-safe@^5.0.1: 2068 | version "5.0.1" 2069 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 2070 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 2071 | 2072 | json5@^2.2.1: 2073 | version "2.2.1" 2074 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" 2075 | integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== 2076 | 2077 | kleur@^3.0.3: 2078 | version "3.0.3" 2079 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 2080 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 2081 | 2082 | leven@^3.1.0: 2083 | version "3.1.0" 2084 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 2085 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 2086 | 2087 | lines-and-columns@^1.1.6: 2088 | version "1.2.4" 2089 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 2090 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 2091 | 2092 | locate-path@^5.0.0: 2093 | version "5.0.0" 2094 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 2095 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 2096 | dependencies: 2097 | p-locate "^4.1.0" 2098 | 2099 | lodash.memoize@4.x: 2100 | version "4.1.2" 2101 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 2102 | integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== 2103 | 2104 | lodash@4.17.21, lodash@^4.17.21: 2105 | version "4.17.21" 2106 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 2107 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 2108 | 2109 | lru-cache@^6.0.0: 2110 | version "6.0.0" 2111 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 2112 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 2113 | dependencies: 2114 | yallist "^4.0.0" 2115 | 2116 | "lru-cache@^9.1.1 || ^10.0.0": 2117 | version "10.0.0" 2118 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" 2119 | integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== 2120 | 2121 | make-dir@^3.0.0: 2122 | version "3.1.0" 2123 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 2124 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 2125 | dependencies: 2126 | semver "^6.0.0" 2127 | 2128 | make-error@1.x, make-error@^1.1.1: 2129 | version "1.3.6" 2130 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 2131 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 2132 | 2133 | makeerror@1.0.12: 2134 | version "1.0.12" 2135 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" 2136 | integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== 2137 | dependencies: 2138 | tmpl "1.0.5" 2139 | 2140 | merge-stream@^2.0.0: 2141 | version "2.0.0" 2142 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 2143 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 2144 | 2145 | methods@^1.1.2: 2146 | version "1.1.2" 2147 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 2148 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 2149 | 2150 | micromatch@^4.0.4: 2151 | version "4.0.5" 2152 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 2153 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 2154 | dependencies: 2155 | braces "^3.0.2" 2156 | picomatch "^2.3.1" 2157 | 2158 | mime-db@1.52.0: 2159 | version "1.52.0" 2160 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 2161 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 2162 | 2163 | mime-types@^2.1.12: 2164 | version "2.1.35" 2165 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 2166 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 2167 | dependencies: 2168 | mime-db "1.52.0" 2169 | 2170 | mime@2.6.0: 2171 | version "2.6.0" 2172 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" 2173 | integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== 2174 | 2175 | mimic-fn@^2.1.0: 2176 | version "2.1.0" 2177 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 2178 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 2179 | 2180 | minimatch@^3.0.4, minimatch@^3.1.1: 2181 | version "3.1.2" 2182 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 2183 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 2184 | dependencies: 2185 | brace-expansion "^1.1.7" 2186 | 2187 | minimatch@^9.0.1: 2188 | version "9.0.3" 2189 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" 2190 | integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== 2191 | dependencies: 2192 | brace-expansion "^2.0.1" 2193 | 2194 | "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": 2195 | version "7.0.2" 2196 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e" 2197 | integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA== 2198 | 2199 | ms@2.1.2: 2200 | version "2.1.2" 2201 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2202 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2203 | 2204 | natural-compare@^1.4.0: 2205 | version "1.4.0" 2206 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2207 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 2208 | 2209 | nock@13.2.9: 2210 | version "13.2.9" 2211 | resolved "https://registry.yarnpkg.com/nock/-/nock-13.2.9.tgz#4faf6c28175d36044da4cfa68e33e5a15086ad4c" 2212 | integrity sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA== 2213 | dependencies: 2214 | debug "^4.1.0" 2215 | json-stringify-safe "^5.0.1" 2216 | lodash "^4.17.21" 2217 | propagate "^2.0.0" 2218 | 2219 | node-int64@^0.4.0: 2220 | version "0.4.0" 2221 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 2222 | integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== 2223 | 2224 | node-releases@^2.0.6: 2225 | version "2.0.6" 2226 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" 2227 | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== 2228 | 2229 | normalize-path@^3.0.0: 2230 | version "3.0.0" 2231 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2232 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 2233 | 2234 | npm-run-path@^4.0.1: 2235 | version "4.0.1" 2236 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 2237 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 2238 | dependencies: 2239 | path-key "^3.0.0" 2240 | 2241 | nth-check@^2.0.1: 2242 | version "2.1.1" 2243 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 2244 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 2245 | dependencies: 2246 | boolbase "^1.0.0" 2247 | 2248 | object-inspect@^1.9.0: 2249 | version "1.12.2" 2250 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" 2251 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 2252 | 2253 | on-exit-leak-free@^2.1.0: 2254 | version "2.1.0" 2255 | resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" 2256 | integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== 2257 | 2258 | once@1.4.0, once@^1.3.0: 2259 | version "1.4.0" 2260 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2261 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 2262 | dependencies: 2263 | wrappy "1" 2264 | 2265 | onetime@^5.1.2: 2266 | version "5.1.2" 2267 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 2268 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 2269 | dependencies: 2270 | mimic-fn "^2.1.0" 2271 | 2272 | p-limit@^2.2.0: 2273 | version "2.3.0" 2274 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2275 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2276 | dependencies: 2277 | p-try "^2.0.0" 2278 | 2279 | p-limit@^3.1.0: 2280 | version "3.1.0" 2281 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2282 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2283 | dependencies: 2284 | yocto-queue "^0.1.0" 2285 | 2286 | p-locate@^4.1.0: 2287 | version "4.1.0" 2288 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 2289 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2290 | dependencies: 2291 | p-limit "^2.2.0" 2292 | 2293 | p-try@^2.0.0: 2294 | version "2.2.0" 2295 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2296 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2297 | 2298 | parse-json@^5.2.0: 2299 | version "5.2.0" 2300 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 2301 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 2302 | dependencies: 2303 | "@babel/code-frame" "^7.0.0" 2304 | error-ex "^1.3.1" 2305 | json-parse-even-better-errors "^2.3.0" 2306 | lines-and-columns "^1.1.6" 2307 | 2308 | parse5-htmlparser2-tree-adapter@^7.0.0: 2309 | version "7.0.0" 2310 | resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" 2311 | integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== 2312 | dependencies: 2313 | domhandler "^5.0.2" 2314 | parse5 "^7.0.0" 2315 | 2316 | parse5@^7.0.0: 2317 | version "7.1.2" 2318 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" 2319 | integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== 2320 | dependencies: 2321 | entities "^4.4.0" 2322 | 2323 | path-exists@^4.0.0: 2324 | version "4.0.0" 2325 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2326 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2327 | 2328 | path-is-absolute@^1.0.0: 2329 | version "1.0.1" 2330 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2331 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2332 | 2333 | path-key@^3.0.0, path-key@^3.1.0: 2334 | version "3.1.1" 2335 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2336 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2337 | 2338 | path-parse@^1.0.7: 2339 | version "1.0.7" 2340 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2341 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2342 | 2343 | path-scurry@^1.10.1: 2344 | version "1.10.1" 2345 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" 2346 | integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== 2347 | dependencies: 2348 | lru-cache "^9.1.1 || ^10.0.0" 2349 | minipass "^5.0.0 || ^6.0.2 || ^7.0.0" 2350 | 2351 | picocolors@^1.0.0: 2352 | version "1.0.0" 2353 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 2354 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 2355 | 2356 | picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: 2357 | version "2.3.1" 2358 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2359 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2360 | 2361 | pino-abstract-transport@v1.0.0: 2362 | version "1.0.0" 2363 | resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz#cc0d6955fffcadb91b7b49ef220a6cc111d48bb3" 2364 | integrity sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA== 2365 | dependencies: 2366 | readable-stream "^4.0.0" 2367 | split2 "^4.0.0" 2368 | 2369 | pino-std-serializers@^6.0.0: 2370 | version "6.0.0" 2371 | resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.0.0.tgz#4c20928a1bafca122fdc2a7a4a171ca1c5f9c526" 2372 | integrity sha512-mMMOwSKrmyl+Y12Ri2xhH1lbzQxwwpuru9VjyJpgFIH4asSj88F2csdMwN6+M5g1Ll4rmsYghHLQJw81tgZ7LQ== 2373 | 2374 | pino@8.7.0: 2375 | version "8.7.0" 2376 | resolved "https://registry.yarnpkg.com/pino/-/pino-8.7.0.tgz#58621608a3d8540ae643cdd9194cdd94130c78d9" 2377 | integrity sha512-l9sA5uPxmZzwydhMWUcm1gI0YxNnYl8MfSr2h8cwLvOAzQLBLewzF247h/vqHe3/tt6fgtXeG9wdjjoetdI/vA== 2378 | dependencies: 2379 | atomic-sleep "^1.0.0" 2380 | fast-redact "^3.1.1" 2381 | on-exit-leak-free "^2.1.0" 2382 | pino-abstract-transport v1.0.0 2383 | pino-std-serializers "^6.0.0" 2384 | process-warning "^2.0.0" 2385 | quick-format-unescaped "^4.0.3" 2386 | real-require "^0.2.0" 2387 | safe-stable-stringify "^2.3.1" 2388 | sonic-boom "^3.1.0" 2389 | thread-stream "^2.0.0" 2390 | 2391 | pirates@^4.0.4: 2392 | version "4.0.5" 2393 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" 2394 | integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== 2395 | 2396 | pkg-dir@^4.2.0: 2397 | version "4.2.0" 2398 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2399 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2400 | dependencies: 2401 | find-up "^4.0.0" 2402 | 2403 | pretty-format@^29.0.0, pretty-format@^29.3.1: 2404 | version "29.3.1" 2405 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" 2406 | integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== 2407 | dependencies: 2408 | "@jest/schemas" "^29.0.0" 2409 | ansi-styles "^5.0.0" 2410 | react-is "^18.0.0" 2411 | 2412 | process-warning@^2.0.0: 2413 | version "2.0.0" 2414 | resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.0.0.tgz#341dbeaac985b90a04ebcd844d50097c7737b2ee" 2415 | integrity sha512-+MmoAXoUX+VTHAlwns0h+kFUWFs/3FZy+ZuchkgjyOu3oioLAo2LB5aCfKPh2+P9O18i3m43tUEv3YqttSy0Ww== 2416 | 2417 | process@^0.11.10: 2418 | version "0.11.10" 2419 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 2420 | integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== 2421 | 2422 | prompts@^2.0.1: 2423 | version "2.4.2" 2424 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" 2425 | integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== 2426 | dependencies: 2427 | kleur "^3.0.3" 2428 | sisteransi "^1.0.5" 2429 | 2430 | propagate@^2.0.0: 2431 | version "2.0.1" 2432 | resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" 2433 | integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== 2434 | 2435 | qs@6.9.3: 2436 | version "6.9.3" 2437 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" 2438 | integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== 2439 | 2440 | qs@^6.11.0: 2441 | version "6.11.0" 2442 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" 2443 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 2444 | dependencies: 2445 | side-channel "^1.0.4" 2446 | 2447 | quick-format-unescaped@^4.0.3: 2448 | version "4.0.4" 2449 | resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" 2450 | integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== 2451 | 2452 | react-is@^18.0.0: 2453 | version "18.2.0" 2454 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" 2455 | integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== 2456 | 2457 | readable-stream@^4.0.0: 2458 | version "4.2.0" 2459 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.2.0.tgz#a7ef523d3b39e4962b0db1a1af22777b10eeca46" 2460 | integrity sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A== 2461 | dependencies: 2462 | abort-controller "^3.0.0" 2463 | buffer "^6.0.3" 2464 | events "^3.3.0" 2465 | process "^0.11.10" 2466 | 2467 | real-require@^0.2.0: 2468 | version "0.2.0" 2469 | resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" 2470 | integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== 2471 | 2472 | require-directory@^2.1.1: 2473 | version "2.1.1" 2474 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2475 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2476 | 2477 | resolve-cwd@^3.0.0: 2478 | version "3.0.0" 2479 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2480 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2481 | dependencies: 2482 | resolve-from "^5.0.0" 2483 | 2484 | resolve-from@^5.0.0: 2485 | version "5.0.0" 2486 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2487 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2488 | 2489 | resolve.exports@^1.1.0: 2490 | version "1.1.0" 2491 | resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" 2492 | integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== 2493 | 2494 | resolve@^1.20.0: 2495 | version "1.22.1" 2496 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 2497 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 2498 | dependencies: 2499 | is-core-module "^2.9.0" 2500 | path-parse "^1.0.7" 2501 | supports-preserve-symlinks-flag "^1.0.0" 2502 | 2503 | rimraf@5.0.1: 2504 | version "5.0.1" 2505 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.1.tgz#0881323ab94ad45fec7c0221f27ea1a142f3f0d0" 2506 | integrity sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg== 2507 | dependencies: 2508 | glob "^10.2.5" 2509 | 2510 | rome@12.1.3: 2511 | version "12.1.3" 2512 | resolved "https://registry.yarnpkg.com/rome/-/rome-12.1.3.tgz#4d4d62cad16216843680bd3ca11a4c248134902a" 2513 | integrity sha512-e+ff72hxDpe/t5/Us7YRBVw3PBET7SeczTQNn6tvrWdrCaAw3qOukQQ+tDCkyFtS4yGsnhjrJbm43ctNbz27Yg== 2514 | optionalDependencies: 2515 | "@rometools/cli-darwin-arm64" "12.1.3" 2516 | "@rometools/cli-darwin-x64" "12.1.3" 2517 | "@rometools/cli-linux-arm64" "12.1.3" 2518 | "@rometools/cli-linux-x64" "12.1.3" 2519 | "@rometools/cli-win32-arm64" "12.1.3" 2520 | "@rometools/cli-win32-x64" "12.1.3" 2521 | 2522 | safe-stable-stringify@^2.3.1: 2523 | version "2.4.1" 2524 | resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz#34694bd8a30575b7f94792aa51527551bd733d61" 2525 | integrity sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA== 2526 | 2527 | semver@7.x, semver@^7.3.5, semver@^7.3.8: 2528 | version "7.3.8" 2529 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 2530 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 2531 | dependencies: 2532 | lru-cache "^6.0.0" 2533 | 2534 | semver@^6.0.0, semver@^6.3.0: 2535 | version "6.3.0" 2536 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2537 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2538 | 2539 | shebang-command@^2.0.0: 2540 | version "2.0.0" 2541 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2542 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2543 | dependencies: 2544 | shebang-regex "^3.0.0" 2545 | 2546 | shebang-regex@^3.0.0: 2547 | version "3.0.0" 2548 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2549 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2550 | 2551 | side-channel@^1.0.4: 2552 | version "1.0.4" 2553 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 2554 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 2555 | dependencies: 2556 | call-bind "^1.0.0" 2557 | get-intrinsic "^1.0.2" 2558 | object-inspect "^1.9.0" 2559 | 2560 | signal-exit@^3.0.3, signal-exit@^3.0.7: 2561 | version "3.0.7" 2562 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2563 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2564 | 2565 | signal-exit@^4.0.1: 2566 | version "4.0.2" 2567 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" 2568 | integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== 2569 | 2570 | sisteransi@^1.0.5: 2571 | version "1.0.5" 2572 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 2573 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 2574 | 2575 | slash@^3.0.0: 2576 | version "3.0.0" 2577 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2578 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2579 | 2580 | sonic-boom@^3.1.0: 2581 | version "3.2.0" 2582 | resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.2.0.tgz#ce9f2de7557e68be2e52c8df6d9b052e7d348143" 2583 | integrity sha512-SbbZ+Kqj/XIunvIAgUZRlqd6CGQYq71tRRbXR92Za8J/R3Yh4Av+TWENiSiEgnlwckYLyP0YZQWVfyNC0dzLaA== 2584 | dependencies: 2585 | atomic-sleep "^1.0.0" 2586 | 2587 | source-map-support@0.5.13: 2588 | version "0.5.13" 2589 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 2590 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 2591 | dependencies: 2592 | buffer-from "^1.0.0" 2593 | source-map "^0.6.0" 2594 | 2595 | source-map@^0.6.0, source-map@^0.6.1: 2596 | version "0.6.1" 2597 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2598 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2599 | 2600 | split2@^4.0.0: 2601 | version "4.1.0" 2602 | resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" 2603 | integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== 2604 | 2605 | sprintf-js@~1.0.2: 2606 | version "1.0.3" 2607 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2608 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2609 | 2610 | stack-utils@^2.0.3: 2611 | version "2.0.6" 2612 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" 2613 | integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== 2614 | dependencies: 2615 | escape-string-regexp "^2.0.0" 2616 | 2617 | string-length@^4.0.1: 2618 | version "4.0.2" 2619 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" 2620 | integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== 2621 | dependencies: 2622 | char-regex "^1.0.2" 2623 | strip-ansi "^6.0.0" 2624 | 2625 | "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 2626 | version "4.2.3" 2627 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2628 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2629 | dependencies: 2630 | emoji-regex "^8.0.0" 2631 | is-fullwidth-code-point "^3.0.0" 2632 | strip-ansi "^6.0.1" 2633 | 2634 | string-width@^5.0.1, string-width@^5.1.2: 2635 | version "5.1.2" 2636 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 2637 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 2638 | dependencies: 2639 | eastasianwidth "^0.2.0" 2640 | emoji-regex "^9.2.2" 2641 | strip-ansi "^7.0.1" 2642 | 2643 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2644 | version "6.0.1" 2645 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2646 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2647 | dependencies: 2648 | ansi-regex "^5.0.1" 2649 | 2650 | strip-ansi@^7.0.1: 2651 | version "7.1.0" 2652 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" 2653 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 2654 | dependencies: 2655 | ansi-regex "^6.0.1" 2656 | 2657 | strip-bom@^4.0.0: 2658 | version "4.0.0" 2659 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2660 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2661 | 2662 | strip-final-newline@^2.0.0: 2663 | version "2.0.0" 2664 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2665 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2666 | 2667 | strip-json-comments@^3.1.1: 2668 | version "3.1.1" 2669 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2670 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2671 | 2672 | superagent@8.0.3: 2673 | version "8.0.3" 2674 | resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.0.3.tgz#15c8ec5611a1f01386994cfeeda5aa138bcb7b17" 2675 | integrity sha512-oBC+aNsCjzzjmO5AOPBPFS+Z7HPzlx+DQr/aHwM08kI+R24gsDmAS1LMfza1fK+P+SKlTAoNZpOvooE/pRO1HA== 2676 | dependencies: 2677 | component-emitter "^1.3.0" 2678 | cookiejar "^2.1.3" 2679 | debug "^4.3.4" 2680 | fast-safe-stringify "^2.1.1" 2681 | form-data "^4.0.0" 2682 | formidable "^2.0.1" 2683 | methods "^1.1.2" 2684 | mime "2.6.0" 2685 | qs "^6.11.0" 2686 | semver "^7.3.8" 2687 | 2688 | supports-color@^5.3.0: 2689 | version "5.5.0" 2690 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2691 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2692 | dependencies: 2693 | has-flag "^3.0.0" 2694 | 2695 | supports-color@^7.1.0: 2696 | version "7.2.0" 2697 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2698 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2699 | dependencies: 2700 | has-flag "^4.0.0" 2701 | 2702 | supports-color@^8.0.0: 2703 | version "8.1.1" 2704 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2705 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2706 | dependencies: 2707 | has-flag "^4.0.0" 2708 | 2709 | supports-preserve-symlinks-flag@^1.0.0: 2710 | version "1.0.0" 2711 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2712 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2713 | 2714 | test-exclude@^6.0.0: 2715 | version "6.0.0" 2716 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2717 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2718 | dependencies: 2719 | "@istanbuljs/schema" "^0.1.2" 2720 | glob "^7.1.4" 2721 | minimatch "^3.0.4" 2722 | 2723 | thread-stream@^2.0.0: 2724 | version "2.2.0" 2725 | resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.2.0.tgz#310c03a253f729094ce5d4638ef5186dfa80a9e8" 2726 | integrity sha512-rUkv4/fnb4rqy/gGy7VuqK6wE1+1DOCOWy4RMeaV69ZHMP11tQKZvZSip1yTgrKCMZzEMcCL/bKfHvSfDHx+iQ== 2727 | dependencies: 2728 | real-require "^0.2.0" 2729 | 2730 | tmpl@1.0.5: 2731 | version "1.0.5" 2732 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" 2733 | integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== 2734 | 2735 | to-fast-properties@^2.0.0: 2736 | version "2.0.0" 2737 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2738 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 2739 | 2740 | to-regex-range@^5.0.1: 2741 | version "5.0.1" 2742 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2743 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2744 | dependencies: 2745 | is-number "^7.0.0" 2746 | 2747 | ts-jest@29.0.3: 2748 | version "29.0.3" 2749 | resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.0.3.tgz#63ea93c5401ab73595440733cefdba31fcf9cb77" 2750 | integrity sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ== 2751 | dependencies: 2752 | bs-logger "0.x" 2753 | fast-json-stable-stringify "2.x" 2754 | jest-util "^29.0.0" 2755 | json5 "^2.2.1" 2756 | lodash.memoize "4.x" 2757 | make-error "1.x" 2758 | semver "7.x" 2759 | yargs-parser "^21.0.1" 2760 | 2761 | ts-node@10.9.1: 2762 | version "10.9.1" 2763 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" 2764 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 2765 | dependencies: 2766 | "@cspotcode/source-map-support" "^0.8.0" 2767 | "@tsconfig/node10" "^1.0.7" 2768 | "@tsconfig/node12" "^1.0.7" 2769 | "@tsconfig/node14" "^1.0.0" 2770 | "@tsconfig/node16" "^1.0.2" 2771 | acorn "^8.4.1" 2772 | acorn-walk "^8.1.1" 2773 | arg "^4.1.0" 2774 | create-require "^1.1.0" 2775 | diff "^4.0.1" 2776 | make-error "^1.1.1" 2777 | v8-compile-cache-lib "^3.0.1" 2778 | yn "3.1.1" 2779 | 2780 | type-detect@4.0.8: 2781 | version "4.0.8" 2782 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2783 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2784 | 2785 | type-fest@^0.21.3: 2786 | version "0.21.3" 2787 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 2788 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 2789 | 2790 | typescript@4.9.3: 2791 | version "4.9.3" 2792 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" 2793 | integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== 2794 | 2795 | update-browserslist-db@^1.0.9: 2796 | version "1.0.10" 2797 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 2798 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 2799 | dependencies: 2800 | escalade "^3.1.1" 2801 | picocolors "^1.0.0" 2802 | 2803 | v8-compile-cache-lib@^3.0.1: 2804 | version "3.0.1" 2805 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 2806 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 2807 | 2808 | v8-to-istanbul@^9.0.1: 2809 | version "9.0.1" 2810 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" 2811 | integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== 2812 | dependencies: 2813 | "@jridgewell/trace-mapping" "^0.3.12" 2814 | "@types/istanbul-lib-coverage" "^2.0.1" 2815 | convert-source-map "^1.6.0" 2816 | 2817 | walker@^1.0.8: 2818 | version "1.0.8" 2819 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" 2820 | integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== 2821 | dependencies: 2822 | makeerror "1.0.12" 2823 | 2824 | which@^2.0.1: 2825 | version "2.0.2" 2826 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2827 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2828 | dependencies: 2829 | isexe "^2.0.0" 2830 | 2831 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: 2832 | version "7.0.0" 2833 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2834 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2835 | dependencies: 2836 | ansi-styles "^4.0.0" 2837 | string-width "^4.1.0" 2838 | strip-ansi "^6.0.0" 2839 | 2840 | wrap-ansi@^8.1.0: 2841 | version "8.1.0" 2842 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 2843 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 2844 | dependencies: 2845 | ansi-styles "^6.1.0" 2846 | string-width "^5.0.1" 2847 | strip-ansi "^7.0.1" 2848 | 2849 | wrappy@1: 2850 | version "1.0.2" 2851 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2852 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2853 | 2854 | write-file-atomic@^4.0.1: 2855 | version "4.0.2" 2856 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" 2857 | integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== 2858 | dependencies: 2859 | imurmurhash "^0.1.4" 2860 | signal-exit "^3.0.7" 2861 | 2862 | y18n@^5.0.5: 2863 | version "5.0.8" 2864 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2865 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2866 | 2867 | yallist@^4.0.0: 2868 | version "4.0.0" 2869 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2870 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2871 | 2872 | yargs-parser@^21.0.1, yargs-parser@^21.1.1: 2873 | version "21.1.1" 2874 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 2875 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 2876 | 2877 | yargs@^17.3.1: 2878 | version "17.6.2" 2879 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" 2880 | integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== 2881 | dependencies: 2882 | cliui "^8.0.1" 2883 | escalade "^3.1.1" 2884 | get-caller-file "^2.0.5" 2885 | require-directory "^2.1.1" 2886 | string-width "^4.2.3" 2887 | y18n "^5.0.5" 2888 | yargs-parser "^21.1.1" 2889 | 2890 | yn@3.1.1: 2891 | version "3.1.1" 2892 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2893 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2894 | 2895 | yocto-queue@^0.1.0: 2896 | version "0.1.0" 2897 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2898 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2899 | --------------------------------------------------------------------------------