├── .github └── dependabot.yml ├── .gitignore ├── LICENSE.txt ├── README.md ├── auto.gif ├── build.mjs ├── demo.gif ├── icon.png ├── package.json ├── pnpm-lock.yaml ├── select.gif ├── src ├── background.js ├── content.js ├── manifest.chrome.json ├── manifest.firefox.json ├── options │ ├── index.css │ ├── index.html │ └── index.js └── popup │ ├── index.css │ ├── index.html │ └── index.js └── textbox.gif /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Please see the documentation for all configuration options: 2 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 3 | 4 | version: 2 5 | updates: 6 | - package-ecosystem: "npm" # See documentation for possible values 7 | directory: "/" # Location of package manifests 8 | schedule: 9 | interval: "weekly" 10 | allow: 11 | - dependency-name: "opencc-js" 12 | open-pull-requests-limit: 3 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vscode/ 3 | build/ 4 | node_modules 5 | node_modules.nosync/ 6 | web-ext-config.mjs 7 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Tony Chan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |

opencc-extension

6 | 7 |

8 | 9 |

10 | 11 | 12 | 13 | 14 | 15 | 16 |

17 | 18 | A browser extension that converts text in the current active tab between different Chinese variants. 19 | 20 | This extension is powered by [opencc-js](https://github.com/nk2028/opencc-js), 21 | which is a JavaScript API wrapper around the great [OpenCC](https://github.com/BYVoid/OpenCC) project. 22 | 23 | Most of the variants supported by OpenCC are supported: 24 | 25 | - `cn`: Simplified Chinese (Mainland China) 26 | - `hk`: Traditional Chinese (Hong Kong) 27 | - `tw`: Traditional Chinese (Taiwan) 28 | - `twp`: Traditional Chinese (Taiwan) with native phrases 29 | - ~~`t`: Traditional Chinese (OpenCC standard)~~ 30 | - ~~`jp`: Japanese Shinjitai~~ 31 | 32 | > [!NOTE] 33 | > Only Chrome and Firefox are tested. 34 | > Other browsers may also work but are not guaranteed to. 35 | 36 | ## Features 37 | 38 | - Minimalist user interface. 39 | - Fast performance (using [`TreeWalker`](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker)). 40 | - Converts whole text on a webpage with one click. 41 | - Can also convert dynamically rendered text in auto mode 42 | (using [`MutationObserver`](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)). 43 | - Converts selected text on a webpage in right click context menu. 44 | - Converts any text provided in the text box in real time. 45 | - Other features of OpenCC. 46 | - 嚴格區分「一簡對多繁」和「一簡對多異」。 47 | - 完全兼容異體字,可以實現動態替換。 48 | - 嚴格審校一簡對多繁詞條,原則爲「能分則不合」。 49 | - 支持中國大陸、臺灣、香港異體字和地區習慣用詞轉換,如「裏」「裡」、「鼠標」「滑鼠」。 50 | 51 | See [usage](#usage) for more ways to convert text. 52 | 53 | ## Usage 54 | 55 | Specify the language settings in the extension popup. 56 | 57 |
58 | OriginTarget 59 |
60 | 61 | - **Origin**: the original Chinese text variant in the webpage 62 | - **Target**: the desired Chinese text variant to be converted into 63 | 64 |

65 | 66 | 67 |

68 | 69 |

70 | Left: Convert Text Selection on Webpage 71 |
72 | Right: Convert Any Text in Text Box 73 |

74 | 75 |

76 | 77 | 78 |

79 | 80 |

81 | Left: One Click 82 |
83 | Right: Auto Mode 84 |

85 | 86 | > [!NOTE] 87 | > For performance reason, auto mode will not convert text on webpages which 88 | > explicitly specify their `lang` attributes to be languages other than `zh` in their HTML documents. 89 | 90 | When auto mode is enabled, a grey badge with the letter `A` appears on the corner of the extension icon. 91 | 92 | All text in the webpage of the current active tab is converted whenever it loads or is updated. 93 | 94 | ## Credits 95 | 96 | - https://github.com/BYVoid/OpenCC 97 | - https://github.com/nk2028/opencc-js 98 | 99 | --- 100 | 101 |

102 | ~ crafted with ♥︎ by tnychn ~ 103 |
104 | MIT © 2024 Tony Chan 105 |

106 | -------------------------------------------------------------------------------- /auto.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnychn/opencc-extension/6c8a06702ed3190da0ffc9445ff23a30ceb2a3fb/auto.gif -------------------------------------------------------------------------------- /build.mjs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /* eslint-env node */ 4 | 5 | import * as esbuild from "esbuild"; 6 | 7 | const arg = process.argv[2]; 8 | const mode = process.env.MODE; 9 | const browser = process.env.BROWSER; 10 | 11 | const options = { 12 | entryPoints: [ 13 | "./src/background.js", 14 | "./src/content.js", 15 | "./src/popup/index.js", 16 | "./src/popup/index.html", 17 | "./src/popup/index.css", 18 | "./src/options/index.js", 19 | "./src/options/index.html", 20 | "./src/options/index.css", 21 | { 22 | in: `./src/manifest.${browser}.json`, 23 | out: "manifest", 24 | }, 25 | { 26 | in: "./icon.png", 27 | out: "icon", 28 | }, 29 | ], 30 | loader: { 31 | ".html": "copy", 32 | ".css": "copy", 33 | ".json": "copy", 34 | ".png": "copy", 35 | }, 36 | outbase: "src", 37 | outdir: arg === "watch" ? "./build" : arg, 38 | target: "es6", 39 | bundle: true, 40 | allowOverwrite: true, 41 | minify: mode === "production", 42 | sourcemap: mode === "development", 43 | }; 44 | 45 | if (arg === "watch") { 46 | const ctx = await esbuild.context(options); 47 | await ctx.watch(); 48 | } else await esbuild.build(options); 49 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnychn/opencc-extension/6c8a06702ed3190da0ffc9445ff23a30ceb2a3fb/demo.gif -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnychn/opencc-extension/6c8a06702ed3190da0ffc9445ff23a30ceb2a3fb/icon.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "opencc-extension", 3 | "version": "0.4.0", 4 | "description": "A browser extension to convert webpages between different Chinese variants.", 5 | "repository": "github:tnychn/opencc-extension", 6 | "author": { 7 | "name": "Tony Chan", 8 | "email": "tnychn@protonmail.com", 9 | "url": "https://github.com/tnychn" 10 | }, 11 | "type": "module", 12 | "license": "MIT", 13 | "scripts": { 14 | "build": "./build.mjs", 15 | "build:watch": "pnpm build watch", 16 | "start": "web-ext run -s ./build", 17 | "start:firefox": "concurrently \"MODE='development' BROWSER='firefox' pnpm build:watch\" \"wait-on ./build/manifest.json && pnpm start\"", 18 | "start:chromium": "concurrently \"MODE='development' BROWSER='chrome' pnpm build:watch\" \"wait-on ./build/manifest.json && pnpm start -t chromium\"", 19 | "dist:chrome": "MODE='production' BROWSER='chrome' pnpm build ./dist/chrome && web-ext build -s ./dist/chrome -a . -n opencc.chrome.zip", 20 | "dist:firefox": "MODE='production' BROWSER='firefox' pnpm build ./dist/firefox && web-ext build -s ./dist/firefox -a . -n opencc.firefox.zip", 21 | "dist": "concurrently \"pnpm dist:chrome\" \"pnpm dist:firefox\" && rm -rf ./dist" 22 | }, 23 | "dependencies": { 24 | "opencc-js": "^1.0.5" 25 | }, 26 | "devDependencies": { 27 | "@types/chrome": "^0.0.287", 28 | "@types/opencc-js": "^1.0.3", 29 | "concurrently": "^9.1.0", 30 | "esbuild": "^0.24.0", 31 | "eslint": "^8.57.1", 32 | "eslint-config-prettier": "^9.1.0", 33 | "prettier": "^3.4.1", 34 | "wait-on": "^8.0.1", 35 | "web-ext": "^8.3.0" 36 | }, 37 | "prettier": { 38 | "tabWidth": 2, 39 | "printWidth": 120 40 | }, 41 | "eslintConfig": { 42 | "env": { 43 | "es6": true, 44 | "browser": true, 45 | "webextensions": true 46 | }, 47 | "parserOptions": { 48 | "ecmaVersion": "latest", 49 | "sourceType": "module" 50 | }, 51 | "extends": [ 52 | "eslint:recommended", 53 | "prettier" 54 | ] 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | opencc-js: 9 | specifier: ^1.0.5 10 | version: 1.0.5 11 | 12 | devDependencies: 13 | '@types/chrome': 14 | specifier: ^0.0.287 15 | version: 0.0.287 16 | '@types/opencc-js': 17 | specifier: ^1.0.3 18 | version: 1.0.3 19 | concurrently: 20 | specifier: ^9.1.0 21 | version: 9.1.0 22 | esbuild: 23 | specifier: ^0.24.0 24 | version: 0.24.0 25 | eslint: 26 | specifier: ^8.57.1 27 | version: 8.57.1 28 | eslint-config-prettier: 29 | specifier: ^9.1.0 30 | version: 9.1.0(eslint@8.57.1) 31 | prettier: 32 | specifier: ^3.4.1 33 | version: 3.4.1 34 | wait-on: 35 | specifier: ^8.0.1 36 | version: 8.0.1 37 | web-ext: 38 | specifier: ^8.3.0 39 | version: 8.3.0 40 | 41 | packages: 42 | 43 | /@babel/code-frame@7.26.2: 44 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 45 | engines: {node: '>=6.9.0'} 46 | dependencies: 47 | '@babel/helper-validator-identifier': 7.25.9 48 | js-tokens: 4.0.0 49 | picocolors: 1.1.1 50 | dev: true 51 | 52 | /@babel/helper-validator-identifier@7.25.9: 53 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 54 | engines: {node: '>=6.9.0'} 55 | dev: true 56 | 57 | /@babel/runtime@7.25.6: 58 | resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} 59 | engines: {node: '>=6.9.0'} 60 | dependencies: 61 | regenerator-runtime: 0.14.1 62 | dev: true 63 | 64 | /@devicefarmer/adbkit-logcat@2.1.3: 65 | resolution: {integrity: sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==} 66 | engines: {node: '>= 4'} 67 | dev: true 68 | 69 | /@devicefarmer/adbkit-monkey@1.2.1: 70 | resolution: {integrity: sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==} 71 | engines: {node: '>= 0.10.4'} 72 | dev: true 73 | 74 | /@devicefarmer/adbkit@3.2.6: 75 | resolution: {integrity: sha512-8lO1hSeTgtxcOHhp4tTWq/JaOysp5KNbbyFoxNEBnwkCDZu/Bji3ZfOaG++Riv9jN6c9bgdLBOZqJTC5VJPRKQ==} 76 | engines: {node: '>= 0.10.4'} 77 | hasBin: true 78 | dependencies: 79 | '@devicefarmer/adbkit-logcat': 2.1.3 80 | '@devicefarmer/adbkit-monkey': 1.2.1 81 | bluebird: 3.7.2 82 | commander: 9.5.0 83 | debug: 4.3.7 84 | node-forge: 1.3.1 85 | split: 1.0.1 86 | transitivePeerDependencies: 87 | - supports-color 88 | dev: true 89 | 90 | /@esbuild/aix-ppc64@0.24.0: 91 | resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} 92 | engines: {node: '>=18'} 93 | cpu: [ppc64] 94 | os: [aix] 95 | requiresBuild: true 96 | dev: true 97 | optional: true 98 | 99 | /@esbuild/android-arm64@0.24.0: 100 | resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} 101 | engines: {node: '>=18'} 102 | cpu: [arm64] 103 | os: [android] 104 | requiresBuild: true 105 | dev: true 106 | optional: true 107 | 108 | /@esbuild/android-arm@0.24.0: 109 | resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} 110 | engines: {node: '>=18'} 111 | cpu: [arm] 112 | os: [android] 113 | requiresBuild: true 114 | dev: true 115 | optional: true 116 | 117 | /@esbuild/android-x64@0.24.0: 118 | resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} 119 | engines: {node: '>=18'} 120 | cpu: [x64] 121 | os: [android] 122 | requiresBuild: true 123 | dev: true 124 | optional: true 125 | 126 | /@esbuild/darwin-arm64@0.24.0: 127 | resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} 128 | engines: {node: '>=18'} 129 | cpu: [arm64] 130 | os: [darwin] 131 | requiresBuild: true 132 | dev: true 133 | optional: true 134 | 135 | /@esbuild/darwin-x64@0.24.0: 136 | resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} 137 | engines: {node: '>=18'} 138 | cpu: [x64] 139 | os: [darwin] 140 | requiresBuild: true 141 | dev: true 142 | optional: true 143 | 144 | /@esbuild/freebsd-arm64@0.24.0: 145 | resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} 146 | engines: {node: '>=18'} 147 | cpu: [arm64] 148 | os: [freebsd] 149 | requiresBuild: true 150 | dev: true 151 | optional: true 152 | 153 | /@esbuild/freebsd-x64@0.24.0: 154 | resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} 155 | engines: {node: '>=18'} 156 | cpu: [x64] 157 | os: [freebsd] 158 | requiresBuild: true 159 | dev: true 160 | optional: true 161 | 162 | /@esbuild/linux-arm64@0.24.0: 163 | resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} 164 | engines: {node: '>=18'} 165 | cpu: [arm64] 166 | os: [linux] 167 | requiresBuild: true 168 | dev: true 169 | optional: true 170 | 171 | /@esbuild/linux-arm@0.24.0: 172 | resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} 173 | engines: {node: '>=18'} 174 | cpu: [arm] 175 | os: [linux] 176 | requiresBuild: true 177 | dev: true 178 | optional: true 179 | 180 | /@esbuild/linux-ia32@0.24.0: 181 | resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} 182 | engines: {node: '>=18'} 183 | cpu: [ia32] 184 | os: [linux] 185 | requiresBuild: true 186 | dev: true 187 | optional: true 188 | 189 | /@esbuild/linux-loong64@0.24.0: 190 | resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} 191 | engines: {node: '>=18'} 192 | cpu: [loong64] 193 | os: [linux] 194 | requiresBuild: true 195 | dev: true 196 | optional: true 197 | 198 | /@esbuild/linux-mips64el@0.24.0: 199 | resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} 200 | engines: {node: '>=18'} 201 | cpu: [mips64el] 202 | os: [linux] 203 | requiresBuild: true 204 | dev: true 205 | optional: true 206 | 207 | /@esbuild/linux-ppc64@0.24.0: 208 | resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} 209 | engines: {node: '>=18'} 210 | cpu: [ppc64] 211 | os: [linux] 212 | requiresBuild: true 213 | dev: true 214 | optional: true 215 | 216 | /@esbuild/linux-riscv64@0.24.0: 217 | resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} 218 | engines: {node: '>=18'} 219 | cpu: [riscv64] 220 | os: [linux] 221 | requiresBuild: true 222 | dev: true 223 | optional: true 224 | 225 | /@esbuild/linux-s390x@0.24.0: 226 | resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} 227 | engines: {node: '>=18'} 228 | cpu: [s390x] 229 | os: [linux] 230 | requiresBuild: true 231 | dev: true 232 | optional: true 233 | 234 | /@esbuild/linux-x64@0.24.0: 235 | resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} 236 | engines: {node: '>=18'} 237 | cpu: [x64] 238 | os: [linux] 239 | requiresBuild: true 240 | dev: true 241 | optional: true 242 | 243 | /@esbuild/netbsd-x64@0.24.0: 244 | resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} 245 | engines: {node: '>=18'} 246 | cpu: [x64] 247 | os: [netbsd] 248 | requiresBuild: true 249 | dev: true 250 | optional: true 251 | 252 | /@esbuild/openbsd-arm64@0.24.0: 253 | resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} 254 | engines: {node: '>=18'} 255 | cpu: [arm64] 256 | os: [openbsd] 257 | requiresBuild: true 258 | dev: true 259 | optional: true 260 | 261 | /@esbuild/openbsd-x64@0.24.0: 262 | resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} 263 | engines: {node: '>=18'} 264 | cpu: [x64] 265 | os: [openbsd] 266 | requiresBuild: true 267 | dev: true 268 | optional: true 269 | 270 | /@esbuild/sunos-x64@0.24.0: 271 | resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} 272 | engines: {node: '>=18'} 273 | cpu: [x64] 274 | os: [sunos] 275 | requiresBuild: true 276 | dev: true 277 | optional: true 278 | 279 | /@esbuild/win32-arm64@0.24.0: 280 | resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} 281 | engines: {node: '>=18'} 282 | cpu: [arm64] 283 | os: [win32] 284 | requiresBuild: true 285 | dev: true 286 | optional: true 287 | 288 | /@esbuild/win32-ia32@0.24.0: 289 | resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} 290 | engines: {node: '>=18'} 291 | cpu: [ia32] 292 | os: [win32] 293 | requiresBuild: true 294 | dev: true 295 | optional: true 296 | 297 | /@esbuild/win32-x64@0.24.0: 298 | resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} 299 | engines: {node: '>=18'} 300 | cpu: [x64] 301 | os: [win32] 302 | requiresBuild: true 303 | dev: true 304 | optional: true 305 | 306 | /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): 307 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 308 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 309 | peerDependencies: 310 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 311 | dependencies: 312 | eslint: 8.57.1 313 | eslint-visitor-keys: 3.4.3 314 | dev: true 315 | 316 | /@eslint-community/regexpp@4.12.1: 317 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 318 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 319 | dev: true 320 | 321 | /@eslint/eslintrc@2.1.4: 322 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 323 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 324 | dependencies: 325 | ajv: 6.12.6 326 | debug: 4.3.7 327 | espree: 9.6.1 328 | globals: 13.24.0 329 | ignore: 5.3.2 330 | import-fresh: 3.3.0 331 | js-yaml: 4.1.0 332 | minimatch: 3.1.2 333 | strip-json-comments: 3.1.1 334 | transitivePeerDependencies: 335 | - supports-color 336 | dev: true 337 | 338 | /@eslint/js@8.57.1: 339 | resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} 340 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 341 | dev: true 342 | 343 | /@fluent/syntax@0.19.0: 344 | resolution: {integrity: sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==} 345 | engines: {node: '>=14.0.0', npm: '>=7.0.0'} 346 | dev: true 347 | 348 | /@hapi/hoek@9.3.0: 349 | resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} 350 | dev: true 351 | 352 | /@hapi/topo@5.1.0: 353 | resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} 354 | dependencies: 355 | '@hapi/hoek': 9.3.0 356 | dev: true 357 | 358 | /@humanwhocodes/config-array@0.13.0: 359 | resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} 360 | engines: {node: '>=10.10.0'} 361 | deprecated: Use @eslint/config-array instead 362 | dependencies: 363 | '@humanwhocodes/object-schema': 2.0.3 364 | debug: 4.3.7 365 | minimatch: 3.1.2 366 | transitivePeerDependencies: 367 | - supports-color 368 | dev: true 369 | 370 | /@humanwhocodes/module-importer@1.0.1: 371 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 372 | engines: {node: '>=12.22'} 373 | dev: true 374 | 375 | /@humanwhocodes/object-schema@2.0.3: 376 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 377 | deprecated: Use @eslint/object-schema instead 378 | dev: true 379 | 380 | /@mdn/browser-compat-data@5.6.0: 381 | resolution: {integrity: sha512-xArvLyzuk0r2m6hFVjTMYoLvhWwys3h7W8pO15tjSAea+U39cErWDNfoUs4g2C08HVg6bDHyDMBc0LC6FKRpVw==} 382 | dev: true 383 | 384 | /@nodelib/fs.scandir@2.1.5: 385 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 386 | engines: {node: '>= 8'} 387 | dependencies: 388 | '@nodelib/fs.stat': 2.0.5 389 | run-parallel: 1.2.0 390 | dev: true 391 | 392 | /@nodelib/fs.stat@2.0.5: 393 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 394 | engines: {node: '>= 8'} 395 | dev: true 396 | 397 | /@nodelib/fs.walk@1.2.8: 398 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 399 | engines: {node: '>= 8'} 400 | dependencies: 401 | '@nodelib/fs.scandir': 2.1.5 402 | fastq: 1.17.1 403 | dev: true 404 | 405 | /@pnpm/config.env-replace@1.1.0: 406 | resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} 407 | engines: {node: '>=12.22.0'} 408 | dev: true 409 | 410 | /@pnpm/network.ca-file@1.0.2: 411 | resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} 412 | engines: {node: '>=12.22.0'} 413 | dependencies: 414 | graceful-fs: 4.2.10 415 | dev: true 416 | 417 | /@pnpm/npm-conf@2.3.1: 418 | resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} 419 | engines: {node: '>=12'} 420 | dependencies: 421 | '@pnpm/config.env-replace': 1.1.0 422 | '@pnpm/network.ca-file': 1.0.2 423 | config-chain: 1.1.13 424 | dev: true 425 | 426 | /@sideway/address@4.1.5: 427 | resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} 428 | dependencies: 429 | '@hapi/hoek': 9.3.0 430 | dev: true 431 | 432 | /@sideway/formula@3.0.1: 433 | resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} 434 | dev: true 435 | 436 | /@sideway/pinpoint@2.0.0: 437 | resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} 438 | dev: true 439 | 440 | /@types/chrome@0.0.287: 441 | resolution: {integrity: sha512-wWhBNPNXZHwycHKNYnexUcpSbrihVZu++0rdp6GEk5ZgAglenLx+RwdEouh6FrHS0XQiOxSd62yaujM1OoQlZQ==} 442 | dependencies: 443 | '@types/filesystem': 0.0.36 444 | '@types/har-format': 1.2.16 445 | dev: true 446 | 447 | /@types/filesystem@0.0.36: 448 | resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} 449 | dependencies: 450 | '@types/filewriter': 0.0.33 451 | dev: true 452 | 453 | /@types/filewriter@0.0.33: 454 | resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} 455 | dev: true 456 | 457 | /@types/har-format@1.2.16: 458 | resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} 459 | dev: true 460 | 461 | /@types/minimatch@3.0.5: 462 | resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} 463 | dev: true 464 | 465 | /@types/node@22.10.1: 466 | resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} 467 | dependencies: 468 | undici-types: 6.20.0 469 | dev: true 470 | 471 | /@types/opencc-js@1.0.3: 472 | resolution: {integrity: sha512-TENp7YkI2hNlc4dplhivSHj0hU4DORCK56VY7rniaSfA5f87uD3uv+kPIRuH9h64TGv976iVFi4gEHZZtS2y8Q==} 473 | dev: true 474 | 475 | /@types/yauzl@2.10.3: 476 | resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} 477 | dependencies: 478 | '@types/node': 22.10.1 479 | dev: true 480 | 481 | /@ungap/structured-clone@1.2.0: 482 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 483 | dev: true 484 | 485 | /abort-controller@3.0.0: 486 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 487 | engines: {node: '>=6.5'} 488 | dependencies: 489 | event-target-shim: 5.0.1 490 | dev: true 491 | 492 | /acorn-jsx@5.3.2(acorn@8.14.0): 493 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 494 | peerDependencies: 495 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 496 | dependencies: 497 | acorn: 8.14.0 498 | dev: true 499 | 500 | /acorn@8.14.0: 501 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 502 | engines: {node: '>=0.4.0'} 503 | hasBin: true 504 | dev: true 505 | 506 | /addons-linter@7.1.0: 507 | resolution: {integrity: sha512-UmkUB3dZSpf8bqhlulGDbpoxBwcfOk8JvaJTRvJ+AAXKHvTjqeNlFC+GRMqa0EjJJh/0yqpBaJzyaUIx+fjl+A==} 508 | engines: {node: '>=18.0.0'} 509 | hasBin: true 510 | dependencies: 511 | '@fluent/syntax': 0.19.0 512 | '@mdn/browser-compat-data': 5.6.0 513 | addons-moz-compare: 1.3.0 514 | addons-scanner-utils: 9.11.0 515 | ajv: 8.17.1 516 | chalk: 4.1.2 517 | cheerio: 1.0.0-rc.12 518 | columnify: 1.6.0 519 | common-tags: 1.8.2 520 | deepmerge: 4.3.1 521 | eslint: 8.57.1 522 | eslint-plugin-no-unsanitized: 4.0.2(eslint@8.57.1) 523 | eslint-visitor-keys: 4.0.0 524 | espree: 10.1.0 525 | esprima: 4.0.1 526 | fast-json-patch: 3.1.1 527 | image-size: 1.1.1 528 | jed: 1.1.1 529 | json-merge-patch: 1.0.2 530 | os-locale: 5.0.0 531 | pino: 8.20.0 532 | relaxed-json: 1.0.3 533 | semver: 7.6.3 534 | source-map-support: 0.5.21 535 | upath: 2.0.1 536 | yargs: 17.7.2 537 | yauzl: 2.10.0 538 | transitivePeerDependencies: 539 | - body-parser 540 | - express 541 | - node-fetch 542 | - safe-compare 543 | - supports-color 544 | dev: true 545 | 546 | /addons-moz-compare@1.3.0: 547 | resolution: {integrity: sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==} 548 | dev: true 549 | 550 | /addons-scanner-utils@9.11.0: 551 | resolution: {integrity: sha512-X95V8ymnue9EHmOLz3zJTGHvHDFlWKiavlH+kJKOlv2sJDWFvD3TWeJMHJgxS9GKOqT/545mOXvX3vuuGGum+g==} 552 | peerDependencies: 553 | body-parser: 1.20.2 554 | express: 4.19.2 555 | node-fetch: 2.6.11 556 | safe-compare: 1.1.4 557 | peerDependenciesMeta: 558 | body-parser: 559 | optional: true 560 | express: 561 | optional: true 562 | node-fetch: 563 | optional: true 564 | safe-compare: 565 | optional: true 566 | dependencies: 567 | '@types/yauzl': 2.10.3 568 | common-tags: 1.8.2 569 | first-chunk-stream: 3.0.0 570 | strip-bom-stream: 4.0.0 571 | upath: 2.0.1 572 | yauzl: 2.10.0 573 | dev: true 574 | 575 | /adm-zip@0.5.16: 576 | resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} 577 | engines: {node: '>=12.0'} 578 | dev: true 579 | 580 | /agent-base@7.1.1: 581 | resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} 582 | engines: {node: '>= 14'} 583 | dependencies: 584 | debug: 4.3.7 585 | transitivePeerDependencies: 586 | - supports-color 587 | dev: true 588 | 589 | /ajv@6.12.6: 590 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 591 | dependencies: 592 | fast-deep-equal: 3.1.3 593 | fast-json-stable-stringify: 2.1.0 594 | json-schema-traverse: 0.4.1 595 | uri-js: 4.4.1 596 | dev: true 597 | 598 | /ajv@8.17.1: 599 | resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} 600 | dependencies: 601 | fast-deep-equal: 3.1.3 602 | fast-uri: 3.0.3 603 | json-schema-traverse: 1.0.0 604 | require-from-string: 2.0.2 605 | dev: true 606 | 607 | /ansi-align@3.0.1: 608 | resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} 609 | dependencies: 610 | string-width: 4.2.3 611 | dev: true 612 | 613 | /ansi-regex@5.0.1: 614 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 615 | engines: {node: '>=8'} 616 | dev: true 617 | 618 | /ansi-regex@6.1.0: 619 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 620 | engines: {node: '>=12'} 621 | dev: true 622 | 623 | /ansi-styles@3.2.1: 624 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 625 | engines: {node: '>=4'} 626 | dependencies: 627 | color-convert: 1.9.3 628 | dev: true 629 | 630 | /ansi-styles@4.3.0: 631 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 632 | engines: {node: '>=8'} 633 | dependencies: 634 | color-convert: 2.0.1 635 | dev: true 636 | 637 | /ansi-styles@6.2.1: 638 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 639 | engines: {node: '>=12'} 640 | dev: true 641 | 642 | /argparse@2.0.1: 643 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 644 | dev: true 645 | 646 | /array-differ@4.0.0: 647 | resolution: {integrity: sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==} 648 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 649 | dev: true 650 | 651 | /array-union@3.0.1: 652 | resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} 653 | engines: {node: '>=12'} 654 | dev: true 655 | 656 | /async@3.2.6: 657 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} 658 | dev: true 659 | 660 | /asynckit@0.4.0: 661 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 662 | dev: true 663 | 664 | /atomic-sleep@1.0.0: 665 | resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 666 | engines: {node: '>=8.0.0'} 667 | dev: true 668 | 669 | /atomically@2.0.3: 670 | resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} 671 | dependencies: 672 | stubborn-fs: 1.2.5 673 | when-exit: 2.1.3 674 | dev: true 675 | 676 | /axios@1.7.8: 677 | resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} 678 | dependencies: 679 | follow-redirects: 1.15.9 680 | form-data: 4.0.1 681 | proxy-from-env: 1.1.0 682 | transitivePeerDependencies: 683 | - debug 684 | dev: true 685 | 686 | /balanced-match@1.0.2: 687 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 688 | dev: true 689 | 690 | /base64-js@1.5.1: 691 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 692 | dev: true 693 | 694 | /big-integer@1.6.52: 695 | resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} 696 | engines: {node: '>=0.6'} 697 | dev: true 698 | 699 | /bluebird@3.7.2: 700 | resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} 701 | dev: true 702 | 703 | /boolbase@1.0.0: 704 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 705 | dev: true 706 | 707 | /boxen@8.0.1: 708 | resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} 709 | engines: {node: '>=18'} 710 | dependencies: 711 | ansi-align: 3.0.1 712 | camelcase: 8.0.0 713 | chalk: 5.3.0 714 | cli-boxes: 3.0.0 715 | string-width: 7.2.0 716 | type-fest: 4.30.0 717 | widest-line: 5.0.0 718 | wrap-ansi: 9.0.0 719 | dev: true 720 | 721 | /bplist-parser@0.2.0: 722 | resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} 723 | engines: {node: '>= 5.10.0'} 724 | dependencies: 725 | big-integer: 1.6.52 726 | dev: true 727 | 728 | /brace-expansion@1.1.11: 729 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 730 | dependencies: 731 | balanced-match: 1.0.2 732 | concat-map: 0.0.1 733 | dev: true 734 | 735 | /buffer-crc32@0.2.13: 736 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 737 | dev: true 738 | 739 | /buffer-from@1.1.2: 740 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 741 | dev: true 742 | 743 | /buffer@6.0.3: 744 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 745 | dependencies: 746 | base64-js: 1.5.1 747 | ieee754: 1.2.1 748 | dev: true 749 | 750 | /bundle-name@3.0.0: 751 | resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} 752 | engines: {node: '>=12'} 753 | dependencies: 754 | run-applescript: 5.0.0 755 | dev: true 756 | 757 | /callsites@3.1.0: 758 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 759 | engines: {node: '>=6'} 760 | dev: true 761 | 762 | /camelcase@8.0.0: 763 | resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} 764 | engines: {node: '>=16'} 765 | dev: true 766 | 767 | /chalk@2.4.2: 768 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 769 | engines: {node: '>=4'} 770 | dependencies: 771 | ansi-styles: 3.2.1 772 | escape-string-regexp: 1.0.5 773 | supports-color: 5.5.0 774 | dev: true 775 | 776 | /chalk@4.1.2: 777 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 778 | engines: {node: '>=10'} 779 | dependencies: 780 | ansi-styles: 4.3.0 781 | supports-color: 7.2.0 782 | dev: true 783 | 784 | /chalk@5.3.0: 785 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 786 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 787 | dev: true 788 | 789 | /cheerio-select@2.1.0: 790 | resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 791 | dependencies: 792 | boolbase: 1.0.0 793 | css-select: 5.1.0 794 | css-what: 6.1.0 795 | domelementtype: 2.3.0 796 | domhandler: 5.0.3 797 | domutils: 3.1.0 798 | dev: true 799 | 800 | /cheerio@1.0.0-rc.12: 801 | resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} 802 | engines: {node: '>= 6'} 803 | dependencies: 804 | cheerio-select: 2.1.0 805 | dom-serializer: 2.0.0 806 | domhandler: 5.0.3 807 | domutils: 3.1.0 808 | htmlparser2: 8.0.2 809 | parse5: 7.2.1 810 | parse5-htmlparser2-tree-adapter: 7.1.0 811 | dev: true 812 | 813 | /chrome-launcher@1.1.2: 814 | resolution: {integrity: sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw==} 815 | engines: {node: '>=12.13.0'} 816 | hasBin: true 817 | dependencies: 818 | '@types/node': 22.10.1 819 | escape-string-regexp: 4.0.0 820 | is-wsl: 2.2.0 821 | lighthouse-logger: 2.0.1 822 | transitivePeerDependencies: 823 | - supports-color 824 | dev: true 825 | 826 | /cli-boxes@3.0.0: 827 | resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} 828 | engines: {node: '>=10'} 829 | dev: true 830 | 831 | /cliui@8.0.1: 832 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 833 | engines: {node: '>=12'} 834 | dependencies: 835 | string-width: 4.2.3 836 | strip-ansi: 6.0.1 837 | wrap-ansi: 7.0.0 838 | dev: true 839 | 840 | /clone@1.0.4: 841 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 842 | engines: {node: '>=0.8'} 843 | dev: true 844 | 845 | /color-convert@1.9.3: 846 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 847 | dependencies: 848 | color-name: 1.1.3 849 | dev: true 850 | 851 | /color-convert@2.0.1: 852 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 853 | engines: {node: '>=7.0.0'} 854 | dependencies: 855 | color-name: 1.1.4 856 | dev: true 857 | 858 | /color-name@1.1.3: 859 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 860 | dev: true 861 | 862 | /color-name@1.1.4: 863 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 864 | dev: true 865 | 866 | /columnify@1.6.0: 867 | resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==} 868 | engines: {node: '>=8.0.0'} 869 | dependencies: 870 | strip-ansi: 6.0.1 871 | wcwidth: 1.0.1 872 | dev: true 873 | 874 | /combined-stream@1.0.8: 875 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 876 | engines: {node: '>= 0.8'} 877 | dependencies: 878 | delayed-stream: 1.0.0 879 | dev: true 880 | 881 | /commander@2.20.3: 882 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 883 | dev: true 884 | 885 | /commander@2.9.0: 886 | resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==} 887 | engines: {node: '>= 0.6.x'} 888 | dependencies: 889 | graceful-readlink: 1.0.1 890 | dev: true 891 | 892 | /commander@9.5.0: 893 | resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} 894 | engines: {node: ^12.20.0 || >=14} 895 | dev: true 896 | 897 | /common-tags@1.8.2: 898 | resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} 899 | engines: {node: '>=4.0.0'} 900 | dev: true 901 | 902 | /concat-map@0.0.1: 903 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 904 | dev: true 905 | 906 | /concat-stream@1.6.2: 907 | resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} 908 | engines: {'0': node >= 0.8} 909 | dependencies: 910 | buffer-from: 1.1.2 911 | inherits: 2.0.4 912 | readable-stream: 2.3.8 913 | typedarray: 0.0.6 914 | dev: true 915 | 916 | /concurrently@9.1.0: 917 | resolution: {integrity: sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg==} 918 | engines: {node: '>=18'} 919 | hasBin: true 920 | dependencies: 921 | chalk: 4.1.2 922 | lodash: 4.17.21 923 | rxjs: 7.8.1 924 | shell-quote: 1.8.2 925 | supports-color: 8.1.1 926 | tree-kill: 1.2.2 927 | yargs: 17.7.2 928 | dev: true 929 | 930 | /config-chain@1.1.13: 931 | resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} 932 | dependencies: 933 | ini: 1.3.8 934 | proto-list: 1.2.4 935 | dev: true 936 | 937 | /configstore@7.0.0: 938 | resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} 939 | engines: {node: '>=18'} 940 | dependencies: 941 | atomically: 2.0.3 942 | dot-prop: 9.0.0 943 | graceful-fs: 4.2.11 944 | xdg-basedir: 5.1.0 945 | dev: true 946 | 947 | /core-util-is@1.0.3: 948 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 949 | dev: true 950 | 951 | /cross-spawn@7.0.6: 952 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 953 | engines: {node: '>= 8'} 954 | dependencies: 955 | path-key: 3.1.1 956 | shebang-command: 2.0.0 957 | which: 2.0.2 958 | dev: true 959 | 960 | /css-select@5.1.0: 961 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} 962 | dependencies: 963 | boolbase: 1.0.0 964 | css-what: 6.1.0 965 | domhandler: 5.0.3 966 | domutils: 3.1.0 967 | nth-check: 2.1.1 968 | dev: true 969 | 970 | /css-what@6.1.0: 971 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 972 | engines: {node: '>= 6'} 973 | dev: true 974 | 975 | /debounce@1.2.1: 976 | resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} 977 | dev: true 978 | 979 | /debug@2.6.9: 980 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 981 | peerDependencies: 982 | supports-color: '*' 983 | peerDependenciesMeta: 984 | supports-color: 985 | optional: true 986 | dependencies: 987 | ms: 2.0.0 988 | dev: true 989 | 990 | /debug@4.3.7: 991 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 992 | engines: {node: '>=6.0'} 993 | peerDependencies: 994 | supports-color: '*' 995 | peerDependenciesMeta: 996 | supports-color: 997 | optional: true 998 | dependencies: 999 | ms: 2.1.3 1000 | dev: true 1001 | 1002 | /decamelize@6.0.0: 1003 | resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} 1004 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1005 | dev: true 1006 | 1007 | /deep-extend@0.6.0: 1008 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 1009 | engines: {node: '>=4.0.0'} 1010 | dev: true 1011 | 1012 | /deep-is@0.1.4: 1013 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1014 | dev: true 1015 | 1016 | /deepmerge@4.3.1: 1017 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1018 | engines: {node: '>=0.10.0'} 1019 | dev: true 1020 | 1021 | /default-browser-id@3.0.0: 1022 | resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} 1023 | engines: {node: '>=12'} 1024 | dependencies: 1025 | bplist-parser: 0.2.0 1026 | untildify: 4.0.0 1027 | dev: true 1028 | 1029 | /default-browser@4.0.0: 1030 | resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} 1031 | engines: {node: '>=14.16'} 1032 | dependencies: 1033 | bundle-name: 3.0.0 1034 | default-browser-id: 3.0.0 1035 | execa: 7.2.0 1036 | titleize: 3.0.0 1037 | dev: true 1038 | 1039 | /defaults@1.0.4: 1040 | resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} 1041 | dependencies: 1042 | clone: 1.0.4 1043 | dev: true 1044 | 1045 | /define-lazy-prop@3.0.0: 1046 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 1047 | engines: {node: '>=12'} 1048 | dev: true 1049 | 1050 | /delayed-stream@1.0.0: 1051 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1052 | engines: {node: '>=0.4.0'} 1053 | dev: true 1054 | 1055 | /doctrine@3.0.0: 1056 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1057 | engines: {node: '>=6.0.0'} 1058 | dependencies: 1059 | esutils: 2.0.3 1060 | dev: true 1061 | 1062 | /dom-serializer@2.0.0: 1063 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 1064 | dependencies: 1065 | domelementtype: 2.3.0 1066 | domhandler: 5.0.3 1067 | entities: 4.5.0 1068 | dev: true 1069 | 1070 | /domelementtype@2.3.0: 1071 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 1072 | dev: true 1073 | 1074 | /domhandler@5.0.3: 1075 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 1076 | engines: {node: '>= 4'} 1077 | dependencies: 1078 | domelementtype: 2.3.0 1079 | dev: true 1080 | 1081 | /domutils@3.1.0: 1082 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} 1083 | dependencies: 1084 | dom-serializer: 2.0.0 1085 | domelementtype: 2.3.0 1086 | domhandler: 5.0.3 1087 | dev: true 1088 | 1089 | /dot-prop@9.0.0: 1090 | resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} 1091 | engines: {node: '>=18'} 1092 | dependencies: 1093 | type-fest: 4.30.0 1094 | dev: true 1095 | 1096 | /emoji-regex@10.4.0: 1097 | resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} 1098 | dev: true 1099 | 1100 | /emoji-regex@8.0.0: 1101 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1102 | dev: true 1103 | 1104 | /end-of-stream@1.4.4: 1105 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 1106 | dependencies: 1107 | once: 1.4.0 1108 | dev: true 1109 | 1110 | /entities@4.5.0: 1111 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1112 | engines: {node: '>=0.12'} 1113 | dev: true 1114 | 1115 | /error-ex@1.3.2: 1116 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1117 | dependencies: 1118 | is-arrayish: 0.2.1 1119 | dev: true 1120 | 1121 | /es6-error@4.1.1: 1122 | resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} 1123 | dev: true 1124 | 1125 | /esbuild@0.24.0: 1126 | resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} 1127 | engines: {node: '>=18'} 1128 | hasBin: true 1129 | requiresBuild: true 1130 | optionalDependencies: 1131 | '@esbuild/aix-ppc64': 0.24.0 1132 | '@esbuild/android-arm': 0.24.0 1133 | '@esbuild/android-arm64': 0.24.0 1134 | '@esbuild/android-x64': 0.24.0 1135 | '@esbuild/darwin-arm64': 0.24.0 1136 | '@esbuild/darwin-x64': 0.24.0 1137 | '@esbuild/freebsd-arm64': 0.24.0 1138 | '@esbuild/freebsd-x64': 0.24.0 1139 | '@esbuild/linux-arm': 0.24.0 1140 | '@esbuild/linux-arm64': 0.24.0 1141 | '@esbuild/linux-ia32': 0.24.0 1142 | '@esbuild/linux-loong64': 0.24.0 1143 | '@esbuild/linux-mips64el': 0.24.0 1144 | '@esbuild/linux-ppc64': 0.24.0 1145 | '@esbuild/linux-riscv64': 0.24.0 1146 | '@esbuild/linux-s390x': 0.24.0 1147 | '@esbuild/linux-x64': 0.24.0 1148 | '@esbuild/netbsd-x64': 0.24.0 1149 | '@esbuild/openbsd-arm64': 0.24.0 1150 | '@esbuild/openbsd-x64': 0.24.0 1151 | '@esbuild/sunos-x64': 0.24.0 1152 | '@esbuild/win32-arm64': 0.24.0 1153 | '@esbuild/win32-ia32': 0.24.0 1154 | '@esbuild/win32-x64': 0.24.0 1155 | dev: true 1156 | 1157 | /escalade@3.2.0: 1158 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 1159 | engines: {node: '>=6'} 1160 | dev: true 1161 | 1162 | /escape-goat@4.0.0: 1163 | resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} 1164 | engines: {node: '>=12'} 1165 | dev: true 1166 | 1167 | /escape-string-regexp@1.0.5: 1168 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1169 | engines: {node: '>=0.8.0'} 1170 | dev: true 1171 | 1172 | /escape-string-regexp@4.0.0: 1173 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1174 | engines: {node: '>=10'} 1175 | dev: true 1176 | 1177 | /eslint-config-prettier@9.1.0(eslint@8.57.1): 1178 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 1179 | hasBin: true 1180 | peerDependencies: 1181 | eslint: '>=7.0.0' 1182 | dependencies: 1183 | eslint: 8.57.1 1184 | dev: true 1185 | 1186 | /eslint-plugin-no-unsanitized@4.0.2(eslint@8.57.1): 1187 | resolution: {integrity: sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==} 1188 | peerDependencies: 1189 | eslint: ^6 || ^7 || ^8 1190 | dependencies: 1191 | eslint: 8.57.1 1192 | dev: true 1193 | 1194 | /eslint-scope@7.2.2: 1195 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1196 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1197 | dependencies: 1198 | esrecurse: 4.3.0 1199 | estraverse: 5.3.0 1200 | dev: true 1201 | 1202 | /eslint-visitor-keys@3.4.3: 1203 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1204 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1205 | dev: true 1206 | 1207 | /eslint-visitor-keys@4.0.0: 1208 | resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} 1209 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1210 | dev: true 1211 | 1212 | /eslint@8.57.1: 1213 | resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} 1214 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1215 | deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. 1216 | hasBin: true 1217 | dependencies: 1218 | '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) 1219 | '@eslint-community/regexpp': 4.12.1 1220 | '@eslint/eslintrc': 2.1.4 1221 | '@eslint/js': 8.57.1 1222 | '@humanwhocodes/config-array': 0.13.0 1223 | '@humanwhocodes/module-importer': 1.0.1 1224 | '@nodelib/fs.walk': 1.2.8 1225 | '@ungap/structured-clone': 1.2.0 1226 | ajv: 6.12.6 1227 | chalk: 4.1.2 1228 | cross-spawn: 7.0.6 1229 | debug: 4.3.7 1230 | doctrine: 3.0.0 1231 | escape-string-regexp: 4.0.0 1232 | eslint-scope: 7.2.2 1233 | eslint-visitor-keys: 3.4.3 1234 | espree: 9.6.1 1235 | esquery: 1.6.0 1236 | esutils: 2.0.3 1237 | fast-deep-equal: 3.1.3 1238 | file-entry-cache: 6.0.1 1239 | find-up: 5.0.0 1240 | glob-parent: 6.0.2 1241 | globals: 13.24.0 1242 | graphemer: 1.4.0 1243 | ignore: 5.3.2 1244 | imurmurhash: 0.1.4 1245 | is-glob: 4.0.3 1246 | is-path-inside: 3.0.3 1247 | js-yaml: 4.1.0 1248 | json-stable-stringify-without-jsonify: 1.0.1 1249 | levn: 0.4.1 1250 | lodash.merge: 4.6.2 1251 | minimatch: 3.1.2 1252 | natural-compare: 1.4.0 1253 | optionator: 0.9.4 1254 | strip-ansi: 6.0.1 1255 | text-table: 0.2.0 1256 | transitivePeerDependencies: 1257 | - supports-color 1258 | dev: true 1259 | 1260 | /espree@10.1.0: 1261 | resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} 1262 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1263 | dependencies: 1264 | acorn: 8.14.0 1265 | acorn-jsx: 5.3.2(acorn@8.14.0) 1266 | eslint-visitor-keys: 4.0.0 1267 | dev: true 1268 | 1269 | /espree@9.6.1: 1270 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1271 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1272 | dependencies: 1273 | acorn: 8.14.0 1274 | acorn-jsx: 5.3.2(acorn@8.14.0) 1275 | eslint-visitor-keys: 3.4.3 1276 | dev: true 1277 | 1278 | /esprima@4.0.1: 1279 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1280 | engines: {node: '>=4'} 1281 | hasBin: true 1282 | dev: true 1283 | 1284 | /esquery@1.6.0: 1285 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1286 | engines: {node: '>=0.10'} 1287 | dependencies: 1288 | estraverse: 5.3.0 1289 | dev: true 1290 | 1291 | /esrecurse@4.3.0: 1292 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1293 | engines: {node: '>=4.0'} 1294 | dependencies: 1295 | estraverse: 5.3.0 1296 | dev: true 1297 | 1298 | /estraverse@5.3.0: 1299 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1300 | engines: {node: '>=4.0'} 1301 | dev: true 1302 | 1303 | /esutils@2.0.3: 1304 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1305 | engines: {node: '>=0.10.0'} 1306 | dev: true 1307 | 1308 | /event-target-shim@5.0.1: 1309 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 1310 | engines: {node: '>=6'} 1311 | dev: true 1312 | 1313 | /events@3.3.0: 1314 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 1315 | engines: {node: '>=0.8.x'} 1316 | dev: true 1317 | 1318 | /execa@4.1.0: 1319 | resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} 1320 | engines: {node: '>=10'} 1321 | dependencies: 1322 | cross-spawn: 7.0.6 1323 | get-stream: 5.2.0 1324 | human-signals: 1.1.1 1325 | is-stream: 2.0.1 1326 | merge-stream: 2.0.0 1327 | npm-run-path: 4.0.1 1328 | onetime: 5.1.2 1329 | signal-exit: 3.0.7 1330 | strip-final-newline: 2.0.0 1331 | dev: true 1332 | 1333 | /execa@5.1.1: 1334 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1335 | engines: {node: '>=10'} 1336 | dependencies: 1337 | cross-spawn: 7.0.6 1338 | get-stream: 6.0.1 1339 | human-signals: 2.1.0 1340 | is-stream: 2.0.1 1341 | merge-stream: 2.0.0 1342 | npm-run-path: 4.0.1 1343 | onetime: 5.1.2 1344 | signal-exit: 3.0.7 1345 | strip-final-newline: 2.0.0 1346 | dev: true 1347 | 1348 | /execa@7.2.0: 1349 | resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} 1350 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} 1351 | dependencies: 1352 | cross-spawn: 7.0.6 1353 | get-stream: 6.0.1 1354 | human-signals: 4.3.1 1355 | is-stream: 3.0.0 1356 | merge-stream: 2.0.0 1357 | npm-run-path: 5.3.0 1358 | onetime: 6.0.0 1359 | signal-exit: 3.0.7 1360 | strip-final-newline: 3.0.0 1361 | dev: true 1362 | 1363 | /fast-deep-equal@3.1.3: 1364 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1365 | dev: true 1366 | 1367 | /fast-json-patch@3.1.1: 1368 | resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} 1369 | dev: true 1370 | 1371 | /fast-json-stable-stringify@2.1.0: 1372 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1373 | dev: true 1374 | 1375 | /fast-levenshtein@2.0.6: 1376 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1377 | dev: true 1378 | 1379 | /fast-redact@3.5.0: 1380 | resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} 1381 | engines: {node: '>=6'} 1382 | dev: true 1383 | 1384 | /fast-uri@3.0.3: 1385 | resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} 1386 | dev: true 1387 | 1388 | /fastq@1.17.1: 1389 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1390 | dependencies: 1391 | reusify: 1.0.4 1392 | dev: true 1393 | 1394 | /fd-slicer@1.1.0: 1395 | resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} 1396 | dependencies: 1397 | pend: 1.2.0 1398 | dev: true 1399 | 1400 | /file-entry-cache@6.0.1: 1401 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1402 | engines: {node: ^10.12.0 || >=12.0.0} 1403 | dependencies: 1404 | flat-cache: 3.2.0 1405 | dev: true 1406 | 1407 | /find-up@5.0.0: 1408 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1409 | engines: {node: '>=10'} 1410 | dependencies: 1411 | locate-path: 6.0.0 1412 | path-exists: 4.0.0 1413 | dev: true 1414 | 1415 | /firefox-profile@4.7.0: 1416 | resolution: {integrity: sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ==} 1417 | engines: {node: '>=18'} 1418 | hasBin: true 1419 | dependencies: 1420 | adm-zip: 0.5.16 1421 | fs-extra: 11.2.0 1422 | ini: 4.1.3 1423 | minimist: 1.2.8 1424 | xml2js: 0.6.2 1425 | dev: true 1426 | 1427 | /first-chunk-stream@3.0.0: 1428 | resolution: {integrity: sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==} 1429 | engines: {node: '>=8'} 1430 | dev: true 1431 | 1432 | /flat-cache@3.2.0: 1433 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1434 | engines: {node: ^10.12.0 || >=12.0.0} 1435 | dependencies: 1436 | flatted: 3.3.2 1437 | keyv: 4.5.4 1438 | rimraf: 3.0.2 1439 | dev: true 1440 | 1441 | /flatted@3.3.2: 1442 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 1443 | dev: true 1444 | 1445 | /follow-redirects@1.15.9: 1446 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 1447 | engines: {node: '>=4.0'} 1448 | peerDependencies: 1449 | debug: '*' 1450 | peerDependenciesMeta: 1451 | debug: 1452 | optional: true 1453 | dev: true 1454 | 1455 | /form-data@4.0.1: 1456 | resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} 1457 | engines: {node: '>= 6'} 1458 | dependencies: 1459 | asynckit: 0.4.0 1460 | combined-stream: 1.0.8 1461 | mime-types: 2.1.35 1462 | dev: true 1463 | 1464 | /fs-extra@11.2.0: 1465 | resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} 1466 | engines: {node: '>=14.14'} 1467 | dependencies: 1468 | graceful-fs: 4.2.11 1469 | jsonfile: 6.1.0 1470 | universalify: 2.0.1 1471 | dev: true 1472 | 1473 | /fs.realpath@1.0.0: 1474 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1475 | dev: true 1476 | 1477 | /fx-runner@1.4.0: 1478 | resolution: {integrity: sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==} 1479 | hasBin: true 1480 | dependencies: 1481 | commander: 2.9.0 1482 | shell-quote: 1.7.3 1483 | spawn-sync: 1.0.15 1484 | when: 3.7.7 1485 | which: 1.2.4 1486 | winreg: 0.0.12 1487 | dev: true 1488 | 1489 | /get-caller-file@2.0.5: 1490 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1491 | engines: {node: 6.* || 8.* || >= 10.*} 1492 | dev: true 1493 | 1494 | /get-east-asian-width@1.3.0: 1495 | resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} 1496 | engines: {node: '>=18'} 1497 | dev: true 1498 | 1499 | /get-stream@5.2.0: 1500 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} 1501 | engines: {node: '>=8'} 1502 | dependencies: 1503 | pump: 3.0.2 1504 | dev: true 1505 | 1506 | /get-stream@6.0.1: 1507 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1508 | engines: {node: '>=10'} 1509 | dev: true 1510 | 1511 | /glob-parent@6.0.2: 1512 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1513 | engines: {node: '>=10.13.0'} 1514 | dependencies: 1515 | is-glob: 4.0.3 1516 | dev: true 1517 | 1518 | /glob-to-regexp@0.4.1: 1519 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1520 | dev: true 1521 | 1522 | /glob@7.2.3: 1523 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1524 | deprecated: Glob versions prior to v9 are no longer supported 1525 | dependencies: 1526 | fs.realpath: 1.0.0 1527 | inflight: 1.0.6 1528 | inherits: 2.0.4 1529 | minimatch: 3.1.2 1530 | once: 1.4.0 1531 | path-is-absolute: 1.0.1 1532 | dev: true 1533 | 1534 | /global-directory@4.0.1: 1535 | resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} 1536 | engines: {node: '>=18'} 1537 | dependencies: 1538 | ini: 4.1.1 1539 | dev: true 1540 | 1541 | /globals@13.24.0: 1542 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1543 | engines: {node: '>=8'} 1544 | dependencies: 1545 | type-fest: 0.20.2 1546 | dev: true 1547 | 1548 | /graceful-fs@4.2.10: 1549 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1550 | dev: true 1551 | 1552 | /graceful-fs@4.2.11: 1553 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1554 | dev: true 1555 | 1556 | /graceful-readlink@1.0.1: 1557 | resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} 1558 | dev: true 1559 | 1560 | /graphemer@1.4.0: 1561 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1562 | dev: true 1563 | 1564 | /growly@1.3.0: 1565 | resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} 1566 | dev: true 1567 | 1568 | /has-flag@3.0.0: 1569 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1570 | engines: {node: '>=4'} 1571 | dev: true 1572 | 1573 | /has-flag@4.0.0: 1574 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1575 | engines: {node: '>=8'} 1576 | dev: true 1577 | 1578 | /htmlparser2@8.0.2: 1579 | resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} 1580 | dependencies: 1581 | domelementtype: 2.3.0 1582 | domhandler: 5.0.3 1583 | domutils: 3.1.0 1584 | entities: 4.5.0 1585 | dev: true 1586 | 1587 | /https-proxy-agent@7.0.5: 1588 | resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} 1589 | engines: {node: '>= 14'} 1590 | dependencies: 1591 | agent-base: 7.1.1 1592 | debug: 4.3.7 1593 | transitivePeerDependencies: 1594 | - supports-color 1595 | dev: true 1596 | 1597 | /human-signals@1.1.1: 1598 | resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} 1599 | engines: {node: '>=8.12.0'} 1600 | dev: true 1601 | 1602 | /human-signals@2.1.0: 1603 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1604 | engines: {node: '>=10.17.0'} 1605 | dev: true 1606 | 1607 | /human-signals@4.3.1: 1608 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} 1609 | engines: {node: '>=14.18.0'} 1610 | dev: true 1611 | 1612 | /ieee754@1.2.1: 1613 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1614 | dev: true 1615 | 1616 | /ignore@5.3.2: 1617 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1618 | engines: {node: '>= 4'} 1619 | dev: true 1620 | 1621 | /image-size@1.1.1: 1622 | resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} 1623 | engines: {node: '>=16.x'} 1624 | hasBin: true 1625 | dependencies: 1626 | queue: 6.0.2 1627 | dev: true 1628 | 1629 | /immediate@3.0.6: 1630 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 1631 | dev: true 1632 | 1633 | /import-fresh@3.3.0: 1634 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1635 | engines: {node: '>=6'} 1636 | dependencies: 1637 | parent-module: 1.0.1 1638 | resolve-from: 4.0.0 1639 | dev: true 1640 | 1641 | /imurmurhash@0.1.4: 1642 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1643 | engines: {node: '>=0.8.19'} 1644 | dev: true 1645 | 1646 | /inflight@1.0.6: 1647 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1648 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 1649 | dependencies: 1650 | once: 1.4.0 1651 | wrappy: 1.0.2 1652 | dev: true 1653 | 1654 | /inherits@2.0.4: 1655 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1656 | dev: true 1657 | 1658 | /ini@1.3.8: 1659 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 1660 | dev: true 1661 | 1662 | /ini@4.1.1: 1663 | resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} 1664 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1665 | dev: true 1666 | 1667 | /ini@4.1.3: 1668 | resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} 1669 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1670 | dev: true 1671 | 1672 | /invert-kv@3.0.1: 1673 | resolution: {integrity: sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==} 1674 | engines: {node: '>=8'} 1675 | dev: true 1676 | 1677 | /is-absolute@0.1.7: 1678 | resolution: {integrity: sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==} 1679 | engines: {node: '>=0.10.0'} 1680 | dependencies: 1681 | is-relative: 0.1.3 1682 | dev: true 1683 | 1684 | /is-arrayish@0.2.1: 1685 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1686 | dev: true 1687 | 1688 | /is-docker@2.2.1: 1689 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 1690 | engines: {node: '>=8'} 1691 | hasBin: true 1692 | dev: true 1693 | 1694 | /is-docker@3.0.0: 1695 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 1696 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1697 | hasBin: true 1698 | dev: true 1699 | 1700 | /is-extglob@2.1.1: 1701 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1702 | engines: {node: '>=0.10.0'} 1703 | dev: true 1704 | 1705 | /is-fullwidth-code-point@3.0.0: 1706 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1707 | engines: {node: '>=8'} 1708 | dev: true 1709 | 1710 | /is-glob@4.0.3: 1711 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1712 | engines: {node: '>=0.10.0'} 1713 | dependencies: 1714 | is-extglob: 2.1.1 1715 | dev: true 1716 | 1717 | /is-in-ci@1.0.0: 1718 | resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} 1719 | engines: {node: '>=18'} 1720 | hasBin: true 1721 | dev: true 1722 | 1723 | /is-inside-container@1.0.0: 1724 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 1725 | engines: {node: '>=14.16'} 1726 | hasBin: true 1727 | dependencies: 1728 | is-docker: 3.0.0 1729 | dev: true 1730 | 1731 | /is-installed-globally@1.0.0: 1732 | resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} 1733 | engines: {node: '>=18'} 1734 | dependencies: 1735 | global-directory: 4.0.1 1736 | is-path-inside: 4.0.0 1737 | dev: true 1738 | 1739 | /is-npm@6.0.0: 1740 | resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} 1741 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1742 | dev: true 1743 | 1744 | /is-path-inside@3.0.3: 1745 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1746 | engines: {node: '>=8'} 1747 | dev: true 1748 | 1749 | /is-path-inside@4.0.0: 1750 | resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} 1751 | engines: {node: '>=12'} 1752 | dev: true 1753 | 1754 | /is-relative@0.1.3: 1755 | resolution: {integrity: sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==} 1756 | engines: {node: '>=0.10.0'} 1757 | dev: true 1758 | 1759 | /is-stream@2.0.1: 1760 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1761 | engines: {node: '>=8'} 1762 | dev: true 1763 | 1764 | /is-stream@3.0.0: 1765 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1766 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1767 | dev: true 1768 | 1769 | /is-utf8@0.2.1: 1770 | resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} 1771 | dev: true 1772 | 1773 | /is-wsl@2.2.0: 1774 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 1775 | engines: {node: '>=8'} 1776 | dependencies: 1777 | is-docker: 2.2.1 1778 | dev: true 1779 | 1780 | /isarray@1.0.0: 1781 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1782 | dev: true 1783 | 1784 | /isexe@1.1.2: 1785 | resolution: {integrity: sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==} 1786 | dev: true 1787 | 1788 | /isexe@2.0.0: 1789 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1790 | dev: true 1791 | 1792 | /jed@1.1.1: 1793 | resolution: {integrity: sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==} 1794 | dev: true 1795 | 1796 | /joi@17.13.3: 1797 | resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} 1798 | dependencies: 1799 | '@hapi/hoek': 9.3.0 1800 | '@hapi/topo': 5.1.0 1801 | '@sideway/address': 4.1.5 1802 | '@sideway/formula': 3.0.1 1803 | '@sideway/pinpoint': 2.0.0 1804 | dev: true 1805 | 1806 | /jose@5.9.2: 1807 | resolution: {integrity: sha512-ILI2xx/I57b20sd7rHZvgiiQrmp2mcotwsAH+5ajbpFQbrYVQdNHYlQhoA5cFb78CgtBOxtC05TeA+mcgkuCqQ==} 1808 | dev: true 1809 | 1810 | /js-tokens@4.0.0: 1811 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1812 | dev: true 1813 | 1814 | /js-yaml@4.1.0: 1815 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1816 | hasBin: true 1817 | dependencies: 1818 | argparse: 2.0.1 1819 | dev: true 1820 | 1821 | /json-buffer@3.0.1: 1822 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1823 | dev: true 1824 | 1825 | /json-merge-patch@1.0.2: 1826 | resolution: {integrity: sha512-M6Vp2GN9L7cfuMXiWOmHj9bEFbeC250iVtcKQbqVgEsDVYnIsrNsbU+h/Y/PkbBQCtEa4Bez+Ebv0zfbC8ObLg==} 1827 | dependencies: 1828 | fast-deep-equal: 3.1.3 1829 | dev: true 1830 | 1831 | /json-parse-even-better-errors@3.0.2: 1832 | resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} 1833 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1834 | dev: true 1835 | 1836 | /json-schema-traverse@0.4.1: 1837 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1838 | dev: true 1839 | 1840 | /json-schema-traverse@1.0.0: 1841 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1842 | dev: true 1843 | 1844 | /json-stable-stringify-without-jsonify@1.0.1: 1845 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1846 | dev: true 1847 | 1848 | /jsonfile@6.1.0: 1849 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1850 | dependencies: 1851 | universalify: 2.0.1 1852 | optionalDependencies: 1853 | graceful-fs: 4.2.11 1854 | dev: true 1855 | 1856 | /jszip@3.10.1: 1857 | resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} 1858 | dependencies: 1859 | lie: 3.3.0 1860 | pako: 1.0.11 1861 | readable-stream: 2.3.8 1862 | setimmediate: 1.0.5 1863 | dev: true 1864 | 1865 | /keyv@4.5.4: 1866 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1867 | dependencies: 1868 | json-buffer: 3.0.1 1869 | dev: true 1870 | 1871 | /ky@1.7.2: 1872 | resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==} 1873 | engines: {node: '>=18'} 1874 | dev: true 1875 | 1876 | /latest-version@9.0.0: 1877 | resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} 1878 | engines: {node: '>=18'} 1879 | dependencies: 1880 | package-json: 10.0.1 1881 | dev: true 1882 | 1883 | /lcid@3.1.1: 1884 | resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==} 1885 | engines: {node: '>=8'} 1886 | dependencies: 1887 | invert-kv: 3.0.1 1888 | dev: true 1889 | 1890 | /levn@0.4.1: 1891 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1892 | engines: {node: '>= 0.8.0'} 1893 | dependencies: 1894 | prelude-ls: 1.2.1 1895 | type-check: 0.4.0 1896 | dev: true 1897 | 1898 | /lie@3.3.0: 1899 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} 1900 | dependencies: 1901 | immediate: 3.0.6 1902 | dev: true 1903 | 1904 | /lighthouse-logger@2.0.1: 1905 | resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==} 1906 | dependencies: 1907 | debug: 2.6.9 1908 | marky: 1.2.5 1909 | transitivePeerDependencies: 1910 | - supports-color 1911 | dev: true 1912 | 1913 | /lines-and-columns@2.0.4: 1914 | resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} 1915 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1916 | dev: true 1917 | 1918 | /locate-path@6.0.0: 1919 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1920 | engines: {node: '>=10'} 1921 | dependencies: 1922 | p-locate: 5.0.0 1923 | dev: true 1924 | 1925 | /lodash.merge@4.6.2: 1926 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1927 | dev: true 1928 | 1929 | /lodash@4.17.21: 1930 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1931 | dev: true 1932 | 1933 | /make-error@1.3.6: 1934 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1935 | dev: true 1936 | 1937 | /map-age-cleaner@0.1.3: 1938 | resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} 1939 | engines: {node: '>=6'} 1940 | dependencies: 1941 | p-defer: 1.0.0 1942 | dev: true 1943 | 1944 | /marky@1.2.5: 1945 | resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} 1946 | dev: true 1947 | 1948 | /mem@5.1.1: 1949 | resolution: {integrity: sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==} 1950 | engines: {node: '>=8'} 1951 | dependencies: 1952 | map-age-cleaner: 0.1.3 1953 | mimic-fn: 2.1.0 1954 | p-is-promise: 2.1.0 1955 | dev: true 1956 | 1957 | /merge-stream@2.0.0: 1958 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1959 | dev: true 1960 | 1961 | /mime-db@1.52.0: 1962 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1963 | engines: {node: '>= 0.6'} 1964 | dev: true 1965 | 1966 | /mime-types@2.1.35: 1967 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1968 | engines: {node: '>= 0.6'} 1969 | dependencies: 1970 | mime-db: 1.52.0 1971 | dev: true 1972 | 1973 | /mimic-fn@2.1.0: 1974 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1975 | engines: {node: '>=6'} 1976 | dev: true 1977 | 1978 | /mimic-fn@4.0.0: 1979 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1980 | engines: {node: '>=12'} 1981 | dev: true 1982 | 1983 | /minimatch@3.1.2: 1984 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1985 | dependencies: 1986 | brace-expansion: 1.1.11 1987 | dev: true 1988 | 1989 | /minimist@1.2.8: 1990 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1991 | dev: true 1992 | 1993 | /ms@2.0.0: 1994 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 1995 | dev: true 1996 | 1997 | /ms@2.1.3: 1998 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1999 | dev: true 2000 | 2001 | /multimatch@6.0.0: 2002 | resolution: {integrity: sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==} 2003 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2004 | dependencies: 2005 | '@types/minimatch': 3.0.5 2006 | array-differ: 4.0.0 2007 | array-union: 3.0.1 2008 | minimatch: 3.1.2 2009 | dev: true 2010 | 2011 | /natural-compare@1.4.0: 2012 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2013 | dev: true 2014 | 2015 | /node-forge@1.3.1: 2016 | resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} 2017 | engines: {node: '>= 6.13.0'} 2018 | dev: true 2019 | 2020 | /node-notifier@10.0.1: 2021 | resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} 2022 | dependencies: 2023 | growly: 1.3.0 2024 | is-wsl: 2.2.0 2025 | semver: 7.6.3 2026 | shellwords: 0.1.1 2027 | uuid: 8.3.2 2028 | which: 2.0.2 2029 | dev: true 2030 | 2031 | /npm-run-path@4.0.1: 2032 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2033 | engines: {node: '>=8'} 2034 | dependencies: 2035 | path-key: 3.1.1 2036 | dev: true 2037 | 2038 | /npm-run-path@5.3.0: 2039 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 2040 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2041 | dependencies: 2042 | path-key: 4.0.0 2043 | dev: true 2044 | 2045 | /nth-check@2.1.1: 2046 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 2047 | dependencies: 2048 | boolbase: 1.0.0 2049 | dev: true 2050 | 2051 | /on-exit-leak-free@2.1.2: 2052 | resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} 2053 | engines: {node: '>=14.0.0'} 2054 | dev: true 2055 | 2056 | /once@1.4.0: 2057 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2058 | dependencies: 2059 | wrappy: 1.0.2 2060 | dev: true 2061 | 2062 | /onetime@5.1.2: 2063 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2064 | engines: {node: '>=6'} 2065 | dependencies: 2066 | mimic-fn: 2.1.0 2067 | dev: true 2068 | 2069 | /onetime@6.0.0: 2070 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2071 | engines: {node: '>=12'} 2072 | dependencies: 2073 | mimic-fn: 4.0.0 2074 | dev: true 2075 | 2076 | /open@9.1.0: 2077 | resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} 2078 | engines: {node: '>=14.16'} 2079 | dependencies: 2080 | default-browser: 4.0.0 2081 | define-lazy-prop: 3.0.0 2082 | is-inside-container: 1.0.0 2083 | is-wsl: 2.2.0 2084 | dev: true 2085 | 2086 | /opencc-js@1.0.5: 2087 | resolution: {integrity: sha512-LD+1SoNnZdlRwtYTjnQdFrSVCAaYpuDqL5CkmOaHOkKoKh7mFxUicLTRVNLU5C+Jmi1vXQ3QL4jWdgSaa4sKjg==} 2088 | dev: false 2089 | 2090 | /optionator@0.9.4: 2091 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 2092 | engines: {node: '>= 0.8.0'} 2093 | dependencies: 2094 | deep-is: 0.1.4 2095 | fast-levenshtein: 2.0.6 2096 | levn: 0.4.1 2097 | prelude-ls: 1.2.1 2098 | type-check: 0.4.0 2099 | word-wrap: 1.2.5 2100 | dev: true 2101 | 2102 | /os-locale@5.0.0: 2103 | resolution: {integrity: sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==} 2104 | engines: {node: '>=10'} 2105 | dependencies: 2106 | execa: 4.1.0 2107 | lcid: 3.1.1 2108 | mem: 5.1.1 2109 | dev: true 2110 | 2111 | /os-shim@0.1.3: 2112 | resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} 2113 | engines: {node: '>= 0.4.0'} 2114 | dev: true 2115 | 2116 | /p-defer@1.0.0: 2117 | resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} 2118 | engines: {node: '>=4'} 2119 | dev: true 2120 | 2121 | /p-is-promise@2.1.0: 2122 | resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==} 2123 | engines: {node: '>=6'} 2124 | dev: true 2125 | 2126 | /p-limit@3.1.0: 2127 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2128 | engines: {node: '>=10'} 2129 | dependencies: 2130 | yocto-queue: 0.1.0 2131 | dev: true 2132 | 2133 | /p-locate@5.0.0: 2134 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2135 | engines: {node: '>=10'} 2136 | dependencies: 2137 | p-limit: 3.1.0 2138 | dev: true 2139 | 2140 | /package-json@10.0.1: 2141 | resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} 2142 | engines: {node: '>=18'} 2143 | dependencies: 2144 | ky: 1.7.2 2145 | registry-auth-token: 5.0.3 2146 | registry-url: 6.0.1 2147 | semver: 7.6.3 2148 | dev: true 2149 | 2150 | /pako@1.0.11: 2151 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 2152 | dev: true 2153 | 2154 | /parent-module@1.0.1: 2155 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2156 | engines: {node: '>=6'} 2157 | dependencies: 2158 | callsites: 3.1.0 2159 | dev: true 2160 | 2161 | /parse-json@7.1.1: 2162 | resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} 2163 | engines: {node: '>=16'} 2164 | dependencies: 2165 | '@babel/code-frame': 7.26.2 2166 | error-ex: 1.3.2 2167 | json-parse-even-better-errors: 3.0.2 2168 | lines-and-columns: 2.0.4 2169 | type-fest: 3.13.1 2170 | dev: true 2171 | 2172 | /parse5-htmlparser2-tree-adapter@7.1.0: 2173 | resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} 2174 | dependencies: 2175 | domhandler: 5.0.3 2176 | parse5: 7.2.1 2177 | dev: true 2178 | 2179 | /parse5@7.2.1: 2180 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 2181 | dependencies: 2182 | entities: 4.5.0 2183 | dev: true 2184 | 2185 | /path-exists@4.0.0: 2186 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2187 | engines: {node: '>=8'} 2188 | dev: true 2189 | 2190 | /path-is-absolute@1.0.1: 2191 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2192 | engines: {node: '>=0.10.0'} 2193 | dev: true 2194 | 2195 | /path-key@3.1.1: 2196 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2197 | engines: {node: '>=8'} 2198 | dev: true 2199 | 2200 | /path-key@4.0.0: 2201 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2202 | engines: {node: '>=12'} 2203 | dev: true 2204 | 2205 | /pend@1.2.0: 2206 | resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} 2207 | dev: true 2208 | 2209 | /picocolors@1.1.1: 2210 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 2211 | dev: true 2212 | 2213 | /pino-abstract-transport@1.2.0: 2214 | resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} 2215 | dependencies: 2216 | readable-stream: 4.5.2 2217 | split2: 4.2.0 2218 | dev: true 2219 | 2220 | /pino-std-serializers@6.2.2: 2221 | resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} 2222 | dev: true 2223 | 2224 | /pino-std-serializers@7.0.0: 2225 | resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} 2226 | dev: true 2227 | 2228 | /pino@8.20.0: 2229 | resolution: {integrity: sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==} 2230 | hasBin: true 2231 | dependencies: 2232 | atomic-sleep: 1.0.0 2233 | fast-redact: 3.5.0 2234 | on-exit-leak-free: 2.1.2 2235 | pino-abstract-transport: 1.2.0 2236 | pino-std-serializers: 6.2.2 2237 | process-warning: 3.0.0 2238 | quick-format-unescaped: 4.0.4 2239 | real-require: 0.2.0 2240 | safe-stable-stringify: 2.5.0 2241 | sonic-boom: 3.8.1 2242 | thread-stream: 2.7.0 2243 | dev: true 2244 | 2245 | /pino@9.4.0: 2246 | resolution: {integrity: sha512-nbkQb5+9YPhQRz/BeQmrWpEknAaqjpAqRK8NwJpmrX/JHu7JuZC5G1CeAwJDJfGes4h+YihC6in3Q2nGb+Y09w==} 2247 | hasBin: true 2248 | dependencies: 2249 | atomic-sleep: 1.0.0 2250 | fast-redact: 3.5.0 2251 | on-exit-leak-free: 2.1.2 2252 | pino-abstract-transport: 1.2.0 2253 | pino-std-serializers: 7.0.0 2254 | process-warning: 4.0.0 2255 | quick-format-unescaped: 4.0.4 2256 | real-require: 0.2.0 2257 | safe-stable-stringify: 2.5.0 2258 | sonic-boom: 4.2.0 2259 | thread-stream: 3.1.0 2260 | dev: true 2261 | 2262 | /prelude-ls@1.2.1: 2263 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2264 | engines: {node: '>= 0.8.0'} 2265 | dev: true 2266 | 2267 | /prettier@3.4.1: 2268 | resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} 2269 | engines: {node: '>=14'} 2270 | hasBin: true 2271 | dev: true 2272 | 2273 | /process-nextick-args@2.0.1: 2274 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 2275 | dev: true 2276 | 2277 | /process-warning@3.0.0: 2278 | resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} 2279 | dev: true 2280 | 2281 | /process-warning@4.0.0: 2282 | resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} 2283 | dev: true 2284 | 2285 | /process@0.11.10: 2286 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 2287 | engines: {node: '>= 0.6.0'} 2288 | dev: true 2289 | 2290 | /promise-toolbox@0.21.0: 2291 | resolution: {integrity: sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==} 2292 | engines: {node: '>=6'} 2293 | dependencies: 2294 | make-error: 1.3.6 2295 | dev: true 2296 | 2297 | /proto-list@1.2.4: 2298 | resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} 2299 | dev: true 2300 | 2301 | /proxy-from-env@1.1.0: 2302 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 2303 | dev: true 2304 | 2305 | /pump@3.0.2: 2306 | resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} 2307 | dependencies: 2308 | end-of-stream: 1.4.4 2309 | once: 1.4.0 2310 | dev: true 2311 | 2312 | /punycode@2.3.1: 2313 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2314 | engines: {node: '>=6'} 2315 | dev: true 2316 | 2317 | /pupa@3.1.0: 2318 | resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} 2319 | engines: {node: '>=12.20'} 2320 | dependencies: 2321 | escape-goat: 4.0.0 2322 | dev: true 2323 | 2324 | /queue-microtask@1.2.3: 2325 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2326 | dev: true 2327 | 2328 | /queue@6.0.2: 2329 | resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} 2330 | dependencies: 2331 | inherits: 2.0.4 2332 | dev: true 2333 | 2334 | /quick-format-unescaped@4.0.4: 2335 | resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 2336 | dev: true 2337 | 2338 | /rc@1.2.8: 2339 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 2340 | hasBin: true 2341 | dependencies: 2342 | deep-extend: 0.6.0 2343 | ini: 1.3.8 2344 | minimist: 1.2.8 2345 | strip-json-comments: 2.0.1 2346 | dev: true 2347 | 2348 | /readable-stream@2.3.8: 2349 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 2350 | dependencies: 2351 | core-util-is: 1.0.3 2352 | inherits: 2.0.4 2353 | isarray: 1.0.0 2354 | process-nextick-args: 2.0.1 2355 | safe-buffer: 5.1.2 2356 | string_decoder: 1.1.1 2357 | util-deprecate: 1.0.2 2358 | dev: true 2359 | 2360 | /readable-stream@4.5.2: 2361 | resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} 2362 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2363 | dependencies: 2364 | abort-controller: 3.0.0 2365 | buffer: 6.0.3 2366 | events: 3.3.0 2367 | process: 0.11.10 2368 | string_decoder: 1.3.0 2369 | dev: true 2370 | 2371 | /real-require@0.2.0: 2372 | resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 2373 | engines: {node: '>= 12.13.0'} 2374 | dev: true 2375 | 2376 | /regenerator-runtime@0.14.1: 2377 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 2378 | dev: true 2379 | 2380 | /registry-auth-token@5.0.3: 2381 | resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==} 2382 | engines: {node: '>=14'} 2383 | dependencies: 2384 | '@pnpm/npm-conf': 2.3.1 2385 | dev: true 2386 | 2387 | /registry-url@6.0.1: 2388 | resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} 2389 | engines: {node: '>=12'} 2390 | dependencies: 2391 | rc: 1.2.8 2392 | dev: true 2393 | 2394 | /relaxed-json@1.0.3: 2395 | resolution: {integrity: sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==} 2396 | engines: {node: '>= 0.10.0'} 2397 | hasBin: true 2398 | dependencies: 2399 | chalk: 2.4.2 2400 | commander: 2.20.3 2401 | dev: true 2402 | 2403 | /require-directory@2.1.1: 2404 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2405 | engines: {node: '>=0.10.0'} 2406 | dev: true 2407 | 2408 | /require-from-string@2.0.2: 2409 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 2410 | engines: {node: '>=0.10.0'} 2411 | dev: true 2412 | 2413 | /resolve-from@4.0.0: 2414 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2415 | engines: {node: '>=4'} 2416 | dev: true 2417 | 2418 | /reusify@1.0.4: 2419 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2420 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2421 | dev: true 2422 | 2423 | /rimraf@3.0.2: 2424 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2425 | deprecated: Rimraf versions prior to v4 are no longer supported 2426 | hasBin: true 2427 | dependencies: 2428 | glob: 7.2.3 2429 | dev: true 2430 | 2431 | /run-applescript@5.0.0: 2432 | resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} 2433 | engines: {node: '>=12'} 2434 | dependencies: 2435 | execa: 5.1.1 2436 | dev: true 2437 | 2438 | /run-parallel@1.2.0: 2439 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2440 | dependencies: 2441 | queue-microtask: 1.2.3 2442 | dev: true 2443 | 2444 | /rxjs@7.8.1: 2445 | resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} 2446 | dependencies: 2447 | tslib: 2.8.1 2448 | dev: true 2449 | 2450 | /safe-buffer@5.1.2: 2451 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 2452 | dev: true 2453 | 2454 | /safe-buffer@5.2.1: 2455 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2456 | dev: true 2457 | 2458 | /safe-stable-stringify@2.5.0: 2459 | resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} 2460 | engines: {node: '>=10'} 2461 | dev: true 2462 | 2463 | /sax@1.4.1: 2464 | resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} 2465 | dev: true 2466 | 2467 | /semver@7.6.3: 2468 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 2469 | engines: {node: '>=10'} 2470 | hasBin: true 2471 | dev: true 2472 | 2473 | /setimmediate@1.0.5: 2474 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 2475 | dev: true 2476 | 2477 | /shebang-command@2.0.0: 2478 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2479 | engines: {node: '>=8'} 2480 | dependencies: 2481 | shebang-regex: 3.0.0 2482 | dev: true 2483 | 2484 | /shebang-regex@3.0.0: 2485 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2486 | engines: {node: '>=8'} 2487 | dev: true 2488 | 2489 | /shell-quote@1.7.3: 2490 | resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} 2491 | dev: true 2492 | 2493 | /shell-quote@1.8.2: 2494 | resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} 2495 | engines: {node: '>= 0.4'} 2496 | dev: true 2497 | 2498 | /shellwords@0.1.1: 2499 | resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} 2500 | dev: true 2501 | 2502 | /signal-exit@3.0.7: 2503 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2504 | dev: true 2505 | 2506 | /sonic-boom@3.8.1: 2507 | resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} 2508 | dependencies: 2509 | atomic-sleep: 1.0.0 2510 | dev: true 2511 | 2512 | /sonic-boom@4.2.0: 2513 | resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} 2514 | dependencies: 2515 | atomic-sleep: 1.0.0 2516 | dev: true 2517 | 2518 | /source-map-support@0.5.21: 2519 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 2520 | dependencies: 2521 | buffer-from: 1.1.2 2522 | source-map: 0.6.1 2523 | dev: true 2524 | 2525 | /source-map@0.6.1: 2526 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2527 | engines: {node: '>=0.10.0'} 2528 | dev: true 2529 | 2530 | /spawn-sync@1.0.15: 2531 | resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} 2532 | requiresBuild: true 2533 | dependencies: 2534 | concat-stream: 1.6.2 2535 | os-shim: 0.1.3 2536 | dev: true 2537 | 2538 | /split2@4.2.0: 2539 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 2540 | engines: {node: '>= 10.x'} 2541 | dev: true 2542 | 2543 | /split@1.0.1: 2544 | resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} 2545 | dependencies: 2546 | through: 2.3.8 2547 | dev: true 2548 | 2549 | /string-width@4.2.3: 2550 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2551 | engines: {node: '>=8'} 2552 | dependencies: 2553 | emoji-regex: 8.0.0 2554 | is-fullwidth-code-point: 3.0.0 2555 | strip-ansi: 6.0.1 2556 | dev: true 2557 | 2558 | /string-width@7.2.0: 2559 | resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 2560 | engines: {node: '>=18'} 2561 | dependencies: 2562 | emoji-regex: 10.4.0 2563 | get-east-asian-width: 1.3.0 2564 | strip-ansi: 7.1.0 2565 | dev: true 2566 | 2567 | /string_decoder@1.1.1: 2568 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 2569 | dependencies: 2570 | safe-buffer: 5.1.2 2571 | dev: true 2572 | 2573 | /string_decoder@1.3.0: 2574 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 2575 | dependencies: 2576 | safe-buffer: 5.2.1 2577 | dev: true 2578 | 2579 | /strip-ansi@6.0.1: 2580 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2581 | engines: {node: '>=8'} 2582 | dependencies: 2583 | ansi-regex: 5.0.1 2584 | dev: true 2585 | 2586 | /strip-ansi@7.1.0: 2587 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 2588 | engines: {node: '>=12'} 2589 | dependencies: 2590 | ansi-regex: 6.1.0 2591 | dev: true 2592 | 2593 | /strip-bom-buf@2.0.0: 2594 | resolution: {integrity: sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==} 2595 | engines: {node: '>=8'} 2596 | dependencies: 2597 | is-utf8: 0.2.1 2598 | dev: true 2599 | 2600 | /strip-bom-stream@4.0.0: 2601 | resolution: {integrity: sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==} 2602 | engines: {node: '>=8'} 2603 | dependencies: 2604 | first-chunk-stream: 3.0.0 2605 | strip-bom-buf: 2.0.0 2606 | dev: true 2607 | 2608 | /strip-bom@5.0.0: 2609 | resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==} 2610 | engines: {node: '>=12'} 2611 | dev: true 2612 | 2613 | /strip-final-newline@2.0.0: 2614 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2615 | engines: {node: '>=6'} 2616 | dev: true 2617 | 2618 | /strip-final-newline@3.0.0: 2619 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2620 | engines: {node: '>=12'} 2621 | dev: true 2622 | 2623 | /strip-json-comments@2.0.1: 2624 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 2625 | engines: {node: '>=0.10.0'} 2626 | dev: true 2627 | 2628 | /strip-json-comments@3.1.1: 2629 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2630 | engines: {node: '>=8'} 2631 | dev: true 2632 | 2633 | /strip-json-comments@5.0.1: 2634 | resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} 2635 | engines: {node: '>=14.16'} 2636 | dev: true 2637 | 2638 | /stubborn-fs@1.2.5: 2639 | resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} 2640 | dev: true 2641 | 2642 | /supports-color@5.5.0: 2643 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2644 | engines: {node: '>=4'} 2645 | dependencies: 2646 | has-flag: 3.0.0 2647 | dev: true 2648 | 2649 | /supports-color@7.2.0: 2650 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2651 | engines: {node: '>=8'} 2652 | dependencies: 2653 | has-flag: 4.0.0 2654 | dev: true 2655 | 2656 | /supports-color@8.1.1: 2657 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 2658 | engines: {node: '>=10'} 2659 | dependencies: 2660 | has-flag: 4.0.0 2661 | dev: true 2662 | 2663 | /text-table@0.2.0: 2664 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2665 | dev: true 2666 | 2667 | /thread-stream@2.7.0: 2668 | resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} 2669 | dependencies: 2670 | real-require: 0.2.0 2671 | dev: true 2672 | 2673 | /thread-stream@3.1.0: 2674 | resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} 2675 | dependencies: 2676 | real-require: 0.2.0 2677 | dev: true 2678 | 2679 | /through@2.3.8: 2680 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 2681 | dev: true 2682 | 2683 | /titleize@3.0.0: 2684 | resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} 2685 | engines: {node: '>=12'} 2686 | dev: true 2687 | 2688 | /tmp@0.2.3: 2689 | resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} 2690 | engines: {node: '>=14.14'} 2691 | dev: true 2692 | 2693 | /tree-kill@1.2.2: 2694 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 2695 | hasBin: true 2696 | dev: true 2697 | 2698 | /tslib@2.8.1: 2699 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 2700 | dev: true 2701 | 2702 | /type-check@0.4.0: 2703 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2704 | engines: {node: '>= 0.8.0'} 2705 | dependencies: 2706 | prelude-ls: 1.2.1 2707 | dev: true 2708 | 2709 | /type-fest@0.20.2: 2710 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2711 | engines: {node: '>=10'} 2712 | dev: true 2713 | 2714 | /type-fest@3.13.1: 2715 | resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} 2716 | engines: {node: '>=14.16'} 2717 | dev: true 2718 | 2719 | /type-fest@4.30.0: 2720 | resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} 2721 | engines: {node: '>=16'} 2722 | dev: true 2723 | 2724 | /typedarray@0.0.6: 2725 | resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} 2726 | dev: true 2727 | 2728 | /undici-types@6.20.0: 2729 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 2730 | dev: true 2731 | 2732 | /universalify@2.0.1: 2733 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 2734 | engines: {node: '>= 10.0.0'} 2735 | dev: true 2736 | 2737 | /untildify@4.0.0: 2738 | resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} 2739 | engines: {node: '>=8'} 2740 | dev: true 2741 | 2742 | /upath@2.0.1: 2743 | resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} 2744 | engines: {node: '>=4'} 2745 | dev: true 2746 | 2747 | /update-notifier@7.3.1: 2748 | resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} 2749 | engines: {node: '>=18'} 2750 | dependencies: 2751 | boxen: 8.0.1 2752 | chalk: 5.3.0 2753 | configstore: 7.0.0 2754 | is-in-ci: 1.0.0 2755 | is-installed-globally: 1.0.0 2756 | is-npm: 6.0.0 2757 | latest-version: 9.0.0 2758 | pupa: 3.1.0 2759 | semver: 7.6.3 2760 | xdg-basedir: 5.1.0 2761 | dev: true 2762 | 2763 | /uri-js@4.4.1: 2764 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2765 | dependencies: 2766 | punycode: 2.3.1 2767 | dev: true 2768 | 2769 | /util-deprecate@1.0.2: 2770 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2771 | dev: true 2772 | 2773 | /uuid@8.3.2: 2774 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 2775 | hasBin: true 2776 | dev: true 2777 | 2778 | /wait-on@8.0.1: 2779 | resolution: {integrity: sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==} 2780 | engines: {node: '>=12.0.0'} 2781 | hasBin: true 2782 | dependencies: 2783 | axios: 1.7.8 2784 | joi: 17.13.3 2785 | lodash: 4.17.21 2786 | minimist: 1.2.8 2787 | rxjs: 7.8.1 2788 | transitivePeerDependencies: 2789 | - debug 2790 | dev: true 2791 | 2792 | /watchpack@2.4.2: 2793 | resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} 2794 | engines: {node: '>=10.13.0'} 2795 | dependencies: 2796 | glob-to-regexp: 0.4.1 2797 | graceful-fs: 4.2.11 2798 | dev: true 2799 | 2800 | /wcwidth@1.0.1: 2801 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 2802 | dependencies: 2803 | defaults: 1.0.4 2804 | dev: true 2805 | 2806 | /web-ext@8.3.0: 2807 | resolution: {integrity: sha512-mXSOiDtmm3n0KNpSuQ65fJpypAoNLAmZv3QkdlVbJ6etn0BK+hl/k+tjHefSIKdbzGUIeFbhn2oxWMe9Tdyrdg==} 2808 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2809 | hasBin: true 2810 | dependencies: 2811 | '@babel/runtime': 7.25.6 2812 | '@devicefarmer/adbkit': 3.2.6 2813 | addons-linter: 7.1.0 2814 | camelcase: 8.0.0 2815 | chrome-launcher: 1.1.2 2816 | debounce: 1.2.1 2817 | decamelize: 6.0.0 2818 | es6-error: 4.1.1 2819 | firefox-profile: 4.7.0 2820 | fx-runner: 1.4.0 2821 | https-proxy-agent: 7.0.5 2822 | jose: 5.9.2 2823 | jszip: 3.10.1 2824 | multimatch: 6.0.0 2825 | node-notifier: 10.0.1 2826 | open: 9.1.0 2827 | parse-json: 7.1.1 2828 | pino: 9.4.0 2829 | promise-toolbox: 0.21.0 2830 | source-map-support: 0.5.21 2831 | strip-bom: 5.0.0 2832 | strip-json-comments: 5.0.1 2833 | tmp: 0.2.3 2834 | update-notifier: 7.3.1 2835 | watchpack: 2.4.2 2836 | ws: 8.18.0 2837 | yargs: 17.7.2 2838 | zip-dir: 2.0.0 2839 | transitivePeerDependencies: 2840 | - body-parser 2841 | - bufferutil 2842 | - express 2843 | - node-fetch 2844 | - safe-compare 2845 | - supports-color 2846 | - utf-8-validate 2847 | dev: true 2848 | 2849 | /when-exit@2.1.3: 2850 | resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} 2851 | dev: true 2852 | 2853 | /when@3.7.7: 2854 | resolution: {integrity: sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==} 2855 | dev: true 2856 | 2857 | /which@1.2.4: 2858 | resolution: {integrity: sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==} 2859 | hasBin: true 2860 | dependencies: 2861 | is-absolute: 0.1.7 2862 | isexe: 1.1.2 2863 | dev: true 2864 | 2865 | /which@2.0.2: 2866 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2867 | engines: {node: '>= 8'} 2868 | hasBin: true 2869 | dependencies: 2870 | isexe: 2.0.0 2871 | dev: true 2872 | 2873 | /widest-line@5.0.0: 2874 | resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} 2875 | engines: {node: '>=18'} 2876 | dependencies: 2877 | string-width: 7.2.0 2878 | dev: true 2879 | 2880 | /winreg@0.0.12: 2881 | resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==} 2882 | dev: true 2883 | 2884 | /word-wrap@1.2.5: 2885 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2886 | engines: {node: '>=0.10.0'} 2887 | dev: true 2888 | 2889 | /wrap-ansi@7.0.0: 2890 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2891 | engines: {node: '>=10'} 2892 | dependencies: 2893 | ansi-styles: 4.3.0 2894 | string-width: 4.2.3 2895 | strip-ansi: 6.0.1 2896 | dev: true 2897 | 2898 | /wrap-ansi@9.0.0: 2899 | resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 2900 | engines: {node: '>=18'} 2901 | dependencies: 2902 | ansi-styles: 6.2.1 2903 | string-width: 7.2.0 2904 | strip-ansi: 7.1.0 2905 | dev: true 2906 | 2907 | /wrappy@1.0.2: 2908 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2909 | dev: true 2910 | 2911 | /ws@8.18.0: 2912 | resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} 2913 | engines: {node: '>=10.0.0'} 2914 | peerDependencies: 2915 | bufferutil: ^4.0.1 2916 | utf-8-validate: '>=5.0.2' 2917 | peerDependenciesMeta: 2918 | bufferutil: 2919 | optional: true 2920 | utf-8-validate: 2921 | optional: true 2922 | dev: true 2923 | 2924 | /xdg-basedir@5.1.0: 2925 | resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} 2926 | engines: {node: '>=12'} 2927 | dev: true 2928 | 2929 | /xml2js@0.6.2: 2930 | resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} 2931 | engines: {node: '>=4.0.0'} 2932 | dependencies: 2933 | sax: 1.4.1 2934 | xmlbuilder: 11.0.1 2935 | dev: true 2936 | 2937 | /xmlbuilder@11.0.1: 2938 | resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} 2939 | engines: {node: '>=4.0'} 2940 | dev: true 2941 | 2942 | /y18n@5.0.8: 2943 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2944 | engines: {node: '>=10'} 2945 | dev: true 2946 | 2947 | /yargs-parser@21.1.1: 2948 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2949 | engines: {node: '>=12'} 2950 | dev: true 2951 | 2952 | /yargs@17.7.2: 2953 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 2954 | engines: {node: '>=12'} 2955 | dependencies: 2956 | cliui: 8.0.1 2957 | escalade: 3.2.0 2958 | get-caller-file: 2.0.5 2959 | require-directory: 2.1.1 2960 | string-width: 4.2.3 2961 | y18n: 5.0.8 2962 | yargs-parser: 21.1.1 2963 | dev: true 2964 | 2965 | /yauzl@2.10.0: 2966 | resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} 2967 | dependencies: 2968 | buffer-crc32: 0.2.13 2969 | fd-slicer: 1.1.0 2970 | dev: true 2971 | 2972 | /yocto-queue@0.1.0: 2973 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2974 | engines: {node: '>=10'} 2975 | dev: true 2976 | 2977 | /zip-dir@2.0.0: 2978 | resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==} 2979 | dependencies: 2980 | async: 3.2.6 2981 | jszip: 3.10.1 2982 | dev: true 2983 | -------------------------------------------------------------------------------- /select.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnychn/opencc-extension/6c8a06702ed3190da0ffc9445ff23a30ceb2a3fb/select.gif -------------------------------------------------------------------------------- /src/background.js: -------------------------------------------------------------------------------- 1 | chrome.runtime.onInstalled.addListener(() => { 2 | /* Create context menu item for converting selected text only. */ 3 | chrome.contextMenus.create({ 4 | id: "convert-selection", 5 | title: "Convert Chinese Characters", 6 | contexts: ["selection"], 7 | }); 8 | chrome.contextMenus.onClicked.addListener(async (info) => { 9 | if (info.menuItemId === "convert-selection") { 10 | const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); 11 | chrome.tabs.sendMessage(tabs[0].id, { action: "select", text: info.selectionText }); 12 | } 13 | }); 14 | }); 15 | 16 | chrome.action.setBadgeBackgroundColor({ color: "white" }); 17 | 18 | /* Retrieve initial state of auto mode from local storage. */ 19 | chrome.storage.local.get({ auto: false }).then(({ auto }) => { 20 | chrome.action.setBadgeText({ text: auto ? "A" : "" }); 21 | }); 22 | -------------------------------------------------------------------------------- /src/content.js: -------------------------------------------------------------------------------- 1 | import { Converter } from "opencc-js"; 2 | 3 | const defaultSettings = { origin: "cn", target: "hk", auto: false, whitelist: [] }; 4 | 5 | const matchWhitelist = (whitelist, url) => whitelist.map((p) => new RegExp(p)).some((re) => re.test(url)); 6 | 7 | function convertTitle(origin, target) { 8 | const convert = Converter({ from: origin, to: target }); 9 | document.title = convert(document.title); 10 | } 11 | 12 | function convertAllTextNodes(origin, target) { 13 | const convert = Converter({ from: origin, to: target }); 14 | const iterateTextNodes = (node, callback) => { 15 | const walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, null, false); 16 | for (let textNode; (textNode = walker.nextNode()); ) callback(textNode); 17 | }; 18 | let count = 0; 19 | iterateTextNodes(document.body, (textNode) => { 20 | const originalText = textNode.nodeValue; 21 | const convertedText = convert(originalText); 22 | if (convertedText === originalText) return; 23 | (textNode.nodeValue = convertedText) && count++; 24 | }); 25 | return count; 26 | } 27 | 28 | function convertSelectedTextNodes(origin, target) { 29 | const convert = Converter({ from: origin, to: target }); 30 | const iterateTextNodes = (nodes, callback) => { 31 | for (const node of nodes) { 32 | if (node.nodeType === 3) callback(node); 33 | else iterateTextNodes(node.childNodes, callback); 34 | } 35 | }; 36 | const range = window.getSelection().getRangeAt(0); 37 | const contents = range.cloneContents(); 38 | iterateTextNodes([contents], (textNode) => { 39 | const originalText = textNode.nodeValue; 40 | const convertedText = convert(originalText); 41 | if (convertedText === originalText) return; 42 | return (textNode.nodeValue = convertedText); 43 | }); 44 | // FIXME: the DOM structure messes up 45 | // when the selected text spans across multiple containers 46 | range.deleteContents() || range.insertNode(contents); 47 | } 48 | 49 | /* Mount trigger to auto convert when DOM changes. */ 50 | let currentURL = ""; 51 | const lang = document.documentElement.lang; 52 | if (!lang || lang.startsWith("zh")) 53 | new MutationObserver(async () => { 54 | const settings = await chrome.storage.local.get(defaultSettings); 55 | if (!settings.auto || settings.origin === settings.target) return; 56 | if (matchWhitelist(settings.whitelist, window.location.href)) return; 57 | if (currentURL !== window.location.href) { 58 | currentURL = window.location.href; 59 | convertTitle(settings.origin, settings.target); 60 | } 61 | convertAllTextNodes(settings.origin, settings.target); 62 | }).observe(document.body, { childList: true, subtree: true }); 63 | 64 | /* Run convert once DOM ready when in auto mode. */ 65 | chrome.storage.local.get(defaultSettings).then((settings) => { 66 | if (!settings.auto) return; 67 | if (matchWhitelist(settings.whitelist, window.location.href)) return; 68 | convertTitle(settings.origin, settings.target); 69 | convertAllTextNodes(settings.origin, settings.target); 70 | }); 71 | 72 | /* Run convert on all nodes when triggered by button click in popup. */ 73 | // NOTE: listener itself cannot be async function, see https://stackoverflow.com/questions/48107746. 74 | chrome.runtime.onMessage.addListener(({ action }, _, sendResponse) => { 75 | (async () => { 76 | const settings = await chrome.storage.local.get(defaultSettings); 77 | if (settings.origin !== settings.target) { 78 | if (action === "click") { 79 | const start = Date.now(); 80 | convertTitle(settings.origin, settings.target); 81 | const count = convertAllTextNodes(settings.origin, settings.target); 82 | sendResponse({ count, time: Date.now() - start }); 83 | } else if (action === "select") convertSelectedTextNodes(settings.origin, settings.target); 84 | } 85 | })(); 86 | return true; // eliminate error: 'the message port closed before a response was received' 87 | }); 88 | -------------------------------------------------------------------------------- /src/manifest.chrome.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "name": "OpenCC", 4 | "author": "Tony Chan", 5 | "version": "0.4.0", 6 | "description": "Convert webpages between different Chinese variants.", 7 | "homepage_url": "https://github.com/tnychn/opencc-extension", 8 | "icons": { 9 | "128": "icon.png" 10 | }, 11 | "content_scripts": [ 12 | { 13 | "js": [ 14 | "content.js" 15 | ], 16 | "matches": [ 17 | "" 18 | ], 19 | "run_at": "document_idle" 20 | } 21 | ], 22 | "options_ui": { 23 | "page": "options/index.html", 24 | "open_in_tab": false 25 | }, 26 | "action": { 27 | "default_icon": { 28 | "128": "icon.png" 29 | }, 30 | "default_title": "OpenCC", 31 | "default_popup": "popup/index.html" 32 | }, 33 | "background": { 34 | "service_worker": "background.js", 35 | "type": "module" 36 | }, 37 | "permissions": [ 38 | "storage", 39 | "tabs", 40 | "contextMenus" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /src/manifest.firefox.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "name": "OpenCC", 4 | "author": "Tony Chan", 5 | "version": "0.4.0", 6 | "description": "Convert webpages between different Chinese variants.", 7 | "homepage_url": "https://github.com/tnychn/opencc-extension", 8 | "icons": { 9 | "128": "icon.png" 10 | }, 11 | "content_scripts": [ 12 | { 13 | "js": [ 14 | "content.js" 15 | ], 16 | "matches": [ 17 | "" 18 | ], 19 | "run_at": "document_idle" 20 | } 21 | ], 22 | "options_ui": { 23 | "page": "options/index.html", 24 | "open_in_tab": false 25 | }, 26 | "action": { 27 | "default_icon": { 28 | "128": "icon.png" 29 | }, 30 | "default_title": "OpenCC", 31 | "default_popup": "popup/index.html" 32 | }, 33 | "background": { 34 | "scripts": [ 35 | "background.js" 36 | ] 37 | }, 38 | "permissions": [ 39 | "storage", 40 | "tabs", 41 | "contextMenus" 42 | ], 43 | "browser_specific_settings": { 44 | "gecko": { 45 | "id": "opencc.extension@tnychn" 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/options/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | user-select: none; 3 | box-sizing: border-box; 4 | } 5 | 6 | html, 7 | body { 8 | margin: 0; 9 | width: 100%; 10 | } 11 | 12 | body { 13 | padding: 1em; 14 | font-family: Arial, Helvetica, sans-serif; 15 | } 16 | 17 | main { 18 | display: flex; 19 | flex-direction: column; 20 | gap: 0.5em; 21 | } 22 | 23 | label { 24 | font-weight: bold; 25 | font-size: large; 26 | } 27 | 28 | p { 29 | margin: 0; 30 | font-size: small; 31 | } 32 | 33 | textarea { 34 | min-height: 10em; 35 | min-width: 100%; 36 | max-width: 100%; 37 | } 38 | -------------------------------------------------------------------------------- /src/options/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 |

