├── .gitignore ├── LICENSE ├── README.md ├── howto.gif ├── package-lock.json ├── package.json ├── public ├── background.html ├── icon.svg ├── icon128.png ├── icon16.png ├── icon48.png └── manifest.json ├── src ├── background.js ├── content.js ├── options.css ├── options.html ├── options.js ├── popup.css ├── popup.html └── popup.js └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | 132 | tmp/ 133 | vanilajs/ 134 | 135 | *.zip -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2024 Scott Chacon and others 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🎙️ Claude AI Speech-to-Text Chrome Extension 🤖 2 | 3 |  4 | 5 | ## Why This Extension? 🤔 6 | Hey there! 7 | 8 | I don't know if you've felt this way, but I love using AI assistants like Claude. Recently, I found myself wishing I could talk to Claude instead of typing all the time. I enjoyed the speech-to-text feature when communicating with ChatGPT, and I wanted the same experience with Claude. 9 | 10 | That's when I had an idea: why not create a Chrome extension to bring this functionality to Claude? I like Groq's super-fast Whisper model. So, I decided to create an extension. 11 | 12 | This Chrome extension has been a great tool for me personally, making my interactions with Claude more natural and efficient. I hope it can do the same for you! 13 | 14 | ## Features 🚀 15 | 16 | - 🎤 Adds a microphone button to Claude AI's text input area 17 | - 🔄 Speech-to-text using Whisper model offered by Groq API or OpenAI 18 | - 🔀 Switch between speech-to-text providers easily 19 | - 🔒 Privacy-focused design with local processing 20 | 21 | ## Groq API and OpenAI - Speed and Accuracy ⚡ 22 | If you're looking for lightning-fast transcription, both the Groq API and OpenAI are excellent options. They use the Whisper model, which is known for its speed and accuracy. These options are perfect when you need quick, reliable transcriptions. 23 | 24 | ## Installation 📥 25 | 26 | ### From Chrome Web Store 27 | 28 | Great news! The extension is available on the Chrome Web Store. Install it from here https://tinyurl.com/claudetvoice 29 | 30 | ### From GitHub (Available Now! 🎉) 31 | 32 | 1. Clone this repository or download it as a ZIP file 33 | 2. Unzip the file (if downloaded as ZIP) 34 | 3. Open Chrome and go to `chrome://extensions/` 35 | 4. Enable "Developer mode" in the top right corner 36 | 5. Click "Load unpacked" and select the extension directory 37 | 38 | ## Usage 🔧 39 | 40 | 1. After installation, click on the extension icon in your Chrome toolbar 41 | 2. Choose your preferred speech-to-text provider (Groq or OpenAI) 42 | 3. Enter your API token for the chosen provider 43 | - To get a Groq API token, visit [Groq's website](https://www.groq.com) and create an account 44 | - For OpenAI, visit [OpenAI's website](https://www.openai.com) to create an account and generate a token 45 | 4. Go to the Claude AI website (claude.ai) 46 | 5. Look for the new microphone icon at the bottom of the text input area 47 | 6. Click the microphone icon and start talking 48 | 7. Click again to stop recording and watch as your words appear in the input box 49 | 50 | Remember, all processing happens locally on your device, ensuring your privacy and security. 51 | 52 | ## Privacy and Security 🛡️ 53 | 54 | - Your API tokens are stored safely in your browser's local storage 55 | - All speech-to-text conversion happens on your device 56 | - No data is sent to any external servers other than the API you choose (Groq or OpenAI) 57 | 58 | ## Contributing 🤝 59 | 60 | Got ideas to make this even better? Feel free to submit a Pull Request! 61 | 62 | ## License 📄 63 | 64 | MIT License 65 | 66 | ## Disclaimer ⚠️ 67 | 68 | This is an unofficial extension and is not affiliated with Anthropic (creators of Claude AI), Groq, or OpenAI. 69 | 70 | ## Let's Make AI Conversations More Natural! 💬 71 | 72 | I hope this extension enhances your Claude AI experience as much as it has mine. Whether you choose Groq or OpenAI for speech recognition, this tool aims to make your interactions with Claude more natural and efficient. Enjoy talking to Claude! 73 | -------------------------------------------------------------------------------- /howto.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unclecode/claudet/0106736ea7a838ab1b3037a62e8f7eea75a7238f/howto.gif -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Claudet", 3 | "version": "0.0.1", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "Claudet", 9 | "version": "0.0.1", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@xenova/transformers": "^2.0.0", 13 | "wavefile": "^11.0.0" 14 | }, 15 | "devDependencies": { 16 | "copy-webpack-plugin": "^11.0.0", 17 | "html-webpack-plugin": "^5.5.1", 18 | "webpack": "^5.79.0", 19 | "webpack-cli": "^5.1.4" 20 | } 21 | }, 22 | "node_modules/@discoveryjs/json-ext": { 23 | "version": "0.5.7", 24 | "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", 25 | "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", 26 | "dev": true, 27 | "engines": { 28 | "node": ">=10.0.0" 29 | } 30 | }, 31 | "node_modules/@huggingface/jinja": { 32 | "version": "0.2.2", 33 | "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz", 34 | "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==", 35 | "engines": { 36 | "node": ">=18" 37 | } 38 | }, 39 | "node_modules/@jridgewell/gen-mapping": { 40 | "version": "0.3.5", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 42 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 43 | "dev": true, 44 | "dependencies": { 45 | "@jridgewell/set-array": "^1.2.1", 46 | "@jridgewell/sourcemap-codec": "^1.4.10", 47 | "@jridgewell/trace-mapping": "^0.3.24" 48 | }, 49 | "engines": { 50 | "node": ">=6.0.0" 51 | } 52 | }, 53 | "node_modules/@jridgewell/resolve-uri": { 54 | "version": "3.1.2", 55 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 56 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 57 | "dev": true, 58 | "engines": { 59 | "node": ">=6.0.0" 60 | } 61 | }, 62 | "node_modules/@jridgewell/set-array": { 63 | "version": "1.2.1", 64 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 65 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 66 | "dev": true, 67 | "engines": { 68 | "node": ">=6.0.0" 69 | } 70 | }, 71 | "node_modules/@jridgewell/source-map": { 72 | "version": "0.3.6", 73 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", 74 | "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", 75 | "dev": true, 76 | "dependencies": { 77 | "@jridgewell/gen-mapping": "^0.3.5", 78 | "@jridgewell/trace-mapping": "^0.3.25" 79 | } 80 | }, 81 | "node_modules/@jridgewell/sourcemap-codec": { 82 | "version": "1.5.0", 83 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 84 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 85 | "dev": true 86 | }, 87 | "node_modules/@jridgewell/trace-mapping": { 88 | "version": "0.3.25", 89 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 90 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 91 | "dev": true, 92 | "dependencies": { 93 | "@jridgewell/resolve-uri": "^3.1.0", 94 | "@jridgewell/sourcemap-codec": "^1.4.14" 95 | } 96 | }, 97 | "node_modules/@nodelib/fs.scandir": { 98 | "version": "2.1.5", 99 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 100 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 101 | "dev": true, 102 | "dependencies": { 103 | "@nodelib/fs.stat": "2.0.5", 104 | "run-parallel": "^1.1.9" 105 | }, 106 | "engines": { 107 | "node": ">= 8" 108 | } 109 | }, 110 | "node_modules/@nodelib/fs.stat": { 111 | "version": "2.0.5", 112 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 113 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 114 | "dev": true, 115 | "engines": { 116 | "node": ">= 8" 117 | } 118 | }, 119 | "node_modules/@nodelib/fs.walk": { 120 | "version": "1.2.8", 121 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 122 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 123 | "dev": true, 124 | "dependencies": { 125 | "@nodelib/fs.scandir": "2.1.5", 126 | "fastq": "^1.6.0" 127 | }, 128 | "engines": { 129 | "node": ">= 8" 130 | } 131 | }, 132 | "node_modules/@protobufjs/aspromise": { 133 | "version": "1.1.2", 134 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 135 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" 136 | }, 137 | "node_modules/@protobufjs/base64": { 138 | "version": "1.1.2", 139 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 140 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 141 | }, 142 | "node_modules/@protobufjs/codegen": { 143 | "version": "2.0.4", 144 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 145 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 146 | }, 147 | "node_modules/@protobufjs/eventemitter": { 148 | "version": "1.1.0", 149 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 150 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" 151 | }, 152 | "node_modules/@protobufjs/fetch": { 153 | "version": "1.1.0", 154 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 155 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 156 | "dependencies": { 157 | "@protobufjs/aspromise": "^1.1.1", 158 | "@protobufjs/inquire": "^1.1.0" 159 | } 160 | }, 161 | "node_modules/@protobufjs/float": { 162 | "version": "1.0.2", 163 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 164 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" 165 | }, 166 | "node_modules/@protobufjs/inquire": { 167 | "version": "1.1.0", 168 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 169 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" 170 | }, 171 | "node_modules/@protobufjs/path": { 172 | "version": "1.1.2", 173 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 174 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" 175 | }, 176 | "node_modules/@protobufjs/pool": { 177 | "version": "1.1.0", 178 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 179 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" 180 | }, 181 | "node_modules/@protobufjs/utf8": { 182 | "version": "1.1.0", 183 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 184 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" 185 | }, 186 | "node_modules/@types/eslint": { 187 | "version": "8.56.10", 188 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", 189 | "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", 190 | "dev": true, 191 | "dependencies": { 192 | "@types/estree": "*", 193 | "@types/json-schema": "*" 194 | } 195 | }, 196 | "node_modules/@types/eslint-scope": { 197 | "version": "3.7.7", 198 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", 199 | "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", 200 | "dev": true, 201 | "dependencies": { 202 | "@types/eslint": "*", 203 | "@types/estree": "*" 204 | } 205 | }, 206 | "node_modules/@types/estree": { 207 | "version": "1.0.5", 208 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 209 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 210 | "dev": true 211 | }, 212 | "node_modules/@types/html-minifier-terser": { 213 | "version": "6.1.0", 214 | "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", 215 | "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", 216 | "dev": true 217 | }, 218 | "node_modules/@types/json-schema": { 219 | "version": "7.0.15", 220 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 221 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 222 | "dev": true 223 | }, 224 | "node_modules/@types/long": { 225 | "version": "4.0.2", 226 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", 227 | "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" 228 | }, 229 | "node_modules/@types/node": { 230 | "version": "20.14.11", 231 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", 232 | "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", 233 | "dependencies": { 234 | "undici-types": "~5.26.4" 235 | } 236 | }, 237 | "node_modules/@webassemblyjs/ast": { 238 | "version": "1.12.1", 239 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", 240 | "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", 241 | "dev": true, 242 | "dependencies": { 243 | "@webassemblyjs/helper-numbers": "1.11.6", 244 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6" 245 | } 246 | }, 247 | "node_modules/@webassemblyjs/floating-point-hex-parser": { 248 | "version": "1.11.6", 249 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", 250 | "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", 251 | "dev": true 252 | }, 253 | "node_modules/@webassemblyjs/helper-api-error": { 254 | "version": "1.11.6", 255 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", 256 | "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", 257 | "dev": true 258 | }, 259 | "node_modules/@webassemblyjs/helper-buffer": { 260 | "version": "1.12.1", 261 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", 262 | "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", 263 | "dev": true 264 | }, 265 | "node_modules/@webassemblyjs/helper-numbers": { 266 | "version": "1.11.6", 267 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", 268 | "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", 269 | "dev": true, 270 | "dependencies": { 271 | "@webassemblyjs/floating-point-hex-parser": "1.11.6", 272 | "@webassemblyjs/helper-api-error": "1.11.6", 273 | "@xtuc/long": "4.2.2" 274 | } 275 | }, 276 | "node_modules/@webassemblyjs/helper-wasm-bytecode": { 277 | "version": "1.11.6", 278 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", 279 | "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", 280 | "dev": true 281 | }, 282 | "node_modules/@webassemblyjs/helper-wasm-section": { 283 | "version": "1.12.1", 284 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", 285 | "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", 286 | "dev": true, 287 | "dependencies": { 288 | "@webassemblyjs/ast": "1.12.1", 289 | "@webassemblyjs/helper-buffer": "1.12.1", 290 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 291 | "@webassemblyjs/wasm-gen": "1.12.1" 292 | } 293 | }, 294 | "node_modules/@webassemblyjs/ieee754": { 295 | "version": "1.11.6", 296 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", 297 | "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", 298 | "dev": true, 299 | "dependencies": { 300 | "@xtuc/ieee754": "^1.2.0" 301 | } 302 | }, 303 | "node_modules/@webassemblyjs/leb128": { 304 | "version": "1.11.6", 305 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", 306 | "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", 307 | "dev": true, 308 | "dependencies": { 309 | "@xtuc/long": "4.2.2" 310 | } 311 | }, 312 | "node_modules/@webassemblyjs/utf8": { 313 | "version": "1.11.6", 314 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", 315 | "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", 316 | "dev": true 317 | }, 318 | "node_modules/@webassemblyjs/wasm-edit": { 319 | "version": "1.12.1", 320 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", 321 | "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", 322 | "dev": true, 323 | "dependencies": { 324 | "@webassemblyjs/ast": "1.12.1", 325 | "@webassemblyjs/helper-buffer": "1.12.1", 326 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 327 | "@webassemblyjs/helper-wasm-section": "1.12.1", 328 | "@webassemblyjs/wasm-gen": "1.12.1", 329 | "@webassemblyjs/wasm-opt": "1.12.1", 330 | "@webassemblyjs/wasm-parser": "1.12.1", 331 | "@webassemblyjs/wast-printer": "1.12.1" 332 | } 333 | }, 334 | "node_modules/@webassemblyjs/wasm-gen": { 335 | "version": "1.12.1", 336 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", 337 | "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", 338 | "dev": true, 339 | "dependencies": { 340 | "@webassemblyjs/ast": "1.12.1", 341 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 342 | "@webassemblyjs/ieee754": "1.11.6", 343 | "@webassemblyjs/leb128": "1.11.6", 344 | "@webassemblyjs/utf8": "1.11.6" 345 | } 346 | }, 347 | "node_modules/@webassemblyjs/wasm-opt": { 348 | "version": "1.12.1", 349 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", 350 | "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", 351 | "dev": true, 352 | "dependencies": { 353 | "@webassemblyjs/ast": "1.12.1", 354 | "@webassemblyjs/helper-buffer": "1.12.1", 355 | "@webassemblyjs/wasm-gen": "1.12.1", 356 | "@webassemblyjs/wasm-parser": "1.12.1" 357 | } 358 | }, 359 | "node_modules/@webassemblyjs/wasm-parser": { 360 | "version": "1.12.1", 361 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", 362 | "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", 363 | "dev": true, 364 | "dependencies": { 365 | "@webassemblyjs/ast": "1.12.1", 366 | "@webassemblyjs/helper-api-error": "1.11.6", 367 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 368 | "@webassemblyjs/ieee754": "1.11.6", 369 | "@webassemblyjs/leb128": "1.11.6", 370 | "@webassemblyjs/utf8": "1.11.6" 371 | } 372 | }, 373 | "node_modules/@webassemblyjs/wast-printer": { 374 | "version": "1.12.1", 375 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", 376 | "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", 377 | "dev": true, 378 | "dependencies": { 379 | "@webassemblyjs/ast": "1.12.1", 380 | "@xtuc/long": "4.2.2" 381 | } 382 | }, 383 | "node_modules/@webpack-cli/configtest": { 384 | "version": "2.1.1", 385 | "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", 386 | "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", 387 | "dev": true, 388 | "engines": { 389 | "node": ">=14.15.0" 390 | }, 391 | "peerDependencies": { 392 | "webpack": "5.x.x", 393 | "webpack-cli": "5.x.x" 394 | } 395 | }, 396 | "node_modules/@webpack-cli/info": { 397 | "version": "2.0.2", 398 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", 399 | "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", 400 | "dev": true, 401 | "engines": { 402 | "node": ">=14.15.0" 403 | }, 404 | "peerDependencies": { 405 | "webpack": "5.x.x", 406 | "webpack-cli": "5.x.x" 407 | } 408 | }, 409 | "node_modules/@webpack-cli/serve": { 410 | "version": "2.0.5", 411 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", 412 | "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", 413 | "dev": true, 414 | "engines": { 415 | "node": ">=14.15.0" 416 | }, 417 | "peerDependencies": { 418 | "webpack": "5.x.x", 419 | "webpack-cli": "5.x.x" 420 | }, 421 | "peerDependenciesMeta": { 422 | "webpack-dev-server": { 423 | "optional": true 424 | } 425 | } 426 | }, 427 | "node_modules/@xenova/transformers": { 428 | "version": "2.17.2", 429 | "resolved": "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.17.2.tgz", 430 | "integrity": "sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==", 431 | "dependencies": { 432 | "@huggingface/jinja": "^0.2.2", 433 | "onnxruntime-web": "1.14.0", 434 | "sharp": "^0.32.0" 435 | }, 436 | "optionalDependencies": { 437 | "onnxruntime-node": "1.14.0" 438 | } 439 | }, 440 | "node_modules/@xtuc/ieee754": { 441 | "version": "1.2.0", 442 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 443 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 444 | "dev": true 445 | }, 446 | "node_modules/@xtuc/long": { 447 | "version": "4.2.2", 448 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 449 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 450 | "dev": true 451 | }, 452 | "node_modules/acorn": { 453 | "version": "8.12.1", 454 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 455 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 456 | "dev": true, 457 | "bin": { 458 | "acorn": "bin/acorn" 459 | }, 460 | "engines": { 461 | "node": ">=0.4.0" 462 | } 463 | }, 464 | "node_modules/acorn-import-attributes": { 465 | "version": "1.9.5", 466 | "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", 467 | "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", 468 | "dev": true, 469 | "peerDependencies": { 470 | "acorn": "^8" 471 | } 472 | }, 473 | "node_modules/ajv": { 474 | "version": "8.17.1", 475 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 476 | "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 477 | "dev": true, 478 | "dependencies": { 479 | "fast-deep-equal": "^3.1.3", 480 | "fast-uri": "^3.0.1", 481 | "json-schema-traverse": "^1.0.0", 482 | "require-from-string": "^2.0.2" 483 | }, 484 | "funding": { 485 | "type": "github", 486 | "url": "https://github.com/sponsors/epoberezkin" 487 | } 488 | }, 489 | "node_modules/ajv-formats": { 490 | "version": "2.1.1", 491 | "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", 492 | "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", 493 | "dev": true, 494 | "dependencies": { 495 | "ajv": "^8.0.0" 496 | }, 497 | "peerDependencies": { 498 | "ajv": "^8.0.0" 499 | }, 500 | "peerDependenciesMeta": { 501 | "ajv": { 502 | "optional": true 503 | } 504 | } 505 | }, 506 | "node_modules/ajv-keywords": { 507 | "version": "5.1.0", 508 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", 509 | "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", 510 | "dev": true, 511 | "dependencies": { 512 | "fast-deep-equal": "^3.1.3" 513 | }, 514 | "peerDependencies": { 515 | "ajv": "^8.8.2" 516 | } 517 | }, 518 | "node_modules/ansi-regex": { 519 | "version": "5.0.1", 520 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 521 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 522 | "dev": true, 523 | "engines": { 524 | "node": ">=8" 525 | } 526 | }, 527 | "node_modules/b4a": { 528 | "version": "1.6.6", 529 | "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", 530 | "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" 531 | }, 532 | "node_modules/bare-events": { 533 | "version": "2.4.2", 534 | "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", 535 | "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", 536 | "optional": true 537 | }, 538 | "node_modules/bare-fs": { 539 | "version": "2.3.1", 540 | "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", 541 | "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", 542 | "optional": true, 543 | "dependencies": { 544 | "bare-events": "^2.0.0", 545 | "bare-path": "^2.0.0", 546 | "bare-stream": "^2.0.0" 547 | } 548 | }, 549 | "node_modules/bare-os": { 550 | "version": "2.4.0", 551 | "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", 552 | "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", 553 | "optional": true 554 | }, 555 | "node_modules/bare-path": { 556 | "version": "2.1.3", 557 | "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", 558 | "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", 559 | "optional": true, 560 | "dependencies": { 561 | "bare-os": "^2.1.0" 562 | } 563 | }, 564 | "node_modules/bare-stream": { 565 | "version": "2.1.3", 566 | "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", 567 | "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", 568 | "optional": true, 569 | "dependencies": { 570 | "streamx": "^2.18.0" 571 | } 572 | }, 573 | "node_modules/base64-js": { 574 | "version": "1.5.1", 575 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 576 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 577 | "funding": [ 578 | { 579 | "type": "github", 580 | "url": "https://github.com/sponsors/feross" 581 | }, 582 | { 583 | "type": "patreon", 584 | "url": "https://www.patreon.com/feross" 585 | }, 586 | { 587 | "type": "consulting", 588 | "url": "https://feross.org/support" 589 | } 590 | ] 591 | }, 592 | "node_modules/bl": { 593 | "version": "4.1.0", 594 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 595 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 596 | "dependencies": { 597 | "buffer": "^5.5.0", 598 | "inherits": "^2.0.4", 599 | "readable-stream": "^3.4.0" 600 | } 601 | }, 602 | "node_modules/boolbase": { 603 | "version": "1.0.0", 604 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 605 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 606 | "dev": true 607 | }, 608 | "node_modules/braces": { 609 | "version": "3.0.3", 610 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 611 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 612 | "dev": true, 613 | "dependencies": { 614 | "fill-range": "^7.1.1" 615 | }, 616 | "engines": { 617 | "node": ">=8" 618 | } 619 | }, 620 | "node_modules/browserslist": { 621 | "version": "4.23.2", 622 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", 623 | "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", 624 | "dev": true, 625 | "funding": [ 626 | { 627 | "type": "opencollective", 628 | "url": "https://opencollective.com/browserslist" 629 | }, 630 | { 631 | "type": "tidelift", 632 | "url": "https://tidelift.com/funding/github/npm/browserslist" 633 | }, 634 | { 635 | "type": "github", 636 | "url": "https://github.com/sponsors/ai" 637 | } 638 | ], 639 | "dependencies": { 640 | "caniuse-lite": "^1.0.30001640", 641 | "electron-to-chromium": "^1.4.820", 642 | "node-releases": "^2.0.14", 643 | "update-browserslist-db": "^1.1.0" 644 | }, 645 | "bin": { 646 | "browserslist": "cli.js" 647 | }, 648 | "engines": { 649 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 650 | } 651 | }, 652 | "node_modules/buffer": { 653 | "version": "5.7.1", 654 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 655 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 656 | "funding": [ 657 | { 658 | "type": "github", 659 | "url": "https://github.com/sponsors/feross" 660 | }, 661 | { 662 | "type": "patreon", 663 | "url": "https://www.patreon.com/feross" 664 | }, 665 | { 666 | "type": "consulting", 667 | "url": "https://feross.org/support" 668 | } 669 | ], 670 | "dependencies": { 671 | "base64-js": "^1.3.1", 672 | "ieee754": "^1.1.13" 673 | } 674 | }, 675 | "node_modules/buffer-from": { 676 | "version": "1.1.2", 677 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 678 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 679 | "dev": true 680 | }, 681 | "node_modules/camel-case": { 682 | "version": "4.1.2", 683 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", 684 | "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", 685 | "dev": true, 686 | "dependencies": { 687 | "pascal-case": "^3.1.2", 688 | "tslib": "^2.0.3" 689 | } 690 | }, 691 | "node_modules/caniuse-lite": { 692 | "version": "1.0.30001642", 693 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", 694 | "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", 695 | "dev": true, 696 | "funding": [ 697 | { 698 | "type": "opencollective", 699 | "url": "https://opencollective.com/browserslist" 700 | }, 701 | { 702 | "type": "tidelift", 703 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 704 | }, 705 | { 706 | "type": "github", 707 | "url": "https://github.com/sponsors/ai" 708 | } 709 | ] 710 | }, 711 | "node_modules/chownr": { 712 | "version": "1.1.4", 713 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 714 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 715 | }, 716 | "node_modules/chrome-trace-event": { 717 | "version": "1.0.4", 718 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", 719 | "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", 720 | "dev": true, 721 | "engines": { 722 | "node": ">=6.0" 723 | } 724 | }, 725 | "node_modules/clean-css": { 726 | "version": "5.3.3", 727 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", 728 | "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", 729 | "dev": true, 730 | "dependencies": { 731 | "source-map": "~0.6.0" 732 | }, 733 | "engines": { 734 | "node": ">= 10.0" 735 | } 736 | }, 737 | "node_modules/clone-deep": { 738 | "version": "4.0.1", 739 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", 740 | "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", 741 | "dev": true, 742 | "dependencies": { 743 | "is-plain-object": "^2.0.4", 744 | "kind-of": "^6.0.2", 745 | "shallow-clone": "^3.0.0" 746 | }, 747 | "engines": { 748 | "node": ">=6" 749 | } 750 | }, 751 | "node_modules/color": { 752 | "version": "4.2.3", 753 | "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", 754 | "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", 755 | "dependencies": { 756 | "color-convert": "^2.0.1", 757 | "color-string": "^1.9.0" 758 | }, 759 | "engines": { 760 | "node": ">=12.5.0" 761 | } 762 | }, 763 | "node_modules/color-convert": { 764 | "version": "2.0.1", 765 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 766 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 767 | "dependencies": { 768 | "color-name": "~1.1.4" 769 | }, 770 | "engines": { 771 | "node": ">=7.0.0" 772 | } 773 | }, 774 | "node_modules/color-name": { 775 | "version": "1.1.4", 776 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 777 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 778 | }, 779 | "node_modules/color-string": { 780 | "version": "1.9.1", 781 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", 782 | "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", 783 | "dependencies": { 784 | "color-name": "^1.0.0", 785 | "simple-swizzle": "^0.2.2" 786 | } 787 | }, 788 | "node_modules/colorette": { 789 | "version": "2.0.20", 790 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", 791 | "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", 792 | "dev": true 793 | }, 794 | "node_modules/commander": { 795 | "version": "2.20.3", 796 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 797 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 798 | "dev": true 799 | }, 800 | "node_modules/copy-webpack-plugin": { 801 | "version": "11.0.0", 802 | "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", 803 | "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", 804 | "dev": true, 805 | "dependencies": { 806 | "fast-glob": "^3.2.11", 807 | "glob-parent": "^6.0.1", 808 | "globby": "^13.1.1", 809 | "normalize-path": "^3.0.0", 810 | "schema-utils": "^4.0.0", 811 | "serialize-javascript": "^6.0.0" 812 | }, 813 | "engines": { 814 | "node": ">= 14.15.0" 815 | }, 816 | "funding": { 817 | "type": "opencollective", 818 | "url": "https://opencollective.com/webpack" 819 | }, 820 | "peerDependencies": { 821 | "webpack": "^5.1.0" 822 | } 823 | }, 824 | "node_modules/cross-spawn": { 825 | "version": "7.0.3", 826 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 827 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 828 | "dev": true, 829 | "dependencies": { 830 | "path-key": "^3.1.0", 831 | "shebang-command": "^2.0.0", 832 | "which": "^2.0.1" 833 | }, 834 | "engines": { 835 | "node": ">= 8" 836 | } 837 | }, 838 | "node_modules/css-select": { 839 | "version": "4.3.0", 840 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 841 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 842 | "dev": true, 843 | "dependencies": { 844 | "boolbase": "^1.0.0", 845 | "css-what": "^6.0.1", 846 | "domhandler": "^4.3.1", 847 | "domutils": "^2.8.0", 848 | "nth-check": "^2.0.1" 849 | }, 850 | "funding": { 851 | "url": "https://github.com/sponsors/fb55" 852 | } 853 | }, 854 | "node_modules/css-what": { 855 | "version": "6.1.0", 856 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 857 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 858 | "dev": true, 859 | "engines": { 860 | "node": ">= 6" 861 | }, 862 | "funding": { 863 | "url": "https://github.com/sponsors/fb55" 864 | } 865 | }, 866 | "node_modules/decompress-response": { 867 | "version": "6.0.0", 868 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 869 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 870 | "dependencies": { 871 | "mimic-response": "^3.1.0" 872 | }, 873 | "engines": { 874 | "node": ">=10" 875 | }, 876 | "funding": { 877 | "url": "https://github.com/sponsors/sindresorhus" 878 | } 879 | }, 880 | "node_modules/deep-extend": { 881 | "version": "0.6.0", 882 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 883 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 884 | "engines": { 885 | "node": ">=4.0.0" 886 | } 887 | }, 888 | "node_modules/detect-libc": { 889 | "version": "2.0.3", 890 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", 891 | "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", 892 | "engines": { 893 | "node": ">=8" 894 | } 895 | }, 896 | "node_modules/dir-glob": { 897 | "version": "3.0.1", 898 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 899 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 900 | "dev": true, 901 | "dependencies": { 902 | "path-type": "^4.0.0" 903 | }, 904 | "engines": { 905 | "node": ">=8" 906 | } 907 | }, 908 | "node_modules/dom-converter": { 909 | "version": "0.2.0", 910 | "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", 911 | "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", 912 | "dev": true, 913 | "dependencies": { 914 | "utila": "~0.4" 915 | } 916 | }, 917 | "node_modules/dom-serializer": { 918 | "version": "1.4.1", 919 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 920 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 921 | "dev": true, 922 | "dependencies": { 923 | "domelementtype": "^2.0.1", 924 | "domhandler": "^4.2.0", 925 | "entities": "^2.0.0" 926 | }, 927 | "funding": { 928 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 929 | } 930 | }, 931 | "node_modules/domelementtype": { 932 | "version": "2.3.0", 933 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 934 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 935 | "dev": true, 936 | "funding": [ 937 | { 938 | "type": "github", 939 | "url": "https://github.com/sponsors/fb55" 940 | } 941 | ] 942 | }, 943 | "node_modules/domhandler": { 944 | "version": "4.3.1", 945 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 946 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 947 | "dev": true, 948 | "dependencies": { 949 | "domelementtype": "^2.2.0" 950 | }, 951 | "engines": { 952 | "node": ">= 4" 953 | }, 954 | "funding": { 955 | "url": "https://github.com/fb55/domhandler?sponsor=1" 956 | } 957 | }, 958 | "node_modules/domutils": { 959 | "version": "2.8.0", 960 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 961 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 962 | "dev": true, 963 | "dependencies": { 964 | "dom-serializer": "^1.0.1", 965 | "domelementtype": "^2.2.0", 966 | "domhandler": "^4.2.0" 967 | }, 968 | "funding": { 969 | "url": "https://github.com/fb55/domutils?sponsor=1" 970 | } 971 | }, 972 | "node_modules/dot-case": { 973 | "version": "3.0.4", 974 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", 975 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", 976 | "dev": true, 977 | "dependencies": { 978 | "no-case": "^3.0.4", 979 | "tslib": "^2.0.3" 980 | } 981 | }, 982 | "node_modules/electron-to-chromium": { 983 | "version": "1.4.831", 984 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.831.tgz", 985 | "integrity": "sha512-6cKy9msoQGWhBF30n6y5ck80BdunKdwMRugM1lr74DMMXhjDRxSwMvrD1ncPP+n1PjF+KKmZZydvEF29skNZ1Q==", 986 | "dev": true 987 | }, 988 | "node_modules/end-of-stream": { 989 | "version": "1.4.4", 990 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 991 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 992 | "dependencies": { 993 | "once": "^1.4.0" 994 | } 995 | }, 996 | "node_modules/enhanced-resolve": { 997 | "version": "5.17.0", 998 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", 999 | "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", 1000 | "dev": true, 1001 | "dependencies": { 1002 | "graceful-fs": "^4.2.4", 1003 | "tapable": "^2.2.0" 1004 | }, 1005 | "engines": { 1006 | "node": ">=10.13.0" 1007 | } 1008 | }, 1009 | "node_modules/entities": { 1010 | "version": "2.2.0", 1011 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 1012 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 1013 | "dev": true, 1014 | "funding": { 1015 | "url": "https://github.com/fb55/entities?sponsor=1" 1016 | } 1017 | }, 1018 | "node_modules/envinfo": { 1019 | "version": "7.13.0", 1020 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", 1021 | "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", 1022 | "dev": true, 1023 | "bin": { 1024 | "envinfo": "dist/cli.js" 1025 | }, 1026 | "engines": { 1027 | "node": ">=4" 1028 | } 1029 | }, 1030 | "node_modules/es-module-lexer": { 1031 | "version": "1.5.4", 1032 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", 1033 | "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", 1034 | "dev": true 1035 | }, 1036 | "node_modules/escalade": { 1037 | "version": "3.1.2", 1038 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 1039 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 1040 | "dev": true, 1041 | "engines": { 1042 | "node": ">=6" 1043 | } 1044 | }, 1045 | "node_modules/eslint-scope": { 1046 | "version": "5.1.1", 1047 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 1048 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 1049 | "dev": true, 1050 | "dependencies": { 1051 | "esrecurse": "^4.3.0", 1052 | "estraverse": "^4.1.1" 1053 | }, 1054 | "engines": { 1055 | "node": ">=8.0.0" 1056 | } 1057 | }, 1058 | "node_modules/esrecurse": { 1059 | "version": "4.3.0", 1060 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1061 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1062 | "dev": true, 1063 | "dependencies": { 1064 | "estraverse": "^5.2.0" 1065 | }, 1066 | "engines": { 1067 | "node": ">=4.0" 1068 | } 1069 | }, 1070 | "node_modules/esrecurse/node_modules/estraverse": { 1071 | "version": "5.3.0", 1072 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1073 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1074 | "dev": true, 1075 | "engines": { 1076 | "node": ">=4.0" 1077 | } 1078 | }, 1079 | "node_modules/estraverse": { 1080 | "version": "4.3.0", 1081 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1082 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1083 | "dev": true, 1084 | "engines": { 1085 | "node": ">=4.0" 1086 | } 1087 | }, 1088 | "node_modules/events": { 1089 | "version": "3.3.0", 1090 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 1091 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 1092 | "dev": true, 1093 | "engines": { 1094 | "node": ">=0.8.x" 1095 | } 1096 | }, 1097 | "node_modules/expand-template": { 1098 | "version": "2.0.3", 1099 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 1100 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", 1101 | "engines": { 1102 | "node": ">=6" 1103 | } 1104 | }, 1105 | "node_modules/fast-deep-equal": { 1106 | "version": "3.1.3", 1107 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1108 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1109 | "dev": true 1110 | }, 1111 | "node_modules/fast-fifo": { 1112 | "version": "1.3.2", 1113 | "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", 1114 | "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" 1115 | }, 1116 | "node_modules/fast-glob": { 1117 | "version": "3.3.2", 1118 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 1119 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 1120 | "dev": true, 1121 | "dependencies": { 1122 | "@nodelib/fs.stat": "^2.0.2", 1123 | "@nodelib/fs.walk": "^1.2.3", 1124 | "glob-parent": "^5.1.2", 1125 | "merge2": "^1.3.0", 1126 | "micromatch": "^4.0.4" 1127 | }, 1128 | "engines": { 1129 | "node": ">=8.6.0" 1130 | } 1131 | }, 1132 | "node_modules/fast-glob/node_modules/glob-parent": { 1133 | "version": "5.1.2", 1134 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1135 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1136 | "dev": true, 1137 | "dependencies": { 1138 | "is-glob": "^4.0.1" 1139 | }, 1140 | "engines": { 1141 | "node": ">= 6" 1142 | } 1143 | }, 1144 | "node_modules/fast-json-stable-stringify": { 1145 | "version": "2.1.0", 1146 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1147 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1148 | "dev": true 1149 | }, 1150 | "node_modules/fast-uri": { 1151 | "version": "3.0.1", 1152 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", 1153 | "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", 1154 | "dev": true 1155 | }, 1156 | "node_modules/fastest-levenshtein": { 1157 | "version": "1.0.16", 1158 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", 1159 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", 1160 | "dev": true, 1161 | "engines": { 1162 | "node": ">= 4.9.1" 1163 | } 1164 | }, 1165 | "node_modules/fastq": { 1166 | "version": "1.17.1", 1167 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 1168 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 1169 | "dev": true, 1170 | "dependencies": { 1171 | "reusify": "^1.0.4" 1172 | } 1173 | }, 1174 | "node_modules/fill-range": { 1175 | "version": "7.1.1", 1176 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1177 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1178 | "dev": true, 1179 | "dependencies": { 1180 | "to-regex-range": "^5.0.1" 1181 | }, 1182 | "engines": { 1183 | "node": ">=8" 1184 | } 1185 | }, 1186 | "node_modules/find-up": { 1187 | "version": "4.1.0", 1188 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1189 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1190 | "dev": true, 1191 | "dependencies": { 1192 | "locate-path": "^5.0.0", 1193 | "path-exists": "^4.0.0" 1194 | }, 1195 | "engines": { 1196 | "node": ">=8" 1197 | } 1198 | }, 1199 | "node_modules/flat": { 1200 | "version": "5.0.2", 1201 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 1202 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 1203 | "dev": true, 1204 | "bin": { 1205 | "flat": "cli.js" 1206 | } 1207 | }, 1208 | "node_modules/flatbuffers": { 1209 | "version": "1.12.0", 1210 | "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", 1211 | "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" 1212 | }, 1213 | "node_modules/fs-constants": { 1214 | "version": "1.0.0", 1215 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 1216 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 1217 | }, 1218 | "node_modules/function-bind": { 1219 | "version": "1.1.2", 1220 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1221 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1222 | "dev": true, 1223 | "funding": { 1224 | "url": "https://github.com/sponsors/ljharb" 1225 | } 1226 | }, 1227 | "node_modules/github-from-package": { 1228 | "version": "0.0.0", 1229 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 1230 | "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" 1231 | }, 1232 | "node_modules/glob-parent": { 1233 | "version": "6.0.2", 1234 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1235 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1236 | "dev": true, 1237 | "dependencies": { 1238 | "is-glob": "^4.0.3" 1239 | }, 1240 | "engines": { 1241 | "node": ">=10.13.0" 1242 | } 1243 | }, 1244 | "node_modules/glob-to-regexp": { 1245 | "version": "0.4.1", 1246 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1247 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1248 | "dev": true 1249 | }, 1250 | "node_modules/globby": { 1251 | "version": "13.2.2", 1252 | "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", 1253 | "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", 1254 | "dev": true, 1255 | "dependencies": { 1256 | "dir-glob": "^3.0.1", 1257 | "fast-glob": "^3.3.0", 1258 | "ignore": "^5.2.4", 1259 | "merge2": "^1.4.1", 1260 | "slash": "^4.0.0" 1261 | }, 1262 | "engines": { 1263 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1264 | }, 1265 | "funding": { 1266 | "url": "https://github.com/sponsors/sindresorhus" 1267 | } 1268 | }, 1269 | "node_modules/graceful-fs": { 1270 | "version": "4.2.11", 1271 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1272 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1273 | "dev": true 1274 | }, 1275 | "node_modules/guid-typescript": { 1276 | "version": "1.0.9", 1277 | "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", 1278 | "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==" 1279 | }, 1280 | "node_modules/has-flag": { 1281 | "version": "4.0.0", 1282 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1283 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1284 | "dev": true, 1285 | "engines": { 1286 | "node": ">=8" 1287 | } 1288 | }, 1289 | "node_modules/hasown": { 1290 | "version": "2.0.2", 1291 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1292 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1293 | "dev": true, 1294 | "dependencies": { 1295 | "function-bind": "^1.1.2" 1296 | }, 1297 | "engines": { 1298 | "node": ">= 0.4" 1299 | } 1300 | }, 1301 | "node_modules/he": { 1302 | "version": "1.2.0", 1303 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1304 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1305 | "dev": true, 1306 | "bin": { 1307 | "he": "bin/he" 1308 | } 1309 | }, 1310 | "node_modules/html-minifier-terser": { 1311 | "version": "6.1.0", 1312 | "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", 1313 | "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", 1314 | "dev": true, 1315 | "dependencies": { 1316 | "camel-case": "^4.1.2", 1317 | "clean-css": "^5.2.2", 1318 | "commander": "^8.3.0", 1319 | "he": "^1.2.0", 1320 | "param-case": "^3.0.4", 1321 | "relateurl": "^0.2.7", 1322 | "terser": "^5.10.0" 1323 | }, 1324 | "bin": { 1325 | "html-minifier-terser": "cli.js" 1326 | }, 1327 | "engines": { 1328 | "node": ">=12" 1329 | } 1330 | }, 1331 | "node_modules/html-minifier-terser/node_modules/commander": { 1332 | "version": "8.3.0", 1333 | "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", 1334 | "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", 1335 | "dev": true, 1336 | "engines": { 1337 | "node": ">= 12" 1338 | } 1339 | }, 1340 | "node_modules/html-webpack-plugin": { 1341 | "version": "5.6.0", 1342 | "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", 1343 | "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", 1344 | "dev": true, 1345 | "dependencies": { 1346 | "@types/html-minifier-terser": "^6.0.0", 1347 | "html-minifier-terser": "^6.0.2", 1348 | "lodash": "^4.17.21", 1349 | "pretty-error": "^4.0.0", 1350 | "tapable": "^2.0.0" 1351 | }, 1352 | "engines": { 1353 | "node": ">=10.13.0" 1354 | }, 1355 | "funding": { 1356 | "type": "opencollective", 1357 | "url": "https://opencollective.com/html-webpack-plugin" 1358 | }, 1359 | "peerDependencies": { 1360 | "@rspack/core": "0.x || 1.x", 1361 | "webpack": "^5.20.0" 1362 | }, 1363 | "peerDependenciesMeta": { 1364 | "@rspack/core": { 1365 | "optional": true 1366 | }, 1367 | "webpack": { 1368 | "optional": true 1369 | } 1370 | } 1371 | }, 1372 | "node_modules/htmlparser2": { 1373 | "version": "6.1.0", 1374 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", 1375 | "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", 1376 | "dev": true, 1377 | "funding": [ 1378 | "https://github.com/fb55/htmlparser2?sponsor=1", 1379 | { 1380 | "type": "github", 1381 | "url": "https://github.com/sponsors/fb55" 1382 | } 1383 | ], 1384 | "dependencies": { 1385 | "domelementtype": "^2.0.1", 1386 | "domhandler": "^4.0.0", 1387 | "domutils": "^2.5.2", 1388 | "entities": "^2.0.0" 1389 | } 1390 | }, 1391 | "node_modules/ieee754": { 1392 | "version": "1.2.1", 1393 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1394 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1395 | "funding": [ 1396 | { 1397 | "type": "github", 1398 | "url": "https://github.com/sponsors/feross" 1399 | }, 1400 | { 1401 | "type": "patreon", 1402 | "url": "https://www.patreon.com/feross" 1403 | }, 1404 | { 1405 | "type": "consulting", 1406 | "url": "https://feross.org/support" 1407 | } 1408 | ] 1409 | }, 1410 | "node_modules/ignore": { 1411 | "version": "5.3.1", 1412 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 1413 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 1414 | "dev": true, 1415 | "engines": { 1416 | "node": ">= 4" 1417 | } 1418 | }, 1419 | "node_modules/import-local": { 1420 | "version": "3.1.0", 1421 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", 1422 | "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", 1423 | "dev": true, 1424 | "dependencies": { 1425 | "pkg-dir": "^4.2.0", 1426 | "resolve-cwd": "^3.0.0" 1427 | }, 1428 | "bin": { 1429 | "import-local-fixture": "fixtures/cli.js" 1430 | }, 1431 | "engines": { 1432 | "node": ">=8" 1433 | }, 1434 | "funding": { 1435 | "url": "https://github.com/sponsors/sindresorhus" 1436 | } 1437 | }, 1438 | "node_modules/inherits": { 1439 | "version": "2.0.4", 1440 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1441 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1442 | }, 1443 | "node_modules/ini": { 1444 | "version": "1.3.8", 1445 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1446 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 1447 | }, 1448 | "node_modules/interpret": { 1449 | "version": "3.1.1", 1450 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", 1451 | "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", 1452 | "dev": true, 1453 | "engines": { 1454 | "node": ">=10.13.0" 1455 | } 1456 | }, 1457 | "node_modules/is-arrayish": { 1458 | "version": "0.3.2", 1459 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 1460 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" 1461 | }, 1462 | "node_modules/is-core-module": { 1463 | "version": "2.15.0", 1464 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", 1465 | "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", 1466 | "dev": true, 1467 | "dependencies": { 1468 | "hasown": "^2.0.2" 1469 | }, 1470 | "engines": { 1471 | "node": ">= 0.4" 1472 | }, 1473 | "funding": { 1474 | "url": "https://github.com/sponsors/ljharb" 1475 | } 1476 | }, 1477 | "node_modules/is-extglob": { 1478 | "version": "2.1.1", 1479 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1480 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1481 | "dev": true, 1482 | "engines": { 1483 | "node": ">=0.10.0" 1484 | } 1485 | }, 1486 | "node_modules/is-glob": { 1487 | "version": "4.0.3", 1488 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1489 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1490 | "dev": true, 1491 | "dependencies": { 1492 | "is-extglob": "^2.1.1" 1493 | }, 1494 | "engines": { 1495 | "node": ">=0.10.0" 1496 | } 1497 | }, 1498 | "node_modules/is-number": { 1499 | "version": "7.0.0", 1500 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1501 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1502 | "dev": true, 1503 | "engines": { 1504 | "node": ">=0.12.0" 1505 | } 1506 | }, 1507 | "node_modules/is-plain-object": { 1508 | "version": "2.0.4", 1509 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1510 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1511 | "dev": true, 1512 | "dependencies": { 1513 | "isobject": "^3.0.1" 1514 | }, 1515 | "engines": { 1516 | "node": ">=0.10.0" 1517 | } 1518 | }, 1519 | "node_modules/isexe": { 1520 | "version": "2.0.0", 1521 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1522 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1523 | "dev": true 1524 | }, 1525 | "node_modules/isobject": { 1526 | "version": "3.0.1", 1527 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1528 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", 1529 | "dev": true, 1530 | "engines": { 1531 | "node": ">=0.10.0" 1532 | } 1533 | }, 1534 | "node_modules/jest-worker": { 1535 | "version": "27.5.1", 1536 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 1537 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 1538 | "dev": true, 1539 | "dependencies": { 1540 | "@types/node": "*", 1541 | "merge-stream": "^2.0.0", 1542 | "supports-color": "^8.0.0" 1543 | }, 1544 | "engines": { 1545 | "node": ">= 10.13.0" 1546 | } 1547 | }, 1548 | "node_modules/json-parse-even-better-errors": { 1549 | "version": "2.3.1", 1550 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1551 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1552 | "dev": true 1553 | }, 1554 | "node_modules/json-schema-traverse": { 1555 | "version": "1.0.0", 1556 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1557 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1558 | "dev": true 1559 | }, 1560 | "node_modules/kind-of": { 1561 | "version": "6.0.3", 1562 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1563 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1564 | "dev": true, 1565 | "engines": { 1566 | "node": ">=0.10.0" 1567 | } 1568 | }, 1569 | "node_modules/loader-runner": { 1570 | "version": "4.3.0", 1571 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", 1572 | "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", 1573 | "dev": true, 1574 | "engines": { 1575 | "node": ">=6.11.5" 1576 | } 1577 | }, 1578 | "node_modules/locate-path": { 1579 | "version": "5.0.0", 1580 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1581 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1582 | "dev": true, 1583 | "dependencies": { 1584 | "p-locate": "^4.1.0" 1585 | }, 1586 | "engines": { 1587 | "node": ">=8" 1588 | } 1589 | }, 1590 | "node_modules/lodash": { 1591 | "version": "4.17.21", 1592 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1593 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1594 | "dev": true 1595 | }, 1596 | "node_modules/long": { 1597 | "version": "4.0.0", 1598 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1599 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1600 | }, 1601 | "node_modules/lower-case": { 1602 | "version": "2.0.2", 1603 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 1604 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 1605 | "dev": true, 1606 | "dependencies": { 1607 | "tslib": "^2.0.3" 1608 | } 1609 | }, 1610 | "node_modules/merge-stream": { 1611 | "version": "2.0.0", 1612 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1613 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1614 | "dev": true 1615 | }, 1616 | "node_modules/merge2": { 1617 | "version": "1.4.1", 1618 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1619 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1620 | "dev": true, 1621 | "engines": { 1622 | "node": ">= 8" 1623 | } 1624 | }, 1625 | "node_modules/micromatch": { 1626 | "version": "4.0.7", 1627 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", 1628 | "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", 1629 | "dev": true, 1630 | "dependencies": { 1631 | "braces": "^3.0.3", 1632 | "picomatch": "^2.3.1" 1633 | }, 1634 | "engines": { 1635 | "node": ">=8.6" 1636 | } 1637 | }, 1638 | "node_modules/mime-db": { 1639 | "version": "1.52.0", 1640 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1641 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1642 | "dev": true, 1643 | "engines": { 1644 | "node": ">= 0.6" 1645 | } 1646 | }, 1647 | "node_modules/mime-types": { 1648 | "version": "2.1.35", 1649 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1650 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1651 | "dev": true, 1652 | "dependencies": { 1653 | "mime-db": "1.52.0" 1654 | }, 1655 | "engines": { 1656 | "node": ">= 0.6" 1657 | } 1658 | }, 1659 | "node_modules/mimic-response": { 1660 | "version": "3.1.0", 1661 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 1662 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 1663 | "engines": { 1664 | "node": ">=10" 1665 | }, 1666 | "funding": { 1667 | "url": "https://github.com/sponsors/sindresorhus" 1668 | } 1669 | }, 1670 | "node_modules/minimist": { 1671 | "version": "1.2.8", 1672 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1673 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1674 | "funding": { 1675 | "url": "https://github.com/sponsors/ljharb" 1676 | } 1677 | }, 1678 | "node_modules/mkdirp-classic": { 1679 | "version": "0.5.3", 1680 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 1681 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" 1682 | }, 1683 | "node_modules/napi-build-utils": { 1684 | "version": "1.0.2", 1685 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 1686 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" 1687 | }, 1688 | "node_modules/neo-async": { 1689 | "version": "2.6.2", 1690 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 1691 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 1692 | "dev": true 1693 | }, 1694 | "node_modules/no-case": { 1695 | "version": "3.0.4", 1696 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 1697 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 1698 | "dev": true, 1699 | "dependencies": { 1700 | "lower-case": "^2.0.2", 1701 | "tslib": "^2.0.3" 1702 | } 1703 | }, 1704 | "node_modules/node-abi": { 1705 | "version": "3.65.0", 1706 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", 1707 | "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", 1708 | "dependencies": { 1709 | "semver": "^7.3.5" 1710 | }, 1711 | "engines": { 1712 | "node": ">=10" 1713 | } 1714 | }, 1715 | "node_modules/node-addon-api": { 1716 | "version": "6.1.0", 1717 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", 1718 | "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" 1719 | }, 1720 | "node_modules/node-releases": { 1721 | "version": "2.0.17", 1722 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz", 1723 | "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==", 1724 | "dev": true 1725 | }, 1726 | "node_modules/normalize-path": { 1727 | "version": "3.0.0", 1728 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1729 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1730 | "dev": true, 1731 | "engines": { 1732 | "node": ">=0.10.0" 1733 | } 1734 | }, 1735 | "node_modules/nth-check": { 1736 | "version": "2.1.1", 1737 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 1738 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 1739 | "dev": true, 1740 | "dependencies": { 1741 | "boolbase": "^1.0.0" 1742 | }, 1743 | "funding": { 1744 | "url": "https://github.com/fb55/nth-check?sponsor=1" 1745 | } 1746 | }, 1747 | "node_modules/once": { 1748 | "version": "1.4.0", 1749 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1750 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1751 | "dependencies": { 1752 | "wrappy": "1" 1753 | } 1754 | }, 1755 | "node_modules/onnx-proto": { 1756 | "version": "4.0.4", 1757 | "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz", 1758 | "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==", 1759 | "dependencies": { 1760 | "protobufjs": "^6.8.8" 1761 | } 1762 | }, 1763 | "node_modules/onnxruntime-common": { 1764 | "version": "1.14.0", 1765 | "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz", 1766 | "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==" 1767 | }, 1768 | "node_modules/onnxruntime-node": { 1769 | "version": "1.14.0", 1770 | "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz", 1771 | "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==", 1772 | "optional": true, 1773 | "os": [ 1774 | "win32", 1775 | "darwin", 1776 | "linux" 1777 | ], 1778 | "dependencies": { 1779 | "onnxruntime-common": "~1.14.0" 1780 | } 1781 | }, 1782 | "node_modules/onnxruntime-web": { 1783 | "version": "1.14.0", 1784 | "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz", 1785 | "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==", 1786 | "dependencies": { 1787 | "flatbuffers": "^1.12.0", 1788 | "guid-typescript": "^1.0.9", 1789 | "long": "^4.0.0", 1790 | "onnx-proto": "^4.0.4", 1791 | "onnxruntime-common": "~1.14.0", 1792 | "platform": "^1.3.6" 1793 | } 1794 | }, 1795 | "node_modules/p-limit": { 1796 | "version": "2.3.0", 1797 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1798 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1799 | "dev": true, 1800 | "dependencies": { 1801 | "p-try": "^2.0.0" 1802 | }, 1803 | "engines": { 1804 | "node": ">=6" 1805 | }, 1806 | "funding": { 1807 | "url": "https://github.com/sponsors/sindresorhus" 1808 | } 1809 | }, 1810 | "node_modules/p-locate": { 1811 | "version": "4.1.0", 1812 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1813 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1814 | "dev": true, 1815 | "dependencies": { 1816 | "p-limit": "^2.2.0" 1817 | }, 1818 | "engines": { 1819 | "node": ">=8" 1820 | } 1821 | }, 1822 | "node_modules/p-try": { 1823 | "version": "2.2.0", 1824 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1825 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1826 | "dev": true, 1827 | "engines": { 1828 | "node": ">=6" 1829 | } 1830 | }, 1831 | "node_modules/param-case": { 1832 | "version": "3.0.4", 1833 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", 1834 | "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", 1835 | "dev": true, 1836 | "dependencies": { 1837 | "dot-case": "^3.0.4", 1838 | "tslib": "^2.0.3" 1839 | } 1840 | }, 1841 | "node_modules/pascal-case": { 1842 | "version": "3.1.2", 1843 | "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", 1844 | "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", 1845 | "dev": true, 1846 | "dependencies": { 1847 | "no-case": "^3.0.4", 1848 | "tslib": "^2.0.3" 1849 | } 1850 | }, 1851 | "node_modules/path-exists": { 1852 | "version": "4.0.0", 1853 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1854 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1855 | "dev": true, 1856 | "engines": { 1857 | "node": ">=8" 1858 | } 1859 | }, 1860 | "node_modules/path-key": { 1861 | "version": "3.1.1", 1862 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1863 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1864 | "dev": true, 1865 | "engines": { 1866 | "node": ">=8" 1867 | } 1868 | }, 1869 | "node_modules/path-parse": { 1870 | "version": "1.0.7", 1871 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1872 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1873 | "dev": true 1874 | }, 1875 | "node_modules/path-type": { 1876 | "version": "4.0.0", 1877 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1878 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1879 | "dev": true, 1880 | "engines": { 1881 | "node": ">=8" 1882 | } 1883 | }, 1884 | "node_modules/picocolors": { 1885 | "version": "1.0.1", 1886 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 1887 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", 1888 | "dev": true 1889 | }, 1890 | "node_modules/picomatch": { 1891 | "version": "2.3.1", 1892 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1893 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1894 | "dev": true, 1895 | "engines": { 1896 | "node": ">=8.6" 1897 | }, 1898 | "funding": { 1899 | "url": "https://github.com/sponsors/jonschlinkert" 1900 | } 1901 | }, 1902 | "node_modules/pkg-dir": { 1903 | "version": "4.2.0", 1904 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1905 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1906 | "dev": true, 1907 | "dependencies": { 1908 | "find-up": "^4.0.0" 1909 | }, 1910 | "engines": { 1911 | "node": ">=8" 1912 | } 1913 | }, 1914 | "node_modules/platform": { 1915 | "version": "1.3.6", 1916 | "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", 1917 | "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" 1918 | }, 1919 | "node_modules/prebuild-install": { 1920 | "version": "7.1.2", 1921 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", 1922 | "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", 1923 | "dependencies": { 1924 | "detect-libc": "^2.0.0", 1925 | "expand-template": "^2.0.3", 1926 | "github-from-package": "0.0.0", 1927 | "minimist": "^1.2.3", 1928 | "mkdirp-classic": "^0.5.3", 1929 | "napi-build-utils": "^1.0.1", 1930 | "node-abi": "^3.3.0", 1931 | "pump": "^3.0.0", 1932 | "rc": "^1.2.7", 1933 | "simple-get": "^4.0.0", 1934 | "tar-fs": "^2.0.0", 1935 | "tunnel-agent": "^0.6.0" 1936 | }, 1937 | "bin": { 1938 | "prebuild-install": "bin.js" 1939 | }, 1940 | "engines": { 1941 | "node": ">=10" 1942 | } 1943 | }, 1944 | "node_modules/prebuild-install/node_modules/tar-fs": { 1945 | "version": "2.1.1", 1946 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 1947 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 1948 | "dependencies": { 1949 | "chownr": "^1.1.1", 1950 | "mkdirp-classic": "^0.5.2", 1951 | "pump": "^3.0.0", 1952 | "tar-stream": "^2.1.4" 1953 | } 1954 | }, 1955 | "node_modules/prebuild-install/node_modules/tar-stream": { 1956 | "version": "2.2.0", 1957 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 1958 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 1959 | "dependencies": { 1960 | "bl": "^4.0.3", 1961 | "end-of-stream": "^1.4.1", 1962 | "fs-constants": "^1.0.0", 1963 | "inherits": "^2.0.3", 1964 | "readable-stream": "^3.1.1" 1965 | }, 1966 | "engines": { 1967 | "node": ">=6" 1968 | } 1969 | }, 1970 | "node_modules/pretty-error": { 1971 | "version": "4.0.0", 1972 | "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", 1973 | "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", 1974 | "dev": true, 1975 | "dependencies": { 1976 | "lodash": "^4.17.20", 1977 | "renderkid": "^3.0.0" 1978 | } 1979 | }, 1980 | "node_modules/protobufjs": { 1981 | "version": "6.11.4", 1982 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", 1983 | "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", 1984 | "hasInstallScript": true, 1985 | "dependencies": { 1986 | "@protobufjs/aspromise": "^1.1.2", 1987 | "@protobufjs/base64": "^1.1.2", 1988 | "@protobufjs/codegen": "^2.0.4", 1989 | "@protobufjs/eventemitter": "^1.1.0", 1990 | "@protobufjs/fetch": "^1.1.0", 1991 | "@protobufjs/float": "^1.0.2", 1992 | "@protobufjs/inquire": "^1.1.0", 1993 | "@protobufjs/path": "^1.1.2", 1994 | "@protobufjs/pool": "^1.1.0", 1995 | "@protobufjs/utf8": "^1.1.0", 1996 | "@types/long": "^4.0.1", 1997 | "@types/node": ">=13.7.0", 1998 | "long": "^4.0.0" 1999 | }, 2000 | "bin": { 2001 | "pbjs": "bin/pbjs", 2002 | "pbts": "bin/pbts" 2003 | } 2004 | }, 2005 | "node_modules/pump": { 2006 | "version": "3.0.0", 2007 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2008 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2009 | "dependencies": { 2010 | "end-of-stream": "^1.1.0", 2011 | "once": "^1.3.1" 2012 | } 2013 | }, 2014 | "node_modules/punycode": { 2015 | "version": "2.3.1", 2016 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2017 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2018 | "dev": true, 2019 | "engines": { 2020 | "node": ">=6" 2021 | } 2022 | }, 2023 | "node_modules/queue-microtask": { 2024 | "version": "1.2.3", 2025 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2026 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2027 | "dev": true, 2028 | "funding": [ 2029 | { 2030 | "type": "github", 2031 | "url": "https://github.com/sponsors/feross" 2032 | }, 2033 | { 2034 | "type": "patreon", 2035 | "url": "https://www.patreon.com/feross" 2036 | }, 2037 | { 2038 | "type": "consulting", 2039 | "url": "https://feross.org/support" 2040 | } 2041 | ] 2042 | }, 2043 | "node_modules/queue-tick": { 2044 | "version": "1.0.1", 2045 | "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", 2046 | "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" 2047 | }, 2048 | "node_modules/randombytes": { 2049 | "version": "2.1.0", 2050 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2051 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2052 | "dev": true, 2053 | "dependencies": { 2054 | "safe-buffer": "^5.1.0" 2055 | } 2056 | }, 2057 | "node_modules/rc": { 2058 | "version": "1.2.8", 2059 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2060 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2061 | "dependencies": { 2062 | "deep-extend": "^0.6.0", 2063 | "ini": "~1.3.0", 2064 | "minimist": "^1.2.0", 2065 | "strip-json-comments": "~2.0.1" 2066 | }, 2067 | "bin": { 2068 | "rc": "cli.js" 2069 | } 2070 | }, 2071 | "node_modules/readable-stream": { 2072 | "version": "3.6.2", 2073 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 2074 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 2075 | "dependencies": { 2076 | "inherits": "^2.0.3", 2077 | "string_decoder": "^1.1.1", 2078 | "util-deprecate": "^1.0.1" 2079 | }, 2080 | "engines": { 2081 | "node": ">= 6" 2082 | } 2083 | }, 2084 | "node_modules/rechoir": { 2085 | "version": "0.8.0", 2086 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", 2087 | "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", 2088 | "dev": true, 2089 | "dependencies": { 2090 | "resolve": "^1.20.0" 2091 | }, 2092 | "engines": { 2093 | "node": ">= 10.13.0" 2094 | } 2095 | }, 2096 | "node_modules/relateurl": { 2097 | "version": "0.2.7", 2098 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 2099 | "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", 2100 | "dev": true, 2101 | "engines": { 2102 | "node": ">= 0.10" 2103 | } 2104 | }, 2105 | "node_modules/renderkid": { 2106 | "version": "3.0.0", 2107 | "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", 2108 | "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", 2109 | "dev": true, 2110 | "dependencies": { 2111 | "css-select": "^4.1.3", 2112 | "dom-converter": "^0.2.0", 2113 | "htmlparser2": "^6.1.0", 2114 | "lodash": "^4.17.21", 2115 | "strip-ansi": "^6.0.1" 2116 | } 2117 | }, 2118 | "node_modules/require-from-string": { 2119 | "version": "2.0.2", 2120 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2121 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2122 | "dev": true, 2123 | "engines": { 2124 | "node": ">=0.10.0" 2125 | } 2126 | }, 2127 | "node_modules/resolve": { 2128 | "version": "1.22.8", 2129 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 2130 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 2131 | "dev": true, 2132 | "dependencies": { 2133 | "is-core-module": "^2.13.0", 2134 | "path-parse": "^1.0.7", 2135 | "supports-preserve-symlinks-flag": "^1.0.0" 2136 | }, 2137 | "bin": { 2138 | "resolve": "bin/resolve" 2139 | }, 2140 | "funding": { 2141 | "url": "https://github.com/sponsors/ljharb" 2142 | } 2143 | }, 2144 | "node_modules/resolve-cwd": { 2145 | "version": "3.0.0", 2146 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 2147 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 2148 | "dev": true, 2149 | "dependencies": { 2150 | "resolve-from": "^5.0.0" 2151 | }, 2152 | "engines": { 2153 | "node": ">=8" 2154 | } 2155 | }, 2156 | "node_modules/resolve-from": { 2157 | "version": "5.0.0", 2158 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2159 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2160 | "dev": true, 2161 | "engines": { 2162 | "node": ">=8" 2163 | } 2164 | }, 2165 | "node_modules/reusify": { 2166 | "version": "1.0.4", 2167 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2168 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2169 | "dev": true, 2170 | "engines": { 2171 | "iojs": ">=1.0.0", 2172 | "node": ">=0.10.0" 2173 | } 2174 | }, 2175 | "node_modules/run-parallel": { 2176 | "version": "1.2.0", 2177 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2178 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2179 | "dev": true, 2180 | "funding": [ 2181 | { 2182 | "type": "github", 2183 | "url": "https://github.com/sponsors/feross" 2184 | }, 2185 | { 2186 | "type": "patreon", 2187 | "url": "https://www.patreon.com/feross" 2188 | }, 2189 | { 2190 | "type": "consulting", 2191 | "url": "https://feross.org/support" 2192 | } 2193 | ], 2194 | "dependencies": { 2195 | "queue-microtask": "^1.2.2" 2196 | } 2197 | }, 2198 | "node_modules/safe-buffer": { 2199 | "version": "5.2.1", 2200 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2201 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2202 | "funding": [ 2203 | { 2204 | "type": "github", 2205 | "url": "https://github.com/sponsors/feross" 2206 | }, 2207 | { 2208 | "type": "patreon", 2209 | "url": "https://www.patreon.com/feross" 2210 | }, 2211 | { 2212 | "type": "consulting", 2213 | "url": "https://feross.org/support" 2214 | } 2215 | ] 2216 | }, 2217 | "node_modules/schema-utils": { 2218 | "version": "4.2.0", 2219 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", 2220 | "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", 2221 | "dev": true, 2222 | "dependencies": { 2223 | "@types/json-schema": "^7.0.9", 2224 | "ajv": "^8.9.0", 2225 | "ajv-formats": "^2.1.1", 2226 | "ajv-keywords": "^5.1.0" 2227 | }, 2228 | "engines": { 2229 | "node": ">= 12.13.0" 2230 | }, 2231 | "funding": { 2232 | "type": "opencollective", 2233 | "url": "https://opencollective.com/webpack" 2234 | } 2235 | }, 2236 | "node_modules/semver": { 2237 | "version": "7.6.3", 2238 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 2239 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 2240 | "bin": { 2241 | "semver": "bin/semver.js" 2242 | }, 2243 | "engines": { 2244 | "node": ">=10" 2245 | } 2246 | }, 2247 | "node_modules/serialize-javascript": { 2248 | "version": "6.0.2", 2249 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 2250 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 2251 | "dev": true, 2252 | "dependencies": { 2253 | "randombytes": "^2.1.0" 2254 | } 2255 | }, 2256 | "node_modules/shallow-clone": { 2257 | "version": "3.0.1", 2258 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", 2259 | "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", 2260 | "dev": true, 2261 | "dependencies": { 2262 | "kind-of": "^6.0.2" 2263 | }, 2264 | "engines": { 2265 | "node": ">=8" 2266 | } 2267 | }, 2268 | "node_modules/sharp": { 2269 | "version": "0.32.6", 2270 | "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", 2271 | "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", 2272 | "hasInstallScript": true, 2273 | "dependencies": { 2274 | "color": "^4.2.3", 2275 | "detect-libc": "^2.0.2", 2276 | "node-addon-api": "^6.1.0", 2277 | "prebuild-install": "^7.1.1", 2278 | "semver": "^7.5.4", 2279 | "simple-get": "^4.0.1", 2280 | "tar-fs": "^3.0.4", 2281 | "tunnel-agent": "^0.6.0" 2282 | }, 2283 | "engines": { 2284 | "node": ">=14.15.0" 2285 | }, 2286 | "funding": { 2287 | "url": "https://opencollective.com/libvips" 2288 | } 2289 | }, 2290 | "node_modules/shebang-command": { 2291 | "version": "2.0.0", 2292 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2293 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2294 | "dev": true, 2295 | "dependencies": { 2296 | "shebang-regex": "^3.0.0" 2297 | }, 2298 | "engines": { 2299 | "node": ">=8" 2300 | } 2301 | }, 2302 | "node_modules/shebang-regex": { 2303 | "version": "3.0.0", 2304 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2305 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2306 | "dev": true, 2307 | "engines": { 2308 | "node": ">=8" 2309 | } 2310 | }, 2311 | "node_modules/simple-concat": { 2312 | "version": "1.0.1", 2313 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 2314 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 2315 | "funding": [ 2316 | { 2317 | "type": "github", 2318 | "url": "https://github.com/sponsors/feross" 2319 | }, 2320 | { 2321 | "type": "patreon", 2322 | "url": "https://www.patreon.com/feross" 2323 | }, 2324 | { 2325 | "type": "consulting", 2326 | "url": "https://feross.org/support" 2327 | } 2328 | ] 2329 | }, 2330 | "node_modules/simple-get": { 2331 | "version": "4.0.1", 2332 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", 2333 | "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", 2334 | "funding": [ 2335 | { 2336 | "type": "github", 2337 | "url": "https://github.com/sponsors/feross" 2338 | }, 2339 | { 2340 | "type": "patreon", 2341 | "url": "https://www.patreon.com/feross" 2342 | }, 2343 | { 2344 | "type": "consulting", 2345 | "url": "https://feross.org/support" 2346 | } 2347 | ], 2348 | "dependencies": { 2349 | "decompress-response": "^6.0.0", 2350 | "once": "^1.3.1", 2351 | "simple-concat": "^1.0.0" 2352 | } 2353 | }, 2354 | "node_modules/simple-swizzle": { 2355 | "version": "0.2.2", 2356 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 2357 | "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", 2358 | "dependencies": { 2359 | "is-arrayish": "^0.3.1" 2360 | } 2361 | }, 2362 | "node_modules/slash": { 2363 | "version": "4.0.0", 2364 | "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", 2365 | "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", 2366 | "dev": true, 2367 | "engines": { 2368 | "node": ">=12" 2369 | }, 2370 | "funding": { 2371 | "url": "https://github.com/sponsors/sindresorhus" 2372 | } 2373 | }, 2374 | "node_modules/source-map": { 2375 | "version": "0.6.1", 2376 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2377 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2378 | "dev": true, 2379 | "engines": { 2380 | "node": ">=0.10.0" 2381 | } 2382 | }, 2383 | "node_modules/source-map-support": { 2384 | "version": "0.5.21", 2385 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2386 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2387 | "dev": true, 2388 | "dependencies": { 2389 | "buffer-from": "^1.0.0", 2390 | "source-map": "^0.6.0" 2391 | } 2392 | }, 2393 | "node_modules/streamx": { 2394 | "version": "2.18.0", 2395 | "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", 2396 | "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", 2397 | "dependencies": { 2398 | "fast-fifo": "^1.3.2", 2399 | "queue-tick": "^1.0.1", 2400 | "text-decoder": "^1.1.0" 2401 | }, 2402 | "optionalDependencies": { 2403 | "bare-events": "^2.2.0" 2404 | } 2405 | }, 2406 | "node_modules/string_decoder": { 2407 | "version": "1.3.0", 2408 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2409 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2410 | "dependencies": { 2411 | "safe-buffer": "~5.2.0" 2412 | } 2413 | }, 2414 | "node_modules/strip-ansi": { 2415 | "version": "6.0.1", 2416 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2417 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2418 | "dev": true, 2419 | "dependencies": { 2420 | "ansi-regex": "^5.0.1" 2421 | }, 2422 | "engines": { 2423 | "node": ">=8" 2424 | } 2425 | }, 2426 | "node_modules/strip-json-comments": { 2427 | "version": "2.0.1", 2428 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2429 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 2430 | "engines": { 2431 | "node": ">=0.10.0" 2432 | } 2433 | }, 2434 | "node_modules/supports-color": { 2435 | "version": "8.1.1", 2436 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 2437 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 2438 | "dev": true, 2439 | "dependencies": { 2440 | "has-flag": "^4.0.0" 2441 | }, 2442 | "engines": { 2443 | "node": ">=10" 2444 | }, 2445 | "funding": { 2446 | "url": "https://github.com/chalk/supports-color?sponsor=1" 2447 | } 2448 | }, 2449 | "node_modules/supports-preserve-symlinks-flag": { 2450 | "version": "1.0.0", 2451 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2452 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2453 | "dev": true, 2454 | "engines": { 2455 | "node": ">= 0.4" 2456 | }, 2457 | "funding": { 2458 | "url": "https://github.com/sponsors/ljharb" 2459 | } 2460 | }, 2461 | "node_modules/tapable": { 2462 | "version": "2.2.1", 2463 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 2464 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 2465 | "dev": true, 2466 | "engines": { 2467 | "node": ">=6" 2468 | } 2469 | }, 2470 | "node_modules/tar-fs": { 2471 | "version": "3.0.6", 2472 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", 2473 | "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", 2474 | "dependencies": { 2475 | "pump": "^3.0.0", 2476 | "tar-stream": "^3.1.5" 2477 | }, 2478 | "optionalDependencies": { 2479 | "bare-fs": "^2.1.1", 2480 | "bare-path": "^2.1.0" 2481 | } 2482 | }, 2483 | "node_modules/tar-stream": { 2484 | "version": "3.1.7", 2485 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", 2486 | "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", 2487 | "dependencies": { 2488 | "b4a": "^1.6.4", 2489 | "fast-fifo": "^1.2.0", 2490 | "streamx": "^2.15.0" 2491 | } 2492 | }, 2493 | "node_modules/terser": { 2494 | "version": "5.31.3", 2495 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", 2496 | "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", 2497 | "dev": true, 2498 | "dependencies": { 2499 | "@jridgewell/source-map": "^0.3.3", 2500 | "acorn": "^8.8.2", 2501 | "commander": "^2.20.0", 2502 | "source-map-support": "~0.5.20" 2503 | }, 2504 | "bin": { 2505 | "terser": "bin/terser" 2506 | }, 2507 | "engines": { 2508 | "node": ">=10" 2509 | } 2510 | }, 2511 | "node_modules/terser-webpack-plugin": { 2512 | "version": "5.3.10", 2513 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", 2514 | "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", 2515 | "dev": true, 2516 | "dependencies": { 2517 | "@jridgewell/trace-mapping": "^0.3.20", 2518 | "jest-worker": "^27.4.5", 2519 | "schema-utils": "^3.1.1", 2520 | "serialize-javascript": "^6.0.1", 2521 | "terser": "^5.26.0" 2522 | }, 2523 | "engines": { 2524 | "node": ">= 10.13.0" 2525 | }, 2526 | "funding": { 2527 | "type": "opencollective", 2528 | "url": "https://opencollective.com/webpack" 2529 | }, 2530 | "peerDependencies": { 2531 | "webpack": "^5.1.0" 2532 | }, 2533 | "peerDependenciesMeta": { 2534 | "@swc/core": { 2535 | "optional": true 2536 | }, 2537 | "esbuild": { 2538 | "optional": true 2539 | }, 2540 | "uglify-js": { 2541 | "optional": true 2542 | } 2543 | } 2544 | }, 2545 | "node_modules/terser-webpack-plugin/node_modules/ajv": { 2546 | "version": "6.12.6", 2547 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2548 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2549 | "dev": true, 2550 | "dependencies": { 2551 | "fast-deep-equal": "^3.1.1", 2552 | "fast-json-stable-stringify": "^2.0.0", 2553 | "json-schema-traverse": "^0.4.1", 2554 | "uri-js": "^4.2.2" 2555 | }, 2556 | "funding": { 2557 | "type": "github", 2558 | "url": "https://github.com/sponsors/epoberezkin" 2559 | } 2560 | }, 2561 | "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { 2562 | "version": "3.5.2", 2563 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 2564 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 2565 | "dev": true, 2566 | "peerDependencies": { 2567 | "ajv": "^6.9.1" 2568 | } 2569 | }, 2570 | "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { 2571 | "version": "0.4.1", 2572 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2573 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2574 | "dev": true 2575 | }, 2576 | "node_modules/terser-webpack-plugin/node_modules/schema-utils": { 2577 | "version": "3.3.0", 2578 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", 2579 | "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", 2580 | "dev": true, 2581 | "dependencies": { 2582 | "@types/json-schema": "^7.0.8", 2583 | "ajv": "^6.12.5", 2584 | "ajv-keywords": "^3.5.2" 2585 | }, 2586 | "engines": { 2587 | "node": ">= 10.13.0" 2588 | }, 2589 | "funding": { 2590 | "type": "opencollective", 2591 | "url": "https://opencollective.com/webpack" 2592 | } 2593 | }, 2594 | "node_modules/text-decoder": { 2595 | "version": "1.1.1", 2596 | "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", 2597 | "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", 2598 | "dependencies": { 2599 | "b4a": "^1.6.4" 2600 | } 2601 | }, 2602 | "node_modules/to-regex-range": { 2603 | "version": "5.0.1", 2604 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2605 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2606 | "dev": true, 2607 | "dependencies": { 2608 | "is-number": "^7.0.0" 2609 | }, 2610 | "engines": { 2611 | "node": ">=8.0" 2612 | } 2613 | }, 2614 | "node_modules/tslib": { 2615 | "version": "2.6.3", 2616 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", 2617 | "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", 2618 | "dev": true 2619 | }, 2620 | "node_modules/tunnel-agent": { 2621 | "version": "0.6.0", 2622 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2623 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 2624 | "dependencies": { 2625 | "safe-buffer": "^5.0.1" 2626 | }, 2627 | "engines": { 2628 | "node": "*" 2629 | } 2630 | }, 2631 | "node_modules/undici-types": { 2632 | "version": "5.26.5", 2633 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2634 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 2635 | }, 2636 | "node_modules/update-browserslist-db": { 2637 | "version": "1.1.0", 2638 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", 2639 | "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", 2640 | "dev": true, 2641 | "funding": [ 2642 | { 2643 | "type": "opencollective", 2644 | "url": "https://opencollective.com/browserslist" 2645 | }, 2646 | { 2647 | "type": "tidelift", 2648 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2649 | }, 2650 | { 2651 | "type": "github", 2652 | "url": "https://github.com/sponsors/ai" 2653 | } 2654 | ], 2655 | "dependencies": { 2656 | "escalade": "^3.1.2", 2657 | "picocolors": "^1.0.1" 2658 | }, 2659 | "bin": { 2660 | "update-browserslist-db": "cli.js" 2661 | }, 2662 | "peerDependencies": { 2663 | "browserslist": ">= 4.21.0" 2664 | } 2665 | }, 2666 | "node_modules/uri-js": { 2667 | "version": "4.4.1", 2668 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2669 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2670 | "dev": true, 2671 | "dependencies": { 2672 | "punycode": "^2.1.0" 2673 | } 2674 | }, 2675 | "node_modules/util-deprecate": { 2676 | "version": "1.0.2", 2677 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2678 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2679 | }, 2680 | "node_modules/utila": { 2681 | "version": "0.4.0", 2682 | "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", 2683 | "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", 2684 | "dev": true 2685 | }, 2686 | "node_modules/watchpack": { 2687 | "version": "2.4.1", 2688 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", 2689 | "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", 2690 | "dev": true, 2691 | "dependencies": { 2692 | "glob-to-regexp": "^0.4.1", 2693 | "graceful-fs": "^4.1.2" 2694 | }, 2695 | "engines": { 2696 | "node": ">=10.13.0" 2697 | } 2698 | }, 2699 | "node_modules/wavefile": { 2700 | "version": "11.0.0", 2701 | "resolved": "https://registry.npmjs.org/wavefile/-/wavefile-11.0.0.tgz", 2702 | "integrity": "sha512-/OBiAALgWU24IG7sC84cDO/KfFuvajWc5Uec0oV2zrpOOZZDgGdOwHwgEzOrwh8jkubBk7PtZfQBIcI1OaE5Ng==", 2703 | "bin": { 2704 | "wavefile": "bin/wavefile.js" 2705 | }, 2706 | "engines": { 2707 | "node": ">=8" 2708 | } 2709 | }, 2710 | "node_modules/webpack": { 2711 | "version": "5.93.0", 2712 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", 2713 | "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", 2714 | "dev": true, 2715 | "dependencies": { 2716 | "@types/eslint-scope": "^3.7.3", 2717 | "@types/estree": "^1.0.5", 2718 | "@webassemblyjs/ast": "^1.12.1", 2719 | "@webassemblyjs/wasm-edit": "^1.12.1", 2720 | "@webassemblyjs/wasm-parser": "^1.12.1", 2721 | "acorn": "^8.7.1", 2722 | "acorn-import-attributes": "^1.9.5", 2723 | "browserslist": "^4.21.10", 2724 | "chrome-trace-event": "^1.0.2", 2725 | "enhanced-resolve": "^5.17.0", 2726 | "es-module-lexer": "^1.2.1", 2727 | "eslint-scope": "5.1.1", 2728 | "events": "^3.2.0", 2729 | "glob-to-regexp": "^0.4.1", 2730 | "graceful-fs": "^4.2.11", 2731 | "json-parse-even-better-errors": "^2.3.1", 2732 | "loader-runner": "^4.2.0", 2733 | "mime-types": "^2.1.27", 2734 | "neo-async": "^2.6.2", 2735 | "schema-utils": "^3.2.0", 2736 | "tapable": "^2.1.1", 2737 | "terser-webpack-plugin": "^5.3.10", 2738 | "watchpack": "^2.4.1", 2739 | "webpack-sources": "^3.2.3" 2740 | }, 2741 | "bin": { 2742 | "webpack": "bin/webpack.js" 2743 | }, 2744 | "engines": { 2745 | "node": ">=10.13.0" 2746 | }, 2747 | "funding": { 2748 | "type": "opencollective", 2749 | "url": "https://opencollective.com/webpack" 2750 | }, 2751 | "peerDependenciesMeta": { 2752 | "webpack-cli": { 2753 | "optional": true 2754 | } 2755 | } 2756 | }, 2757 | "node_modules/webpack-cli": { 2758 | "version": "5.1.4", 2759 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", 2760 | "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", 2761 | "dev": true, 2762 | "dependencies": { 2763 | "@discoveryjs/json-ext": "^0.5.0", 2764 | "@webpack-cli/configtest": "^2.1.1", 2765 | "@webpack-cli/info": "^2.0.2", 2766 | "@webpack-cli/serve": "^2.0.5", 2767 | "colorette": "^2.0.14", 2768 | "commander": "^10.0.1", 2769 | "cross-spawn": "^7.0.3", 2770 | "envinfo": "^7.7.3", 2771 | "fastest-levenshtein": "^1.0.12", 2772 | "import-local": "^3.0.2", 2773 | "interpret": "^3.1.1", 2774 | "rechoir": "^0.8.0", 2775 | "webpack-merge": "^5.7.3" 2776 | }, 2777 | "bin": { 2778 | "webpack-cli": "bin/cli.js" 2779 | }, 2780 | "engines": { 2781 | "node": ">=14.15.0" 2782 | }, 2783 | "funding": { 2784 | "type": "opencollective", 2785 | "url": "https://opencollective.com/webpack" 2786 | }, 2787 | "peerDependencies": { 2788 | "webpack": "5.x.x" 2789 | }, 2790 | "peerDependenciesMeta": { 2791 | "@webpack-cli/generators": { 2792 | "optional": true 2793 | }, 2794 | "webpack-bundle-analyzer": { 2795 | "optional": true 2796 | }, 2797 | "webpack-dev-server": { 2798 | "optional": true 2799 | } 2800 | } 2801 | }, 2802 | "node_modules/webpack-cli/node_modules/commander": { 2803 | "version": "10.0.1", 2804 | "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", 2805 | "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", 2806 | "dev": true, 2807 | "engines": { 2808 | "node": ">=14" 2809 | } 2810 | }, 2811 | "node_modules/webpack-merge": { 2812 | "version": "5.10.0", 2813 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", 2814 | "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", 2815 | "dev": true, 2816 | "dependencies": { 2817 | "clone-deep": "^4.0.1", 2818 | "flat": "^5.0.2", 2819 | "wildcard": "^2.0.0" 2820 | }, 2821 | "engines": { 2822 | "node": ">=10.0.0" 2823 | } 2824 | }, 2825 | "node_modules/webpack-sources": { 2826 | "version": "3.2.3", 2827 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 2828 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", 2829 | "dev": true, 2830 | "engines": { 2831 | "node": ">=10.13.0" 2832 | } 2833 | }, 2834 | "node_modules/webpack/node_modules/ajv": { 2835 | "version": "6.12.6", 2836 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2837 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2838 | "dev": true, 2839 | "dependencies": { 2840 | "fast-deep-equal": "^3.1.1", 2841 | "fast-json-stable-stringify": "^2.0.0", 2842 | "json-schema-traverse": "^0.4.1", 2843 | "uri-js": "^4.2.2" 2844 | }, 2845 | "funding": { 2846 | "type": "github", 2847 | "url": "https://github.com/sponsors/epoberezkin" 2848 | } 2849 | }, 2850 | "node_modules/webpack/node_modules/ajv-keywords": { 2851 | "version": "3.5.2", 2852 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 2853 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 2854 | "dev": true, 2855 | "peerDependencies": { 2856 | "ajv": "^6.9.1" 2857 | } 2858 | }, 2859 | "node_modules/webpack/node_modules/json-schema-traverse": { 2860 | "version": "0.4.1", 2861 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2862 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2863 | "dev": true 2864 | }, 2865 | "node_modules/webpack/node_modules/schema-utils": { 2866 | "version": "3.3.0", 2867 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", 2868 | "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", 2869 | "dev": true, 2870 | "dependencies": { 2871 | "@types/json-schema": "^7.0.8", 2872 | "ajv": "^6.12.5", 2873 | "ajv-keywords": "^3.5.2" 2874 | }, 2875 | "engines": { 2876 | "node": ">= 10.13.0" 2877 | }, 2878 | "funding": { 2879 | "type": "opencollective", 2880 | "url": "https://opencollective.com/webpack" 2881 | } 2882 | }, 2883 | "node_modules/which": { 2884 | "version": "2.0.2", 2885 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2886 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2887 | "dev": true, 2888 | "dependencies": { 2889 | "isexe": "^2.0.0" 2890 | }, 2891 | "bin": { 2892 | "node-which": "bin/node-which" 2893 | }, 2894 | "engines": { 2895 | "node": ">= 8" 2896 | } 2897 | }, 2898 | "node_modules/wildcard": { 2899 | "version": "2.0.1", 2900 | "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", 2901 | "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", 2902 | "dev": true 2903 | }, 2904 | "node_modules/wrappy": { 2905 | "version": "1.0.2", 2906 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2907 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 2908 | } 2909 | } 2910 | } 2911 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Claudet", 3 | "version": "0.1.1", 4 | "description": "Claudet: Claude.ai Voice Input", 5 | "scripts": { 6 | "build": "webpack", 7 | "dev": "webpack --watch" 8 | }, 9 | "type": "module", 10 | "author": "Xenova", 11 | "license": "MIT", 12 | "devDependencies": { 13 | "copy-webpack-plugin": "^11.0.0", 14 | "html-webpack-plugin": "^5.5.1", 15 | "webpack": "^5.79.0", 16 | "webpack-cli": "^5.1.4" 17 | }, 18 | "dependencies": { 19 | "@xenova/transformers": "^2.0.0", 20 | "wavefile": "^11.0.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /public/background.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | -------------------------------------------------------------------------------- /public/icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unclecode/claudet/0106736ea7a838ab1b3037a62e8f7eea75a7238f/public/icon128.png -------------------------------------------------------------------------------- /public/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unclecode/claudet/0106736ea7a838ab1b3037a62e8f7eea75a7238f/public/icon16.png -------------------------------------------------------------------------------- /public/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unclecode/claudet/0106736ea7a838ab1b3037a62e8f7eea75a7238f/public/icon48.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "name": "Claudet: Claude.ai Voice Input", 4 | "description": "Add voice input capability to Claude.ai using Transformers.js and Groq API", 5 | "version": "0.1.1", 6 | "permissions": [ "storage"], 7 | "host_permissions": ["https://api.groq.com/*"], 8 | "background": { 9 | "service_worker": "background.js", 10 | "type": "module" 11 | }, 12 | "content_scripts": [ 13 | { 14 | "matches": ["https://claude.ai/*"], 15 | "js": ["content.js"] 16 | } 17 | ], 18 | "action": { 19 | "default_popup": "popup.html", 20 | "default_icon": { 21 | "16": "icon16.png", 22 | "48": "icon48.png", 23 | "128": "icon128.png" 24 | }, 25 | "default_title": "Claudet: Claude.ai Voice Input" 26 | }, 27 | "options_page": "options.html", 28 | "content_security_policy": { 29 | "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self'" 30 | }, 31 | "web_accessible_resources": [ 32 | { 33 | "resources": ["icon16.png", "icon48.png", "icon128.png"], 34 | "matches": ["https://claude.ai/*"] 35 | } 36 | ], 37 | "icons": { 38 | "16": "icon16.png", 39 | "48": "icon48.png", 40 | "128": "icon128.png" 41 | }, 42 | "minimum_chrome_version": "92" 43 | } -------------------------------------------------------------------------------- /src/background.js: -------------------------------------------------------------------------------- 1 | // env.backends.onnx.wasm.numThreads = 1; 2 | // env.allowRemoteModels = false; 3 | // env.localModelPath = "models/"; 4 | // background.js 5 | import { pipeline, env } from "@xenova/transformers"; 6 | import { WaveFile } from 'wavefile'; 7 | 8 | // Skip initial check for local models 9 | env.allowLocalModels = false; 10 | 11 | // Disable multithreading due to a bug in onnxruntime-web 12 | env.backends.onnx.wasm.numThreads = 1; 13 | 14 | let currentModel = "groq"; 15 | let groqApiKey = ""; 16 | let openaiApiKey = ""; 17 | let messages = []; 18 | let modelLoadError = false; 19 | 20 | chrome.storage.local.get(["messages", "modelLoadError"], function (result) { 21 | if (result.messages) { 22 | messages = result.messages; 23 | } 24 | if (result.modelLoadError !== undefined) { 25 | modelLoadError = result.modelLoadError; 26 | } 27 | }); 28 | 29 | // Add OpenAI to the storage retrieval 30 | chrome.storage.sync.get(["model", "groqApiKey", "openaiApiKey"], function (result) { 31 | if (result.model) { 32 | currentModel = result.model; 33 | } 34 | if (result.groqApiKey) { 35 | groqApiKey = result.groqApiKey; 36 | } 37 | if (result.openaiApiKey) { 38 | openaiApiKey = result.openaiApiKey; 39 | } 40 | }); 41 | 42 | // Update the storage change listener 43 | chrome.storage.onChanged.addListener(function (changes, namespace) { 44 | for (let key in changes) { 45 | if (key === "model") { 46 | currentModel = changes[key].newValue; 47 | } else if (key === "groqApiKey") { 48 | groqApiKey = changes[key].newValue; 49 | } else if (key === "openaiApiKey") { 50 | openaiApiKey = changes[key].newValue; 51 | } else if (key === "messages" && namespace === "local") { 52 | messages = changes[key].newValue; 53 | } 54 | } 55 | }); 56 | 57 | class PipelineFactory { 58 | static task = "automatic-speech-recognition"; 59 | static model = "Xenova/whisper-base"; 60 | static model = 'Xenova/whisper-tiny.en'; 61 | static model = "Xenova/whisper-tiny"; 62 | static quantized = false; 63 | static instance = null; 64 | static isLoading = false; 65 | 66 | static async getInstance(progress_callback = null) { 67 | if (this.instance === null && !this.isLoading) { 68 | this.isLoading = true; 69 | try { 70 | this.instance = await pipeline(this.task, this.model, { 71 | quantized: this.quantized, 72 | progress_callback, 73 | revision: this.model.includes("/whisper-medium") ? "no_attentions" : "main", 74 | }); 75 | } catch (error) { 76 | console.log("Error: Error initializing pipeline:", error); 77 | throw error; 78 | } finally { 79 | this.isLoading = false; 80 | } 81 | } 82 | return this.instance; 83 | } 84 | } 85 | 86 | async function transcribeWithAPI(audioArray) { 87 | try { 88 | // Reconstruct ArrayBuffer from the array 89 | const audioBuffer = new Uint8Array(audioArray).buffer; 90 | const audioBlob = new Blob([audioBuffer], { type: "audio/webm" }); 91 | 92 | const formData = new FormData(); 93 | formData.append("file", audioBlob, "recording.webm"); 94 | const modelName = currentModel === "groq" ? "whisper-large-v3" : "whisper-1"; 95 | formData.append("model", modelName); 96 | formData.append("response_format", "text"); 97 | 98 | const urlBase = currentModel === "groq" ? "https://api.groq.com/openai" : "https://api.openai.com"; 99 | const apiKey = currentModel === "groq" ? groqApiKey : openaiApiKey; 100 | 101 | const transcriptionResponse = await fetch(`${urlBase}/v1/audio/transcriptions`, { 102 | method: "POST", 103 | headers: { 104 | Authorization: `Bearer ${apiKey}`, 105 | }, 106 | body: formData, 107 | }); 108 | 109 | if (transcriptionResponse.ok) { 110 | const data = await transcriptionResponse.text(); 111 | return { success: true, text: data.trim() }; 112 | } else { 113 | const errorData = await transcriptionResponse.json(); 114 | return { success: false, error: errorData.error.message }; 115 | } 116 | } catch (error) { 117 | console.log("Error: Error transcribing audio:", error); 118 | return { success: false, error: "Unable to transcribe audio. Please try again." }; 119 | } 120 | } 121 | 122 | 123 | const transcribe = async (audioArrayBuffer, language = "en") => { 124 | try { 125 | // let transcriber = await pipeline('automatic-speech-recognition', 'Xenova/whisper-tiny.en'); 126 | let transcriber = await PipelineFactory.getInstance(); 127 | const uint8Array = new Uint8Array(audioArrayBuffer); 128 | const recoveredBuffer = uint8Array.buffer; 129 | // Convert audio to required format 130 | let audioData = await convertAudioToRequiredFormat(recoveredBuffer); 131 | 132 | let output = await transcriber(audioData, { 133 | top_k: 0, 134 | do_sample: false, 135 | chunk_length_s: 15, 136 | stride_length_s: 3, 137 | language: language, 138 | task: "transcribe", 139 | return_timestamps: false, 140 | }); 141 | 142 | return { success: true, text: output.text }; 143 | } catch (error) { 144 | console.log("Error: Transcription error:", error); 145 | return { success: false, error: error.message || "Unknown transcription error" }; 146 | } 147 | }; 148 | 149 | const convertAudioToRequiredFormat = async (audioArray) => { 150 | try { 151 | 152 | const wav = new WaveFile(); 153 | 154 | // Assuming the input is 16-bit PCM audio at 44.1kHz 155 | wav.fromScratch(1, 16000, '16', audioArray); 156 | 157 | // Get WAV file as a Buffer 158 | const wavBuffer = wav.toBuffer(); 159 | 160 | const audioBlob = new Blob([wavBuffer], { type: "audio/wav" }); 161 | 162 | // Convert to 32-bit float 163 | wav.toBitDepth('32f'); 164 | 165 | // Convert to 16kHz sample rate 166 | wav.toSampleRate(16000); 167 | 168 | let samples = wav.getSamples(); 169 | 170 | if (Array.isArray(samples)) { 171 | if (samples.length > 1) { 172 | // Merge channels 173 | const SCALING_FACTOR = Math.sqrt(2); 174 | for (let i = 0; i < samples[0].length; ++i) { 175 | samples[0][i] = SCALING_FACTOR * (samples[0][i] + samples[1][i]) / 2; 176 | } 177 | } 178 | samples = samples[0]; 179 | } 180 | 181 | return samples; 182 | } catch (error) { 183 | console.error("Error converting audio:", error); 184 | throw new Error("Failed to process audio file. Unsupported format or corrupted file."); 185 | } 186 | }; 187 | 188 | chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { 189 | if (message.action === "transcribe") { 190 | (async function () { 191 | try { 192 | if ((currentModel === "groq" && !groqApiKey) || (currentModel === "openai" && !openaiApiKey)) { 193 | sendResponse({ success: false, error: "API key not set. Please set it in the extension options." , micId: message.micId || "mic-button"}); 194 | return; 195 | } 196 | // refresh currentModel 197 | chrome.storage.sync.get(["model"], async function (result) { 198 | if (result.model) { 199 | currentModel = result.model; 200 | } 201 | 202 | if (currentModel === "webgpu") { 203 | result = await transcribe(message.audioBuffer, message.language); 204 | } else if (currentModel === "groq" || currentModel === "openai") { 205 | result = await transcribeWithAPI(message.audioBuffer); 206 | } 207 | 208 | if (result.success) { 209 | // Store the message 210 | messages.push({ 211 | text: result.text, 212 | timestamp: new Date().toISOString() 213 | }); 214 | 215 | // Keep only the last 50 messages 216 | if (messages.length > 50) { 217 | messages = messages.slice(-50); 218 | } 219 | 220 | // Save to local storage 221 | chrome.storage.local.set({ messages: messages }); 222 | } 223 | result.micId = message.micId || "mic-button"; 224 | sendResponse(result); 225 | }); 226 | 227 | } catch (error) { 228 | sendResponse({ success: false, error: error.message || "Unknown error", micId: message.micId || "mic-button" }); 229 | } 230 | })(); 231 | return true; // Indicates we will send a response asynchronously 232 | } 233 | }); 234 | 235 | // Optional: Preload the model 236 | PipelineFactory.getInstance((data) => { 237 | console.log("Preloading model, progress:", data); 238 | }).catch((error) => { 239 | console.log("Failed to preload model:", error); 240 | chrome.storage.local.set({ modelLoadError: true }); 241 | }); -------------------------------------------------------------------------------- /src/content.js: -------------------------------------------------------------------------------- 1 | let isRecording = false; 2 | let isTranscribing = false; 3 | let audioContext; 4 | let mediaRecorder; 5 | let audioChunks = []; 6 | let clickedMicId = ""; 7 | 8 | const MAX_RETRIES = 3; 9 | const RETRY_DELAY = 100; // 1 second 10 | const WHISPER_SAMPLING_RATE = 16000; 11 | 12 | const bgColor = "#222220"; 13 | const iconColor = "#a4a49f"; 14 | 15 | const recordIcon = ``; 20 | 21 | const stopIcon = ``; 26 | 27 | const waitIcon = ``; 32 | 33 | const closeIcon = ``; 37 | 38 | function insertMicrophoneButton(targetDiv, inline) { 39 | const count = document.querySelectorAll(".claudet-mic-button-inline").length; 40 | const inlineClassSuffix = `-inline-${count}`; 41 | // const targetDiv = document.querySelector(".flex.min-h-4.flex-1.items-center"); 42 | if (targetDiv) { 43 | // remove claudet container if it already exists 44 | const existingContainer = document.querySelector(".claudet-mic-container" + (inline ? inlineClassSuffix : "")); 45 | if (existingContainer) { 46 | existingContainer.remove(); 47 | } 48 | // remove error message if it already exists 49 | const existingError = document.getElementById("error-message" + (inline ? inlineClassSuffix : "")); 50 | if (existingError) { 51 | existingError.remove(); 52 | } 53 | const containerDiv = document.createElement("div"); 54 | containerDiv.classList.add("claudet-mic-container" + (inline ? inlineClassSuffix : "")); 55 | containerDiv.style.cssText = 56 | "display: flex; flex-direction: column; align-items: flex-start; margin-right: 10px;"; 57 | 58 | const micButton = document.createElement("button"); 59 | micButton.innerHTML = recordIcon; 60 | micButton.classList.add("claudet-mic-button"); 61 | micButton.id = "mic-button"; 62 | if (inline) { 63 | micButton.classList.add("claudet-mic-button-inline"); 64 | // count hpow many ".claudet-mic-button-inline" are there 65 | micButton.id += inlineClassSuffix; 66 | } 67 | micButton.style.cssText = "background: none; border: none; cursor: pointer;"; 68 | micButton.onclick = checkSettingsAndToggleRecording;; 69 | 70 | const infoSpeechDiv = document.createElement("div"); 71 | infoSpeechDiv.classList.add("flex"); 72 | infoSpeechDiv.id = "error-message" + (inline ? inlineClassSuffix : ""); 73 | infoSpeechDiv.style.cssText = 74 | "color: #e27c5b; font-size: 12px; margin-top: 5px; align-items: center; background-color: #2b2b267a; border: 1px solid #e27c5b; border-radius: 5px; padding: 0.25em 0.5em; display: none;"; 75 | 76 | containerDiv.appendChild(micButton); 77 | targetDiv.parentNode.insertBefore(containerDiv, targetDiv); 78 | targetDiv.parentElement.parentElement.appendChild(infoSpeechDiv); 79 | } else { 80 | console.log("Target div for microphone button not found"); 81 | } 82 | } 83 | 84 | function checkSettingsAndToggleRecording(evt) { 85 | const button = evt.currentTarget; 86 | chrome.storage.sync.get(['model', 'groqApiKey', 'openaiApiKey'], function(result) { 87 | if ((result.model === 'groq' && !result.groqApiKey) || (result.model === 'openai' && !result.openaiApiKey)) { 88 | showError("API key not set. Please set it in the extension options from the Chrome extension menu."); 89 | return; 90 | } 91 | 92 | if (result.model === 'webgpu') { 93 | chrome.storage.local.get(['modelLoadError'], function(localResult) { 94 | if (localResult.modelLoadError) { 95 | showError("WebGPU model failed to load. Please try again or switch to Groq in the extension options."); 96 | } else { 97 | toggleRecording(evt, button); 98 | } 99 | }); 100 | } else { 101 | toggleRecording(evt, button); 102 | } 103 | }); 104 | 105 | evt.preventDefault(); 106 | evt.stopPropagation(); 107 | return false; 108 | } 109 | 110 | function showError(message) { 111 | const infoSpeechDiv = document.getElementById("error-message"); 112 | if (infoSpeechDiv) { 113 | // create a div and set text to it 114 | const div = document.createElement("div"); 115 | div.textContent = message; 116 | // set flex to 1 117 | div.style.flex = "1"; 118 | 119 | const closeButton = document.createElement("button"); 120 | closeButton.innerHTML = closeIcon; 121 | closeButton.style.cssText = "background: none; border: none; cursor: pointer; margin-left: 5px;"; 122 | closeButton.onclick = closeError; 123 | 124 | // Disable the mic button 125 | const micButton = document.getElementById(clickedMicId); 126 | if (micButton) { 127 | micButton.disabled = true; 128 | micButton.style.opacity = "0.5"; 129 | } 130 | 131 | infoSpeechDiv.appendChild(div); 132 | infoSpeechDiv.appendChild(closeButton); 133 | 134 | // rset display to flex 135 | infoSpeechDiv.style.display = "flex"; 136 | } 137 | } 138 | 139 | function closeError() { 140 | const infoSpeechDiv = document.getElementById("error-message"); 141 | if (infoSpeechDiv) { 142 | infoSpeechDiv.style.display = "none"; 143 | infoSpeechDiv.textContent = ""; 144 | } 145 | // Re-enable the mic button 146 | const micButton = document.getElementById(clickedMicId); 147 | if (micButton) { 148 | micButton.disabled = false; 149 | micButton.style.opacity = "1"; 150 | } 151 | } 152 | 153 | function toggleRecording(evt, button) { 154 | clickedMicId = button; // obj.currentTarget //.id; 155 | closeError(); // Close any existing error message 156 | const micButton = clickedMicId // document.getElementById(clickedMicId); 157 | if (!isRecording && !isTranscribing) { 158 | startRecording(); 159 | micButton.innerHTML = stopIcon; 160 | micButton.style.animation = "spin 2s linear infinite"; 161 | } else if (isRecording) { 162 | stopRecording(); 163 | micButton.innerHTML = waitIcon; 164 | micButton.style.animation = ""; 165 | micButton.disabled = true; 166 | isTranscribing = true; 167 | } 168 | 169 | // cancel the event 170 | evt.preventDefault(); 171 | // avoid the event to propagate 172 | evt.stopPropagation(); 173 | 174 | return false; 175 | } 176 | 177 | let mediaRecorderRef = { current: null }; 178 | let audioChunksRef = { current: [] }; 179 | 180 | function startRecording() { 181 | navigator.mediaDevices 182 | .getUserMedia({ audio: true }) 183 | .then((stream) => { 184 | const mediaRecorder = new MediaRecorder(stream); 185 | mediaRecorderRef.current = mediaRecorder; 186 | audioChunksRef.current = []; 187 | 188 | mediaRecorder.addEventListener("dataavailable", (event) => { 189 | console.log("Data available"); 190 | audioChunksRef.current.push(event.data); 191 | }); 192 | 193 | mediaRecorder.start(); 194 | isRecording = true; 195 | 196 | const micButton = clickedMicId //document.getElementById(clickedMicId); 197 | micButton.innerHTML = stopIcon; 198 | micButton.style.animation = "spin 2s linear infinite"; 199 | }) 200 | .catch((error) => { 201 | console.error("Error accessing microphone:", error); 202 | showError("Error accessing microphone. Please check your permissions."); 203 | resetRecordingState(); 204 | }); 205 | } 206 | 207 | function stopRecording() { 208 | if (mediaRecorderRef.current && mediaRecorderRef.current.state !== "inactive") { 209 | mediaRecorderRef.current.addEventListener("stop", transcribeAudio); 210 | mediaRecorderRef.current.stop(); 211 | isRecording = false; 212 | isTranscribing = true; 213 | 214 | const micButton = clickedMicId //document.getElementById(clickedMicId); 215 | micButton.innerHTML = waitIcon; 216 | micButton.style.animation = ""; 217 | micButton.disabled = true; 218 | } 219 | } 220 | 221 | 222 | // audioBlob 223 | // .arrayBuffer() 224 | // .then((buffer) => { 225 | // // Send the audio buffer to the background script for transcription 226 | // chrome.runtime.sendMessage( 227 | // { 228 | // action: "transcribe", 229 | // audioBuffer: Array.from(new Uint8Array(buffer)), // Convert ArrayBuffer to array 230 | // micId: clickedMicId.id, 231 | // }, 232 | // handleTranscription 233 | // ); 234 | // }) 235 | // .catch((error) => { 236 | // console.error("Error converting blob to array buffer:", error); 237 | // showError("Error processing audio. Please try again."); 238 | // resetRecordingState(); 239 | // }); 240 | 241 | async function transcribeAudio(retryCount = 0) { 242 | if (retryCount >= MAX_RETRIES) { 243 | showError("Maximum retry attempts reached. Please try again later."); 244 | resetRecordingState(); 245 | return; 246 | } 247 | 248 | if (!audioChunksRef.current || audioChunksRef.current.length === 0) { 249 | console.error("No audio data available"); 250 | showError("No audio data recorded. Please try again."); 251 | resetRecordingState(); 252 | return; 253 | } 254 | 255 | try { 256 | const audioBlob = new Blob(audioChunksRef.current, { type: "audio/webm" }); 257 | 258 | if (audioBlob.size === 0) { 259 | throw new Error("Audio blob is empty"); 260 | } 261 | 262 | const buffer = await audioBlob.arrayBuffer(); 263 | 264 | if (buffer.byteLength === 0) { 265 | throw new Error("Array buffer is empty"); 266 | } 267 | 268 | const uint8Array = new Uint8Array(buffer); 269 | 270 | if (uint8Array.length === 0) { 271 | throw new Error("Uint8Array is empty"); 272 | } 273 | 274 | chrome.runtime.sendMessage( 275 | { 276 | action: "transcribe", 277 | audioBuffer: Array.from(uint8Array), 278 | micId: clickedMicId.id, 279 | }, 280 | (response) => { 281 | if (chrome.runtime.lastError) { 282 | console.error("Runtime error:", chrome.runtime.lastError); 283 | retryTranscription(retryCount); 284 | } else { 285 | handleTranscription(response); 286 | } 287 | } 288 | ); 289 | } catch (error) { 290 | console.log("Error: Error processing audio:", error); 291 | retryTranscription(retryCount); 292 | } 293 | } 294 | 295 | function retryTranscription(retryCount) { 296 | console.log(`Retrying transcription (attempt ${retryCount + 1} of ${MAX_RETRIES})...`); 297 | setTimeout(() => transcribeAudio(retryCount + 1), RETRY_DELAY); 298 | } 299 | 300 | function showRetryMessage(retryCount) { 301 | showError(`Error processing audio. Retrying... (${retryCount + 1}/${MAX_RETRIES})`); 302 | } 303 | 304 | function handleTranscription(response) { 305 | clickedMicId = response.micId; 306 | 307 | const micButton = document.getElementById(clickedMicId); 308 | isTranscribing = false; 309 | micButton.disabled = false; 310 | micButton.style.animation = ""; 311 | micButton.innerHTML = recordIcon; 312 | 313 | if (response.success && response.text) { 314 | insertTranscribedText(response.text, clickedMicId); 315 | initializeExtension(); 316 | } else { 317 | showError(response.error || "Transcription failed. Please try again."); 318 | } 319 | } 320 | 321 | function insertTranscribedText(text, micId) { 322 | let inputDiv; 323 | const isInline = micId.includes("inline"); 324 | if (isInline) { 325 | // Extract the container class suffix from the micId 326 | const containerClassSuffix = micId.split("-").slice(-1)[0]; 327 | // Select .claudet-mic-container-inline then take the two above prent then search for text area that is in the same div 328 | const inlineTarget = document 329 | .querySelector(".claudet-mic-container-inline-" + containerClassSuffix) 330 | .parentElement.parentElement.querySelector("textarea"); 331 | if (inlineTarget) { 332 | inputDiv = inlineTarget; 333 | inputDiv.focus(); 334 | inputDiv.value += text; 335 | } else { 336 | console.error("Textarea not found"); 337 | showError("Error inserting transcribed text. Please try again."); 338 | return; 339 | } 340 | } else { 341 | inputDiv = document.querySelector('[contenteditable="true"]'); 342 | if (inputDiv) { 343 | inputDiv.focus(); 344 | document.execCommand("insertText", false, text); 345 | } else { 346 | console.error("Contenteditable div not found"); 347 | showError("Error inserting transcribed text. Please try again."); 348 | } 349 | } 350 | } 351 | 352 | function resetRecordingState() { 353 | const allMics = document.querySelectorAll(".claudet-mic-button"); 354 | for (const mic of allMics) { 355 | mic.disabled = false; 356 | mic.style.animation = ""; 357 | mic.innerHTML = recordIcon; 358 | } 359 | isRecording = false; 360 | isTranscribing = false; 361 | micButton.disabled = false; 362 | // micButton.style.animation = ""; 363 | // micButton.innerHTML = recordIcon; 364 | // const inlineMicButton = document.getElementById("mic-button-inline"); 365 | // if (inlineMicButton) { 366 | // inlineMicButton.disabled = false; 367 | // inlineMicButton.style.animation = ""; 368 | // inlineMicButton.innerHTML = recordIcon; 369 | // } 370 | } 371 | 372 | function sendMessageToBackground(message) { 373 | if (chrome.runtime && chrome.runtime.sendMessage) { 374 | chrome.runtime.sendMessage(message, handleTranscription); 375 | } else { 376 | // If chrome.runtime is not available, retry after a short delay 377 | setTimeout(() => checkRuntimeAndSendMessage(message), 1000); 378 | } 379 | } 380 | 381 | function checkRuntimeAndSendMessage(message, retries = 5) { 382 | if (chrome.runtime && chrome.runtime.sendMessage) { 383 | chrome.runtime.sendMessage(message, handleTranscription); 384 | } else if (retries > 0) { 385 | // If chrome.runtime is still not available, retry with a decremented retry count 386 | setTimeout(() => checkRuntimeAndSendMessage(message, retries - 1), 1000); 387 | } else { 388 | console.error("Chrome runtime not available after multiple retries"); 389 | showError("Error communicating with the extension. Please refresh the page and try again."); 390 | resetRecordingState(); 391 | } 392 | } 393 | 394 | // CSS for the animations 395 | const style = document.createElement("style"); 396 | style.textContent = ` 397 | @keyframes spin { 398 | 0% { transform: rotate(0deg); } 399 | 100% { transform: rotate(360deg); } 400 | } 401 | 402 | @keyframes pulse { 403 | 0% { transform: scale(1); opacity: 1; } 404 | 50% { transform: scale(1.2); opacity: 0.7; } 405 | 100% { transform: scale(1); opacity: 1; } 406 | } 407 | 408 | .pulse-circle { 409 | transform-origin: center; 410 | transform-box: fill-box; 411 | animation: pulse 1s ease-in-out infinite; 412 | } 413 | `; 414 | document.head.appendChild(style); 415 | 416 | // if (document.readyState === "loading") { 417 | // document.addEventListener("DOMContentLoaded", initializeExtension); 418 | // } else { 419 | // initializeExtension(); 420 | // } 421 | 422 | function initializeExtension() { 423 | // insertMicrophoneButton(); 424 | // console.log("Microphone button inserted"); 425 | // // Add any other initialization code here 426 | } 427 | 428 | // Every 100 ms check if mic button is present if not insert it 429 | setInterval(() => { 430 | const micButton = document.getElementById("mic-button"); 431 | if (!micButton) { 432 | const targetDiv = document.querySelector(".flex.min-h-4.flex-1.items-center"); 433 | if (targetDiv && !targetDiv.previousSibling && !targetDiv.previousSibling?.matches("button")) { 434 | insertMicrophoneButton(targetDiv); 435 | } 436 | } 437 | // Check for all inlines 438 | const inlineTargets = document.querySelectorAll(".text-text-300.flex.flex-row.items-center.gap-2.text-xs"); 439 | for (const inlineTarget of inlineTargets) { 440 | // check if inlineTarget has a button with class claudet-mic-button-inline 441 | const inlineMicButton = inlineTarget.parentNode.querySelector(".claudet-mic-button-inline"); 442 | if (!inlineMicButton) { 443 | insertMicrophoneButton(inlineTarget, true); 444 | } 445 | } 446 | // if (inlineTarget) { 447 | // const inlineMicButton = document.getElementById("mic-button-inline"); 448 | // if (!inlineMicButton) { 449 | // // const inlineTarget = document.querySelector(".flex.items-center.justify-between.gap-2"); 450 | // insertMicrophoneButton(inlineTarget, true); 451 | // } 452 | // } 453 | }, 200); 454 | 455 | // Additional event listener for dynamically loaded content 456 | const observeDOM = () => { 457 | console.log("Observing DOM for changes"); 458 | const targetNode = document.body; 459 | const config = { childList: true, subtree: true }; 460 | 461 | const callback = function (mutationsList, observer) { 462 | for (let mutation of mutationsList) { 463 | if (mutation.type === "childList") { 464 | const targetDiv = document.querySelector(".flex.min-h-4.flex-1.items-center"); 465 | if (targetDiv && !targetDiv.previousSibling && !targetDiv.previousSibling?.matches("button")) { 466 | insertMicrophoneButton(); 467 | console.log("Microphone button inserted after dynamic load"); 468 | observer.disconnect(); // Stop observing once button is inserted 469 | break; 470 | } 471 | const inlineTarget = document.querySelector(".flex.items-center.justify-between.gap-2"); 472 | // if (inlineTarget && !inlineTarget.previousSibling && !inlineTarget.previousSibling?.matches("button")) { 473 | if (inlineTarget) { 474 | // insertMicrophoneButton(); 475 | console.log("Microphone button for inline mode"); 476 | observer.disconnect(); // Stop observing once button is inserted 477 | break; 478 | } 479 | } 480 | } 481 | }; 482 | 483 | const observer = new MutationObserver(callback); 484 | observer.observe(targetNode, config); 485 | }; 486 | 487 | // Start observing the DOM for changes 488 | // setTimeout(observeDOM, 5000); 489 | -------------------------------------------------------------------------------- /src/options.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --bg-color: #222220; 3 | --text-color: #a4a49f; 4 | --primary-color: #e27c5b; 5 | --secondary-color: #3a3a38; 6 | --hover-color: #4a4a48; 7 | } 8 | 9 | * { 10 | box-sizing: border-box; 11 | } 12 | 13 | body { 14 | font-family: Arial, sans-serif; 15 | background-color: var(--bg-color); 16 | color: var(--text-color); 17 | margin: 0; 18 | padding: 20px; 19 | line-height: 1.6; 20 | } 21 | 22 | .container { 23 | max-width: 800px; 24 | margin: 0 auto; 25 | } 26 | 27 | h1, 28 | h2 { 29 | color: var(--text-color); 30 | } 31 | 32 | .section { 33 | background-color: var(--secondary-color); 34 | border-radius: 8px; 35 | padding: 20px; 36 | margin-bottom: 20px; 37 | } 38 | 39 | input[type="text"], 40 | input[type="password"] { 41 | width: 100%; 42 | padding: 10px; 43 | margin-bottom: 10px; 44 | background-color: var(--bg-color); 45 | border: 1px solid var(--text-color); 46 | color: var(--text-color); 47 | border-radius: 4px; 48 | } 49 | 50 | button { 51 | background-color: var(--primary-color); 52 | color: var(--bg-color); 53 | border: none; 54 | padding: 10px 20px; 55 | cursor: pointer; 56 | border-radius: 4px; 57 | transition: background-color 0.3s ease; 58 | } 59 | 60 | button:hover { 61 | background-color: var(--hover-color); 62 | } 63 | 64 | ul { 65 | list-style-type: none; 66 | padding: 0; 67 | } 68 | 69 | li { 70 | background-color: var(--hover-color); 71 | padding: 10px; 72 | margin-bottom: 5px; 73 | border-radius: 4px; 74 | } 75 | 76 | li:nth-child(even) { 77 | background-color: var(--secondary-color); 78 | } 79 | .footer { 80 | margin-top: 20px; 81 | text-align: center; 82 | font-size: 0.9em; 83 | color: var(--text-color); 84 | } 85 | 86 | .footer a { 87 | color: var(--primary-color); 88 | text-decoration: none; 89 | transition: color 0.3s ease; 90 | } 91 | 92 | .footer a:hover { 93 | color: var(--hover-color); 94 | text-decoration: underline; 95 | } 96 | 97 | select { 98 | width: 100%; 99 | padding: 5px; 100 | margin-bottom: 10px; 101 | background-color: transparent; 102 | border-radius: 10px; 103 | border-color: #494845; 104 | color: #aeaaa0; 105 | outline: none; 106 | border: 1px solid #494845; 107 | } 108 | -------------------------------------------------------------------------------- /src/options.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |