├── .editorconfig ├── .gitignore ├── .npmignore ├── README.md ├── email.png ├── eslint.config.mjs ├── package.json ├── src ├── api │ ├── exporter.ts │ └── replit.ts ├── axios │ ├── ratelimit.ts │ └── retry.ts ├── cli.ts ├── index.ts ├── logger.ts └── repl.ts ├── tsconfig.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | 7 | [*.{ts,js,json,yml}] 8 | charset = utf-8 9 | indent_style = space 10 | indent_size = 4 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .replit-export.save 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | lerna-debug.log* 10 | .pnpm-debug.log* 11 | 12 | # Diagnostic reports (https://nodejs.org/api/report.html) 13 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 14 | 15 | # Runtime data 16 | pids 17 | *.pid 18 | *.seed 19 | *.pid.lock 20 | 21 | # Directory for instrumented libs generated by jscoverage/JSCover 22 | lib-cov 23 | 24 | # Coverage directory used by tools like istanbul 25 | coverage 26 | *.lcov 27 | 28 | # nyc test coverage 29 | .nyc_output 30 | 31 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 32 | .grunt 33 | 34 | # Bower dependency directory (https://bower.io/) 35 | bower_components 36 | 37 | # node-waf configuration 38 | .lock-wscript 39 | 40 | # Compiled binary addons (https://nodejs.org/api/addons.html) 41 | build/Release 42 | 43 | # Dependency directories 44 | node_modules/ 45 | jspm_packages/ 46 | 47 | # Snowpack dependency directory (https://snowpack.dev/) 48 | web_modules/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Optional stylelint cache 60 | .stylelintcache 61 | 62 | # Microbundle cache 63 | .rpt2_cache/ 64 | .rts2_cache_cjs/ 65 | .rts2_cache_es/ 66 | .rts2_cache_umd/ 67 | 68 | # Optional REPL history 69 | .node_repl_history 70 | 71 | # Output of 'npm pack' 72 | *.tgz 73 | 74 | # Yarn Integrity file 75 | .yarn-integrity 76 | 77 | # dotenv environment variable files 78 | .env 79 | .env.development.local 80 | .env.test.local 81 | .env.production.local 82 | .env.local 83 | 84 | # parcel-bundler cache (https://parceljs.org/) 85 | .cache 86 | .parcel-cache 87 | 88 | # Next.js build output 89 | .next 90 | out 91 | 92 | # Nuxt.js build / generate output 93 | .nuxt 94 | dist 95 | 96 | # Gatsby files 97 | .cache/ 98 | # Comment in the public line in if your project uses Gatsby and not Next.js 99 | # https://nextjs.org/blog/next-9-1#public-directory-support 100 | # public 101 | 102 | # vuepress build output 103 | .vuepress/dist 104 | 105 | # vuepress v2.x temp and cache directory 106 | .temp 107 | .cache 108 | 109 | # Docusaurus cache and generated files 110 | .docusaurus 111 | 112 | # Serverless directories 113 | .serverless/ 114 | 115 | # FuseBox cache 116 | .fusebox/ 117 | 118 | # DynamoDB Local files 119 | .dynamodb/ 120 | 121 | # TernJS port file 122 | .tern-port 123 | 124 | # Stores VSCode versions used for testing VSCode extensions 125 | .vscode-test 126 | 127 | # yarn v2 128 | .yarn/cache 129 | .yarn/unplugged 130 | .yarn/build-state.yml 131 | .yarn/install-state.gz 132 | .pnp.* 133 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src/ 2 | .replit-export.save 3 | 4 | # Logs 5 | logs 6 | *.log 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 15 | 16 | # Runtime data 17 | pids 18 | *.pid 19 | *.seed 20 | *.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | lib-cov 24 | 25 | # Coverage directory used by tools like istanbul 26 | coverage 27 | *.lcov 28 | 29 | # nyc test coverage 30 | .nyc_output 31 | 32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 33 | .grunt 34 | 35 | # Bower dependency directory (https://bower.io/) 36 | bower_components 37 | 38 | # node-waf configuration 39 | .lock-wscript 40 | 41 | # Compiled binary addons (https://nodejs.org/api/addons.html) 42 | build/Release 43 | 44 | # Dependency directories 45 | node_modules/ 46 | jspm_packages/ 47 | 48 | # Snowpack dependency directory (https://snowpack.dev/) 49 | web_modules/ 50 | 51 | # TypeScript cache 52 | *.tsbuildinfo 53 | 54 | # Optional npm cache directory 55 | .npm 56 | 57 | # Optional eslint cache 58 | .eslintcache 59 | 60 | # Optional stylelint cache 61 | .stylelintcache 62 | 63 | # Microbundle cache 64 | .rpt2_cache/ 65 | .rts2_cache_cjs/ 66 | .rts2_cache_es/ 67 | .rts2_cache_umd/ 68 | 69 | # Optional REPL history 70 | .node_repl_history 71 | 72 | # Output of 'npm pack' 73 | *.tgz 74 | 75 | # Yarn Integrity file 76 | .yarn-integrity 77 | 78 | # dotenv environment variable files 79 | .env 80 | .env.development.local 81 | .env.test.local 82 | .env.production.local 83 | .env.local 84 | 85 | # parcel-bundler cache (https://parceljs.org/) 86 | .cache 87 | .parcel-cache 88 | 89 | # Next.js build output 90 | .next 91 | out 92 | 93 | # Nuxt.js build / generate output 94 | .nuxt 95 | dist 96 | 97 | # Gatsby files 98 | .cache/ 99 | # Comment in the public line in if your project uses Gatsby and not Next.js 100 | # https://nextjs.org/blog/next-9-1#public-directory-support 101 | # public 102 | 103 | # vuepress build output 104 | .vuepress/dist 105 | 106 | # vuepress v2.x temp and cache directory 107 | .temp 108 | .cache 109 | 110 | # Docusaurus cache and generated files 111 | .docusaurus 112 | 113 | # Serverless directories 114 | .serverless/ 115 | 116 | # FuseBox cache 117 | .fusebox/ 118 | 119 | # DynamoDB Local files 120 | .dynamodb/ 121 | 122 | # TernJS port file 123 | .tern-port 124 | 125 | # Stores VSCode versions used for testing VSCode extensions 126 | .vscode-test 127 | 128 | # yarn v2 129 | .yarn/cache 130 | .yarn/unplugged 131 | .yarn/build-state.yml 132 | .yarn/install-state.gz 133 | .pnp.* 134 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Official Replit Exporter 2 | Replit has introduced an official way to bulk export repls. From your account settings, click "Start Export": 3 | 4 | image 5 | 6 | Although you can still use this CLI, no support will be provided and things are more likely to break. 7 | 8 | # Replit Starter Plan Changes 9 | 10 | Replit has recently updated its Starter Plan (the core free plan) to limit users to 3 Repls. Accounts exceeding this limit will face restrictions in the future (all repls will be automatically deleted in a year) unless they subscribe to a $25/month plan. 11 | 12 | To help transition smoothly, this CLI script downloads all Repls from your account, including environment variables and configuration data, allowing you to securely move your projects off Replit. 13 | 14 | ![email](email.png) 15 | ## Installation 16 | 17 | To install the package globally, run: 18 | 19 | ```sh 20 | npm install -g replit-export 21 | ``` 22 | 23 | ## Usage 24 | 25 | ```sh 26 | replit-export --help 27 | ``` 28 | 29 | ### Command Options 30 | 31 | - `-V, --version` 32 | Outputs the version number. 33 | 34 | - `-o, --output ` 35 | Specifies the directory to save Repls. 36 | 37 | - `-a, --auth ` 38 | Replit authorization cookie (`connect.sid`). 39 | 40 | - `-l, --load ` 41 | Load a previous save file to continue downloading (default: `.replit-export.save`). 42 | 43 | - `-c, --concurrent ` 44 | Sets the maximum number of concurrent downloads (default: `15`). 45 | 46 | - `-m, --max` 47 | Limits the maximum number of Repls to download. 48 | 49 | - `-f, --filter <...files>` 50 | Filters out files matching the specified patterns (default: `["node_modules/",".cargo/"]`). 51 | 52 | - `-h, --help` 53 | Displays help information. 54 | 55 | ### Obtaining the Auth Cookie 56 | 57 | To retrieve the authorization cookie required for this script: 58 | 59 | 1. Log in to [Replit](https://replit.com). 60 | 2. Open DevTools in your browser. 61 | 3. Copy the `connect.sid` cookie. 62 | Alternatively, you can use an extension like Cookie Editor. 63 | 64 | ### Quickstart Guide 65 | 66 | To quickly start downloading all your Repls, run the following command: 67 | 68 | ```bash 69 | replit-export --output repls/ --auth 70 | ``` 71 | 72 | This will download all public and private Repls from your account to the `repls/` folder. 73 | 74 | ### Environment Variables 75 | 76 | Environment variables are automatically extracted and saved in a `.env` file in the root folder of each Repl. 77 | 78 | ### Ratelimit and Disk Space Considerations 79 | 80 | If you have a large number of Repls, ensure you have sufficient disk space on your computer. Replit enforces a rate limit for downloading entire Repl zips. The CLI handles these rate limits automatically, and you may notice occasional pauses. If you have many Repls, it's recommended to leave the CLI running in the background until the process is complete. 81 | -------------------------------------------------------------------------------- /email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackermondev/replit-exporter/5e9b6726fe59c35daf143292562ec1cb46f203b6/email.png -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import typescriptEslint from "@typescript-eslint/eslint-plugin"; 2 | import prettier from "eslint-plugin-prettier"; 3 | import globals from "globals"; 4 | import tsParser from "@typescript-eslint/parser"; 5 | import path from "node:path"; 6 | import { fileURLToPath } from "node:url"; 7 | import js from "@eslint/js"; 8 | import { FlatCompat } from "@eslint/eslintrc"; 9 | 10 | const __filename = fileURLToPath(import.meta.url); 11 | const __dirname = path.dirname(__filename); 12 | const compat = new FlatCompat({ 13 | baseDirectory: __dirname, 14 | recommendedConfig: js.configs.recommended, 15 | allConfig: js.configs.all 16 | }); 17 | 18 | export default [{ 19 | ignores: ["**/dist/", "**/node_modules/"], 20 | }, ...compat.extends( 21 | "eslint:recommended", 22 | "plugin:@typescript-eslint/recommended", 23 | "plugin:prettier/recommended", 24 | ), { 25 | plugins: { 26 | "@typescript-eslint": typescriptEslint, 27 | prettier, 28 | }, 29 | 30 | languageOptions: { 31 | globals: { 32 | ...globals.node, 33 | }, 34 | 35 | parser: tsParser, 36 | }, 37 | 38 | rules: { 39 | "prettier/prettier": "error", 40 | "import/prefer-default-export": "off", 41 | indent: "off", 42 | "implicit-arrow-linebreak": "off", 43 | "no-unused-expressions": "off", 44 | "@typescript-eslint/no-unused-expressions": "error", 45 | 46 | "max-len": ["error", { 47 | code: 120, 48 | }], 49 | 50 | "@typescript-eslint/no-empty-function": "off", 51 | "no-shadow": "off", 52 | "@typescript-eslint/no-shadow": "error", 53 | "@typescript-eslint/explicit-function-return-type": "off", 54 | "@typescript-eslint/no-non-null-assertion": "error", 55 | "operator-linebreak": "off", 56 | 57 | "no-param-reassign": ["error", { 58 | props: false, 59 | }], 60 | 61 | "object-curly-newline": "off", 62 | }, 63 | }]; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "replit-export", 3 | "version": "1.0.14", 4 | "main": "dist/index.js", 5 | "repository": "https://github.com/hackermondev/replit-exporter", 6 | "author": "Hackermon ", 7 | "license": "MIT", 8 | "bin": "dist/cli.js", 9 | "scripts": { 10 | "build": "tsc", 11 | "lint": "eslint --fix src/*" 12 | }, 13 | "prettier": { 14 | "tabWidth": 4, 15 | "useTabs": false, 16 | "trailingComma": "all", 17 | "semi": true, 18 | "singleQuote": true, 19 | "printWidth": 100, 20 | "bracketSpacing": true, 21 | "arrowParens": "always" 22 | }, 23 | "devDependencies": { 24 | "@eslint/eslintrc": "^3.1.0", 25 | "@eslint/js": "^9.5.0", 26 | "@types/node": "^22.5.0", 27 | "@typescript-eslint/eslint-plugin": "^7.14.1", 28 | "@typescript-eslint/parser": "^7.14.1", 29 | "eslint": "^9.5.0", 30 | "eslint-config-prettier": "^9.1.0", 31 | "eslint-plugin-prettier": "^5.1.3", 32 | "prettier": "^3.3.2", 33 | "typescript": "^5.5.4" 34 | }, 35 | "dependencies": { 36 | "axios": "^1.7.5", 37 | "chalk": "2", 38 | "commander": "^12.1.0", 39 | "extract-zip": "^2.0.1", 40 | "glob": "^11.0.0" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/api/exporter.ts: -------------------------------------------------------------------------------- 1 | import { WriteStream } from 'fs'; 2 | import { trace } from '../logger'; 3 | import { ReplitClient } from './replit'; 4 | 5 | export interface ExporterState { 6 | pageInfo?: PageInfo; 7 | user?: number; 8 | } 9 | 10 | export interface ExporterConfig { 11 | rest: { 12 | authorization: string; 13 | config?: any; 14 | }; 15 | state?: ExporterState; 16 | } 17 | 18 | declare global { 19 | interface Error { 20 | response?: Array<{ [key: string]: string }>; 21 | } 22 | } 23 | 24 | export class Exporter { 25 | public state: ExporterState; 26 | private client: ReplitClient; 27 | 28 | constructor(config: ExporterConfig) { 29 | this.state = config.state || {}; 30 | this.client = new ReplitClient(config.rest.authorization, config.rest.config); 31 | } 32 | 33 | public async getNextRepls(count: number = 15): Promise> { 34 | const { data: response } = await this.client.graphql( 35 | 'ExportRepls', 36 | { 37 | search: '', 38 | after: this.state.pageInfo?.nextCursor, 39 | count, 40 | }, 41 | query, 42 | ); 43 | 44 | const errors = response.errors; 45 | if (errors && errors.length > 0) { 46 | const error = new Error('Cannot fetch user repls'); 47 | error.response = errors; 48 | throw error; 49 | } 50 | 51 | if (!response.data?.currentUser) { 52 | throw new Error('Invalid authorization cookie'); 53 | } 54 | 55 | trace('getNextRepls response', JSON.stringify(response.data)); 56 | const data = response.data?.currentUser.exportRepls; 57 | const pageInfo = data?.pageInfo; 58 | const repls = data?.items; 59 | 60 | this.state.pageInfo = pageInfo; 61 | return repls || []; 62 | } 63 | 64 | public async bulkDownloadRepls( 65 | repls: Array, 66 | streams: Array, 67 | ): Promise<{ failed: Array }> { 68 | const failed: Array = []; 69 | await Promise.all( 70 | repls.map(async (repl, index) => { 71 | const stream = streams[index]; 72 | await this.downloadRepl(repl, stream).catch((error) => { 73 | console.warn(`${repl.slug} (${repl.id}) failed`, error); 74 | failed.push(repl.id); 75 | }); 76 | 77 | console.log(`Downloaded @${repl.user.username}/${repl.slug} (${repl.id})`); 78 | }), 79 | ); 80 | 81 | return { failed }; 82 | } 83 | 84 | public async getUser(): Promise { 85 | const { data: response } = await this.client.graphql( 86 | 'CurrentUser', 87 | {}, 88 | queryCurrentUser, 89 | ); 90 | const errors = response.errors; 91 | if (errors && errors.length > 0) { 92 | const error = new Error('Cannot fetch current user'); 93 | error.response = errors; 94 | throw error; 95 | } 96 | 97 | if (!response.data?.currentUser) { 98 | throw new Error('Invalid authorization cookie'); 99 | } 100 | 101 | return response.data.currentUser.id; 102 | } 103 | 104 | public async downloadRepl(repl: Repl, stream: WriteStream) { 105 | // Download 106 | const slugUrl = `https://replit.com/@${repl.user.username}/${repl.slug}`; 107 | const zipUrl = `${slugUrl}.zip`; 108 | const download = await this.client.rest.get(zipUrl, { responseType: 'stream' }); 109 | const contentType = download.headers['content-type']; 110 | if (contentType != 'application/zip') { 111 | throw new Error(`Invalid content type, should be application/zip, got ${contentType}`); 112 | } 113 | 114 | download.data.pipe(stream); 115 | 116 | await new Promise((resolve, reject) => { 117 | stream.once('finish', resolve); 118 | stream.once('error', reject); 119 | 120 | if (stream.errored) reject(new Error('Stream errored')); 121 | else if (stream.closed) resolve(1); 122 | }); 123 | } 124 | } 125 | 126 | export interface PageInfo { 127 | hasNextPage: boolean; 128 | nextCursor?: string; 129 | } 130 | 131 | export interface Repl { 132 | id: string; 133 | title: string; 134 | isPrivate: boolean; 135 | slug: string; 136 | wasPublished: boolean; 137 | timeCreated: string; 138 | timeUpdated: string; 139 | user: { 140 | id: number; 141 | username: string; 142 | }; 143 | config: { 144 | isServer: boolean; 145 | isExtension: boolean; 146 | gitRemoteUrl?: string; 147 | isVnc: boolean; 148 | doClone: boolean; 149 | }; 150 | multiplayers: Array<{ 151 | id: string; 152 | username: string; 153 | }>; 154 | domains: Array<{ 155 | domain: string; 156 | state: string; 157 | hosting_deployment_id?: string; 158 | }>; 159 | isAlwaysOn: boolean; 160 | isBoosted: boolean; 161 | } 162 | 163 | interface CurrentUserResult { 164 | currentUser: { 165 | id: number; 166 | }; 167 | } 168 | 169 | interface SearchReplResult { 170 | currentUser: { 171 | exportRepls: { 172 | items: Array; 173 | pageInfo: PageInfo; 174 | }; 175 | }; 176 | } 177 | 178 | const queryCurrentUser = `query CurrentUser { 179 | currentUser { 180 | id 181 | } 182 | } 183 | `; 184 | 185 | const query = `query ExportRepls($search: String!, $after: String, $count: Int) { 186 | currentUser { 187 | exportRepls: paginatedReplSearch(search: $search, after: $after, count: $count) { 188 | items { 189 | id 190 | title 191 | isPrivate 192 | slug 193 | wasPublished 194 | timeCreated 195 | timeUpdated 196 | user { 197 | id 198 | username 199 | } 200 | language 201 | config { 202 | isServer 203 | isExtension 204 | gitRemoteUrl 205 | isVnc 206 | doClone 207 | } 208 | multiplayers { 209 | id 210 | username 211 | } 212 | source { 213 | release { 214 | id 215 | description 216 | hostedUrl 217 | user { 218 | id 219 | username 220 | } 221 | } 222 | 223 | deployment { 224 | id 225 | domain 226 | } 227 | } 228 | domains { 229 | domain 230 | state 231 | hosting_deployment_id 232 | } 233 | isAlwaysOn 234 | isBoosted 235 | } 236 | 237 | pageInfo { 238 | hasNextPage 239 | nextCursor 240 | } 241 | } 242 | } 243 | } 244 | `; 245 | -------------------------------------------------------------------------------- /src/api/replit.ts: -------------------------------------------------------------------------------- 1 | import axios, { AxiosInstance, AxiosResponse, CreateAxiosDefaults } from 'axios'; 2 | import { useRatelimitMiddleware } from '../axios/ratelimit'; 3 | 4 | import https from 'https'; 5 | import { useRetryMiddleware } from '../axios/retry'; 6 | 7 | const defaultConfig: CreateAxiosDefaults = { 8 | baseURL: 'https://replit.com', 9 | httpsAgent: new https.Agent({ keepAlive: true }), 10 | headers: { 11 | 'user-agent': 'Replit-Exporter (+https://github.com/hackermondev/replit-exporter)', 12 | 13 | // Replit API requires these headers 14 | 'x-requested-with': 'XMLHttpRequest', 15 | referer: 'https://replit.com', 16 | }, 17 | }; 18 | 19 | export class ReplitClient { 20 | public rest: AxiosInstance; 21 | 22 | constructor(authorizationCookie: string, overrideConfig?: CreateAxiosDefaults) { 23 | const config = { 24 | ...defaultConfig, 25 | ...overrideConfig, 26 | } as any; 27 | 28 | config.headers['cookie'] = `connect.sid=${authorizationCookie}`; 29 | 30 | this.rest = axios.create(config); 31 | useRatelimitMiddleware(this.rest); 32 | useRetryMiddleware(this.rest); 33 | } 34 | 35 | public async graphql( 36 | operationName: string, 37 | variables: { [key: string]: any }, 38 | query: string, 39 | ): Promise>> { 40 | return await this.rest.post( 41 | '/graphql', 42 | { 43 | operationName, 44 | variables, 45 | query, 46 | }, 47 | { validateStatus: (status) => status >= 200 && status <= 499 }, 48 | ); 49 | } 50 | } 51 | 52 | export interface GraphqlResponse { 53 | errors?: Array<{ [key: string]: string }>; 54 | data?: T; 55 | } 56 | -------------------------------------------------------------------------------- /src/axios/ratelimit.ts: -------------------------------------------------------------------------------- 1 | // Axios middleware to automatically retry 429 requests 2 | import { AxiosInstance } from 'axios'; 3 | 4 | // Maximum retry-after duration in seconds (to avoid long delays) 5 | const MAX_RETRY_AFTER = 500; 6 | 7 | // Retry delay in seconds if 'retry-after' header is not present or exceeds MAX_RETRY_AFTER 8 | const DEFAULT_RETRY_DELAY = 100; 9 | 10 | export const useRatelimitMiddleware = (axios: AxiosInstance) => { 11 | axios.interceptors.response.use( 12 | (response) => { 13 | // If the response is successful, return it 14 | return response; 15 | }, 16 | async (error) => { 17 | const { response, config } = error; 18 | 19 | // Check if the error is a 429 (Too Many Requests) response 20 | if (response && response.status === 429) { 21 | let retryAfter = parseInt(response.headers['retry-after'], 10); 22 | 23 | // Use the default retry delay if retry-after header is not present or is too long 24 | if (isNaN(retryAfter) || retryAfter > MAX_RETRY_AFTER) { 25 | retryAfter = DEFAULT_RETRY_DELAY; 26 | } 27 | 28 | console.warn( 29 | `${config.url} ratelimited, automatically retrying in ${retryAfter} seconds`, 30 | ); 31 | 32 | // Wait for the specified retry delay 33 | await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000)); 34 | 35 | // Retry the request with the same config 36 | return axios(config); 37 | } 38 | 39 | // If the error is not a 429, reject it 40 | return Promise.reject(error); 41 | }, 42 | ); 43 | }; 44 | -------------------------------------------------------------------------------- /src/axios/retry.ts: -------------------------------------------------------------------------------- 1 | // Axios middleware to retry requests at least once 2 | import { AxiosInstance } from 'axios'; 3 | 4 | export const useRetryMiddleware = (axiosInstance: AxiosInstance) => { 5 | axiosInstance.interceptors.response.use( 6 | (response) => { 7 | // If the response is successful, just return it 8 | return response; 9 | }, 10 | async (error) => { 11 | const { config, response } = error; 12 | 13 | // Check if the error is retryable (i.e., not 429) 14 | if (response && response.status !== 429) { 15 | const retryCount = config._retry || 0; 16 | if (retryCount <= 5) { 17 | config._retry = retryCount + 1; 18 | console.log( 19 | `Retrying request to ${config.url}(${retryCount}), recieved status code ${response.status}`, 20 | ); 21 | 22 | await new Promise((resolve) => setTimeout(resolve, 500 * retryCount)); 23 | 24 | // Retry the request 25 | return axiosInstance(config); 26 | } 27 | } 28 | 29 | // If it's a 429 or has already been retried, reject the promise with the error 30 | return Promise.reject(error); 31 | }, 32 | ); 33 | }; 34 | -------------------------------------------------------------------------------- /src/cli.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | process.env['NODE_NO_WARNINGS'] = '1'; 3 | import chalk from 'chalk'; 4 | import { program } from 'commander'; 5 | import { existsSync, mkdirSync } from 'fs'; 6 | import { appendFile, readFile, writeFile } from 'fs/promises'; 7 | import { join, resolve } from 'path'; 8 | import { Exporter } from './api/exporter'; 9 | import { ReplZip } from './repl'; 10 | 11 | program 12 | .version(require('../package.json').version) 13 | .requiredOption('-o, --output ', 'Directory to save Repls to') 14 | .requiredOption('-a, --auth ', 'Replit authorization cookie (connect.sid)') 15 | .option('-l, --load ', 'Exporter savefile to continue from', '.replit-export.save') 16 | .option('-c, --concurrent ', 'Maximum concurrent download', '15') 17 | .option('-m, --max', 'Maximum amount of Repls to download') 18 | .option('-f, --filter <...files>', 'Filter files that match the expressions', [ 19 | 'node_modules/', 20 | '.cargo/', 21 | '.cache/typescript/', 22 | ]) 23 | .action(async (args) => { 24 | const output = resolve(args.output); 25 | const concurrent = parseInt(args.concurrent); 26 | const saveFile = resolve(args.load); 27 | const max = args.max ? parseInt(args.max) : undefined; 28 | let filter = args.filter; 29 | const auth = args.auth; 30 | 31 | if (isNaN(concurrent)) throw new Error(`Not a Number: ${args.concurrent} (concurrent)`); 32 | if (max && isNaN(max)) throw new Error(`Not a Number: ${args.max} (max)`); 33 | if (typeof filter == 'string') filter = filter.split(','); 34 | 35 | await run(output, concurrent, saveFile, auth, filter, max); 36 | }); 37 | 38 | program.parse(process.argv); 39 | 40 | process.on('unhandledRejection', (error) => { 41 | console.error(error); 42 | console.warn('Unknown error occured, simply restart the CLI to resume download'); 43 | process.exit(1); 44 | }); 45 | 46 | process.on('uncaughtException', (error) => { 47 | console.error(error); 48 | console.warn('Unknown error occured, simply restart the CLI to resume download'); 49 | process.exit(1); 50 | }); 51 | 52 | async function run( 53 | output: string, 54 | concurrent: number, 55 | saveFile: string, 56 | auth: string, 57 | filteredFiles: Array, 58 | maxRepls?: number, 59 | ) { 60 | let state = null; 61 | if (existsSync(saveFile)) { 62 | const save = (await readFile(saveFile)).toString(); 63 | try { 64 | state = JSON.parse(save); 65 | console.log('Resuming state', state); 66 | } catch {} 67 | } 68 | 69 | if (!existsSync(output)) mkdirSync(output); 70 | 71 | const failedReplsPath = join(output, 'failed-repls.txt'); 72 | const exporter = new Exporter({ rest: { authorization: auth }, state: state }); 73 | let count = 0; 74 | 75 | const userId = await exporter.getUser(); 76 | if (state) { 77 | if (userId != state.user) { 78 | console.warn(`Ignoring savefile, user mismatch (${state.user} != ${userId})`); 79 | exporter.state = {}; 80 | } 81 | } 82 | 83 | exporter.state.user = userId; 84 | while (true) { 85 | if (maxRepls && concurrent + count > maxRepls) { 86 | concurrent = maxRepls - count; 87 | } else if (maxRepls && count >= maxRepls) { 88 | break; 89 | } 90 | 91 | const repls = await exporter.getNextRepls(concurrent); 92 | 93 | console.log(`Downloading ${repls.length} repls (${count} finished).`); 94 | count += repls.length; 95 | if (repls.length < 1) break; 96 | 97 | let zips = repls.map((r) => new ReplZip(r, output, filteredFiles)); 98 | const { failed } = await exporter.bulkDownloadRepls( 99 | repls, 100 | zips.map((z) => z.getZipWriteStream()), 101 | ); 102 | 103 | zips = zips.filter((z) => !failed.includes(z.repl.id)); 104 | await Promise.all(zips.map((z) => z.process())); 105 | await save(exporter, saveFile); 106 | 107 | if (failed.length > 0) { 108 | await appendFile(failedReplsPath, failed.join('\r\n')); 109 | } 110 | } 111 | 112 | console.log(chalk.green(`Downloaded ${count} repls`)); 113 | } 114 | 115 | async function save(exporter: Exporter, saveFile: string) { 116 | const state = JSON.stringify(exporter.state); 117 | await writeFile(saveFile, state); 118 | } 119 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api/exporter'; 2 | export * from './api/replit'; 3 | export * from './repl'; 4 | export * from './axios/ratelimit'; 5 | -------------------------------------------------------------------------------- /src/logger.ts: -------------------------------------------------------------------------------- 1 | import chalk from 'chalk'; 2 | 3 | const originalLog = console.log; 4 | const originalError = console.error; 5 | const originalWarn = console.warn; 6 | 7 | console.log = (...data) => { 8 | const timestamp = new Date().toISOString(); 9 | return originalLog(timestamp, ...data); 10 | }; 11 | 12 | console.error = (...data) => { 13 | const timestamp = new Date().toISOString(); 14 | const c = chalk.redBright(timestamp, ...data); 15 | return originalError(c); 16 | }; 17 | 18 | console.warn = (...data) => { 19 | const timestamp = new Date().toISOString(); 20 | const c = chalk.yellowBright(timestamp, ...data); 21 | return originalWarn(c); 22 | }; 23 | 24 | export const trace = (...data: any[]) => { 25 | if (!process.env['DEBUG']) return; 26 | 27 | const timestamp = new Date().toISOString(); 28 | const c = chalk.bgCyanBright(timestamp, ...data); 29 | return console.log(c); 30 | }; 31 | -------------------------------------------------------------------------------- /src/repl.ts: -------------------------------------------------------------------------------- 1 | import { Repl } from './api/exporter'; 2 | import extract from 'extract-zip'; 3 | 4 | import { join } from 'node:path'; 5 | import { createWriteStream, existsSync, WriteStream } from 'node:fs'; 6 | import { readFile, unlink, writeFile, rm } from 'node:fs/promises'; 7 | import { Glob } from 'glob'; 8 | 9 | // Post processing for extracting zip files from repls 10 | export class ReplZip { 11 | public repl: Repl; 12 | private paths: { zip: string; folder: string }; 13 | private filter: Array; 14 | 15 | constructor(repl: Repl, source: string, filter: Array) { 16 | this.repl = repl; 17 | this.filter = filter || []; 18 | this.paths = { 19 | zip: join(source, `${repl.id}.zip`), 20 | folder: join(source, `${repl.slug}/`), 21 | }; 22 | } 23 | 24 | public getZipWriteStream(): WriteStream { 25 | const path = this.paths.zip; 26 | return createWriteStream(path); 27 | } 28 | 29 | public async process() { 30 | await this.unzip(); 31 | 32 | // Create a file with repl data 33 | const metadata = join(this.paths.folder, 'repl.metadata.json'); 34 | if (!existsSync(metadata)) { 35 | await writeFile(metadata, JSON.stringify(this.repl, null, 4)); 36 | } 37 | 38 | // Parse environment variables from cache folder 39 | // and sort them into one file 40 | const replitEnvPath = join(this.paths.folder, '.cache/replit/env/latest.json'); 41 | if (existsSync(replitEnvPath)) { 42 | const data = (await readFile(replitEnvPath)).toString(); 43 | const envData = JSON.parse(data).environment; 44 | 45 | const env = Object.keys(envData) 46 | .filter((e) => !REPLIT_SYSTEM_ENV.includes(e)) 47 | .map((n) => `${n}=${envData[n]}`) 48 | .join('\r\n'); 49 | const envPath = join(this.paths.folder, '.env'); 50 | if (!existsSync(envPath)) { 51 | await writeFile(envPath, env); 52 | } 53 | } 54 | 55 | console.log(`Extracted @${this.repl.user.username}/${this.repl.slug}`); 56 | } 57 | 58 | async unzip() { 59 | await extract(this.paths.zip, { 60 | dir: this.paths.folder, 61 | defaultDirMode: 0o755, 62 | defaultFileMode: 0o755, 63 | }); 64 | 65 | await unlink(this.paths.zip); 66 | 67 | const filters = this.filter.map((f) => join(this.paths.folder, f)); 68 | const filtered = new Glob(filters, { absolute: true }); 69 | const iterator = filtered.iterate(); 70 | 71 | while (true) { 72 | const { done, value } = await iterator.next(); 73 | if (done) break; 74 | 75 | if (!value) continue; 76 | 77 | const file = value; 78 | await rm(file, { force: true, recursive: true }); 79 | } 80 | } 81 | } 82 | 83 | // Default environment variables in all Repls to filter 84 | export const REPLIT_SYSTEM_ENV = [ 85 | 'PATH', 86 | 'REQUESTS_CA_BUNDLE', 87 | 'SSL_CERT_FILE', 88 | 'XDG_CACHE_HOME', 89 | 'XDG_CONFIG_HOME', 90 | 'XDG_DATA_HOME', 91 | '__EGL_VENDOR_LIBRARY_FILENAMES', 92 | 'REPLIT_CLI', 93 | 'REPLIT_BASHRC', 94 | 'NODE_EXTRA_CA_CERTS', 95 | 'NIX_PATH', 96 | 'NIX_PROFILES', 97 | 'NIXPKGS_ALLOW_UNFREE', 98 | 'LIBGL_DRIVERS_PATH', 99 | 'LOCALE_ARCHIVE', 100 | ]; 101 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | "rootDir": "./src", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 59 | "removeComments": false, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 63 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 64 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 65 | "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 66 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 67 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 68 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 69 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 70 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 71 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 72 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 73 | 74 | /* Interop Constraints */ 75 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 76 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 77 | // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ 78 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 79 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 80 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 81 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 82 | 83 | /* Type Checking */ 84 | "strict": true, /* Enable all strict type-checking options. */ 85 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 86 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 87 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 88 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 89 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 90 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 91 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 92 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 93 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 94 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 95 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 96 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 97 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 98 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 99 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 100 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 101 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 102 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 103 | 104 | /* Completeness */ 105 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 106 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": 6 | version "4.4.0" 7 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 8 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 9 | dependencies: 10 | eslint-visitor-keys "^3.3.0" 11 | 12 | "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0": 13 | version "4.11.0" 14 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" 15 | integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== 16 | 17 | "@eslint/config-array@^0.18.0": 18 | version "0.18.0" 19 | resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" 20 | integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== 21 | dependencies: 22 | "@eslint/object-schema" "^2.1.4" 23 | debug "^4.3.1" 24 | minimatch "^3.1.2" 25 | 26 | "@eslint/eslintrc@^3.1.0": 27 | version "3.1.0" 28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" 29 | integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.3.2" 33 | espree "^10.0.1" 34 | globals "^14.0.0" 35 | ignore "^5.2.0" 36 | import-fresh "^3.2.1" 37 | js-yaml "^4.1.0" 38 | minimatch "^3.1.2" 39 | strip-json-comments "^3.1.1" 40 | 41 | "@eslint/js@9.9.1", "@eslint/js@^9.5.0": 42 | version "9.9.1" 43 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06" 44 | integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ== 45 | 46 | "@eslint/object-schema@^2.1.4": 47 | version "2.1.4" 48 | resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" 49 | integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== 50 | 51 | "@humanwhocodes/module-importer@^1.0.1": 52 | version "1.0.1" 53 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 54 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 55 | 56 | "@humanwhocodes/retry@^0.3.0": 57 | version "0.3.0" 58 | resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570" 59 | integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== 60 | 61 | "@isaacs/cliui@^8.0.2": 62 | version "8.0.2" 63 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" 64 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== 65 | dependencies: 66 | string-width "^5.1.2" 67 | string-width-cjs "npm:string-width@^4.2.0" 68 | strip-ansi "^7.0.1" 69 | strip-ansi-cjs "npm:strip-ansi@^6.0.1" 70 | wrap-ansi "^8.1.0" 71 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" 72 | 73 | "@nodelib/fs.scandir@2.1.5": 74 | version "2.1.5" 75 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 76 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 77 | dependencies: 78 | "@nodelib/fs.stat" "2.0.5" 79 | run-parallel "^1.1.9" 80 | 81 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 82 | version "2.0.5" 83 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 84 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 85 | 86 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 87 | version "1.2.8" 88 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 89 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 90 | dependencies: 91 | "@nodelib/fs.scandir" "2.1.5" 92 | fastq "^1.6.0" 93 | 94 | "@pkgjs/parseargs@^0.11.0": 95 | version "0.11.0" 96 | resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" 97 | integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== 98 | 99 | "@pkgr/core@^0.1.0": 100 | version "0.1.1" 101 | resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" 102 | integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== 103 | 104 | "@types/node@*", "@types/node@^22.5.0": 105 | version "22.5.0" 106 | resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.0.tgz#10f01fe9465166b4cab72e75f60d8b99d019f958" 107 | integrity sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg== 108 | dependencies: 109 | undici-types "~6.19.2" 110 | 111 | "@types/yauzl@^2.9.1": 112 | version "2.10.3" 113 | resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" 114 | integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== 115 | dependencies: 116 | "@types/node" "*" 117 | 118 | "@typescript-eslint/eslint-plugin@^7.14.1": 119 | version "7.18.0" 120 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" 121 | integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== 122 | dependencies: 123 | "@eslint-community/regexpp" "^4.10.0" 124 | "@typescript-eslint/scope-manager" "7.18.0" 125 | "@typescript-eslint/type-utils" "7.18.0" 126 | "@typescript-eslint/utils" "7.18.0" 127 | "@typescript-eslint/visitor-keys" "7.18.0" 128 | graphemer "^1.4.0" 129 | ignore "^5.3.1" 130 | natural-compare "^1.4.0" 131 | ts-api-utils "^1.3.0" 132 | 133 | "@typescript-eslint/parser@^7.14.1": 134 | version "7.18.0" 135 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" 136 | integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== 137 | dependencies: 138 | "@typescript-eslint/scope-manager" "7.18.0" 139 | "@typescript-eslint/types" "7.18.0" 140 | "@typescript-eslint/typescript-estree" "7.18.0" 141 | "@typescript-eslint/visitor-keys" "7.18.0" 142 | debug "^4.3.4" 143 | 144 | "@typescript-eslint/scope-manager@7.18.0": 145 | version "7.18.0" 146 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" 147 | integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== 148 | dependencies: 149 | "@typescript-eslint/types" "7.18.0" 150 | "@typescript-eslint/visitor-keys" "7.18.0" 151 | 152 | "@typescript-eslint/type-utils@7.18.0": 153 | version "7.18.0" 154 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" 155 | integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== 156 | dependencies: 157 | "@typescript-eslint/typescript-estree" "7.18.0" 158 | "@typescript-eslint/utils" "7.18.0" 159 | debug "^4.3.4" 160 | ts-api-utils "^1.3.0" 161 | 162 | "@typescript-eslint/types@7.18.0": 163 | version "7.18.0" 164 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" 165 | integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== 166 | 167 | "@typescript-eslint/typescript-estree@7.18.0": 168 | version "7.18.0" 169 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" 170 | integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== 171 | dependencies: 172 | "@typescript-eslint/types" "7.18.0" 173 | "@typescript-eslint/visitor-keys" "7.18.0" 174 | debug "^4.3.4" 175 | globby "^11.1.0" 176 | is-glob "^4.0.3" 177 | minimatch "^9.0.4" 178 | semver "^7.6.0" 179 | ts-api-utils "^1.3.0" 180 | 181 | "@typescript-eslint/utils@7.18.0": 182 | version "7.18.0" 183 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" 184 | integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== 185 | dependencies: 186 | "@eslint-community/eslint-utils" "^4.4.0" 187 | "@typescript-eslint/scope-manager" "7.18.0" 188 | "@typescript-eslint/types" "7.18.0" 189 | "@typescript-eslint/typescript-estree" "7.18.0" 190 | 191 | "@typescript-eslint/visitor-keys@7.18.0": 192 | version "7.18.0" 193 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" 194 | integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== 195 | dependencies: 196 | "@typescript-eslint/types" "7.18.0" 197 | eslint-visitor-keys "^3.4.3" 198 | 199 | acorn-jsx@^5.3.2: 200 | version "5.3.2" 201 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 202 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 203 | 204 | acorn@^8.12.0: 205 | version "8.12.1" 206 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" 207 | integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== 208 | 209 | ajv@^6.12.4: 210 | version "6.12.6" 211 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 212 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 213 | dependencies: 214 | fast-deep-equal "^3.1.1" 215 | fast-json-stable-stringify "^2.0.0" 216 | json-schema-traverse "^0.4.1" 217 | uri-js "^4.2.2" 218 | 219 | ansi-regex@^5.0.1: 220 | version "5.0.1" 221 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 222 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 223 | 224 | ansi-regex@^6.0.1: 225 | version "6.0.1" 226 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" 227 | integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 228 | 229 | ansi-styles@^3.2.1: 230 | version "3.2.1" 231 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 232 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 233 | dependencies: 234 | color-convert "^1.9.0" 235 | 236 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 237 | version "4.3.0" 238 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 239 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 240 | dependencies: 241 | color-convert "^2.0.1" 242 | 243 | ansi-styles@^6.1.0: 244 | version "6.2.1" 245 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 246 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 247 | 248 | argparse@^2.0.1: 249 | version "2.0.1" 250 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 251 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 252 | 253 | array-union@^2.1.0: 254 | version "2.1.0" 255 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 256 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 257 | 258 | asynckit@^0.4.0: 259 | version "0.4.0" 260 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 261 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 262 | 263 | axios@^1.7.5: 264 | version "1.7.5" 265 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.5.tgz#21eed340eb5daf47d29b6e002424b3e88c8c54b1" 266 | integrity sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw== 267 | dependencies: 268 | follow-redirects "^1.15.6" 269 | form-data "^4.0.0" 270 | proxy-from-env "^1.1.0" 271 | 272 | balanced-match@^1.0.0: 273 | version "1.0.2" 274 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 275 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 276 | 277 | brace-expansion@^1.1.7: 278 | version "1.1.11" 279 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 280 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 281 | dependencies: 282 | balanced-match "^1.0.0" 283 | concat-map "0.0.1" 284 | 285 | brace-expansion@^2.0.1: 286 | version "2.0.1" 287 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 288 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 289 | dependencies: 290 | balanced-match "^1.0.0" 291 | 292 | braces@^3.0.3: 293 | version "3.0.3" 294 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 295 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 296 | dependencies: 297 | fill-range "^7.1.1" 298 | 299 | buffer-crc32@~0.2.3: 300 | version "0.2.13" 301 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 302 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== 303 | 304 | callsites@^3.0.0: 305 | version "3.1.0" 306 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 307 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 308 | 309 | chalk@2: 310 | version "2.4.2" 311 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 312 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 313 | dependencies: 314 | ansi-styles "^3.2.1" 315 | escape-string-regexp "^1.0.5" 316 | supports-color "^5.3.0" 317 | 318 | chalk@^4.0.0: 319 | version "4.1.2" 320 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 321 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 322 | dependencies: 323 | ansi-styles "^4.1.0" 324 | supports-color "^7.1.0" 325 | 326 | color-convert@^1.9.0: 327 | version "1.9.3" 328 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 329 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 330 | dependencies: 331 | color-name "1.1.3" 332 | 333 | color-convert@^2.0.1: 334 | version "2.0.1" 335 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 336 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 337 | dependencies: 338 | color-name "~1.1.4" 339 | 340 | color-name@1.1.3: 341 | version "1.1.3" 342 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 343 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 344 | 345 | color-name@~1.1.4: 346 | version "1.1.4" 347 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 348 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 349 | 350 | combined-stream@^1.0.8: 351 | version "1.0.8" 352 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 353 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 354 | dependencies: 355 | delayed-stream "~1.0.0" 356 | 357 | commander@^12.1.0: 358 | version "12.1.0" 359 | resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" 360 | integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== 361 | 362 | concat-map@0.0.1: 363 | version "0.0.1" 364 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 365 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 366 | 367 | cross-spawn@^7.0.0, cross-spawn@^7.0.2: 368 | version "7.0.3" 369 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 370 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 371 | dependencies: 372 | path-key "^3.1.0" 373 | shebang-command "^2.0.0" 374 | which "^2.0.1" 375 | 376 | debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: 377 | version "4.3.6" 378 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" 379 | integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== 380 | dependencies: 381 | ms "2.1.2" 382 | 383 | deep-is@^0.1.3: 384 | version "0.1.4" 385 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 386 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 387 | 388 | delayed-stream@~1.0.0: 389 | version "1.0.0" 390 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 391 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 392 | 393 | dir-glob@^3.0.1: 394 | version "3.0.1" 395 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 396 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 397 | dependencies: 398 | path-type "^4.0.0" 399 | 400 | eastasianwidth@^0.2.0: 401 | version "0.2.0" 402 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 403 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 404 | 405 | emoji-regex@^8.0.0: 406 | version "8.0.0" 407 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 408 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 409 | 410 | emoji-regex@^9.2.2: 411 | version "9.2.2" 412 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 413 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 414 | 415 | end-of-stream@^1.1.0: 416 | version "1.4.4" 417 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 418 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 419 | dependencies: 420 | once "^1.4.0" 421 | 422 | escape-string-regexp@^1.0.5: 423 | version "1.0.5" 424 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 425 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 426 | 427 | escape-string-regexp@^4.0.0: 428 | version "4.0.0" 429 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 430 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 431 | 432 | eslint-config-prettier@^9.1.0: 433 | version "9.1.0" 434 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" 435 | integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== 436 | 437 | eslint-plugin-prettier@^5.1.3: 438 | version "5.2.1" 439 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" 440 | integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== 441 | dependencies: 442 | prettier-linter-helpers "^1.0.0" 443 | synckit "^0.9.1" 444 | 445 | eslint-scope@^8.0.2: 446 | version "8.0.2" 447 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.2.tgz#5cbb33d4384c9136083a71190d548158fe128f94" 448 | integrity sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA== 449 | dependencies: 450 | esrecurse "^4.3.0" 451 | estraverse "^5.2.0" 452 | 453 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: 454 | version "3.4.3" 455 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" 456 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 457 | 458 | eslint-visitor-keys@^4.0.0: 459 | version "4.0.0" 460 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" 461 | integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== 462 | 463 | eslint@^9.5.0: 464 | version "9.9.1" 465 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.1.tgz#147ac9305d56696fb84cf5bdecafd6517ddc77ec" 466 | integrity sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg== 467 | dependencies: 468 | "@eslint-community/eslint-utils" "^4.2.0" 469 | "@eslint-community/regexpp" "^4.11.0" 470 | "@eslint/config-array" "^0.18.0" 471 | "@eslint/eslintrc" "^3.1.0" 472 | "@eslint/js" "9.9.1" 473 | "@humanwhocodes/module-importer" "^1.0.1" 474 | "@humanwhocodes/retry" "^0.3.0" 475 | "@nodelib/fs.walk" "^1.2.8" 476 | ajv "^6.12.4" 477 | chalk "^4.0.0" 478 | cross-spawn "^7.0.2" 479 | debug "^4.3.2" 480 | escape-string-regexp "^4.0.0" 481 | eslint-scope "^8.0.2" 482 | eslint-visitor-keys "^4.0.0" 483 | espree "^10.1.0" 484 | esquery "^1.5.0" 485 | esutils "^2.0.2" 486 | fast-deep-equal "^3.1.3" 487 | file-entry-cache "^8.0.0" 488 | find-up "^5.0.0" 489 | glob-parent "^6.0.2" 490 | ignore "^5.2.0" 491 | imurmurhash "^0.1.4" 492 | is-glob "^4.0.0" 493 | is-path-inside "^3.0.3" 494 | json-stable-stringify-without-jsonify "^1.0.1" 495 | levn "^0.4.1" 496 | lodash.merge "^4.6.2" 497 | minimatch "^3.1.2" 498 | natural-compare "^1.4.0" 499 | optionator "^0.9.3" 500 | strip-ansi "^6.0.1" 501 | text-table "^0.2.0" 502 | 503 | espree@^10.0.1, espree@^10.1.0: 504 | version "10.1.0" 505 | resolved "https://registry.yarnpkg.com/espree/-/espree-10.1.0.tgz#8788dae611574c0f070691f522e4116c5a11fc56" 506 | integrity sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA== 507 | dependencies: 508 | acorn "^8.12.0" 509 | acorn-jsx "^5.3.2" 510 | eslint-visitor-keys "^4.0.0" 511 | 512 | esquery@^1.5.0: 513 | version "1.6.0" 514 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" 515 | integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== 516 | dependencies: 517 | estraverse "^5.1.0" 518 | 519 | esrecurse@^4.3.0: 520 | version "4.3.0" 521 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 522 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 523 | dependencies: 524 | estraverse "^5.2.0" 525 | 526 | estraverse@^5.1.0, estraverse@^5.2.0: 527 | version "5.3.0" 528 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 529 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 530 | 531 | esutils@^2.0.2: 532 | version "2.0.3" 533 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 534 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 535 | 536 | extract-zip@^2.0.1: 537 | version "2.0.1" 538 | resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" 539 | integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== 540 | dependencies: 541 | debug "^4.1.1" 542 | get-stream "^5.1.0" 543 | yauzl "^2.10.0" 544 | optionalDependencies: 545 | "@types/yauzl" "^2.9.1" 546 | 547 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 548 | version "3.1.3" 549 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 550 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 551 | 552 | fast-diff@^1.1.2: 553 | version "1.3.0" 554 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" 555 | integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== 556 | 557 | fast-glob@^3.2.9: 558 | version "3.3.2" 559 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" 560 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 561 | dependencies: 562 | "@nodelib/fs.stat" "^2.0.2" 563 | "@nodelib/fs.walk" "^1.2.3" 564 | glob-parent "^5.1.2" 565 | merge2 "^1.3.0" 566 | micromatch "^4.0.4" 567 | 568 | fast-json-stable-stringify@^2.0.0: 569 | version "2.1.0" 570 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 571 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 572 | 573 | fast-levenshtein@^2.0.6: 574 | version "2.0.6" 575 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 576 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 577 | 578 | fastq@^1.6.0: 579 | version "1.17.1" 580 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" 581 | integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== 582 | dependencies: 583 | reusify "^1.0.4" 584 | 585 | fd-slicer@~1.1.0: 586 | version "1.1.0" 587 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" 588 | integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== 589 | dependencies: 590 | pend "~1.2.0" 591 | 592 | file-entry-cache@^8.0.0: 593 | version "8.0.0" 594 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" 595 | integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== 596 | dependencies: 597 | flat-cache "^4.0.0" 598 | 599 | fill-range@^7.1.1: 600 | version "7.1.1" 601 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 602 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 603 | dependencies: 604 | to-regex-range "^5.0.1" 605 | 606 | find-up@^5.0.0: 607 | version "5.0.0" 608 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 609 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 610 | dependencies: 611 | locate-path "^6.0.0" 612 | path-exists "^4.0.0" 613 | 614 | flat-cache@^4.0.0: 615 | version "4.0.1" 616 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" 617 | integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== 618 | dependencies: 619 | flatted "^3.2.9" 620 | keyv "^4.5.4" 621 | 622 | flatted@^3.2.9: 623 | version "3.3.1" 624 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" 625 | integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== 626 | 627 | follow-redirects@^1.15.6: 628 | version "1.15.6" 629 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" 630 | integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== 631 | 632 | foreground-child@^3.1.0: 633 | version "3.3.0" 634 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" 635 | integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== 636 | dependencies: 637 | cross-spawn "^7.0.0" 638 | signal-exit "^4.0.1" 639 | 640 | form-data@^4.0.0: 641 | version "4.0.0" 642 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 643 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 644 | dependencies: 645 | asynckit "^0.4.0" 646 | combined-stream "^1.0.8" 647 | mime-types "^2.1.12" 648 | 649 | get-stream@^5.1.0: 650 | version "5.2.0" 651 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 652 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 653 | dependencies: 654 | pump "^3.0.0" 655 | 656 | glob-parent@^5.1.2: 657 | version "5.1.2" 658 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 659 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 660 | dependencies: 661 | is-glob "^4.0.1" 662 | 663 | glob-parent@^6.0.2: 664 | version "6.0.2" 665 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 666 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 667 | dependencies: 668 | is-glob "^4.0.3" 669 | 670 | glob@^11.0.0: 671 | version "11.0.0" 672 | resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e" 673 | integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g== 674 | dependencies: 675 | foreground-child "^3.1.0" 676 | jackspeak "^4.0.1" 677 | minimatch "^10.0.0" 678 | minipass "^7.1.2" 679 | package-json-from-dist "^1.0.0" 680 | path-scurry "^2.0.0" 681 | 682 | globals@^14.0.0: 683 | version "14.0.0" 684 | resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" 685 | integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== 686 | 687 | globby@^11.1.0: 688 | version "11.1.0" 689 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 690 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 691 | dependencies: 692 | array-union "^2.1.0" 693 | dir-glob "^3.0.1" 694 | fast-glob "^3.2.9" 695 | ignore "^5.2.0" 696 | merge2 "^1.4.1" 697 | slash "^3.0.0" 698 | 699 | graphemer@^1.4.0: 700 | version "1.4.0" 701 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 702 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 703 | 704 | has-flag@^3.0.0: 705 | version "3.0.0" 706 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 707 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 708 | 709 | has-flag@^4.0.0: 710 | version "4.0.0" 711 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 712 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 713 | 714 | ignore@^5.2.0, ignore@^5.3.1: 715 | version "5.3.2" 716 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" 717 | integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== 718 | 719 | import-fresh@^3.2.1: 720 | version "3.3.0" 721 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 722 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 723 | dependencies: 724 | parent-module "^1.0.0" 725 | resolve-from "^4.0.0" 726 | 727 | imurmurhash@^0.1.4: 728 | version "0.1.4" 729 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 730 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 731 | 732 | is-extglob@^2.1.1: 733 | version "2.1.1" 734 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 735 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 736 | 737 | is-fullwidth-code-point@^3.0.0: 738 | version "3.0.0" 739 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 740 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 741 | 742 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 743 | version "4.0.3" 744 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 745 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 746 | dependencies: 747 | is-extglob "^2.1.1" 748 | 749 | is-number@^7.0.0: 750 | version "7.0.0" 751 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 752 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 753 | 754 | is-path-inside@^3.0.3: 755 | version "3.0.3" 756 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 757 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 758 | 759 | isexe@^2.0.0: 760 | version "2.0.0" 761 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 762 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 763 | 764 | jackspeak@^4.0.1: 765 | version "4.0.1" 766 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.1.tgz#9fca4ce961af6083e259c376e9e3541431f5287b" 767 | integrity sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog== 768 | dependencies: 769 | "@isaacs/cliui" "^8.0.2" 770 | optionalDependencies: 771 | "@pkgjs/parseargs" "^0.11.0" 772 | 773 | js-yaml@^4.1.0: 774 | version "4.1.0" 775 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 776 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 777 | dependencies: 778 | argparse "^2.0.1" 779 | 780 | json-buffer@3.0.1: 781 | version "3.0.1" 782 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 783 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 784 | 785 | json-schema-traverse@^0.4.1: 786 | version "0.4.1" 787 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 788 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 789 | 790 | json-stable-stringify-without-jsonify@^1.0.1: 791 | version "1.0.1" 792 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 793 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 794 | 795 | keyv@^4.5.4: 796 | version "4.5.4" 797 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" 798 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 799 | dependencies: 800 | json-buffer "3.0.1" 801 | 802 | levn@^0.4.1: 803 | version "0.4.1" 804 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 805 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 806 | dependencies: 807 | prelude-ls "^1.2.1" 808 | type-check "~0.4.0" 809 | 810 | locate-path@^6.0.0: 811 | version "6.0.0" 812 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 813 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 814 | dependencies: 815 | p-locate "^5.0.0" 816 | 817 | lodash.merge@^4.6.2: 818 | version "4.6.2" 819 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 820 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 821 | 822 | lru-cache@^11.0.0: 823 | version "11.0.0" 824 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.0.tgz#15d93a196f189034d7166caf9fe55e7384c98a21" 825 | integrity sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA== 826 | 827 | merge2@^1.3.0, merge2@^1.4.1: 828 | version "1.4.1" 829 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 830 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 831 | 832 | micromatch@^4.0.4: 833 | version "4.0.8" 834 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 835 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 836 | dependencies: 837 | braces "^3.0.3" 838 | picomatch "^2.3.1" 839 | 840 | mime-db@1.52.0: 841 | version "1.52.0" 842 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 843 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 844 | 845 | mime-types@^2.1.12: 846 | version "2.1.35" 847 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 848 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 849 | dependencies: 850 | mime-db "1.52.0" 851 | 852 | minimatch@^10.0.0: 853 | version "10.0.1" 854 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" 855 | integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== 856 | dependencies: 857 | brace-expansion "^2.0.1" 858 | 859 | minimatch@^3.1.2: 860 | version "3.1.2" 861 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 862 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 863 | dependencies: 864 | brace-expansion "^1.1.7" 865 | 866 | minimatch@^9.0.4: 867 | version "9.0.5" 868 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 869 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 870 | dependencies: 871 | brace-expansion "^2.0.1" 872 | 873 | minipass@^7.1.2: 874 | version "7.1.2" 875 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" 876 | integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== 877 | 878 | ms@2.1.2: 879 | version "2.1.2" 880 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 881 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 882 | 883 | natural-compare@^1.4.0: 884 | version "1.4.0" 885 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 886 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 887 | 888 | once@^1.3.1, once@^1.4.0: 889 | version "1.4.0" 890 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 891 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 892 | dependencies: 893 | wrappy "1" 894 | 895 | optionator@^0.9.3: 896 | version "0.9.4" 897 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" 898 | integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== 899 | dependencies: 900 | deep-is "^0.1.3" 901 | fast-levenshtein "^2.0.6" 902 | levn "^0.4.1" 903 | prelude-ls "^1.2.1" 904 | type-check "^0.4.0" 905 | word-wrap "^1.2.5" 906 | 907 | p-limit@^3.0.2: 908 | version "3.1.0" 909 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 910 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 911 | dependencies: 912 | yocto-queue "^0.1.0" 913 | 914 | p-locate@^5.0.0: 915 | version "5.0.0" 916 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 917 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 918 | dependencies: 919 | p-limit "^3.0.2" 920 | 921 | package-json-from-dist@^1.0.0: 922 | version "1.0.0" 923 | resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" 924 | integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== 925 | 926 | parent-module@^1.0.0: 927 | version "1.0.1" 928 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 929 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 930 | dependencies: 931 | callsites "^3.0.0" 932 | 933 | path-exists@^4.0.0: 934 | version "4.0.0" 935 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 936 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 937 | 938 | path-key@^3.1.0: 939 | version "3.1.1" 940 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 941 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 942 | 943 | path-scurry@^2.0.0: 944 | version "2.0.0" 945 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" 946 | integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== 947 | dependencies: 948 | lru-cache "^11.0.0" 949 | minipass "^7.1.2" 950 | 951 | path-type@^4.0.0: 952 | version "4.0.0" 953 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 954 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 955 | 956 | pend@~1.2.0: 957 | version "1.2.0" 958 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 959 | integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== 960 | 961 | picomatch@^2.3.1: 962 | version "2.3.1" 963 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 964 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 965 | 966 | prelude-ls@^1.2.1: 967 | version "1.2.1" 968 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 969 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 970 | 971 | prettier-linter-helpers@^1.0.0: 972 | version "1.0.0" 973 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 974 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 975 | dependencies: 976 | fast-diff "^1.1.2" 977 | 978 | prettier@^3.3.2: 979 | version "3.3.3" 980 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" 981 | integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== 982 | 983 | proxy-from-env@^1.1.0: 984 | version "1.1.0" 985 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 986 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 987 | 988 | pump@^3.0.0: 989 | version "3.0.0" 990 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 991 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 992 | dependencies: 993 | end-of-stream "^1.1.0" 994 | once "^1.3.1" 995 | 996 | punycode@^2.1.0: 997 | version "2.3.1" 998 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" 999 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 1000 | 1001 | queue-microtask@^1.2.2: 1002 | version "1.2.3" 1003 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1004 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1005 | 1006 | resolve-from@^4.0.0: 1007 | version "4.0.0" 1008 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1009 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1010 | 1011 | reusify@^1.0.4: 1012 | version "1.0.4" 1013 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1014 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1015 | 1016 | run-parallel@^1.1.9: 1017 | version "1.2.0" 1018 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1019 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1020 | dependencies: 1021 | queue-microtask "^1.2.2" 1022 | 1023 | semver@^7.6.0: 1024 | version "7.6.3" 1025 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" 1026 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 1027 | 1028 | shebang-command@^2.0.0: 1029 | version "2.0.0" 1030 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1031 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1032 | dependencies: 1033 | shebang-regex "^3.0.0" 1034 | 1035 | shebang-regex@^3.0.0: 1036 | version "3.0.0" 1037 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1038 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1039 | 1040 | signal-exit@^4.0.1: 1041 | version "4.1.0" 1042 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" 1043 | integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== 1044 | 1045 | slash@^3.0.0: 1046 | version "3.0.0" 1047 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1048 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1049 | 1050 | "string-width-cjs@npm:string-width@^4.2.0": 1051 | version "4.2.3" 1052 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1053 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1054 | dependencies: 1055 | emoji-regex "^8.0.0" 1056 | is-fullwidth-code-point "^3.0.0" 1057 | strip-ansi "^6.0.1" 1058 | 1059 | string-width@^4.1.0: 1060 | version "4.2.3" 1061 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1062 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1063 | dependencies: 1064 | emoji-regex "^8.0.0" 1065 | is-fullwidth-code-point "^3.0.0" 1066 | strip-ansi "^6.0.1" 1067 | 1068 | string-width@^5.0.1, string-width@^5.1.2: 1069 | version "5.1.2" 1070 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 1071 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 1072 | dependencies: 1073 | eastasianwidth "^0.2.0" 1074 | emoji-regex "^9.2.2" 1075 | strip-ansi "^7.0.1" 1076 | 1077 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1": 1078 | version "6.0.1" 1079 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1080 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1081 | dependencies: 1082 | ansi-regex "^5.0.1" 1083 | 1084 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1085 | version "6.0.1" 1086 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1087 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1088 | dependencies: 1089 | ansi-regex "^5.0.1" 1090 | 1091 | strip-ansi@^7.0.1: 1092 | version "7.1.0" 1093 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" 1094 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 1095 | dependencies: 1096 | ansi-regex "^6.0.1" 1097 | 1098 | strip-json-comments@^3.1.1: 1099 | version "3.1.1" 1100 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1101 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1102 | 1103 | supports-color@^5.3.0: 1104 | version "5.5.0" 1105 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1106 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1107 | dependencies: 1108 | has-flag "^3.0.0" 1109 | 1110 | supports-color@^7.1.0: 1111 | version "7.2.0" 1112 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1113 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1114 | dependencies: 1115 | has-flag "^4.0.0" 1116 | 1117 | synckit@^0.9.1: 1118 | version "0.9.1" 1119 | resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.1.tgz#febbfbb6649979450131f64735aa3f6c14575c88" 1120 | integrity sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A== 1121 | dependencies: 1122 | "@pkgr/core" "^0.1.0" 1123 | tslib "^2.6.2" 1124 | 1125 | text-table@^0.2.0: 1126 | version "0.2.0" 1127 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1128 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1129 | 1130 | to-regex-range@^5.0.1: 1131 | version "5.0.1" 1132 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1133 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1134 | dependencies: 1135 | is-number "^7.0.0" 1136 | 1137 | ts-api-utils@^1.3.0: 1138 | version "1.3.0" 1139 | resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" 1140 | integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== 1141 | 1142 | tslib@^2.6.2: 1143 | version "2.7.0" 1144 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" 1145 | integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== 1146 | 1147 | type-check@^0.4.0, type-check@~0.4.0: 1148 | version "0.4.0" 1149 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1150 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1151 | dependencies: 1152 | prelude-ls "^1.2.1" 1153 | 1154 | typescript@^5.5.4: 1155 | version "5.5.4" 1156 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" 1157 | integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== 1158 | 1159 | undici-types@~6.19.2: 1160 | version "6.19.8" 1161 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" 1162 | integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== 1163 | 1164 | uri-js@^4.2.2: 1165 | version "4.4.1" 1166 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1167 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1168 | dependencies: 1169 | punycode "^2.1.0" 1170 | 1171 | which@^2.0.1: 1172 | version "2.0.2" 1173 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1174 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1175 | dependencies: 1176 | isexe "^2.0.0" 1177 | 1178 | word-wrap@^1.2.5: 1179 | version "1.2.5" 1180 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" 1181 | integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== 1182 | 1183 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 1184 | version "7.0.0" 1185 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1186 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1187 | dependencies: 1188 | ansi-styles "^4.0.0" 1189 | string-width "^4.1.0" 1190 | strip-ansi "^6.0.0" 1191 | 1192 | wrap-ansi@^8.1.0: 1193 | version "8.1.0" 1194 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 1195 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 1196 | dependencies: 1197 | ansi-styles "^6.1.0" 1198 | string-width "^5.0.1" 1199 | strip-ansi "^7.0.1" 1200 | 1201 | wrappy@1: 1202 | version "1.0.2" 1203 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1204 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1205 | 1206 | yauzl@^2.10.0: 1207 | version "2.10.0" 1208 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" 1209 | integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== 1210 | dependencies: 1211 | buffer-crc32 "~0.2.3" 1212 | fd-slicer "~1.1.0" 1213 | 1214 | yocto-queue@^0.1.0: 1215 | version "0.1.0" 1216 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1217 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1218 | --------------------------------------------------------------------------------