Specify the URL patterns of sites that you want to be excluded from converting in auto mode.

12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/options/index.js: -------------------------------------------------------------------------------- 1 | const $whitelist = document.getElementById("whitelist"); 2 | 3 | let timeout; 4 | $whitelist.addEventListener("input", () => { 5 | $whitelist.value = $whitelist.value 6 | .split("\n") 7 | .map((line) => line.trim()) 8 | .join("\n"); 9 | if (timeout) clearTimeout(timeout); 10 | timeout = setTimeout(() => { 11 | $whitelist.value = $whitelist.value.trim(); 12 | const whitelist = $whitelist.value 13 | .split("\n") 14 | .filter(Boolean) 15 | .map((pattern) => pattern.replaceAll("*", "[^ ]*")); 16 | chrome.storage.local.set({ whitelist }); 17 | }, 500); 18 | }); 19 | 20 | chrome.storage.local.get({ whitelist: [] }).then(({ whitelist }) => { 21 | $whitelist.value = whitelist.map((p) => p.replaceAll("[^ ]*", "*")).join("\n"); 22 | }); 23 | -------------------------------------------------------------------------------- /src/popup/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | user-select: none; 3 | box-sizing: border-box; 4 | } 5 | 6 | html, 7 | body { 8 | margin: 0; 9 | width: 100%; 10 | } 11 | 12 | body { 13 | padding: 0.5em; 14 | font-family: Arial, Helvetica, sans-serif; 15 | } 16 | 17 | header { 18 | display: flex; 19 | justify-content: space-between; 20 | align-items: center; 21 | } 22 | 23 | #title { 24 | color: black; 25 | text-decoration: none; 26 | font-size: large; 27 | font-weight: bold; 28 | } 29 | 30 | #title:hover { 31 | color: blue; 32 | } 33 | 34 | #subtitle { 35 | color: gray; 36 | font-size: small; 37 | font-weight: bold; 38 | margin-left: 1em; 39 | } 40 | 41 | main { 42 | margin-top: 0.5em; 43 | } 44 | 45 | select { 46 | padding: 0.25em; 47 | border: 1px solid grey; 48 | background-color: inherit; 49 | } 50 | 51 | #swap { 52 | flex-grow: 1; 53 | margin-left: 0.25em; 54 | margin-right: 0.25em; 55 | } 56 | 57 | main > div:first-child { 58 | display: flex; 59 | justify-content: space-between; 60 | align-items: center; 61 | } 62 | 63 | main > div:nth-child(2) { 64 | margin-top: 0.25em; 65 | display: flex; 66 | flex-direction: column; 67 | } 68 | 69 | main > div:nth-child(2) > span { 70 | font-size: small; 71 | font-weight: bold; 72 | } 73 | 74 | #reset { 75 | padding: 0; 76 | border: none; 77 | cursor: pointer; 78 | background-color: inherit; 79 | } 80 | 81 | #textbox { 82 | min-width: 100%; 83 | max-width: 500px; 84 | min-height: 100px; 85 | max-height: 300px; 86 | padding: 0.25em; 87 | font-size: small; 88 | font-family: inherit; 89 | } 90 | 91 | main > div:last-child { 92 | margin-top: 0.25em; 93 | display: flex; 94 | justify-content: stretch; 95 | align-items: center; 96 | } 97 | 98 | #convert { 99 | width: 100%; 100 | padding-top: 0.25em; 101 | padding-bottom: 0.25em; 102 | font-weight: bold; 103 | } 104 | 105 | label[for="auto"] { 106 | font-size: small; 107 | } 108 | 109 | footer { 110 | margin-top: 0.5em; 111 | font-size: x-small; 112 | text-align: center; 113 | } 114 | -------------------------------------------------------------------------------- /src/popup/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | OpenCC 10 | v0.4.0 11 |
12 |
13 |
14 | 20 | 21 | 27 |
28 |
29 | Text Conversion 30 | 31 |
32 |
33 | 34 | 35 | 36 |
37 |
38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/popup/index.js: -------------------------------------------------------------------------------- 1 | import { Converter } from "opencc-js"; 2 | 3 | const $originSelect = document.getElementById("origin"); 4 | const $targetSelect = document.getElementById("target"); 5 | const $swapButton = document.getElementById("swap"); 6 | const $resetButton = document.getElementById("reset"); 7 | const $textbox = document.getElementById("textbox"); 8 | const $convertButton = document.getElementById("convert"); 9 | const $autoCheckbox = document.getElementById("auto"); 10 | const $footer = document.getElementsByTagName("footer")[0]; 11 | 12 | function textboxConvert() { 13 | const [origin, target] = [$originSelect.value, $targetSelect.value]; 14 | if (origin === target) return; 15 | const convert = Converter({ from: origin, to: target }); 16 | const originalText = $textbox.value; 17 | const convertedText = convert(originalText); 18 | if (convertedText !== originalText) $textbox.value = convertedText; 19 | } 20 | 21 | /* Retrieve values from local storage and restore options when shown. */ 22 | chrome.storage.local 23 | .get({ 24 | origin: "cn", 25 | target: "hk", 26 | auto: false, 27 | textboxSize: { 28 | width: null, 29 | height: null, 30 | }, 31 | }) 32 | .then((settings) => { 33 | $originSelect.value = settings.origin; 34 | $targetSelect.value = settings.target; 35 | $autoCheckbox.checked = settings.auto; 36 | $convertButton.disabled = settings.origin === settings.target; 37 | // restore textbox size 38 | const { width, height } = settings.textboxSize; 39 | $textbox.style.width = width ? `${width}px` : ""; 40 | $textbox.style.height = height ? `${height}px` : ""; 41 | }); 42 | 43 | /* User changes origin option. */ 44 | $originSelect.addEventListener("change", (event) => { 45 | chrome.storage.local.set({ origin: event.currentTarget.value }); 46 | $convertButton.disabled = $targetSelect.value === event.currentTarget.value; 47 | if ($textbox.value) textboxConvert(); 48 | }); 49 | 50 | /* User changes target option. */ 51 | $targetSelect.addEventListener("change", (event) => { 52 | chrome.storage.local.set({ target: event.currentTarget.value }); 53 | $convertButton.disabled = $originSelect.value === event.currentTarget.value; 54 | if ($textbox.value) textboxConvert(); 55 | }); 56 | 57 | /* User clicks swap button. */ 58 | $swapButton.addEventListener("click", () => { 59 | chrome.storage.local.set({ origin: $targetSelect.value, target: $originSelect.value }); 60 | const originValue = $originSelect.value; 61 | $originSelect.value = $targetSelect.value; 62 | $targetSelect.value = originValue; 63 | if ($textbox.value) textboxConvert(); 64 | }); 65 | 66 | /* User inputs text in textbox. */ 67 | let timeout; 68 | $textbox.addEventListener("input", () => { 69 | // debounce 750ms: wait for typing to stop 70 | if (timeout) clearTimeout(timeout); 71 | timeout = setTimeout(textboxConvert, 750); 72 | }); 73 | 74 | /* User clicks reset button. */ 75 | $resetButton.addEventListener("click", () => { 76 | $textbox.value = ""; // clear input 77 | $textbox.style.width = $textbox.style.height = ""; // reset size 78 | }); 79 | 80 | /* User resizes textbox. */ 81 | new ResizeObserver(() => { 82 | chrome.storage.local.set({ 83 | textboxSize: { 84 | width: $textbox.offsetWidth, 85 | height: $textbox.offsetHeight, 86 | }, 87 | }); 88 | }).observe($textbox); 89 | 90 | /* User clicks convert button. */ 91 | $convertButton.addEventListener("click", async () => { 92 | $convertButton.disabled = true; 93 | const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); 94 | const response = await chrome.tabs.sendMessage(tabs[0].id, { action: "click" }); 95 | $convertButton.disabled = false; 96 | if (response !== undefined) $footer.innerText = `${response.count} nodes changed in ${response.time}ms`; 97 | else $footer.innerHTML = `BROWSER PROTECTED PAGE`; 98 | }); 99 | 100 | /* User checks auto convert mode. */ 101 | $autoCheckbox.addEventListener("change", (event) => { 102 | const auto = event.currentTarget.checked; 103 | chrome.storage.local.set({ auto }); 104 | chrome.action.setBadgeText({ text: auto ? "A" : "" }); 105 | }); 106 | -------------------------------------------------------------------------------- /textbox.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tnychn/opencc-extension/6c8a06702ed3190da0ffc9445ff23a30ceb2a3fb/textbox.gif --------------------------------------------------------------------------------