├── .eslintrc.json ├── .gitignore ├── CHANGELOG.md ├── README.md ├── README_CN.md ├── comment.js ├── detail.js ├── index.d.ts ├── index.js ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── search.js └── test └── test.js /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es2020": true, 6 | "node": true, 7 | "mocha": true 8 | }, 9 | "extends": "eslint:recommended", 10 | "parserOptions": { 11 | "ecmaVersion": 11 12 | }, 13 | "rules": { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | node_modules/ 3 | node_modules 4 | /.vscode 5 | coverage 6 | .nyc_output 7 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.7 (2024-03-17) 2 | 3 | 4 | ### Features 5 | 6 | * add readme ([3888d0b](https://github.com/leizhenpeng/chrome-extension-meta/commit/3888d0b2f49dfe73c03c0d98c3b00697f4f642d3)) 7 | * add test file ([e3b9e75](https://github.com/leizhenpeng/chrome-extension-meta/commit/e3b9e75d126e810035bbded702b0f2c3bc393512)) 8 | * init ([cfcfd35](https://github.com/leizhenpeng/chrome-extension-meta/commit/cfcfd35e4cf4b0325acd7025ba05178ac537a68e)) 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # **chrome-extension-meta** 🌐 2 | 3 | 4 | 5 | 👉 Explore [demo api](https://chrome-store.zeabur.app/reference) here. 6 | 7 | 🫰 Auth token: 0081jCQMz5 8 | 9 | 10 | 11 | ## Introduction 📜 12 | 13 | `chrome-extension-meta` is a Node.js library designed to fetch essential details about extensions available on the Chrome Web Store. It offers programmatic access to various extension details such as name, approximate install count, user ratings, and more. 14 | 15 | ## Key Features 🗝️ 16 | 17 | - **QuickSearch and FullSearch:** Quickly find extensions with partial data or perform comprehensive searches with detailed results. 18 | - **Get Extension Details:** Retrieve detailed information about a specific extension by its ID. 19 | - **Get Comments:** Retrieve comments for a specific extension by its ID. 20 | - **Efficient Retrieval:** Retrieve extension details using a single ID, an array of IDs, or through quick and full search functionalities. 21 | - **JSON-Formatted Response:** The API returns information in a well-structured JSON format for easy data processing. 22 | - **Asynchronous Support:** Supports asynchronous operations using `async/await` for a smooth development flow. 23 | 24 | ## Installation 💿 25 | 26 | To integrate `chrome-extension-meta` into your project, run the following command in your terminal: 27 | 28 | ```bash 29 | npm install chrome-extension-meta 30 | ``` 31 | 32 | ## Usage 📊 33 | 34 | ### Import the Module 35 | 36 | Initialize the library in your JavaScript file. 37 | 38 | ```javascript 39 | const chromeStoreApi = require('chrome-extension-meta'); 40 | ``` 41 | 42 | ### Fetching Details 43 | 44 | Retrieve information for a single extension by its ID. 45 | 46 | ```javascript 47 | async function getExtensionDetails(extensionID) { 48 | try { 49 | const data = await chromeStoreApi.getExtensionDetails(extensionID); 50 | if (data.success) { 51 | console.log(data); // Log the extension details 52 | } else { 53 | console.error(data.error); // Handle errors 54 | } 55 | } catch (error) { 56 | console.error(error); // Handle exceptions 57 | } 58 | } 59 | 60 | // Example usage: 61 | getExtensionDetails('gkkmiofalnjagdcjheckamobghglpdpm'); 62 | ``` 63 | 64 | ### Fetching for Multiple IDs 65 | 66 | Retrieve details for multiple extensions by passing an array of IDs. 67 | 68 | ```javascript 69 | async function getMultipleExtensionsDetails(extensionIDs) { 70 | try { 71 | const data = await chromeStoreApi.extMeta(extensionIDs); 72 | console.log(data); // Log details for each extension ID 73 | } catch (error) { 74 | console.error(error); // Handle exceptions 75 | } 76 | } 77 | 78 | // Example usage: 79 | getMultipleExtensionsDetails(['gkkmiofalnjagdcjheckamobghglpdpm', 'cfidkbgamfhdgmedldkagjopnbobdmdn']); 80 | ``` 81 | 82 | ### QuickSearch 83 | 84 | Quickly search for extensions using a query. 85 | 86 | ```javascript 87 | async function quickSearch(query) { 88 | try { 89 | const results = await chromeStoreApi.quickSearch(query); 90 | console.log(results); // Log the search results 91 | } catch (error) { 92 | console.error(error); 93 | } 94 | } 95 | 96 | // Example usage: 97 | quickSearch('youtube'); 98 | 99 | //Example Reponse 100 | { 101 | success: true, 102 | error: null, 103 | number: 10, 104 | data: [ 105 | { 106 | name: 'Adblock for Youtube™', 107 | id: 'cmedhionkhpnakcndndgjdbohmhepckk', 108 | version: '1', 109 | iconURL: 'https://lh3.googleusercontent.com/bMu6IzWn8zG4yCpDcUrrTHA8bh5pVuAW706__3d2e6Lw_XwpqY3qxn_BfqUS3aaCTisvqFQIN1C9ac4Dm6s0Fz-vOg' 110 | }, 111 | { 112 | name: 'Magic Actions for YouTube™', 113 | id: 'abjcfabbhafbcdfjoecdgepllmpfceif', 114 | version: '1', 115 | iconURL: 'https://lh3.googleusercontent.com/RZIl-KcDWp_GzAotuO4KZkfrDYMFyQm3yAT6v5k-BRshCIcegVon164qNmfS9DWWoX0nCBgg3_B_srbtQdxJzT_4PA' 116 | }, 117 | { 118 | name: 'Return YouTube Dislike', 119 | id: 'gebbhagfogifgggkldgodflihgfeippi', 120 | version: '1', 121 | iconURL: 'https://lh3.googleusercontent.com/X0-M21C_VbWyXYuUjN55oyMDvOukjbzAxbs_WrUjwzsebWbyjFCIEchOtczI0DBvbyL9MUpuEWnghm19gF6dp8Vriw' 122 | }, 123 | //.. 124 | ]} 125 | ``` 126 | 127 | ### FullSearch 128 | 129 | Perform a comprehensive search to get detailed information about extensions. 130 | ```js 131 | async function fullSearch(query, count) { 132 | try { 133 | const results = await chromeStoreApi.fullSearch(query, { 134 | limit:count 135 | }); 136 | console.log(results); // Log the detailed search results 137 | } catch (error) { 138 | console.error(error); 139 | } 140 | } 141 | 142 | // Example usage: 143 | fullSearch('tiktok', 10); 144 | 145 | 146 | // Example Response 147 | { 148 | success: true, 149 | error: null, 150 | number: 11, 151 | data: [ 152 | [ 153 | { 154 | id: 'ofpnmcalabcbjgholdjcjblkibolbppb', 155 | iconURL: 'https://lh3.googleusercontent.com/rLhEeo6TgST5H4WmCNWKO4fDJDvZVGfoXJNt035pGtnamBRJenmcXhqiI3RvZbRM71LWlQkTL6B825XzbAwAx52c9Q', 156 | title: 'Monica - Your AI Copilot powered by ChatGPT4', 157 | rating: '4.901862789641072', 158 | reviewCount: '15407', 159 | coverURL: 'https://lh3.googleusercontent.com/qlN70mLwKZnfWS8U51LGosEj1fOaF3gt_q5PDfN2HalyTpO2Dxh997y4CoZWE1N7oW3ISP9Y0ZxyUlrrTxJmHLaFbQ', 160 | description: 'Your AI Copilot powered by GPT-4. Answers complex questions. Writes emails reads articles searches smartly. Usable everywhere.', 161 | publish: 'monica.im', 162 | ifEstablish: 'true', 163 | ifFeatured: 'true', 164 | category: 'productivity/tools', 165 | categoryNo: '5', 166 | userCount: '2000000' 167 | }, 168 | { 169 | id: 'pmbmfhhbllfiifceolpogjoagoiollkc', 170 | iconURL: 'https://lh3.googleusercontent.com/HdWI7e2ftmvKA6tmnW7Cyhlq3pkA_hrjWih2I7kBAWbbEIhoVTYsn-hAO1AJNFvVY2wH0KOZb4ZVLUv8PtmDtXV-wQ', 171 | title: 'Monica Search - New Tab for AI Search', 172 | rating: '3.9047619047619047', 173 | reviewCount: '21', 174 | coverURL: 'https://lh3.googleusercontent.com/MtbY2KnnR_3RJi6y5-VHVST_ht4B9GnQQpWbvVdWEdIVFCcOyMj1ba8XMiJ9YNI6Yy_vOFTs9abNtCk2BnZ_5pOJp-o', 175 | description: 'Experience the free unlimited search capabilities of ChatGPT!', 176 | publish: 'monica.im', 177 | ifEstablish: 'true', 178 | ifFeatured: 'null', 179 | category: 'productivity/workflow', 180 | categoryNo: '4', 181 | userCount: '10000' 182 | }, 183 | { 184 | id: 'kbhaffhbhcfmogkkbfanilniagcefnhi', 185 | iconURL: 'https://lh3.googleusercontent.com/_WjLv3duUHKMcxhNLvh8F8foITtjesi4Z0YvZIb0C1HXzgz83oTqs-qMi_Fzz0vl5AkElbjjYPuztLnQEyvL-_cXsA', 186 | title: 'Jarvis AI: Chat GPT Bing Claude Bard Grok', 187 | rating: '4.923705722070845', 188 | reviewCount: '367', 189 | coverURL: 'https://lh3.googleusercontent.com/M6xkr64CgaD0MriN4DF8VN3ngKCt_Vygqaj4jC2ffDmnKRC-M_z2D97mldC-4UAepPKGLQvIgqih61JC3GH6I3HD', 190 | description: 'Jarvis AI Copilot Chatbot by ChatGPT quillbot Grok Jasper Xai to write email better grammar checker \\u0026 spelling mail enhancer', 191 | publish: 'jarvis.cx', 192 | ifEstablish: 'true', 193 | ifFeatured: 'true', 194 | category: 'productivity/tools', 195 | categoryNo: '5', 196 | userCount: '6000' 197 | } 198 | //... 199 | ] 200 | } 201 | ``` 202 | 203 | ### Full Search Options 204 | 205 | ``` js 206 | iterface SearchOptions { 207 | limit?: number; // Number of results to return 208 | minRating?: number; // Minimum rating value 209 | ifFeatured?: boolean; // If the extension is featured by Chrome 210 | ifWellKnown?: boolean; // If the extension is made by a well-known developer 211 | } 212 | ``` 213 | 214 | 215 | ## Returned Data Structure 📐 216 | 217 | ### Single Extension ID 218 | 219 | ```json 220 | { 221 | "success": true, 222 | "error": false, 223 | "name": "YouTube Picture-in-Picture", 224 | "installCount": "12,651", 225 | "ratingCount": 158, 226 | "ratingValue": 4.55 227 | } 228 | ``` 229 | 230 | ### Multiple Extension IDs 231 | 232 | An object is returned with each key as an extension ID, and the value is the respective data structure. 233 | 234 | ### Field Descriptions 235 | 236 | | Field | Description | 237 | | --------------------- | -------------------------------------------------------------------- | 238 | | `success` | Indicates successful retrieval. | 239 | | `error` | Provides error information if applicable. | 240 | | `name` | The name of the extension. | 241 | | `installCount` | Approximate install count as a string. | 242 | | `ratingCount` | The number of user ratings. | 243 | | `ratingValue` | The average user rating. | 244 | | `description` | A brief description of the extension. | 245 | | `iconUrl` | The URL to the extension's icon. | 246 | | `coverUrl` | The URL to the extension's cover image. | 247 | | `detailUrl` | The URL to the extension's detail page. | 248 | | `detailedDescription` | A more comprehensive description of the extension. | 249 | | `additionalImages` | An array of URLs to additional images associated with the extension. | 250 | | `version` | The current version of the extension. | 251 | | `offeredBy` | The provider of the extension. | 252 | | `updated` | The last update timestamp. | 253 | | `size` | The size of the extension. | 254 | | `languages` | Languages supported by the extension. | 255 | | `developer` | The name of the developer. | 256 | | `email` | The developer's contact email. | 257 | | `websiteUrl` | The developer's website. | 258 | | `privacyPolicyUrl` | The URL to the developer's privacy policy. | 259 | 260 | ### Get Comments 261 | 262 | Retrieve comments for a specific extension by its ID. 263 | 264 | ```javascript 265 | async function getExtensionComments(extensionID) { 266 | try { 267 | const data = await chromeStoreApi.getExtComments(extensionID); 268 | if (data.success) { 269 | console.log(data); // Log the extension comments 270 | } else { 271 | console.error(data.error); // Handle errors 272 | } 273 | } catch (error) { 274 | console.error(error); // Handle exceptions 275 | } 276 | } 277 | 278 | // Example usage: 279 | getExtensionComments('gkkmiofalnjagdcjheckamobghglpdpm'); 280 | 281 | // Example Response 282 | { 283 | success: true, 284 | error: null, 285 | number: 10, 286 | data: [ 287 | { 288 | userId: 'fc5ec3b2-519e-43e7-b13e-9d3ed3d64b09', 289 | name: 'Vamsi Nallamalli', 290 | avatarUrl: 'https://lh3.googleusercontent.com/a-/ALV-UjVGU8kqRVs4VEEsh8bUGoMixXYQXOhzCWyJuMvy45qeeajyY8OYag=s32', 291 | rating: 1, 292 | review: 'asking to login everytime i open chrome, even after giving cookies\n' + 293 | 'Other AI like Merlin, Sider are too good in this problem for side bar Auto search in Google search', 294 | version: '5.2.1' 295 | }]} 296 | ``` 297 | 298 | Comment Search Option 299 | ```json 300 | interface CommentOptions { 301 | limit?: number; 302 | sort?: "recent" | "helper" | "high-rate-first" | "low-rate-first"; 303 | lang?: "en" | "zh" | 'all' 304 | } 305 | ``` 306 | 307 | 308 | 309 | ## Notes 📝 310 | 311 | - The `installCount` field provides an approximation and may not reflect the exact number of installations. 312 | - Due to potential changes in the Chrome Web Store's HTML structure, regular expression patterns may need to be updated to ensure accurate data extraction. 313 | 314 | ## Recommendations 🔍 315 | 316 | - For production environments, consider implementing caching to enhance performance and minimize API calls. 317 | 318 | ## Caveats ⚠️ 319 | 320 | - **Install Count Accuracy:** Following updates to the Google Web Store, the exact install count is no longer available. The API provides an approximate string value (e.g., "41,678+"). 321 | - **Data Extraction:** The library uses regular expressions for data extraction, which may require updates if the Chrome Web Store's HTML structure changes. 322 | 323 | ## Author 👤 324 | 325 | River (laolei@forkway.cn) 326 | 327 | ## GitHub Repository 📦 328 | 329 | For more information and to contribute, visit the GitHub repository: [leizhenpeng/chrome-extension-meta](https://github.com/leizhenpeng/chrome-extension-meta) 330 | -------------------------------------------------------------------------------- /README_CN.md: -------------------------------------------------------------------------------- 1 | # **chrome-extension-meta** 🌐 2 | 3 | 4 | [**简体中文**](./README_CN.md) · [**English**](./README.md) 5 | 6 | 7 | 8 | ## 介绍 📜 9 | 10 | `chrome-extension-meta` 是一个为 Node.js 设计的库,旨在获取 Chrome 网上应用店中可用扩展的基本详细信息。它提供了对各种扩展细节的程序化访问,如名称、大致安装次数、用户评分等。 11 | 12 | ## 主要特性 🗝️ 13 | 14 | - **获取扩展详情:** 通过其 ID 检索特定扩展的详细信息。 15 | - **快速搜索(QuickSearch)和全面搜索(FullSearch):** 快速使用部分数据查找扩展或执行详细结果的全面搜索。 16 | - **高效检索:** 使用单个 ID、ID 数组或通过快速和全面搜索功能检索扩展详情。 17 | - **JSON 格式响应:** API 以结构良好的 JSON 格式返回信息,便于数据处理。 18 | - **异步支持:** 使用 `async/await` 支持异步操作,以实现流畅的开发流程。 19 | 20 | ## 安装 💿 21 | 22 | 要将 `chrome-extension-meta` 集成到您的项目中,请在终端中运行以下命令: 23 | 24 | ```bash 25 | npm install chrome-extension-meta 26 | ``` 27 | 28 | ## 使用 📊 29 | 30 | ### 导入模块 31 | 32 | 在您的 JavaScript 文件中初始化库。 33 | 34 | ```javascript 35 | const chromeStoreApi = require('chrome-extension-meta'); 36 | ``` 37 | 38 | ### 获取详情 39 | 40 | 通过其 ID 检索单个扩展的信息。 41 | 42 | ```javascript 43 | async function getExtensionDetails(extensionID) { 44 | try { 45 | const data = await chromeStoreApi.getExtMeta(extensionID); 46 | if (data.success) { 47 | console.log(data); // 记录扩展详情 48 | } else { 49 | console.error(data.error); // 处理错误 50 | } 51 | } catch (error) { 52 | console.error(error); // 处理异常 53 | } 54 | } 55 | 56 | // 示例使用: 57 | getExtensionDetails('gkkmiofalnjagdcjheckamobghglpdpm'); 58 | ``` 59 | 60 | ### 多 ID 获取详情 61 | 62 | 通过传递 ID 数组来检索多个扩展的详情。 63 | 64 | ```javascript 65 | async function getMultipleExtensionsDetails(extensionIDs) { 66 | try { 67 | const data = await chromeStoreApi.getExtMeta(extensionIDs); 68 | console.log(data); // 记录每个扩展 ID 的详情 69 | } catch (error) { 70 | console.error(error); // 处理异常 71 | } 72 | } 73 | 74 | // 示例使用: 75 | getMultipleExtensionsDetails(['gkkmiofalnjagdcjheckamobghglpdpm', 'cfidkbgamfhdgmedldkagjopnbobdmdn']); 76 | ``` 77 | 78 | ### 快速搜索 79 | 80 | 使用查询快速搜索扩展。 81 | 82 | ```javascript 83 | async function quickSearch(query) { 84 | try { 85 | const results = await chromeStoreApi.quickSearch(query); 86 | console.log(results); // 记录搜索结果 87 | } catch (error) { 88 | console.error(error); 89 | } 90 | } 91 | 92 | // 示例使用: 93 | quickSearch('youtube'); 94 | 95 | // 示例响应 96 | ```json 97 | { 98 | "success": true, 99 | "error": null, 100 | "number": 10, 101 | "data": [ 102 | { 103 | "name": "Adblock for Youtube™", 104 | "id": "cmedhionkhpnakcndndgjdbohmhepckk", 105 | "version": "1", 106 | "iconURL": "https://lh3.googleusercontent.com/bMu6IzWn8zG4yCpDcUrrTHA8bh5pVuAW706__3d2e6Lw_XwpqY3qxn_BfqUS3aaCTisvqFQIN1C9ac4Dm6s0Fz-vOg" 107 | }, 108 | // 其他结果... 109 | ] 110 | } 111 | ``` 112 | 113 | ### 全面搜索 114 | 115 | 执行全面搜索以获取有关扩展的详细信息。 116 | 117 | ```javascript 118 | async function fullSearch(query, count) { 119 | try { 120 | const results = await chromeStoreApi.fullSearch(query, { 121 | limit:count 122 | }); 123 | console.log(results); // 记录详细的搜索结果 124 | } catch (error) { 125 | console.error(error); 126 | } 127 | } 128 | 129 | // 示例使用: 130 | fullSearch('tiktok', 10); 131 | 132 | // 示例响应 133 | ```json 134 | { 135 | "success": true, 136 | "error": null, 137 | "number": 11, 138 | "data": [ 139 | { 140 | id: 'ofpnmcalabcbjgholdjcjblkibolbppb', 141 | iconURL: 'https://lh3.googleusercontent.com/rLhEeo6TgST5H4WmCNWKO4fDJDvZVGfoXJNt035pGtnamBRJenmcXhqiI3RvZbRM71LWlQkTL6B825XzbAwAx52c9Q', 142 | title: 'Monica - Your AI Copilot powered by ChatGPT4', 143 | rating: '4.901862789641072', 144 | reviewCount: '15407', 145 | coverURL: 'https://lh3.googleusercontent.com/qlN70mLwKZnfWS8U51LGosEj1fOaF3gt_q5PDfN2HalyTpO2Dxh997y4CoZWE1N7oW3ISP9Y0ZxyUlrrTxJmHLaFbQ', 146 | description: 'Your AI Copilot powered by GPT-4. Answers complex questions. Writes emails reads articles searches smartly. Usable everywhere.', 147 | publish: 'monica.im', 148 | ifEstablish: 'true', 149 | ifFeatured: 'true', 150 | category: 'productivity/tools', 151 | categoryNo: '5', 152 | userCount: '2000000' 153 | }, 154 | // 其他结果... 155 | ] 156 | } 157 | ``` 158 | 159 | ### 全面搜索参数 160 | ``` ts 161 | iterface SearchOptions { 162 | limit?: number; // 返回结果的最大数量 163 | minRating?: number; // 最低评分 0-5 164 | ifFeatured?: boolean; // 是否为chrome store推荐 165 | ifWellKnown?: boolean; // 是否为知名开发者开发 166 | } 167 | ``` 168 | 169 | ## 返回数据结构 📐 170 | 171 | ### 单个扩展 ID 172 | 173 | ```json 174 | { 175 | "success": true, 176 | "error": false, 177 | "name": "YouTube Picture-in-Picture", 178 | "installCount": "12,651", 179 | "ratingCount": 158, 180 | "ratingValue": 4.55 181 | } 182 | ``` 183 | 184 | ### 多个扩展 ID 185 | 186 | 返回的对象中,每个键都是一个扩展 ID,值是相应的数据结构。 187 | 188 | ### 字段描述 189 | 190 | | 字段 | 描述 | 191 | | --------------------- | -------------------------------------------------------------------- | 192 | | `success` | 表示成功检索。 | 193 | | `error` | 如适用,提供错误信息。 | 194 | | `name` | 扩展的名称。 | 195 | | `installCount` | 作为字符串的大致安装次数。 | 196 | | `ratingCount` | 用户评分的数量。 | 197 | | `ratingValue` | 平均用户评分。 | 198 | | `description` | 扩展的简短描述。 | 199 | | `iconUrl` | 扩展图标的 URL。 | 200 | | `coverUrl` | 扩展封面图片的 URL。 | 201 | | `detailUrl` | 扩展详情页面的 URL。 | 202 | | `detailedDescription` | 扩展的更详细描述。 | 203 | | `additionalImages` | 与扩展相关的附加图片的 URL 数组。 | 204 | | `version` | 扩展的当前版本。 | 205 | | `offeredBy` | 扩展的提供者。 | 206 | | `updated` | 最后更新时间戳。 | 207 | | `size` | 扩展的大小。 | 208 | | `languages` | 扩展支持的语言。 | 209 | | `developer` | 开发者的名称。 | 210 | | `email` | 开发者的联系电子邮件。 | 211 | | `websiteUrl` | 开发者的网站。 | 212 | | `privacyPolicyUrl` | 开发者隐私政策的 URL。 | 213 | 214 | ## 注意事项 📝 215 | 216 | - `installCount` 字段提供近似值,可能不反映确切的安装次数。 217 | - 由于 Chrome 网上应用店的 HTML 结构可能发生变化,正则表达式模式可能需要更新以确保准确的数据提取。 218 | 219 | ## 建议 🔍 220 | 221 | - 对于生产环境,考虑实现缓存以提高性能并最小化 API 调用。 222 | 223 | ## 警告 ⚠️ 224 | 225 | - **安装次数准确性:** 跟随 Google 网上应用店的更新,确切的安装次数不再可用。API 提供一个近似的字符串值(例如,“41,678+”)。 226 | - **数据提取:** 库使用正则表达式进行数据提取,如果 Chrome 网上应用店的 HTML 结构发生变化,可能需要更新。 227 | 228 | ## 作者 👤 229 | 230 | River (laolei@forkway.cn) 231 | 232 | ## GitHub 仓库 📦 233 | 234 | 欲了解更多信息并参与贡献,请访问 GitHub 仓库:[leizhenpeng/chrome-extension-meta](https://github.com/leizhenpeng/chrome-extension-meta) 235 | 236 | -------------------------------------------------------------------------------- /comment.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch'); 2 | 3 | function objectToUrlEncoded(obj) { 4 | return Object.keys(obj).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&'); 5 | } 6 | 7 | async function fetchData(baseUrl, queryParams, bodyObject, headers = { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }) { 8 | const queryString = objectToUrlEncoded(queryParams); 9 | const url = `${baseUrl}?${queryString}`; 10 | const body = objectToUrlEncoded(bodyObject); 11 | 12 | try { 13 | const response = await fetch(url, { method: 'POST', headers, body }); 14 | return await response.text(); 15 | } catch (error) { 16 | console.error('Error:', error); 17 | throw error; // 外部调用会处理异常 18 | } 19 | } 20 | 21 | function processData(rawData) { 22 | const lines = rawData.split('\n'); 23 | const cleanData = lines[3]?.trim(); 24 | const json = JSON.parse(cleanData); 25 | const data = json[0][2]; 26 | return data; 27 | } 28 | 29 | const getExtComments = async (keyword, options = {}) => { 30 | const { 31 | limit = 10, 32 | lang = "all", 33 | sort = "recent" 34 | } = options; 35 | 36 | function sortValue(input) { 37 | switch(input) { 38 | case "helper": 39 | return 1; 40 | case "recent": 41 | return 2; 42 | case "low-rate-first": 43 | return 3; 44 | case "high-rate-first": 45 | return 4; 46 | } 47 | } 48 | 49 | const baseUrl = 'https://chromewebstore.google.com/_/ChromeWebStoreConsumerFeUi/data/batchexecute'; 50 | const queryParams = { 51 | 'rpcids': 'x1DgCd', 52 | 'bl': 'boq_chrome-webstore-consumerfe-ui_20240428.07_p0', 53 | 'hl': 'zh-CN', 54 | 'soc-app': '1', 55 | 'soc-platform': '1', 56 | 'soc-device': '1', 57 | 'rt': 'c' 58 | }; 59 | const bodyObject = { 60 | 'f.req': `[[["x1DgCd","[\\"${keyword}\\",[${limit}],${sortValue(sort)},null,null,[\\"${lang}\\"]]",null,"generic"]]]` 61 | }; 62 | 63 | try { 64 | const rawData = await fetchData(baseUrl, queryParams, bodyObject); 65 | const comments = processData(rawData); 66 | // const result = JSON.prase(comments); 67 | const parsedData = JSON.parse(comments); 68 | const usefulData = parsedData[1].map(entry => { 69 | return { 70 | userId: entry[0], 71 | name: entry[1][0], 72 | avatarUrl: entry[1][1], 73 | rating: entry[2], 74 | review: entry[3], 75 | version: entry[11] 76 | }; 77 | }); 78 | const num = usefulData.length; 79 | return { success: true, error: null, number: num, data: usefulData }; 80 | } catch (error) { 81 | return { success: false, error: error.message, data: null }; 82 | } 83 | }; 84 | 85 | module.exports = { 86 | getExtComments 87 | }; 88 | -------------------------------------------------------------------------------- /detail.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch'); 2 | 3 | const URL_PREFIX = 'https://chrome.google.com/webstore/detail/'; 4 | const REGEX_EXTENSION_ID = /[a-z]{32}$/; 5 | 6 | // Extracted method to fetch and parse the extension page 7 | async function fetchExtensionData(extensionID) { 8 | const response = await fetch(`${URL_PREFIX}${extensionID}`); 9 | return response.text(); 10 | } 11 | 12 | // Helper method to extract data using regex 13 | function extractData(regex, text) { 14 | const match = text.match(regex); 15 | return match ? match[1] : null; 16 | } 17 | 18 | function extractImageUrls(data, regex) { 19 | const matches = data.matchAll(regex); 20 | const urls = []; 21 | for (const match of matches) { 22 | if (match && match[1]) { 23 | urls.push(match[1]); 24 | } 25 | } 26 | return [...new Set(urls)]; // Remove duplicates 27 | } 28 | 29 | // Using object to map all regex patterns for easy reference 30 | const regexPatterns = { 31 | canonicalLink: //, 32 | userCount: /<\/a>([\d,]+) users<\/div>/, 33 | ratingCount: /([\d,]+) ratings<\/p><\/a>/, 34 | ratingValue: /span class="GlMWqe">([0-9.]+) out of 5/, 35 | title: /(.*?)<\/title>/, 36 | description: /<meta property="og:description" content="([^"]+)"/, 37 | url: /<meta property="og:url" content="([^"]+)"/, 38 | detailedDescription: /<section class="H8vIqf"[^>]*>[\s\S]*?<div jsname="bN97Pc">[\s\S]*?<div[^>]*>([\s\S]*?)<\/div>/, 39 | introImages: /data-media-url="([^"]+)"/g, 40 | version: /Version<\/div>\s*<div[^>]*>([^<]+)<\/div>/, 41 | offeredBy: /Offered by<\/div>\s*<div[^>]*>([^<]+)<\/div>/, 42 | updated: /Updated<\/div>\s*<div[^>]*>([^<]+)<\/div>/, 43 | size: /Size<\/div>\s*<div[^>]*>([^<]+)<\/div>/, 44 | languages: /Languages<\/div>\s*<div[^>]*>\s*<div[^>]*>([^<]+)<\/div>/, 45 | // developer: /Developer<\/div>\s*<div[^>]*>\s*<div[^>]*>\s*<div[^>]*>([\s\S]+?)<\/div>/, 46 | logoUrl: /<img src="([^"]+)"[^>]*alt="Item logo image[^>]*>/, 47 | coverImage: /AF_initDataCallback\(\{.*?\["[^"]*","[^"]*","[^"]*",[^,]*,[^,]*,"([^"]*)"/, 48 | website: /Developer<\/div>[\s\S]*?<a[^>]+href="([^"]+)"[^>]*>.*?Website.*?<\/a>/, 49 | privacyPolicy: /<a[^>]+href="([^"]+)"[^>]*>privacy policy<\/a>/, 50 | email: /Developer<\/div>[\s\S]*?<div[^>]*?>([\w.-]+@[\w.-]+\.\w+)<\/div>/ 51 | }; 52 | 53 | async function getExtMeta(inputIDs) { 54 | const extensionIDs = [].concat(inputIDs); 55 | const responses = {}; 56 | for (let extensionID of extensionIDs) { 57 | if (typeof extensionID !== "string" || !REGEX_EXTENSION_ID.test(extensionID.toLowerCase())) { 58 | responses[extensionID] = { success: false, error: 'Invalid extension ID.' }; 59 | continue; 60 | } 61 | 62 | try { 63 | const data = await fetchExtensionData(extensionID); 64 | const basicInfo = { 65 | extensionId: extensionID, 66 | iconUrl: extractData(regexPatterns.logoUrl, data), 67 | url: extractData(regexPatterns.url, data), 68 | name: extractData(regexPatterns.title, data), 69 | description: extractData(regexPatterns.description, data), 70 | installCount: parseInt(extractData(regexPatterns.userCount, data)?.replace(/,/g, '') || '0', 10), 71 | rating: parseInt(extractData(regexPatterns.ratingCount, data)?.replace(/,/g, '') || '0', 10), 72 | reviewCount: parseFloat(extractData(regexPatterns.ratingValue, data) || '0'), 73 | }; 74 | if (!basicInfo.url) { 75 | throw new Error('Extension not found'); 76 | } 77 | const detailedInfo = { 78 | detailedDescription: extractData(regexPatterns.detailedDescription, data)?.replace(/<[^>]+>/g, '').trim(), 79 | additionalImages: extractImageUrls(data, regexPatterns.introImages), 80 | version: extractData(regexPatterns.version, data), 81 | offeredBy: extractData(regexPatterns.offeredBy, data), 82 | updated: extractData(regexPatterns.updated, data), 83 | size: extractData(regexPatterns.size, data), 84 | languages: extractData(regexPatterns.languages, data), 85 | // developer: extractData(regexPatterns.developer, data)?.trim().replace(/<[^>]+>/g, ''), 86 | email: extractData(regexPatterns.email, data)?.trim(), 87 | websiteUrl: extractData(regexPatterns.website, data)?.trim(), 88 | privacyPolicyUrl: extractData(regexPatterns.privacyPolicy, data), 89 | }; 90 | 91 | 92 | responses[extensionID] = { 93 | success: true, error: null, ...basicInfo, details: detailedInfo 94 | }; 95 | } catch (e) { 96 | responses[extensionID] = { 97 | success: false, error: `Couldn't find extension with ID ${extensionID}`, 98 | }; 99 | } 100 | } 101 | 102 | return extensionIDs.length <= 1 ? responses[extensionIDs[0]] : responses; 103 | } 104 | 105 | 106 | module.exports = { 107 | getExtMeta 108 | }; -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "chrome-extension-meta" { 2 | interface ExtensionSearchMeta { 3 | id: string; 4 | iconURL: string; 5 | title: string; 6 | rating: string; 7 | reviewCount: string; 8 | coverURL: string; 9 | description: string; 10 | publish: string; 11 | ifEstablish: string; 12 | ifFeatured: string; 13 | category: string; 14 | categoryNo: string; 15 | userCount: string; 16 | } 17 | interface ExtensionDeatilData { 18 | extensionId: string; 19 | iconUrl: string; 20 | url: string; 21 | name: string; 22 | description: string; 23 | installCount: number; 24 | rating: number; 25 | reviewCount: number; 26 | detailedDescription?: string; 27 | additionalImages?: string[]; 28 | version?: string; 29 | offeredBy?: string; 30 | updated?: string; 31 | size?: string; 32 | languages?: string; 33 | email?: string; 34 | websiteUrl?: string; 35 | privacyPolicyUrl?: string; 36 | } 37 | 38 | interface CommentDetail { 39 | userId: string; 40 | name: string; 41 | avatarUrl: string; 42 | rating: number; 43 | review: string; 44 | version: string; 45 | } 46 | interface SearchOptions { 47 | limit?: number; 48 | minRating?: number; 49 | ifFeatured?: boolean; 50 | ifWellKnown?: boolean; 51 | } 52 | 53 | 54 | interface SearchResponse { 55 | success: boolean; 56 | error: string | null; 57 | number: number; 58 | data: ExtensionSearchMeta[]; 59 | } 60 | 61 | interface DetailResponse { 62 | success: boolean; 63 | error: string | null; 64 | details?: ExtensionData; 65 | } 66 | 67 | interface CommentResponse { 68 | success: boolean; 69 | error: string | null; 70 | number: number; 71 | data: CommentDetail[]; 72 | } 73 | 74 | interface CommentOptions { 75 | limit?: number; 76 | sort?: "recent" | "helper" | "high-rate-first" | "low-rate-first"; 77 | lang?: "en" | "zh" | 'all' 78 | } 79 | 80 | function quickSearch(keyword: string): Promise<SearchResponse>; 81 | function fullSearch( 82 | keyword: string, 83 | options?: SearchOptions 84 | ): Promise<SearchResponse>; 85 | function getExtMeta(extensionID: string | string[]): Promise<DetailResponse>; 86 | function getExtComments(extensionID: string, options?: CommentOptions): Promise<CommentResponse>; 87 | 88 | 89 | export { quickSearch, fullSearch, getExtMeta, getExtComments }; 90 | export type { ExtensionSearchMeta, ExtensionDeatilData, SearchOptions, SearchResponse, DetailResponse, CommentResponse, CommentDetail }; 91 | } 92 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { getExtMeta } = require('./detail'); 2 | const { quickSearch, fullSearch } = require('./search'); 3 | const { getExtComments } = require('./comment'); 4 | 5 | module.exports = { 6 | getExtMeta, 7 | quickSearch, 8 | fullSearch, 9 | getExtComments 10 | }; 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chrome-extension-meta", 3 | "version": "0.0.12", 4 | "description": "A Node.js package to fetch statistics from the Chrome Web Store", 5 | "main": "index.js", 6 | "types": "index.d.ts", 7 | "scripts": { 8 | "test": "mocha", 9 | "test-watch": "mocha --reporter spec --watch", 10 | "start": "node index.js", 11 | "release": "bumpp && npm publish", 12 | "coverage": "nyc npm test && nyc report --reporter=text-lcov | coveralls", 13 | "change-log": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/leizhenpeng/chrome-extension-meta" 18 | }, 19 | "keywords": [ 20 | "chrome", 21 | "extension", 22 | "webstore", 23 | "stats" 24 | ], 25 | "author": "river laolei@forkway.cn", 26 | "license": "ISC", 27 | "dependencies": { 28 | "node-fetch": "^2.6.0" 29 | }, 30 | "homepage": "https://github.com/leizhenpeng/chrome-extension-meta", 31 | "devDependencies": { 32 | "bumpp": "^9.4.0", 33 | "chai": "^4.2.0", 34 | "conventional-changelog-cli": "^4.1.0", 35 | "coveralls": "^3.1.0", 36 | "eslint": "^7.5.0", 37 | "mocha": "^8.0.1", 38 | "mocha-lcov-reporter": "^1.3.0", 39 | "nyc": "^15.1.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | node-fetch: 9 | specifier: ^2.6.0 10 | version: 2.7.0 11 | 12 | devDependencies: 13 | bumpp: 14 | specifier: ^9.4.0 15 | version: 9.4.0 16 | chai: 17 | specifier: ^4.2.0 18 | version: 4.4.1 19 | conventional-changelog-cli: 20 | specifier: ^4.1.0 21 | version: 4.1.0 22 | coveralls: 23 | specifier: ^3.1.0 24 | version: 3.1.1 25 | eslint: 26 | specifier: ^7.5.0 27 | version: 7.32.0 28 | mocha: 29 | specifier: ^8.0.1 30 | version: 8.4.0 31 | mocha-lcov-reporter: 32 | specifier: ^1.3.0 33 | version: 1.3.0 34 | nyc: 35 | specifier: ^15.1.0 36 | version: 15.1.0 37 | 38 | packages: 39 | 40 | /@aashutoshrathi/word-wrap@1.2.6: 41 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 42 | engines: {node: '>=0.10.0'} 43 | dev: true 44 | 45 | /@ampproject/remapping@2.3.0: 46 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 47 | engines: {node: '>=6.0.0'} 48 | dependencies: 49 | '@jridgewell/gen-mapping': 0.3.5 50 | '@jridgewell/trace-mapping': 0.3.25 51 | dev: true 52 | 53 | /@babel/code-frame@7.12.11: 54 | resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} 55 | dependencies: 56 | '@babel/highlight': 7.23.4 57 | dev: true 58 | 59 | /@babel/code-frame@7.23.5: 60 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 61 | engines: {node: '>=6.9.0'} 62 | dependencies: 63 | '@babel/highlight': 7.23.4 64 | chalk: 2.4.2 65 | dev: true 66 | 67 | /@babel/compat-data@7.23.5: 68 | resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} 69 | engines: {node: '>=6.9.0'} 70 | dev: true 71 | 72 | /@babel/core@7.24.0: 73 | resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} 74 | engines: {node: '>=6.9.0'} 75 | dependencies: 76 | '@ampproject/remapping': 2.3.0 77 | '@babel/code-frame': 7.23.5 78 | '@babel/generator': 7.23.6 79 | '@babel/helper-compilation-targets': 7.23.6 80 | '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) 81 | '@babel/helpers': 7.24.0 82 | '@babel/parser': 7.24.0 83 | '@babel/template': 7.24.0 84 | '@babel/traverse': 7.24.0 85 | '@babel/types': 7.24.0 86 | convert-source-map: 2.0.0 87 | debug: 4.3.4 88 | gensync: 1.0.0-beta.2 89 | json5: 2.2.3 90 | semver: 6.3.1 91 | transitivePeerDependencies: 92 | - supports-color 93 | dev: true 94 | 95 | /@babel/generator@7.23.6: 96 | resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} 97 | engines: {node: '>=6.9.0'} 98 | dependencies: 99 | '@babel/types': 7.24.0 100 | '@jridgewell/gen-mapping': 0.3.5 101 | '@jridgewell/trace-mapping': 0.3.25 102 | jsesc: 2.5.2 103 | dev: true 104 | 105 | /@babel/helper-compilation-targets@7.23.6: 106 | resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} 107 | engines: {node: '>=6.9.0'} 108 | dependencies: 109 | '@babel/compat-data': 7.23.5 110 | '@babel/helper-validator-option': 7.23.5 111 | browserslist: 4.23.0 112 | lru-cache: 5.1.1 113 | semver: 6.3.1 114 | dev: true 115 | 116 | /@babel/helper-environment-visitor@7.22.20: 117 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 118 | engines: {node: '>=6.9.0'} 119 | dev: true 120 | 121 | /@babel/helper-function-name@7.23.0: 122 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 123 | engines: {node: '>=6.9.0'} 124 | dependencies: 125 | '@babel/template': 7.24.0 126 | '@babel/types': 7.24.0 127 | dev: true 128 | 129 | /@babel/helper-hoist-variables@7.22.5: 130 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 131 | engines: {node: '>=6.9.0'} 132 | dependencies: 133 | '@babel/types': 7.24.0 134 | dev: true 135 | 136 | /@babel/helper-module-imports@7.22.15: 137 | resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} 138 | engines: {node: '>=6.9.0'} 139 | dependencies: 140 | '@babel/types': 7.24.0 141 | dev: true 142 | 143 | /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): 144 | resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 145 | engines: {node: '>=6.9.0'} 146 | peerDependencies: 147 | '@babel/core': ^7.0.0 148 | dependencies: 149 | '@babel/core': 7.24.0 150 | '@babel/helper-environment-visitor': 7.22.20 151 | '@babel/helper-module-imports': 7.22.15 152 | '@babel/helper-simple-access': 7.22.5 153 | '@babel/helper-split-export-declaration': 7.22.6 154 | '@babel/helper-validator-identifier': 7.22.20 155 | dev: true 156 | 157 | /@babel/helper-simple-access@7.22.5: 158 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 159 | engines: {node: '>=6.9.0'} 160 | dependencies: 161 | '@babel/types': 7.24.0 162 | dev: true 163 | 164 | /@babel/helper-split-export-declaration@7.22.6: 165 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 166 | engines: {node: '>=6.9.0'} 167 | dependencies: 168 | '@babel/types': 7.24.0 169 | dev: true 170 | 171 | /@babel/helper-string-parser@7.23.4: 172 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} 173 | engines: {node: '>=6.9.0'} 174 | dev: true 175 | 176 | /@babel/helper-validator-identifier@7.22.20: 177 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 178 | engines: {node: '>=6.9.0'} 179 | dev: true 180 | 181 | /@babel/helper-validator-option@7.23.5: 182 | resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} 183 | engines: {node: '>=6.9.0'} 184 | dev: true 185 | 186 | /@babel/helpers@7.24.0: 187 | resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} 188 | engines: {node: '>=6.9.0'} 189 | dependencies: 190 | '@babel/template': 7.24.0 191 | '@babel/traverse': 7.24.0 192 | '@babel/types': 7.24.0 193 | transitivePeerDependencies: 194 | - supports-color 195 | dev: true 196 | 197 | /@babel/highlight@7.23.4: 198 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 199 | engines: {node: '>=6.9.0'} 200 | dependencies: 201 | '@babel/helper-validator-identifier': 7.22.20 202 | chalk: 2.4.2 203 | js-tokens: 4.0.0 204 | dev: true 205 | 206 | /@babel/parser@7.24.0: 207 | resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} 208 | engines: {node: '>=6.0.0'} 209 | hasBin: true 210 | dependencies: 211 | '@babel/types': 7.24.0 212 | dev: true 213 | 214 | /@babel/template@7.24.0: 215 | resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} 216 | engines: {node: '>=6.9.0'} 217 | dependencies: 218 | '@babel/code-frame': 7.23.5 219 | '@babel/parser': 7.24.0 220 | '@babel/types': 7.24.0 221 | dev: true 222 | 223 | /@babel/traverse@7.24.0: 224 | resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} 225 | engines: {node: '>=6.9.0'} 226 | dependencies: 227 | '@babel/code-frame': 7.23.5 228 | '@babel/generator': 7.23.6 229 | '@babel/helper-environment-visitor': 7.22.20 230 | '@babel/helper-function-name': 7.23.0 231 | '@babel/helper-hoist-variables': 7.22.5 232 | '@babel/helper-split-export-declaration': 7.22.6 233 | '@babel/parser': 7.24.0 234 | '@babel/types': 7.24.0 235 | debug: 4.3.4 236 | globals: 11.12.0 237 | transitivePeerDependencies: 238 | - supports-color 239 | dev: true 240 | 241 | /@babel/types@7.24.0: 242 | resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} 243 | engines: {node: '>=6.9.0'} 244 | dependencies: 245 | '@babel/helper-string-parser': 7.23.4 246 | '@babel/helper-validator-identifier': 7.22.20 247 | to-fast-properties: 2.0.0 248 | dev: true 249 | 250 | /@eslint/eslintrc@0.4.3: 251 | resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} 252 | engines: {node: ^10.12.0 || >=12.0.0} 253 | dependencies: 254 | ajv: 6.12.6 255 | debug: 4.3.4 256 | espree: 7.3.1 257 | globals: 13.24.0 258 | ignore: 4.0.6 259 | import-fresh: 3.3.0 260 | js-yaml: 3.14.1 261 | minimatch: 3.1.2 262 | strip-json-comments: 3.1.1 263 | transitivePeerDependencies: 264 | - supports-color 265 | dev: true 266 | 267 | /@humanwhocodes/config-array@0.5.0: 268 | resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} 269 | engines: {node: '>=10.10.0'} 270 | dependencies: 271 | '@humanwhocodes/object-schema': 1.2.1 272 | debug: 4.3.4 273 | minimatch: 3.1.2 274 | transitivePeerDependencies: 275 | - supports-color 276 | dev: true 277 | 278 | /@humanwhocodes/object-schema@1.2.1: 279 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 280 | dev: true 281 | 282 | /@hutson/parse-repository-url@5.0.0: 283 | resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} 284 | engines: {node: '>=10.13.0'} 285 | dev: true 286 | 287 | /@istanbuljs/load-nyc-config@1.1.0: 288 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 289 | engines: {node: '>=8'} 290 | dependencies: 291 | camelcase: 5.3.1 292 | find-up: 4.1.0 293 | get-package-type: 0.1.0 294 | js-yaml: 3.14.1 295 | resolve-from: 5.0.0 296 | dev: true 297 | 298 | /@istanbuljs/schema@0.1.3: 299 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 300 | engines: {node: '>=8'} 301 | dev: true 302 | 303 | /@jridgewell/gen-mapping@0.3.5: 304 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 305 | engines: {node: '>=6.0.0'} 306 | dependencies: 307 | '@jridgewell/set-array': 1.2.1 308 | '@jridgewell/sourcemap-codec': 1.4.15 309 | '@jridgewell/trace-mapping': 0.3.25 310 | dev: true 311 | 312 | /@jridgewell/resolve-uri@3.1.2: 313 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 314 | engines: {node: '>=6.0.0'} 315 | dev: true 316 | 317 | /@jridgewell/set-array@1.2.1: 318 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 319 | engines: {node: '>=6.0.0'} 320 | dev: true 321 | 322 | /@jridgewell/sourcemap-codec@1.4.15: 323 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 324 | dev: true 325 | 326 | /@jridgewell/trace-mapping@0.3.25: 327 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 328 | dependencies: 329 | '@jridgewell/resolve-uri': 3.1.2 330 | '@jridgewell/sourcemap-codec': 1.4.15 331 | dev: true 332 | 333 | /@jsdevtools/ez-spawn@3.0.4: 334 | resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} 335 | engines: {node: '>=10'} 336 | dependencies: 337 | call-me-maybe: 1.0.2 338 | cross-spawn: 7.0.3 339 | string-argv: 0.3.2 340 | type-detect: 4.0.8 341 | dev: true 342 | 343 | /@nodelib/fs.scandir@2.1.5: 344 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 345 | engines: {node: '>= 8'} 346 | dependencies: 347 | '@nodelib/fs.stat': 2.0.5 348 | run-parallel: 1.2.0 349 | dev: true 350 | 351 | /@nodelib/fs.stat@2.0.5: 352 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 353 | engines: {node: '>= 8'} 354 | dev: true 355 | 356 | /@nodelib/fs.walk@1.2.8: 357 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 358 | engines: {node: '>= 8'} 359 | dependencies: 360 | '@nodelib/fs.scandir': 2.1.5 361 | fastq: 1.17.1 362 | dev: true 363 | 364 | /@types/normalize-package-data@2.4.4: 365 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 366 | dev: true 367 | 368 | /@ungap/promise-all-settled@1.1.2: 369 | resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} 370 | dev: true 371 | 372 | /JSONStream@1.3.5: 373 | resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} 374 | hasBin: true 375 | dependencies: 376 | jsonparse: 1.3.1 377 | through: 2.3.8 378 | dev: true 379 | 380 | /acorn-jsx@5.3.2(acorn@7.4.1): 381 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 382 | peerDependencies: 383 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 384 | dependencies: 385 | acorn: 7.4.1 386 | dev: true 387 | 388 | /acorn@7.4.1: 389 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} 390 | engines: {node: '>=0.4.0'} 391 | hasBin: true 392 | dev: true 393 | 394 | /acorn@8.11.3: 395 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 396 | engines: {node: '>=0.4.0'} 397 | hasBin: true 398 | dev: true 399 | 400 | /add-stream@1.0.0: 401 | resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} 402 | dev: true 403 | 404 | /aggregate-error@3.1.0: 405 | resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} 406 | engines: {node: '>=8'} 407 | dependencies: 408 | clean-stack: 2.2.0 409 | indent-string: 4.0.0 410 | dev: true 411 | 412 | /ajv@6.12.6: 413 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 414 | dependencies: 415 | fast-deep-equal: 3.1.3 416 | fast-json-stable-stringify: 2.1.0 417 | json-schema-traverse: 0.4.1 418 | uri-js: 4.4.1 419 | dev: true 420 | 421 | /ajv@8.12.0: 422 | resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} 423 | dependencies: 424 | fast-deep-equal: 3.1.3 425 | json-schema-traverse: 1.0.0 426 | require-from-string: 2.0.2 427 | uri-js: 4.4.1 428 | dev: true 429 | 430 | /ansi-colors@4.1.1: 431 | resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} 432 | engines: {node: '>=6'} 433 | dev: true 434 | 435 | /ansi-colors@4.1.3: 436 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 437 | engines: {node: '>=6'} 438 | dev: true 439 | 440 | /ansi-regex@3.0.1: 441 | resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} 442 | engines: {node: '>=4'} 443 | dev: true 444 | 445 | /ansi-regex@5.0.1: 446 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 447 | engines: {node: '>=8'} 448 | dev: true 449 | 450 | /ansi-styles@3.2.1: 451 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 452 | engines: {node: '>=4'} 453 | dependencies: 454 | color-convert: 1.9.3 455 | dev: true 456 | 457 | /ansi-styles@4.3.0: 458 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 459 | engines: {node: '>=8'} 460 | dependencies: 461 | color-convert: 2.0.1 462 | dev: true 463 | 464 | /anymatch@3.1.3: 465 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 466 | engines: {node: '>= 8'} 467 | dependencies: 468 | normalize-path: 3.0.0 469 | picomatch: 2.3.1 470 | dev: true 471 | 472 | /append-transform@2.0.0: 473 | resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} 474 | engines: {node: '>=8'} 475 | dependencies: 476 | default-require-extensions: 3.0.1 477 | dev: true 478 | 479 | /archy@1.0.0: 480 | resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} 481 | dev: true 482 | 483 | /argparse@1.0.10: 484 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 485 | dependencies: 486 | sprintf-js: 1.0.3 487 | dev: true 488 | 489 | /argparse@2.0.1: 490 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 491 | dev: true 492 | 493 | /array-ify@1.0.0: 494 | resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} 495 | dev: true 496 | 497 | /asn1@0.2.6: 498 | resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} 499 | dependencies: 500 | safer-buffer: 2.1.2 501 | dev: true 502 | 503 | /assert-plus@1.0.0: 504 | resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} 505 | engines: {node: '>=0.8'} 506 | dev: true 507 | 508 | /assertion-error@1.1.0: 509 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 510 | dev: true 511 | 512 | /astral-regex@2.0.0: 513 | resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} 514 | engines: {node: '>=8'} 515 | dev: true 516 | 517 | /asynckit@0.4.0: 518 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 519 | dev: true 520 | 521 | /aws-sign2@0.7.0: 522 | resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} 523 | dev: true 524 | 525 | /aws4@1.12.0: 526 | resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} 527 | dev: true 528 | 529 | /balanced-match@1.0.2: 530 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 531 | dev: true 532 | 533 | /bcrypt-pbkdf@1.0.2: 534 | resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} 535 | dependencies: 536 | tweetnacl: 0.14.5 537 | dev: true 538 | 539 | /binary-extensions@2.3.0: 540 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 541 | engines: {node: '>=8'} 542 | dev: true 543 | 544 | /brace-expansion@1.1.11: 545 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 546 | dependencies: 547 | balanced-match: 1.0.2 548 | concat-map: 0.0.1 549 | dev: true 550 | 551 | /braces@3.0.2: 552 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 553 | engines: {node: '>=8'} 554 | dependencies: 555 | fill-range: 7.0.1 556 | dev: true 557 | 558 | /browser-stdout@1.3.1: 559 | resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} 560 | dev: true 561 | 562 | /browserslist@4.23.0: 563 | resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} 564 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 565 | hasBin: true 566 | dependencies: 567 | caniuse-lite: 1.0.30001598 568 | electron-to-chromium: 1.4.708 569 | node-releases: 2.0.14 570 | update-browserslist-db: 1.0.13(browserslist@4.23.0) 571 | dev: true 572 | 573 | /bumpp@9.4.0: 574 | resolution: {integrity: sha512-T+N+B5mSSvsTt7kgxGXCKQd957IxmEZwMn2nWirspGUY08u/cBNrpQDMXk43fzLegZtKtXS1v9S06vq2zf6lXQ==} 575 | engines: {node: '>=10'} 576 | hasBin: true 577 | dependencies: 578 | '@jsdevtools/ez-spawn': 3.0.4 579 | c12: 1.10.0 580 | cac: 6.7.14 581 | escalade: 3.1.2 582 | fast-glob: 3.3.2 583 | js-yaml: 4.1.0 584 | prompts: 2.4.2 585 | semver: 7.6.0 586 | dev: true 587 | 588 | /c12@1.10.0: 589 | resolution: {integrity: sha512-0SsG7UDhoRWcuSvKWHaXmu5uNjDCDN3nkQLRL4Q42IlFy+ze58FcCoI3uPwINXinkz7ZinbhEgyzYFw9u9ZV8g==} 590 | dependencies: 591 | chokidar: 3.6.0 592 | confbox: 0.1.3 593 | defu: 6.1.4 594 | dotenv: 16.4.5 595 | giget: 1.2.3 596 | jiti: 1.21.0 597 | mlly: 1.6.1 598 | ohash: 1.1.3 599 | pathe: 1.1.2 600 | perfect-debounce: 1.0.0 601 | pkg-types: 1.0.3 602 | rc9: 2.1.1 603 | dev: true 604 | 605 | /cac@6.7.14: 606 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 607 | engines: {node: '>=8'} 608 | dev: true 609 | 610 | /caching-transform@4.0.0: 611 | resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} 612 | engines: {node: '>=8'} 613 | dependencies: 614 | hasha: 5.2.2 615 | make-dir: 3.1.0 616 | package-hash: 4.0.0 617 | write-file-atomic: 3.0.3 618 | dev: true 619 | 620 | /call-me-maybe@1.0.2: 621 | resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} 622 | dev: true 623 | 624 | /callsites@3.1.0: 625 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 626 | engines: {node: '>=6'} 627 | dev: true 628 | 629 | /camelcase@5.3.1: 630 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 631 | engines: {node: '>=6'} 632 | dev: true 633 | 634 | /camelcase@6.3.0: 635 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 636 | engines: {node: '>=10'} 637 | dev: true 638 | 639 | /caniuse-lite@1.0.30001598: 640 | resolution: {integrity: sha512-j8mQRDziG94uoBfeFuqsJUNECW37DXpnvhcMJMdlH2u3MRkq1sAI0LJcXP1i/Py0KbSIC4UDj8YHPrTn5YsL+Q==} 641 | dev: true 642 | 643 | /caseless@0.12.0: 644 | resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} 645 | dev: true 646 | 647 | /chai@4.4.1: 648 | resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} 649 | engines: {node: '>=4'} 650 | dependencies: 651 | assertion-error: 1.1.0 652 | check-error: 1.0.3 653 | deep-eql: 4.1.3 654 | get-func-name: 2.0.2 655 | loupe: 2.3.7 656 | pathval: 1.1.1 657 | type-detect: 4.0.8 658 | dev: true 659 | 660 | /chalk@2.4.2: 661 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 662 | engines: {node: '>=4'} 663 | dependencies: 664 | ansi-styles: 3.2.1 665 | escape-string-regexp: 1.0.5 666 | supports-color: 5.5.0 667 | dev: true 668 | 669 | /chalk@4.1.2: 670 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 671 | engines: {node: '>=10'} 672 | dependencies: 673 | ansi-styles: 4.3.0 674 | supports-color: 7.2.0 675 | dev: true 676 | 677 | /check-error@1.0.3: 678 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 679 | dependencies: 680 | get-func-name: 2.0.2 681 | dev: true 682 | 683 | /chokidar@3.5.1: 684 | resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} 685 | engines: {node: '>= 8.10.0'} 686 | dependencies: 687 | anymatch: 3.1.3 688 | braces: 3.0.2 689 | glob-parent: 5.1.2 690 | is-binary-path: 2.1.0 691 | is-glob: 4.0.3 692 | normalize-path: 3.0.0 693 | readdirp: 3.5.0 694 | optionalDependencies: 695 | fsevents: 2.3.3 696 | dev: true 697 | 698 | /chokidar@3.6.0: 699 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 700 | engines: {node: '>= 8.10.0'} 701 | dependencies: 702 | anymatch: 3.1.3 703 | braces: 3.0.2 704 | glob-parent: 5.1.2 705 | is-binary-path: 2.1.0 706 | is-glob: 4.0.3 707 | normalize-path: 3.0.0 708 | readdirp: 3.6.0 709 | optionalDependencies: 710 | fsevents: 2.3.3 711 | dev: true 712 | 713 | /chownr@2.0.0: 714 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} 715 | engines: {node: '>=10'} 716 | dev: true 717 | 718 | /citty@0.1.6: 719 | resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} 720 | dependencies: 721 | consola: 3.2.3 722 | dev: true 723 | 724 | /clean-stack@2.2.0: 725 | resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} 726 | engines: {node: '>=6'} 727 | dev: true 728 | 729 | /cliui@6.0.0: 730 | resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} 731 | dependencies: 732 | string-width: 4.2.3 733 | strip-ansi: 6.0.1 734 | wrap-ansi: 6.2.0 735 | dev: true 736 | 737 | /cliui@7.0.4: 738 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 739 | dependencies: 740 | string-width: 4.2.3 741 | strip-ansi: 6.0.1 742 | wrap-ansi: 7.0.0 743 | dev: true 744 | 745 | /color-convert@1.9.3: 746 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 747 | dependencies: 748 | color-name: 1.1.3 749 | dev: true 750 | 751 | /color-convert@2.0.1: 752 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 753 | engines: {node: '>=7.0.0'} 754 | dependencies: 755 | color-name: 1.1.4 756 | dev: true 757 | 758 | /color-name@1.1.3: 759 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 760 | dev: true 761 | 762 | /color-name@1.1.4: 763 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 764 | dev: true 765 | 766 | /combined-stream@1.0.8: 767 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 768 | engines: {node: '>= 0.8'} 769 | dependencies: 770 | delayed-stream: 1.0.0 771 | dev: true 772 | 773 | /commondir@1.0.1: 774 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 775 | dev: true 776 | 777 | /compare-func@2.0.0: 778 | resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} 779 | dependencies: 780 | array-ify: 1.0.0 781 | dot-prop: 5.3.0 782 | dev: true 783 | 784 | /concat-map@0.0.1: 785 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 786 | dev: true 787 | 788 | /confbox@0.1.3: 789 | resolution: {integrity: sha512-eH3ZxAihl1PhKfpr4VfEN6/vUd87fmgb6JkldHgg/YR6aEBhW63qUDgzP2Y6WM0UumdsYp5H3kibalXAdHfbgg==} 790 | dev: true 791 | 792 | /consola@3.2.3: 793 | resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} 794 | engines: {node: ^14.18.0 || >=16.10.0} 795 | dev: true 796 | 797 | /conventional-changelog-angular@7.0.0: 798 | resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} 799 | engines: {node: '>=16'} 800 | dependencies: 801 | compare-func: 2.0.0 802 | dev: true 803 | 804 | /conventional-changelog-atom@4.0.0: 805 | resolution: {integrity: sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==} 806 | engines: {node: '>=16'} 807 | dev: true 808 | 809 | /conventional-changelog-cli@4.1.0: 810 | resolution: {integrity: sha512-MscvILWZ6nWOoC+p/3Nn3D2cVLkjeQjyZPUr0bQ+vUORE/SPrkClJh8BOoMNpS4yk+zFJ5LlgXACxH6XGQoRXA==} 811 | engines: {node: '>=16'} 812 | hasBin: true 813 | dependencies: 814 | add-stream: 1.0.0 815 | conventional-changelog: 5.1.0 816 | meow: 12.1.1 817 | tempfile: 5.0.0 818 | dev: true 819 | 820 | /conventional-changelog-codemirror@4.0.0: 821 | resolution: {integrity: sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==} 822 | engines: {node: '>=16'} 823 | dev: true 824 | 825 | /conventional-changelog-conventionalcommits@7.0.2: 826 | resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} 827 | engines: {node: '>=16'} 828 | dependencies: 829 | compare-func: 2.0.0 830 | dev: true 831 | 832 | /conventional-changelog-core@7.0.0: 833 | resolution: {integrity: sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==} 834 | engines: {node: '>=16'} 835 | dependencies: 836 | '@hutson/parse-repository-url': 5.0.0 837 | add-stream: 1.0.0 838 | conventional-changelog-writer: 7.0.1 839 | conventional-commits-parser: 5.0.0 840 | git-raw-commits: 4.0.0 841 | git-semver-tags: 7.0.1 842 | hosted-git-info: 7.0.1 843 | normalize-package-data: 6.0.0 844 | read-pkg: 8.1.0 845 | read-pkg-up: 10.1.0 846 | dev: true 847 | 848 | /conventional-changelog-ember@4.0.0: 849 | resolution: {integrity: sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==} 850 | engines: {node: '>=16'} 851 | dev: true 852 | 853 | /conventional-changelog-eslint@5.0.0: 854 | resolution: {integrity: sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==} 855 | engines: {node: '>=16'} 856 | dev: true 857 | 858 | /conventional-changelog-express@4.0.0: 859 | resolution: {integrity: sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==} 860 | engines: {node: '>=16'} 861 | dev: true 862 | 863 | /conventional-changelog-jquery@5.0.0: 864 | resolution: {integrity: sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==} 865 | engines: {node: '>=16'} 866 | dev: true 867 | 868 | /conventional-changelog-jshint@4.0.0: 869 | resolution: {integrity: sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==} 870 | engines: {node: '>=16'} 871 | dependencies: 872 | compare-func: 2.0.0 873 | dev: true 874 | 875 | /conventional-changelog-preset-loader@4.1.0: 876 | resolution: {integrity: sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==} 877 | engines: {node: '>=16'} 878 | dev: true 879 | 880 | /conventional-changelog-writer@7.0.1: 881 | resolution: {integrity: sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==} 882 | engines: {node: '>=16'} 883 | hasBin: true 884 | dependencies: 885 | conventional-commits-filter: 4.0.0 886 | handlebars: 4.7.8 887 | json-stringify-safe: 5.0.1 888 | meow: 12.1.1 889 | semver: 7.6.0 890 | split2: 4.2.0 891 | dev: true 892 | 893 | /conventional-changelog@5.1.0: 894 | resolution: {integrity: sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==} 895 | engines: {node: '>=16'} 896 | dependencies: 897 | conventional-changelog-angular: 7.0.0 898 | conventional-changelog-atom: 4.0.0 899 | conventional-changelog-codemirror: 4.0.0 900 | conventional-changelog-conventionalcommits: 7.0.2 901 | conventional-changelog-core: 7.0.0 902 | conventional-changelog-ember: 4.0.0 903 | conventional-changelog-eslint: 5.0.0 904 | conventional-changelog-express: 4.0.0 905 | conventional-changelog-jquery: 5.0.0 906 | conventional-changelog-jshint: 4.0.0 907 | conventional-changelog-preset-loader: 4.1.0 908 | dev: true 909 | 910 | /conventional-commits-filter@4.0.0: 911 | resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==} 912 | engines: {node: '>=16'} 913 | dev: true 914 | 915 | /conventional-commits-parser@5.0.0: 916 | resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} 917 | engines: {node: '>=16'} 918 | hasBin: true 919 | dependencies: 920 | JSONStream: 1.3.5 921 | is-text-path: 2.0.0 922 | meow: 12.1.1 923 | split2: 4.2.0 924 | dev: true 925 | 926 | /convert-source-map@1.9.0: 927 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 928 | dev: true 929 | 930 | /convert-source-map@2.0.0: 931 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 932 | dev: true 933 | 934 | /core-util-is@1.0.2: 935 | resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} 936 | dev: true 937 | 938 | /coveralls@3.1.1: 939 | resolution: {integrity: sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==} 940 | engines: {node: '>=6'} 941 | hasBin: true 942 | dependencies: 943 | js-yaml: 3.14.1 944 | lcov-parse: 1.0.0 945 | log-driver: 1.2.7 946 | minimist: 1.2.8 947 | request: 2.88.2 948 | dev: true 949 | 950 | /cross-spawn@7.0.3: 951 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 952 | engines: {node: '>= 8'} 953 | dependencies: 954 | path-key: 3.1.1 955 | shebang-command: 2.0.0 956 | which: 2.0.2 957 | dev: true 958 | 959 | /dargs@8.1.0: 960 | resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} 961 | engines: {node: '>=12'} 962 | dev: true 963 | 964 | /dashdash@1.14.1: 965 | resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} 966 | engines: {node: '>=0.10'} 967 | dependencies: 968 | assert-plus: 1.0.0 969 | dev: true 970 | 971 | /debug@4.3.1(supports-color@8.1.1): 972 | resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} 973 | engines: {node: '>=6.0'} 974 | peerDependencies: 975 | supports-color: '*' 976 | peerDependenciesMeta: 977 | supports-color: 978 | optional: true 979 | dependencies: 980 | ms: 2.1.2 981 | supports-color: 8.1.1 982 | dev: true 983 | 984 | /debug@4.3.4: 985 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 986 | engines: {node: '>=6.0'} 987 | peerDependencies: 988 | supports-color: '*' 989 | peerDependenciesMeta: 990 | supports-color: 991 | optional: true 992 | dependencies: 993 | ms: 2.1.2 994 | dev: true 995 | 996 | /decamelize@1.2.0: 997 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 998 | engines: {node: '>=0.10.0'} 999 | dev: true 1000 | 1001 | /decamelize@4.0.0: 1002 | resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} 1003 | engines: {node: '>=10'} 1004 | dev: true 1005 | 1006 | /deep-eql@4.1.3: 1007 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 1008 | engines: {node: '>=6'} 1009 | dependencies: 1010 | type-detect: 4.0.8 1011 | dev: true 1012 | 1013 | /deep-is@0.1.4: 1014 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1015 | dev: true 1016 | 1017 | /default-require-extensions@3.0.1: 1018 | resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} 1019 | engines: {node: '>=8'} 1020 | dependencies: 1021 | strip-bom: 4.0.0 1022 | dev: true 1023 | 1024 | /defu@6.1.4: 1025 | resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 1026 | dev: true 1027 | 1028 | /delayed-stream@1.0.0: 1029 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1030 | engines: {node: '>=0.4.0'} 1031 | dev: true 1032 | 1033 | /destr@2.0.3: 1034 | resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} 1035 | dev: true 1036 | 1037 | /diff@5.0.0: 1038 | resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} 1039 | engines: {node: '>=0.3.1'} 1040 | dev: true 1041 | 1042 | /doctrine@3.0.0: 1043 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1044 | engines: {node: '>=6.0.0'} 1045 | dependencies: 1046 | esutils: 2.0.3 1047 | dev: true 1048 | 1049 | /dot-prop@5.3.0: 1050 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} 1051 | engines: {node: '>=8'} 1052 | dependencies: 1053 | is-obj: 2.0.0 1054 | dev: true 1055 | 1056 | /dotenv@16.4.5: 1057 | resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} 1058 | engines: {node: '>=12'} 1059 | dev: true 1060 | 1061 | /ecc-jsbn@0.1.2: 1062 | resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} 1063 | dependencies: 1064 | jsbn: 0.1.1 1065 | safer-buffer: 2.1.2 1066 | dev: true 1067 | 1068 | /electron-to-chromium@1.4.708: 1069 | resolution: {integrity: sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA==} 1070 | dev: true 1071 | 1072 | /emoji-regex@8.0.0: 1073 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1074 | dev: true 1075 | 1076 | /enquirer@2.4.1: 1077 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 1078 | engines: {node: '>=8.6'} 1079 | dependencies: 1080 | ansi-colors: 4.1.3 1081 | strip-ansi: 6.0.1 1082 | dev: true 1083 | 1084 | /error-ex@1.3.2: 1085 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1086 | dependencies: 1087 | is-arrayish: 0.2.1 1088 | dev: true 1089 | 1090 | /es6-error@4.1.1: 1091 | resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} 1092 | dev: true 1093 | 1094 | /escalade@3.1.2: 1095 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 1096 | engines: {node: '>=6'} 1097 | dev: true 1098 | 1099 | /escape-string-regexp@1.0.5: 1100 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1101 | engines: {node: '>=0.8.0'} 1102 | dev: true 1103 | 1104 | /escape-string-regexp@4.0.0: 1105 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1106 | engines: {node: '>=10'} 1107 | dev: true 1108 | 1109 | /eslint-scope@5.1.1: 1110 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1111 | engines: {node: '>=8.0.0'} 1112 | dependencies: 1113 | esrecurse: 4.3.0 1114 | estraverse: 4.3.0 1115 | dev: true 1116 | 1117 | /eslint-utils@2.1.0: 1118 | resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} 1119 | engines: {node: '>=6'} 1120 | dependencies: 1121 | eslint-visitor-keys: 1.3.0 1122 | dev: true 1123 | 1124 | /eslint-visitor-keys@1.3.0: 1125 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} 1126 | engines: {node: '>=4'} 1127 | dev: true 1128 | 1129 | /eslint-visitor-keys@2.1.0: 1130 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 1131 | engines: {node: '>=10'} 1132 | dev: true 1133 | 1134 | /eslint@7.32.0: 1135 | resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} 1136 | engines: {node: ^10.12.0 || >=12.0.0} 1137 | hasBin: true 1138 | dependencies: 1139 | '@babel/code-frame': 7.12.11 1140 | '@eslint/eslintrc': 0.4.3 1141 | '@humanwhocodes/config-array': 0.5.0 1142 | ajv: 6.12.6 1143 | chalk: 4.1.2 1144 | cross-spawn: 7.0.3 1145 | debug: 4.3.4 1146 | doctrine: 3.0.0 1147 | enquirer: 2.4.1 1148 | escape-string-regexp: 4.0.0 1149 | eslint-scope: 5.1.1 1150 | eslint-utils: 2.1.0 1151 | eslint-visitor-keys: 2.1.0 1152 | espree: 7.3.1 1153 | esquery: 1.5.0 1154 | esutils: 2.0.3 1155 | fast-deep-equal: 3.1.3 1156 | file-entry-cache: 6.0.1 1157 | functional-red-black-tree: 1.0.1 1158 | glob-parent: 5.1.2 1159 | globals: 13.24.0 1160 | ignore: 4.0.6 1161 | import-fresh: 3.3.0 1162 | imurmurhash: 0.1.4 1163 | is-glob: 4.0.3 1164 | js-yaml: 3.14.1 1165 | json-stable-stringify-without-jsonify: 1.0.1 1166 | levn: 0.4.1 1167 | lodash.merge: 4.6.2 1168 | minimatch: 3.1.2 1169 | natural-compare: 1.4.0 1170 | optionator: 0.9.3 1171 | progress: 2.0.3 1172 | regexpp: 3.2.0 1173 | semver: 7.6.0 1174 | strip-ansi: 6.0.1 1175 | strip-json-comments: 3.1.1 1176 | table: 6.8.1 1177 | text-table: 0.2.0 1178 | v8-compile-cache: 2.4.0 1179 | transitivePeerDependencies: 1180 | - supports-color 1181 | dev: true 1182 | 1183 | /espree@7.3.1: 1184 | resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} 1185 | engines: {node: ^10.12.0 || >=12.0.0} 1186 | dependencies: 1187 | acorn: 7.4.1 1188 | acorn-jsx: 5.3.2(acorn@7.4.1) 1189 | eslint-visitor-keys: 1.3.0 1190 | dev: true 1191 | 1192 | /esprima@4.0.1: 1193 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1194 | engines: {node: '>=4'} 1195 | hasBin: true 1196 | dev: true 1197 | 1198 | /esquery@1.5.0: 1199 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1200 | engines: {node: '>=0.10'} 1201 | dependencies: 1202 | estraverse: 5.3.0 1203 | dev: true 1204 | 1205 | /esrecurse@4.3.0: 1206 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1207 | engines: {node: '>=4.0'} 1208 | dependencies: 1209 | estraverse: 5.3.0 1210 | dev: true 1211 | 1212 | /estraverse@4.3.0: 1213 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1214 | engines: {node: '>=4.0'} 1215 | dev: true 1216 | 1217 | /estraverse@5.3.0: 1218 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1219 | engines: {node: '>=4.0'} 1220 | dev: true 1221 | 1222 | /esutils@2.0.3: 1223 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1224 | engines: {node: '>=0.10.0'} 1225 | dev: true 1226 | 1227 | /execa@8.0.1: 1228 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1229 | engines: {node: '>=16.17'} 1230 | dependencies: 1231 | cross-spawn: 7.0.3 1232 | get-stream: 8.0.1 1233 | human-signals: 5.0.0 1234 | is-stream: 3.0.0 1235 | merge-stream: 2.0.0 1236 | npm-run-path: 5.3.0 1237 | onetime: 6.0.0 1238 | signal-exit: 4.1.0 1239 | strip-final-newline: 3.0.0 1240 | dev: true 1241 | 1242 | /extend@3.0.2: 1243 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 1244 | dev: true 1245 | 1246 | /extsprintf@1.3.0: 1247 | resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} 1248 | engines: {'0': node >=0.6.0} 1249 | dev: true 1250 | 1251 | /fast-deep-equal@3.1.3: 1252 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1253 | dev: true 1254 | 1255 | /fast-glob@3.3.2: 1256 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1257 | engines: {node: '>=8.6.0'} 1258 | dependencies: 1259 | '@nodelib/fs.stat': 2.0.5 1260 | '@nodelib/fs.walk': 1.2.8 1261 | glob-parent: 5.1.2 1262 | merge2: 1.4.1 1263 | micromatch: 4.0.5 1264 | dev: true 1265 | 1266 | /fast-json-stable-stringify@2.1.0: 1267 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1268 | dev: true 1269 | 1270 | /fast-levenshtein@2.0.6: 1271 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1272 | dev: true 1273 | 1274 | /fastq@1.17.1: 1275 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1276 | dependencies: 1277 | reusify: 1.0.4 1278 | dev: true 1279 | 1280 | /file-entry-cache@6.0.1: 1281 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1282 | engines: {node: ^10.12.0 || >=12.0.0} 1283 | dependencies: 1284 | flat-cache: 3.2.0 1285 | dev: true 1286 | 1287 | /fill-range@7.0.1: 1288 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1289 | engines: {node: '>=8'} 1290 | dependencies: 1291 | to-regex-range: 5.0.1 1292 | dev: true 1293 | 1294 | /find-cache-dir@3.3.2: 1295 | resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 1296 | engines: {node: '>=8'} 1297 | dependencies: 1298 | commondir: 1.0.1 1299 | make-dir: 3.1.0 1300 | pkg-dir: 4.2.0 1301 | dev: true 1302 | 1303 | /find-up@4.1.0: 1304 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1305 | engines: {node: '>=8'} 1306 | dependencies: 1307 | locate-path: 5.0.0 1308 | path-exists: 4.0.0 1309 | dev: true 1310 | 1311 | /find-up@5.0.0: 1312 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1313 | engines: {node: '>=10'} 1314 | dependencies: 1315 | locate-path: 6.0.0 1316 | path-exists: 4.0.0 1317 | dev: true 1318 | 1319 | /find-up@6.3.0: 1320 | resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} 1321 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1322 | dependencies: 1323 | locate-path: 7.2.0 1324 | path-exists: 5.0.0 1325 | dev: true 1326 | 1327 | /flat-cache@3.2.0: 1328 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1329 | engines: {node: ^10.12.0 || >=12.0.0} 1330 | dependencies: 1331 | flatted: 3.3.1 1332 | keyv: 4.5.4 1333 | rimraf: 3.0.2 1334 | dev: true 1335 | 1336 | /flat@5.0.2: 1337 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} 1338 | hasBin: true 1339 | dev: true 1340 | 1341 | /flatted@3.3.1: 1342 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1343 | dev: true 1344 | 1345 | /foreground-child@2.0.0: 1346 | resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} 1347 | engines: {node: '>=8.0.0'} 1348 | dependencies: 1349 | cross-spawn: 7.0.3 1350 | signal-exit: 3.0.7 1351 | dev: true 1352 | 1353 | /forever-agent@0.6.1: 1354 | resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} 1355 | dev: true 1356 | 1357 | /form-data@2.3.3: 1358 | resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} 1359 | engines: {node: '>= 0.12'} 1360 | dependencies: 1361 | asynckit: 0.4.0 1362 | combined-stream: 1.0.8 1363 | mime-types: 2.1.35 1364 | dev: true 1365 | 1366 | /fromentries@1.3.2: 1367 | resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} 1368 | dev: true 1369 | 1370 | /fs-minipass@2.1.0: 1371 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} 1372 | engines: {node: '>= 8'} 1373 | dependencies: 1374 | minipass: 3.3.6 1375 | dev: true 1376 | 1377 | /fs.realpath@1.0.0: 1378 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1379 | dev: true 1380 | 1381 | /fsevents@2.3.3: 1382 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1383 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1384 | os: [darwin] 1385 | requiresBuild: true 1386 | dev: true 1387 | optional: true 1388 | 1389 | /function-bind@1.1.2: 1390 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1391 | dev: true 1392 | 1393 | /functional-red-black-tree@1.0.1: 1394 | resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} 1395 | dev: true 1396 | 1397 | /gensync@1.0.0-beta.2: 1398 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1399 | engines: {node: '>=6.9.0'} 1400 | dev: true 1401 | 1402 | /get-caller-file@2.0.5: 1403 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1404 | engines: {node: 6.* || 8.* || >= 10.*} 1405 | dev: true 1406 | 1407 | /get-func-name@2.0.2: 1408 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1409 | dev: true 1410 | 1411 | /get-package-type@0.1.0: 1412 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 1413 | engines: {node: '>=8.0.0'} 1414 | dev: true 1415 | 1416 | /get-stream@8.0.1: 1417 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1418 | engines: {node: '>=16'} 1419 | dev: true 1420 | 1421 | /getpass@0.1.7: 1422 | resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} 1423 | dependencies: 1424 | assert-plus: 1.0.0 1425 | dev: true 1426 | 1427 | /giget@1.2.3: 1428 | resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} 1429 | hasBin: true 1430 | dependencies: 1431 | citty: 0.1.6 1432 | consola: 3.2.3 1433 | defu: 6.1.4 1434 | node-fetch-native: 1.6.4 1435 | nypm: 0.3.8 1436 | ohash: 1.1.3 1437 | pathe: 1.1.2 1438 | tar: 6.2.1 1439 | dev: true 1440 | 1441 | /git-raw-commits@4.0.0: 1442 | resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} 1443 | engines: {node: '>=16'} 1444 | hasBin: true 1445 | dependencies: 1446 | dargs: 8.1.0 1447 | meow: 12.1.1 1448 | split2: 4.2.0 1449 | dev: true 1450 | 1451 | /git-semver-tags@7.0.1: 1452 | resolution: {integrity: sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==} 1453 | engines: {node: '>=16'} 1454 | hasBin: true 1455 | dependencies: 1456 | meow: 12.1.1 1457 | semver: 7.6.0 1458 | dev: true 1459 | 1460 | /glob-parent@5.1.2: 1461 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1462 | engines: {node: '>= 6'} 1463 | dependencies: 1464 | is-glob: 4.0.3 1465 | dev: true 1466 | 1467 | /glob@7.1.6: 1468 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1469 | dependencies: 1470 | fs.realpath: 1.0.0 1471 | inflight: 1.0.6 1472 | inherits: 2.0.4 1473 | minimatch: 3.0.4 1474 | once: 1.4.0 1475 | path-is-absolute: 1.0.1 1476 | dev: true 1477 | 1478 | /glob@7.2.3: 1479 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1480 | dependencies: 1481 | fs.realpath: 1.0.0 1482 | inflight: 1.0.6 1483 | inherits: 2.0.4 1484 | minimatch: 3.1.2 1485 | once: 1.4.0 1486 | path-is-absolute: 1.0.1 1487 | dev: true 1488 | 1489 | /globals@11.12.0: 1490 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1491 | engines: {node: '>=4'} 1492 | dev: true 1493 | 1494 | /globals@13.24.0: 1495 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1496 | engines: {node: '>=8'} 1497 | dependencies: 1498 | type-fest: 0.20.2 1499 | dev: true 1500 | 1501 | /graceful-fs@4.2.11: 1502 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1503 | dev: true 1504 | 1505 | /growl@1.10.5: 1506 | resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} 1507 | engines: {node: '>=4.x'} 1508 | dev: true 1509 | 1510 | /handlebars@4.7.8: 1511 | resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} 1512 | engines: {node: '>=0.4.7'} 1513 | hasBin: true 1514 | dependencies: 1515 | minimist: 1.2.8 1516 | neo-async: 2.6.2 1517 | source-map: 0.6.1 1518 | wordwrap: 1.0.0 1519 | optionalDependencies: 1520 | uglify-js: 3.17.4 1521 | dev: true 1522 | 1523 | /har-schema@2.0.0: 1524 | resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} 1525 | engines: {node: '>=4'} 1526 | dev: true 1527 | 1528 | /har-validator@5.1.5: 1529 | resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} 1530 | engines: {node: '>=6'} 1531 | deprecated: this library is no longer supported 1532 | dependencies: 1533 | ajv: 6.12.6 1534 | har-schema: 2.0.0 1535 | dev: true 1536 | 1537 | /has-flag@3.0.0: 1538 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1539 | engines: {node: '>=4'} 1540 | dev: true 1541 | 1542 | /has-flag@4.0.0: 1543 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1544 | engines: {node: '>=8'} 1545 | dev: true 1546 | 1547 | /hasha@5.2.2: 1548 | resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} 1549 | engines: {node: '>=8'} 1550 | dependencies: 1551 | is-stream: 2.0.1 1552 | type-fest: 0.8.1 1553 | dev: true 1554 | 1555 | /hasown@2.0.2: 1556 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1557 | engines: {node: '>= 0.4'} 1558 | dependencies: 1559 | function-bind: 1.1.2 1560 | dev: true 1561 | 1562 | /he@1.2.0: 1563 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1564 | hasBin: true 1565 | dev: true 1566 | 1567 | /hosted-git-info@7.0.1: 1568 | resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} 1569 | engines: {node: ^16.14.0 || >=18.0.0} 1570 | dependencies: 1571 | lru-cache: 10.2.0 1572 | dev: true 1573 | 1574 | /html-escaper@2.0.2: 1575 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1576 | dev: true 1577 | 1578 | /http-signature@1.2.0: 1579 | resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} 1580 | engines: {node: '>=0.8', npm: '>=1.3.7'} 1581 | dependencies: 1582 | assert-plus: 1.0.0 1583 | jsprim: 1.4.2 1584 | sshpk: 1.18.0 1585 | dev: true 1586 | 1587 | /human-signals@5.0.0: 1588 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1589 | engines: {node: '>=16.17.0'} 1590 | dev: true 1591 | 1592 | /ignore@4.0.6: 1593 | resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} 1594 | engines: {node: '>= 4'} 1595 | dev: true 1596 | 1597 | /import-fresh@3.3.0: 1598 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1599 | engines: {node: '>=6'} 1600 | dependencies: 1601 | parent-module: 1.0.1 1602 | resolve-from: 4.0.0 1603 | dev: true 1604 | 1605 | /imurmurhash@0.1.4: 1606 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1607 | engines: {node: '>=0.8.19'} 1608 | dev: true 1609 | 1610 | /indent-string@4.0.0: 1611 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1612 | engines: {node: '>=8'} 1613 | dev: true 1614 | 1615 | /inflight@1.0.6: 1616 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1617 | dependencies: 1618 | once: 1.4.0 1619 | wrappy: 1.0.2 1620 | dev: true 1621 | 1622 | /inherits@2.0.4: 1623 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1624 | dev: true 1625 | 1626 | /is-arrayish@0.2.1: 1627 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1628 | dev: true 1629 | 1630 | /is-binary-path@2.1.0: 1631 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1632 | engines: {node: '>=8'} 1633 | dependencies: 1634 | binary-extensions: 2.3.0 1635 | dev: true 1636 | 1637 | /is-core-module@2.13.1: 1638 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1639 | dependencies: 1640 | hasown: 2.0.2 1641 | dev: true 1642 | 1643 | /is-extglob@2.1.1: 1644 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1645 | engines: {node: '>=0.10.0'} 1646 | dev: true 1647 | 1648 | /is-fullwidth-code-point@2.0.0: 1649 | resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} 1650 | engines: {node: '>=4'} 1651 | dev: true 1652 | 1653 | /is-fullwidth-code-point@3.0.0: 1654 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1655 | engines: {node: '>=8'} 1656 | dev: true 1657 | 1658 | /is-glob@4.0.3: 1659 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1660 | engines: {node: '>=0.10.0'} 1661 | dependencies: 1662 | is-extglob: 2.1.1 1663 | dev: true 1664 | 1665 | /is-number@7.0.0: 1666 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1667 | engines: {node: '>=0.12.0'} 1668 | dev: true 1669 | 1670 | /is-obj@2.0.0: 1671 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 1672 | engines: {node: '>=8'} 1673 | dev: true 1674 | 1675 | /is-plain-obj@2.1.0: 1676 | resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} 1677 | engines: {node: '>=8'} 1678 | dev: true 1679 | 1680 | /is-stream@2.0.1: 1681 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1682 | engines: {node: '>=8'} 1683 | dev: true 1684 | 1685 | /is-stream@3.0.0: 1686 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1687 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1688 | dev: true 1689 | 1690 | /is-text-path@2.0.0: 1691 | resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} 1692 | engines: {node: '>=8'} 1693 | dependencies: 1694 | text-extensions: 2.4.0 1695 | dev: true 1696 | 1697 | /is-typedarray@1.0.0: 1698 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 1699 | dev: true 1700 | 1701 | /is-windows@1.0.2: 1702 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1703 | engines: {node: '>=0.10.0'} 1704 | dev: true 1705 | 1706 | /isexe@2.0.0: 1707 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1708 | dev: true 1709 | 1710 | /isstream@0.1.2: 1711 | resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} 1712 | dev: true 1713 | 1714 | /istanbul-lib-coverage@3.2.2: 1715 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1716 | engines: {node: '>=8'} 1717 | dev: true 1718 | 1719 | /istanbul-lib-hook@3.0.0: 1720 | resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} 1721 | engines: {node: '>=8'} 1722 | dependencies: 1723 | append-transform: 2.0.0 1724 | dev: true 1725 | 1726 | /istanbul-lib-instrument@4.0.3: 1727 | resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} 1728 | engines: {node: '>=8'} 1729 | dependencies: 1730 | '@babel/core': 7.24.0 1731 | '@istanbuljs/schema': 0.1.3 1732 | istanbul-lib-coverage: 3.2.2 1733 | semver: 6.3.1 1734 | transitivePeerDependencies: 1735 | - supports-color 1736 | dev: true 1737 | 1738 | /istanbul-lib-processinfo@2.0.3: 1739 | resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} 1740 | engines: {node: '>=8'} 1741 | dependencies: 1742 | archy: 1.0.0 1743 | cross-spawn: 7.0.3 1744 | istanbul-lib-coverage: 3.2.2 1745 | p-map: 3.0.0 1746 | rimraf: 3.0.2 1747 | uuid: 8.3.2 1748 | dev: true 1749 | 1750 | /istanbul-lib-report@3.0.1: 1751 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1752 | engines: {node: '>=10'} 1753 | dependencies: 1754 | istanbul-lib-coverage: 3.2.2 1755 | make-dir: 4.0.0 1756 | supports-color: 7.2.0 1757 | dev: true 1758 | 1759 | /istanbul-lib-source-maps@4.0.1: 1760 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1761 | engines: {node: '>=10'} 1762 | dependencies: 1763 | debug: 4.3.4 1764 | istanbul-lib-coverage: 3.2.2 1765 | source-map: 0.6.1 1766 | transitivePeerDependencies: 1767 | - supports-color 1768 | dev: true 1769 | 1770 | /istanbul-reports@3.1.7: 1771 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 1772 | engines: {node: '>=8'} 1773 | dependencies: 1774 | html-escaper: 2.0.2 1775 | istanbul-lib-report: 3.0.1 1776 | dev: true 1777 | 1778 | /jiti@1.21.0: 1779 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} 1780 | hasBin: true 1781 | dev: true 1782 | 1783 | /js-tokens@4.0.0: 1784 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1785 | dev: true 1786 | 1787 | /js-yaml@3.14.1: 1788 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1789 | hasBin: true 1790 | dependencies: 1791 | argparse: 1.0.10 1792 | esprima: 4.0.1 1793 | dev: true 1794 | 1795 | /js-yaml@4.0.0: 1796 | resolution: {integrity: sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==} 1797 | hasBin: true 1798 | dependencies: 1799 | argparse: 2.0.1 1800 | dev: true 1801 | 1802 | /js-yaml@4.1.0: 1803 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1804 | hasBin: true 1805 | dependencies: 1806 | argparse: 2.0.1 1807 | dev: true 1808 | 1809 | /jsbn@0.1.1: 1810 | resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} 1811 | dev: true 1812 | 1813 | /jsesc@2.5.2: 1814 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1815 | engines: {node: '>=4'} 1816 | hasBin: true 1817 | dev: true 1818 | 1819 | /json-buffer@3.0.1: 1820 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1821 | dev: true 1822 | 1823 | /json-parse-even-better-errors@3.0.1: 1824 | resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==} 1825 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1826 | dev: true 1827 | 1828 | /json-schema-traverse@0.4.1: 1829 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1830 | dev: true 1831 | 1832 | /json-schema-traverse@1.0.0: 1833 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1834 | dev: true 1835 | 1836 | /json-schema@0.4.0: 1837 | resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} 1838 | dev: true 1839 | 1840 | /json-stable-stringify-without-jsonify@1.0.1: 1841 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1842 | dev: true 1843 | 1844 | /json-stringify-safe@5.0.1: 1845 | resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} 1846 | dev: true 1847 | 1848 | /json5@2.2.3: 1849 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1850 | engines: {node: '>=6'} 1851 | hasBin: true 1852 | dev: true 1853 | 1854 | /jsonc-parser@3.2.1: 1855 | resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} 1856 | dev: true 1857 | 1858 | /jsonparse@1.3.1: 1859 | resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} 1860 | engines: {'0': node >= 0.2.0} 1861 | dev: true 1862 | 1863 | /jsprim@1.4.2: 1864 | resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} 1865 | engines: {node: '>=0.6.0'} 1866 | dependencies: 1867 | assert-plus: 1.0.0 1868 | extsprintf: 1.3.0 1869 | json-schema: 0.4.0 1870 | verror: 1.10.0 1871 | dev: true 1872 | 1873 | /keyv@4.5.4: 1874 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1875 | dependencies: 1876 | json-buffer: 3.0.1 1877 | dev: true 1878 | 1879 | /kleur@3.0.3: 1880 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1881 | engines: {node: '>=6'} 1882 | dev: true 1883 | 1884 | /lcov-parse@1.0.0: 1885 | resolution: {integrity: sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==} 1886 | hasBin: true 1887 | dev: true 1888 | 1889 | /levn@0.4.1: 1890 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1891 | engines: {node: '>= 0.8.0'} 1892 | dependencies: 1893 | prelude-ls: 1.2.1 1894 | type-check: 0.4.0 1895 | dev: true 1896 | 1897 | /lines-and-columns@2.0.4: 1898 | resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} 1899 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1900 | dev: true 1901 | 1902 | /locate-path@5.0.0: 1903 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1904 | engines: {node: '>=8'} 1905 | dependencies: 1906 | p-locate: 4.1.0 1907 | dev: true 1908 | 1909 | /locate-path@6.0.0: 1910 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1911 | engines: {node: '>=10'} 1912 | dependencies: 1913 | p-locate: 5.0.0 1914 | dev: true 1915 | 1916 | /locate-path@7.2.0: 1917 | resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} 1918 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1919 | dependencies: 1920 | p-locate: 6.0.0 1921 | dev: true 1922 | 1923 | /lodash.flattendeep@4.4.0: 1924 | resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} 1925 | dev: true 1926 | 1927 | /lodash.merge@4.6.2: 1928 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1929 | dev: true 1930 | 1931 | /lodash.truncate@4.4.2: 1932 | resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} 1933 | dev: true 1934 | 1935 | /log-driver@1.2.7: 1936 | resolution: {integrity: sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==} 1937 | engines: {node: '>=0.8.6'} 1938 | dev: true 1939 | 1940 | /log-symbols@4.0.0: 1941 | resolution: {integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==} 1942 | engines: {node: '>=10'} 1943 | dependencies: 1944 | chalk: 4.1.2 1945 | dev: true 1946 | 1947 | /loupe@2.3.7: 1948 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1949 | dependencies: 1950 | get-func-name: 2.0.2 1951 | dev: true 1952 | 1953 | /lru-cache@10.2.0: 1954 | resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} 1955 | engines: {node: 14 || >=16.14} 1956 | dev: true 1957 | 1958 | /lru-cache@5.1.1: 1959 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1960 | dependencies: 1961 | yallist: 3.1.1 1962 | dev: true 1963 | 1964 | /lru-cache@6.0.0: 1965 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1966 | engines: {node: '>=10'} 1967 | dependencies: 1968 | yallist: 4.0.0 1969 | dev: true 1970 | 1971 | /make-dir@3.1.0: 1972 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1973 | engines: {node: '>=8'} 1974 | dependencies: 1975 | semver: 6.3.1 1976 | dev: true 1977 | 1978 | /make-dir@4.0.0: 1979 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1980 | engines: {node: '>=10'} 1981 | dependencies: 1982 | semver: 7.6.0 1983 | dev: true 1984 | 1985 | /meow@12.1.1: 1986 | resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} 1987 | engines: {node: '>=16.10'} 1988 | dev: true 1989 | 1990 | /merge-stream@2.0.0: 1991 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1992 | dev: true 1993 | 1994 | /merge2@1.4.1: 1995 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1996 | engines: {node: '>= 8'} 1997 | dev: true 1998 | 1999 | /micromatch@4.0.5: 2000 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2001 | engines: {node: '>=8.6'} 2002 | dependencies: 2003 | braces: 3.0.2 2004 | picomatch: 2.3.1 2005 | dev: true 2006 | 2007 | /mime-db@1.52.0: 2008 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2009 | engines: {node: '>= 0.6'} 2010 | dev: true 2011 | 2012 | /mime-types@2.1.35: 2013 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2014 | engines: {node: '>= 0.6'} 2015 | dependencies: 2016 | mime-db: 1.52.0 2017 | dev: true 2018 | 2019 | /mimic-fn@4.0.0: 2020 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 2021 | engines: {node: '>=12'} 2022 | dev: true 2023 | 2024 | /minimatch@3.0.4: 2025 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} 2026 | dependencies: 2027 | brace-expansion: 1.1.11 2028 | dev: true 2029 | 2030 | /minimatch@3.1.2: 2031 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2032 | dependencies: 2033 | brace-expansion: 1.1.11 2034 | dev: true 2035 | 2036 | /minimist@1.2.8: 2037 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2038 | dev: true 2039 | 2040 | /minipass@3.3.6: 2041 | resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} 2042 | engines: {node: '>=8'} 2043 | dependencies: 2044 | yallist: 4.0.0 2045 | dev: true 2046 | 2047 | /minipass@5.0.0: 2048 | resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} 2049 | engines: {node: '>=8'} 2050 | dev: true 2051 | 2052 | /minizlib@2.1.2: 2053 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} 2054 | engines: {node: '>= 8'} 2055 | dependencies: 2056 | minipass: 3.3.6 2057 | yallist: 4.0.0 2058 | dev: true 2059 | 2060 | /mkdirp@1.0.4: 2061 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 2062 | engines: {node: '>=10'} 2063 | hasBin: true 2064 | dev: true 2065 | 2066 | /mlly@1.6.1: 2067 | resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} 2068 | dependencies: 2069 | acorn: 8.11.3 2070 | pathe: 1.1.2 2071 | pkg-types: 1.0.3 2072 | ufo: 1.5.3 2073 | dev: true 2074 | 2075 | /mocha-lcov-reporter@1.3.0: 2076 | resolution: {integrity: sha512-/5zI2tW4lq/ft8MGpYQ1nIH6yePPtIzdGeUEwFMKfMRdLfAQ1QW2c68eEJop32tNdN5srHa/E2TzB+erm3YMYA==} 2077 | engines: {node: '>= 0.6.0'} 2078 | dev: true 2079 | 2080 | /mocha@8.4.0: 2081 | resolution: {integrity: sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==} 2082 | engines: {node: '>= 10.12.0'} 2083 | hasBin: true 2084 | dependencies: 2085 | '@ungap/promise-all-settled': 1.1.2 2086 | ansi-colors: 4.1.1 2087 | browser-stdout: 1.3.1 2088 | chokidar: 3.5.1 2089 | debug: 4.3.1(supports-color@8.1.1) 2090 | diff: 5.0.0 2091 | escape-string-regexp: 4.0.0 2092 | find-up: 5.0.0 2093 | glob: 7.1.6 2094 | growl: 1.10.5 2095 | he: 1.2.0 2096 | js-yaml: 4.0.0 2097 | log-symbols: 4.0.0 2098 | minimatch: 3.0.4 2099 | ms: 2.1.3 2100 | nanoid: 3.1.20 2101 | serialize-javascript: 5.0.1 2102 | strip-json-comments: 3.1.1 2103 | supports-color: 8.1.1 2104 | which: 2.0.2 2105 | wide-align: 1.1.3 2106 | workerpool: 6.1.0 2107 | yargs: 16.2.0 2108 | yargs-parser: 20.2.4 2109 | yargs-unparser: 2.0.0 2110 | dev: true 2111 | 2112 | /ms@2.1.2: 2113 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2114 | dev: true 2115 | 2116 | /ms@2.1.3: 2117 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2118 | dev: true 2119 | 2120 | /nanoid@3.1.20: 2121 | resolution: {integrity: sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==} 2122 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2123 | hasBin: true 2124 | dev: true 2125 | 2126 | /natural-compare@1.4.0: 2127 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2128 | dev: true 2129 | 2130 | /neo-async@2.6.2: 2131 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 2132 | dev: true 2133 | 2134 | /node-fetch-native@1.6.4: 2135 | resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} 2136 | dev: true 2137 | 2138 | /node-fetch@2.7.0: 2139 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 2140 | engines: {node: 4.x || >=6.0.0} 2141 | peerDependencies: 2142 | encoding: ^0.1.0 2143 | peerDependenciesMeta: 2144 | encoding: 2145 | optional: true 2146 | dependencies: 2147 | whatwg-url: 5.0.0 2148 | dev: false 2149 | 2150 | /node-preload@0.2.1: 2151 | resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} 2152 | engines: {node: '>=8'} 2153 | dependencies: 2154 | process-on-spawn: 1.0.0 2155 | dev: true 2156 | 2157 | /node-releases@2.0.14: 2158 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 2159 | dev: true 2160 | 2161 | /normalize-package-data@6.0.0: 2162 | resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} 2163 | engines: {node: ^16.14.0 || >=18.0.0} 2164 | dependencies: 2165 | hosted-git-info: 7.0.1 2166 | is-core-module: 2.13.1 2167 | semver: 7.6.0 2168 | validate-npm-package-license: 3.0.4 2169 | dev: true 2170 | 2171 | /normalize-path@3.0.0: 2172 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2173 | engines: {node: '>=0.10.0'} 2174 | dev: true 2175 | 2176 | /npm-run-path@5.3.0: 2177 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 2178 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2179 | dependencies: 2180 | path-key: 4.0.0 2181 | dev: true 2182 | 2183 | /nyc@15.1.0: 2184 | resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} 2185 | engines: {node: '>=8.9'} 2186 | hasBin: true 2187 | dependencies: 2188 | '@istanbuljs/load-nyc-config': 1.1.0 2189 | '@istanbuljs/schema': 0.1.3 2190 | caching-transform: 4.0.0 2191 | convert-source-map: 1.9.0 2192 | decamelize: 1.2.0 2193 | find-cache-dir: 3.3.2 2194 | find-up: 4.1.0 2195 | foreground-child: 2.0.0 2196 | get-package-type: 0.1.0 2197 | glob: 7.2.3 2198 | istanbul-lib-coverage: 3.2.2 2199 | istanbul-lib-hook: 3.0.0 2200 | istanbul-lib-instrument: 4.0.3 2201 | istanbul-lib-processinfo: 2.0.3 2202 | istanbul-lib-report: 3.0.1 2203 | istanbul-lib-source-maps: 4.0.1 2204 | istanbul-reports: 3.1.7 2205 | make-dir: 3.1.0 2206 | node-preload: 0.2.1 2207 | p-map: 3.0.0 2208 | process-on-spawn: 1.0.0 2209 | resolve-from: 5.0.0 2210 | rimraf: 3.0.2 2211 | signal-exit: 3.0.7 2212 | spawn-wrap: 2.0.0 2213 | test-exclude: 6.0.0 2214 | yargs: 15.4.1 2215 | transitivePeerDependencies: 2216 | - supports-color 2217 | dev: true 2218 | 2219 | /nypm@0.3.8: 2220 | resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} 2221 | engines: {node: ^14.16.0 || >=16.10.0} 2222 | hasBin: true 2223 | dependencies: 2224 | citty: 0.1.6 2225 | consola: 3.2.3 2226 | execa: 8.0.1 2227 | pathe: 1.1.2 2228 | ufo: 1.5.3 2229 | dev: true 2230 | 2231 | /oauth-sign@0.9.0: 2232 | resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} 2233 | dev: true 2234 | 2235 | /ohash@1.1.3: 2236 | resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} 2237 | dev: true 2238 | 2239 | /once@1.4.0: 2240 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2241 | dependencies: 2242 | wrappy: 1.0.2 2243 | dev: true 2244 | 2245 | /onetime@6.0.0: 2246 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2247 | engines: {node: '>=12'} 2248 | dependencies: 2249 | mimic-fn: 4.0.0 2250 | dev: true 2251 | 2252 | /optionator@0.9.3: 2253 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2254 | engines: {node: '>= 0.8.0'} 2255 | dependencies: 2256 | '@aashutoshrathi/word-wrap': 1.2.6 2257 | deep-is: 0.1.4 2258 | fast-levenshtein: 2.0.6 2259 | levn: 0.4.1 2260 | prelude-ls: 1.2.1 2261 | type-check: 0.4.0 2262 | dev: true 2263 | 2264 | /p-limit@2.3.0: 2265 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2266 | engines: {node: '>=6'} 2267 | dependencies: 2268 | p-try: 2.2.0 2269 | dev: true 2270 | 2271 | /p-limit@3.1.0: 2272 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2273 | engines: {node: '>=10'} 2274 | dependencies: 2275 | yocto-queue: 0.1.0 2276 | dev: true 2277 | 2278 | /p-limit@4.0.0: 2279 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 2280 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2281 | dependencies: 2282 | yocto-queue: 1.0.0 2283 | dev: true 2284 | 2285 | /p-locate@4.1.0: 2286 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2287 | engines: {node: '>=8'} 2288 | dependencies: 2289 | p-limit: 2.3.0 2290 | dev: true 2291 | 2292 | /p-locate@5.0.0: 2293 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2294 | engines: {node: '>=10'} 2295 | dependencies: 2296 | p-limit: 3.1.0 2297 | dev: true 2298 | 2299 | /p-locate@6.0.0: 2300 | resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} 2301 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2302 | dependencies: 2303 | p-limit: 4.0.0 2304 | dev: true 2305 | 2306 | /p-map@3.0.0: 2307 | resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} 2308 | engines: {node: '>=8'} 2309 | dependencies: 2310 | aggregate-error: 3.1.0 2311 | dev: true 2312 | 2313 | /p-try@2.2.0: 2314 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2315 | engines: {node: '>=6'} 2316 | dev: true 2317 | 2318 | /package-hash@4.0.0: 2319 | resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} 2320 | engines: {node: '>=8'} 2321 | dependencies: 2322 | graceful-fs: 4.2.11 2323 | hasha: 5.2.2 2324 | lodash.flattendeep: 4.4.0 2325 | release-zalgo: 1.0.0 2326 | dev: true 2327 | 2328 | /parent-module@1.0.1: 2329 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2330 | engines: {node: '>=6'} 2331 | dependencies: 2332 | callsites: 3.1.0 2333 | dev: true 2334 | 2335 | /parse-json@7.1.1: 2336 | resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} 2337 | engines: {node: '>=16'} 2338 | dependencies: 2339 | '@babel/code-frame': 7.23.5 2340 | error-ex: 1.3.2 2341 | json-parse-even-better-errors: 3.0.1 2342 | lines-and-columns: 2.0.4 2343 | type-fest: 3.13.1 2344 | dev: true 2345 | 2346 | /path-exists@4.0.0: 2347 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2348 | engines: {node: '>=8'} 2349 | dev: true 2350 | 2351 | /path-exists@5.0.0: 2352 | resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} 2353 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2354 | dev: true 2355 | 2356 | /path-is-absolute@1.0.1: 2357 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2358 | engines: {node: '>=0.10.0'} 2359 | dev: true 2360 | 2361 | /path-key@3.1.1: 2362 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2363 | engines: {node: '>=8'} 2364 | dev: true 2365 | 2366 | /path-key@4.0.0: 2367 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2368 | engines: {node: '>=12'} 2369 | dev: true 2370 | 2371 | /pathe@1.1.2: 2372 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 2373 | dev: true 2374 | 2375 | /pathval@1.1.1: 2376 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 2377 | dev: true 2378 | 2379 | /perfect-debounce@1.0.0: 2380 | resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} 2381 | dev: true 2382 | 2383 | /performance-now@2.1.0: 2384 | resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} 2385 | dev: true 2386 | 2387 | /picocolors@1.0.0: 2388 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2389 | dev: true 2390 | 2391 | /picomatch@2.3.1: 2392 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2393 | engines: {node: '>=8.6'} 2394 | dev: true 2395 | 2396 | /pkg-dir@4.2.0: 2397 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2398 | engines: {node: '>=8'} 2399 | dependencies: 2400 | find-up: 4.1.0 2401 | dev: true 2402 | 2403 | /pkg-types@1.0.3: 2404 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 2405 | dependencies: 2406 | jsonc-parser: 3.2.1 2407 | mlly: 1.6.1 2408 | pathe: 1.1.2 2409 | dev: true 2410 | 2411 | /prelude-ls@1.2.1: 2412 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2413 | engines: {node: '>= 0.8.0'} 2414 | dev: true 2415 | 2416 | /process-on-spawn@1.0.0: 2417 | resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} 2418 | engines: {node: '>=8'} 2419 | dependencies: 2420 | fromentries: 1.3.2 2421 | dev: true 2422 | 2423 | /progress@2.0.3: 2424 | resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} 2425 | engines: {node: '>=0.4.0'} 2426 | dev: true 2427 | 2428 | /prompts@2.4.2: 2429 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 2430 | engines: {node: '>= 6'} 2431 | dependencies: 2432 | kleur: 3.0.3 2433 | sisteransi: 1.0.5 2434 | dev: true 2435 | 2436 | /psl@1.9.0: 2437 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} 2438 | dev: true 2439 | 2440 | /punycode@2.3.1: 2441 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2442 | engines: {node: '>=6'} 2443 | dev: true 2444 | 2445 | /qs@6.5.3: 2446 | resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} 2447 | engines: {node: '>=0.6'} 2448 | dev: true 2449 | 2450 | /queue-microtask@1.2.3: 2451 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2452 | dev: true 2453 | 2454 | /randombytes@2.1.0: 2455 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 2456 | dependencies: 2457 | safe-buffer: 5.2.1 2458 | dev: true 2459 | 2460 | /rc9@2.1.1: 2461 | resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} 2462 | dependencies: 2463 | defu: 6.1.4 2464 | destr: 2.0.3 2465 | flat: 5.0.2 2466 | dev: true 2467 | 2468 | /read-pkg-up@10.1.0: 2469 | resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} 2470 | engines: {node: '>=16'} 2471 | dependencies: 2472 | find-up: 6.3.0 2473 | read-pkg: 8.1.0 2474 | type-fest: 4.12.0 2475 | dev: true 2476 | 2477 | /read-pkg@8.1.0: 2478 | resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} 2479 | engines: {node: '>=16'} 2480 | dependencies: 2481 | '@types/normalize-package-data': 2.4.4 2482 | normalize-package-data: 6.0.0 2483 | parse-json: 7.1.1 2484 | type-fest: 4.12.0 2485 | dev: true 2486 | 2487 | /readdirp@3.5.0: 2488 | resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} 2489 | engines: {node: '>=8.10.0'} 2490 | dependencies: 2491 | picomatch: 2.3.1 2492 | dev: true 2493 | 2494 | /readdirp@3.6.0: 2495 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2496 | engines: {node: '>=8.10.0'} 2497 | dependencies: 2498 | picomatch: 2.3.1 2499 | dev: true 2500 | 2501 | /regexpp@3.2.0: 2502 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 2503 | engines: {node: '>=8'} 2504 | dev: true 2505 | 2506 | /release-zalgo@1.0.0: 2507 | resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} 2508 | engines: {node: '>=4'} 2509 | dependencies: 2510 | es6-error: 4.1.1 2511 | dev: true 2512 | 2513 | /request@2.88.2: 2514 | resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} 2515 | engines: {node: '>= 6'} 2516 | deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 2517 | dependencies: 2518 | aws-sign2: 0.7.0 2519 | aws4: 1.12.0 2520 | caseless: 0.12.0 2521 | combined-stream: 1.0.8 2522 | extend: 3.0.2 2523 | forever-agent: 0.6.1 2524 | form-data: 2.3.3 2525 | har-validator: 5.1.5 2526 | http-signature: 1.2.0 2527 | is-typedarray: 1.0.0 2528 | isstream: 0.1.2 2529 | json-stringify-safe: 5.0.1 2530 | mime-types: 2.1.35 2531 | oauth-sign: 0.9.0 2532 | performance-now: 2.1.0 2533 | qs: 6.5.3 2534 | safe-buffer: 5.2.1 2535 | tough-cookie: 2.5.0 2536 | tunnel-agent: 0.6.0 2537 | uuid: 3.4.0 2538 | dev: true 2539 | 2540 | /require-directory@2.1.1: 2541 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2542 | engines: {node: '>=0.10.0'} 2543 | dev: true 2544 | 2545 | /require-from-string@2.0.2: 2546 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 2547 | engines: {node: '>=0.10.0'} 2548 | dev: true 2549 | 2550 | /require-main-filename@2.0.0: 2551 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} 2552 | dev: true 2553 | 2554 | /resolve-from@4.0.0: 2555 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2556 | engines: {node: '>=4'} 2557 | dev: true 2558 | 2559 | /resolve-from@5.0.0: 2560 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2561 | engines: {node: '>=8'} 2562 | dev: true 2563 | 2564 | /reusify@1.0.4: 2565 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2566 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2567 | dev: true 2568 | 2569 | /rimraf@3.0.2: 2570 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2571 | hasBin: true 2572 | dependencies: 2573 | glob: 7.2.3 2574 | dev: true 2575 | 2576 | /run-parallel@1.2.0: 2577 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2578 | dependencies: 2579 | queue-microtask: 1.2.3 2580 | dev: true 2581 | 2582 | /safe-buffer@5.2.1: 2583 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2584 | dev: true 2585 | 2586 | /safer-buffer@2.1.2: 2587 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2588 | dev: true 2589 | 2590 | /semver@6.3.1: 2591 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2592 | hasBin: true 2593 | dev: true 2594 | 2595 | /semver@7.6.0: 2596 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 2597 | engines: {node: '>=10'} 2598 | hasBin: true 2599 | dependencies: 2600 | lru-cache: 6.0.0 2601 | dev: true 2602 | 2603 | /serialize-javascript@5.0.1: 2604 | resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} 2605 | dependencies: 2606 | randombytes: 2.1.0 2607 | dev: true 2608 | 2609 | /set-blocking@2.0.0: 2610 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 2611 | dev: true 2612 | 2613 | /shebang-command@2.0.0: 2614 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2615 | engines: {node: '>=8'} 2616 | dependencies: 2617 | shebang-regex: 3.0.0 2618 | dev: true 2619 | 2620 | /shebang-regex@3.0.0: 2621 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2622 | engines: {node: '>=8'} 2623 | dev: true 2624 | 2625 | /signal-exit@3.0.7: 2626 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2627 | dev: true 2628 | 2629 | /signal-exit@4.1.0: 2630 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 2631 | engines: {node: '>=14'} 2632 | dev: true 2633 | 2634 | /sisteransi@1.0.5: 2635 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 2636 | dev: true 2637 | 2638 | /slice-ansi@4.0.0: 2639 | resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} 2640 | engines: {node: '>=10'} 2641 | dependencies: 2642 | ansi-styles: 4.3.0 2643 | astral-regex: 2.0.0 2644 | is-fullwidth-code-point: 3.0.0 2645 | dev: true 2646 | 2647 | /source-map@0.6.1: 2648 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2649 | engines: {node: '>=0.10.0'} 2650 | dev: true 2651 | 2652 | /spawn-wrap@2.0.0: 2653 | resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} 2654 | engines: {node: '>=8'} 2655 | dependencies: 2656 | foreground-child: 2.0.0 2657 | is-windows: 1.0.2 2658 | make-dir: 3.1.0 2659 | rimraf: 3.0.2 2660 | signal-exit: 3.0.7 2661 | which: 2.0.2 2662 | dev: true 2663 | 2664 | /spdx-correct@3.2.0: 2665 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 2666 | dependencies: 2667 | spdx-expression-parse: 3.0.1 2668 | spdx-license-ids: 3.0.17 2669 | dev: true 2670 | 2671 | /spdx-exceptions@2.5.0: 2672 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 2673 | dev: true 2674 | 2675 | /spdx-expression-parse@3.0.1: 2676 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 2677 | dependencies: 2678 | spdx-exceptions: 2.5.0 2679 | spdx-license-ids: 3.0.17 2680 | dev: true 2681 | 2682 | /spdx-license-ids@3.0.17: 2683 | resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} 2684 | dev: true 2685 | 2686 | /split2@4.2.0: 2687 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 2688 | engines: {node: '>= 10.x'} 2689 | dev: true 2690 | 2691 | /sprintf-js@1.0.3: 2692 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2693 | dev: true 2694 | 2695 | /sshpk@1.18.0: 2696 | resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} 2697 | engines: {node: '>=0.10.0'} 2698 | hasBin: true 2699 | dependencies: 2700 | asn1: 0.2.6 2701 | assert-plus: 1.0.0 2702 | bcrypt-pbkdf: 1.0.2 2703 | dashdash: 1.14.1 2704 | ecc-jsbn: 0.1.2 2705 | getpass: 0.1.7 2706 | jsbn: 0.1.1 2707 | safer-buffer: 2.1.2 2708 | tweetnacl: 0.14.5 2709 | dev: true 2710 | 2711 | /string-argv@0.3.2: 2712 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 2713 | engines: {node: '>=0.6.19'} 2714 | dev: true 2715 | 2716 | /string-width@2.1.1: 2717 | resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} 2718 | engines: {node: '>=4'} 2719 | dependencies: 2720 | is-fullwidth-code-point: 2.0.0 2721 | strip-ansi: 4.0.0 2722 | dev: true 2723 | 2724 | /string-width@4.2.3: 2725 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2726 | engines: {node: '>=8'} 2727 | dependencies: 2728 | emoji-regex: 8.0.0 2729 | is-fullwidth-code-point: 3.0.0 2730 | strip-ansi: 6.0.1 2731 | dev: true 2732 | 2733 | /strip-ansi@4.0.0: 2734 | resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} 2735 | engines: {node: '>=4'} 2736 | dependencies: 2737 | ansi-regex: 3.0.1 2738 | dev: true 2739 | 2740 | /strip-ansi@6.0.1: 2741 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2742 | engines: {node: '>=8'} 2743 | dependencies: 2744 | ansi-regex: 5.0.1 2745 | dev: true 2746 | 2747 | /strip-bom@4.0.0: 2748 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 2749 | engines: {node: '>=8'} 2750 | dev: true 2751 | 2752 | /strip-final-newline@3.0.0: 2753 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2754 | engines: {node: '>=12'} 2755 | dev: true 2756 | 2757 | /strip-json-comments@3.1.1: 2758 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2759 | engines: {node: '>=8'} 2760 | dev: true 2761 | 2762 | /supports-color@5.5.0: 2763 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2764 | engines: {node: '>=4'} 2765 | dependencies: 2766 | has-flag: 3.0.0 2767 | dev: true 2768 | 2769 | /supports-color@7.2.0: 2770 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2771 | engines: {node: '>=8'} 2772 | dependencies: 2773 | has-flag: 4.0.0 2774 | dev: true 2775 | 2776 | /supports-color@8.1.1: 2777 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 2778 | engines: {node: '>=10'} 2779 | dependencies: 2780 | has-flag: 4.0.0 2781 | dev: true 2782 | 2783 | /table@6.8.1: 2784 | resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} 2785 | engines: {node: '>=10.0.0'} 2786 | dependencies: 2787 | ajv: 8.12.0 2788 | lodash.truncate: 4.4.2 2789 | slice-ansi: 4.0.0 2790 | string-width: 4.2.3 2791 | strip-ansi: 6.0.1 2792 | dev: true 2793 | 2794 | /tar@6.2.1: 2795 | resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} 2796 | engines: {node: '>=10'} 2797 | dependencies: 2798 | chownr: 2.0.0 2799 | fs-minipass: 2.1.0 2800 | minipass: 5.0.0 2801 | minizlib: 2.1.2 2802 | mkdirp: 1.0.4 2803 | yallist: 4.0.0 2804 | dev: true 2805 | 2806 | /temp-dir@3.0.0: 2807 | resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} 2808 | engines: {node: '>=14.16'} 2809 | dev: true 2810 | 2811 | /tempfile@5.0.0: 2812 | resolution: {integrity: sha512-bX655WZI/F7EoTDw9JvQURqAXiPHi8o8+yFxPF2lWYyz1aHnmMRuXWqL6YB6GmeO0o4DIYWHLgGNi/X64T+X4Q==} 2813 | engines: {node: '>=14.18'} 2814 | dependencies: 2815 | temp-dir: 3.0.0 2816 | dev: true 2817 | 2818 | /test-exclude@6.0.0: 2819 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 2820 | engines: {node: '>=8'} 2821 | dependencies: 2822 | '@istanbuljs/schema': 0.1.3 2823 | glob: 7.2.3 2824 | minimatch: 3.1.2 2825 | dev: true 2826 | 2827 | /text-extensions@2.4.0: 2828 | resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} 2829 | engines: {node: '>=8'} 2830 | dev: true 2831 | 2832 | /text-table@0.2.0: 2833 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2834 | dev: true 2835 | 2836 | /through@2.3.8: 2837 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 2838 | dev: true 2839 | 2840 | /to-fast-properties@2.0.0: 2841 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2842 | engines: {node: '>=4'} 2843 | dev: true 2844 | 2845 | /to-regex-range@5.0.1: 2846 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2847 | engines: {node: '>=8.0'} 2848 | dependencies: 2849 | is-number: 7.0.0 2850 | dev: true 2851 | 2852 | /tough-cookie@2.5.0: 2853 | resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} 2854 | engines: {node: '>=0.8'} 2855 | dependencies: 2856 | psl: 1.9.0 2857 | punycode: 2.3.1 2858 | dev: true 2859 | 2860 | /tr46@0.0.3: 2861 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 2862 | dev: false 2863 | 2864 | /tunnel-agent@0.6.0: 2865 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 2866 | dependencies: 2867 | safe-buffer: 5.2.1 2868 | dev: true 2869 | 2870 | /tweetnacl@0.14.5: 2871 | resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} 2872 | dev: true 2873 | 2874 | /type-check@0.4.0: 2875 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2876 | engines: {node: '>= 0.8.0'} 2877 | dependencies: 2878 | prelude-ls: 1.2.1 2879 | dev: true 2880 | 2881 | /type-detect@4.0.8: 2882 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 2883 | engines: {node: '>=4'} 2884 | dev: true 2885 | 2886 | /type-fest@0.20.2: 2887 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2888 | engines: {node: '>=10'} 2889 | dev: true 2890 | 2891 | /type-fest@0.8.1: 2892 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 2893 | engines: {node: '>=8'} 2894 | dev: true 2895 | 2896 | /type-fest@3.13.1: 2897 | resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} 2898 | engines: {node: '>=14.16'} 2899 | dev: true 2900 | 2901 | /type-fest@4.12.0: 2902 | resolution: {integrity: sha512-5Y2/pp2wtJk8o08G0CMkuFPCO354FGwk/vbidxrdhRGZfd0tFnb4Qb8anp9XxXriwBgVPjdWbKpGl4J9lJY2jQ==} 2903 | engines: {node: '>=16'} 2904 | dev: true 2905 | 2906 | /typedarray-to-buffer@3.1.5: 2907 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 2908 | dependencies: 2909 | is-typedarray: 1.0.0 2910 | dev: true 2911 | 2912 | /ufo@1.5.3: 2913 | resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} 2914 | dev: true 2915 | 2916 | /uglify-js@3.17.4: 2917 | resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} 2918 | engines: {node: '>=0.8.0'} 2919 | hasBin: true 2920 | requiresBuild: true 2921 | dev: true 2922 | optional: true 2923 | 2924 | /update-browserslist-db@1.0.13(browserslist@4.23.0): 2925 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 2926 | hasBin: true 2927 | peerDependencies: 2928 | browserslist: '>= 4.21.0' 2929 | dependencies: 2930 | browserslist: 4.23.0 2931 | escalade: 3.1.2 2932 | picocolors: 1.0.0 2933 | dev: true 2934 | 2935 | /uri-js@4.4.1: 2936 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2937 | dependencies: 2938 | punycode: 2.3.1 2939 | dev: true 2940 | 2941 | /uuid@3.4.0: 2942 | resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} 2943 | deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. 2944 | hasBin: true 2945 | dev: true 2946 | 2947 | /uuid@8.3.2: 2948 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 2949 | hasBin: true 2950 | dev: true 2951 | 2952 | /v8-compile-cache@2.4.0: 2953 | resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} 2954 | dev: true 2955 | 2956 | /validate-npm-package-license@3.0.4: 2957 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 2958 | dependencies: 2959 | spdx-correct: 3.2.0 2960 | spdx-expression-parse: 3.0.1 2961 | dev: true 2962 | 2963 | /verror@1.10.0: 2964 | resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} 2965 | engines: {'0': node >=0.6.0} 2966 | dependencies: 2967 | assert-plus: 1.0.0 2968 | core-util-is: 1.0.2 2969 | extsprintf: 1.3.0 2970 | dev: true 2971 | 2972 | /webidl-conversions@3.0.1: 2973 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 2974 | dev: false 2975 | 2976 | /whatwg-url@5.0.0: 2977 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 2978 | dependencies: 2979 | tr46: 0.0.3 2980 | webidl-conversions: 3.0.1 2981 | dev: false 2982 | 2983 | /which-module@2.0.1: 2984 | resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} 2985 | dev: true 2986 | 2987 | /which@2.0.2: 2988 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2989 | engines: {node: '>= 8'} 2990 | hasBin: true 2991 | dependencies: 2992 | isexe: 2.0.0 2993 | dev: true 2994 | 2995 | /wide-align@1.1.3: 2996 | resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} 2997 | dependencies: 2998 | string-width: 2.1.1 2999 | dev: true 3000 | 3001 | /wordwrap@1.0.0: 3002 | resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 3003 | dev: true 3004 | 3005 | /workerpool@6.1.0: 3006 | resolution: {integrity: sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==} 3007 | dev: true 3008 | 3009 | /wrap-ansi@6.2.0: 3010 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 3011 | engines: {node: '>=8'} 3012 | dependencies: 3013 | ansi-styles: 4.3.0 3014 | string-width: 4.2.3 3015 | strip-ansi: 6.0.1 3016 | dev: true 3017 | 3018 | /wrap-ansi@7.0.0: 3019 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3020 | engines: {node: '>=10'} 3021 | dependencies: 3022 | ansi-styles: 4.3.0 3023 | string-width: 4.2.3 3024 | strip-ansi: 6.0.1 3025 | dev: true 3026 | 3027 | /wrappy@1.0.2: 3028 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3029 | dev: true 3030 | 3031 | /write-file-atomic@3.0.3: 3032 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 3033 | dependencies: 3034 | imurmurhash: 0.1.4 3035 | is-typedarray: 1.0.0 3036 | signal-exit: 3.0.7 3037 | typedarray-to-buffer: 3.1.5 3038 | dev: true 3039 | 3040 | /y18n@4.0.3: 3041 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} 3042 | dev: true 3043 | 3044 | /y18n@5.0.8: 3045 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 3046 | engines: {node: '>=10'} 3047 | dev: true 3048 | 3049 | /yallist@3.1.1: 3050 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3051 | dev: true 3052 | 3053 | /yallist@4.0.0: 3054 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3055 | dev: true 3056 | 3057 | /yargs-parser@18.1.3: 3058 | resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 3059 | engines: {node: '>=6'} 3060 | dependencies: 3061 | camelcase: 5.3.1 3062 | decamelize: 1.2.0 3063 | dev: true 3064 | 3065 | /yargs-parser@20.2.4: 3066 | resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} 3067 | engines: {node: '>=10'} 3068 | dev: true 3069 | 3070 | /yargs-unparser@2.0.0: 3071 | resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} 3072 | engines: {node: '>=10'} 3073 | dependencies: 3074 | camelcase: 6.3.0 3075 | decamelize: 4.0.0 3076 | flat: 5.0.2 3077 | is-plain-obj: 2.1.0 3078 | dev: true 3079 | 3080 | /yargs@15.4.1: 3081 | resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} 3082 | engines: {node: '>=8'} 3083 | dependencies: 3084 | cliui: 6.0.0 3085 | decamelize: 1.2.0 3086 | find-up: 4.1.0 3087 | get-caller-file: 2.0.5 3088 | require-directory: 2.1.1 3089 | require-main-filename: 2.0.0 3090 | set-blocking: 2.0.0 3091 | string-width: 4.2.3 3092 | which-module: 2.0.1 3093 | y18n: 4.0.3 3094 | yargs-parser: 18.1.3 3095 | dev: true 3096 | 3097 | /yargs@16.2.0: 3098 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 3099 | engines: {node: '>=10'} 3100 | dependencies: 3101 | cliui: 7.0.4 3102 | escalade: 3.1.2 3103 | get-caller-file: 2.0.5 3104 | require-directory: 2.1.1 3105 | string-width: 4.2.3 3106 | y18n: 5.0.8 3107 | yargs-parser: 20.2.4 3108 | dev: true 3109 | 3110 | /yocto-queue@0.1.0: 3111 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3112 | engines: {node: '>=10'} 3113 | dev: true 3114 | 3115 | /yocto-queue@1.0.0: 3116 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 3117 | engines: {node: '>=12.20'} 3118 | dev: true 3119 | -------------------------------------------------------------------------------- /search.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch'); 2 | 3 | // 通用函数:对象转 URL 编码字符串 4 | function objectToUrlEncoded(obj) { 5 | return Object.keys(obj).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&'); 6 | } 7 | 8 | // 通用函数:异步获取数据 9 | async function fetchData(baseUrl, queryParams, bodyObject, headers = { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }) { 10 | const queryString = objectToUrlEncoded(queryParams); 11 | const url = `${baseUrl}?${queryString}`; 12 | const body = objectToUrlEncoded(bodyObject); 13 | 14 | try { 15 | const response = await fetch(url, { method: 'POST', headers, body }); 16 | return await response.text(); 17 | } catch (error) { 18 | console.error('Error:', error); 19 | throw error; // 外部调用会处理异常 20 | } 21 | } 22 | 23 | // 数据处理函数 24 | function processData(rawData) { 25 | const lines = rawData.split('\n'); 26 | const cleanData = lines[3]?.trim(); 27 | const json = JSON.parse(cleanData); 28 | const data = json[0][2]; 29 | return data; 30 | } 31 | 32 | // 解析数据 33 | function parseFields(block, patterns) { 34 | const entries = block.replace(/, /g, ' '). 35 | replace(/\[\[/g, '[').replace(/\]\]/g, ']').split('],['); 36 | return entries.map(entry => { 37 | const fields = entry.split(',').map(field => field.replace(/^["[]+|["\]]+$/g, '').trim()); 38 | 39 | let result = {}; 40 | let lastIndex = -1; 41 | patterns.forEach(pattern => { 42 | for (let i = lastIndex + 1; i < fields.length; i++) { 43 | if (pattern.regex.test(fields[i])) { 44 | result[pattern.name] = fields[i]; 45 | lastIndex = i; 46 | break; // 停止当前循环,因为已经找到匹配项 47 | } 48 | } 49 | }); 50 | // 过滤 unkown 字段 51 | delete result.unknow; 52 | 53 | return result; 54 | }).filter(result => Object.keys(result).length); 55 | } 56 | // 高级搜索 57 | async function quickSearch(keyword) { 58 | const baseUrl = 'https://chromewebstore.google.com/_/ChromeWebStoreConsumerFeUi/data/batchexecute'; 59 | const queryParams = { 60 | 'rpcids': 'QcU9bc', 61 | 'source-path': '/', 62 | 'bl': 'boq_chrome-webstore-consumerfe-ui_20240306.00_p1', 63 | 'hl': 'en-GB', 64 | 'soc-app': '1', 65 | 'soc-platform': '1', 66 | 'soc-device': '1', 67 | 'rt': 'c' 68 | }; 69 | const bodyObject = { 70 | 'f.req': `[[["QcU9bc","[\\"${keyword}\\",null,null,2]"]]]` 71 | }; 72 | 73 | try { 74 | const rawData = await fetchData(baseUrl, queryParams, bodyObject); 75 | const dataBlocks = processData(rawData); 76 | const patterns = [ 77 | { name: 'name', regex: /.+?/ }, 78 | { name: 'id', regex: /.+?/ }, 79 | { name: 'version', regex: /\d+(?:\.\d+)?/ }, 80 | { name: 'iconURL', regex: /https?:\/\/[^\s"]+/ } 81 | ]; 82 | 83 | const results = parseFields(dataBlocks, patterns); 84 | return { success: true, error: null, number: results.length, data: results }; 85 | } catch (error) { 86 | console.error('Error in quickSearch:', error); 87 | return { success: false, error: `Error searching keyword ${keyword}: ${error.message}`, data: null }; 88 | } 89 | } 90 | 91 | // 完整搜索 92 | async function fullSearch(keyword, options = {}) { 93 | const { 94 | limit = 10, 95 | minRating = 0, 96 | ifFeatured = false, 97 | ifWellKnown = false 98 | } = options; 99 | 100 | const baseUrl = 'https://chromewebstore.google.com/_/ChromeWebStoreConsumerFeUi/data/batchexecute'; 101 | const queryParams = { 102 | 'rpcids': 'zTyKYc', 103 | 'source-path': '/search/%E8%B1%86%E7%93%A3', 104 | 'bl': 'boq_chrome-webstore-consumerfe-ui_20240306.00_p1', 105 | 'hl': 'en-GB', 106 | 'soc-app': '1', 107 | 'soc-platform': '1', 108 | 'soc-device': '1', 109 | 'rt': 'c' 110 | }; 111 | 112 | const validMinRating = Math.max(0, Math.min(minRating, 5)); 113 | const minRatingFilter = validMinRating === 0 ? "null" : validMinRating.toString(); 114 | const featuredFilter = ifFeatured ? "1" : "null"; 115 | const wellKnownFilter = ifWellKnown ? "1" : "null"; 116 | 117 | const bodyObject = { 118 | 'f.req': `[[["zTyKYc","[[null,[null,null,null,[\\"${keyword}\\",[${limit}],${minRatingFilter},null,${featuredFilter},${wellKnownFilter},1]]]]",null,"1"]]]` 119 | }; 120 | // console.log('bodyObject', bodyObject) 121 | 122 | try { 123 | const rawData = await fetchData(baseUrl, queryParams, bodyObject); 124 | // console.log('rawData', rawData) 125 | const dataBlocks = processData(rawData); 126 | // console.log('dataBlocks', dataBlocks) 127 | const patterns = [ 128 | { name: 'id', regex: /^[a-z0-9]{32}$/ }, 129 | { name: 'iconURL', regex: /^https:\/\/lh3\.googleusercontent\.com\// }, 130 | { name: 'title', regex: /.+/ }, 131 | // 修改,rating 和 reviewCount 可能为 null 132 | { name: 'rating', regex: /^\d+(\.\d+)?$|null/ }, 133 | { name: 'reviewCount', regex: /^\d+$|null/ }, 134 | // 允许为null 135 | { name: 'coverURL', regex: /^https:\/\/lh3\.googleusercontent\.com\/|null/ }, 136 | // 允许空字符串 137 | { name: 'description', regex: /[^\s]+/ }, 138 | // 必须包含. 例如 mozilla.org monica.log 139 | { name: 'publish', regex: /.+\..+/ }, 140 | // true or null 141 | { name: 'ifEstablish', regex: /true|null/ }, 142 | { name: 'ifFeatured', regex: /true|null/ }, 143 | // 必须包含 / 例如 productivity/tools 144 | { name: 'category', regex: /.+\/.+/ }, 145 | { name: 'categoryNo', regex: /^\d+$/ }, 146 | { name: 'unknow', regex: /^\d+$/ }, 147 | { name: 'userCount', regex: /^\d+$/ }, 148 | 149 | ]; 150 | const results = parseFields(dataBlocks, patterns); 151 | return { success: true, error: null, number: results.length, data: results }; 152 | } catch (error) { 153 | console.error('Error in fullSearch:', error); 154 | return { success: false, error: `Error searching keyword ${keyword}: ${error.message}`, data: null }; 155 | } 156 | } 157 | 158 | // 模块导出 159 | module.exports = { quickSearch, fullSearch }; 160 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | const assert = require('chai').assert; 2 | const { extMeta } = require('../index.js'); 3 | const { quickSearch } = require('../index.js'); 4 | const { fullSearch } = require('../search.js'); 5 | const { getExtComments } = require('../comment.js'); 6 | 7 | describe.skip("Chrome Web Store API Tests", function () { 8 | this.timeout(6000); // Set timeout for all tests in this describe block 9 | describe.skip("Single ID Tests", function () { 10 | it("should handle existing extension ID:gkkmiofalnjagdcjheckamobghglpdpm", async function () { 11 | const data = await extMeta('gkkmiofalnjagdcjheckamobghglpdpm'); 12 | assert.typeOf(data, 'object'); 13 | assert.equal(data.success, true); 14 | assert.isNull(data.error); 15 | assert.equal(data.name, 'YouTube Windowed FullScreen'); 16 | assert.equal(data.details.languages, 'English'); 17 | assert.equal(data.details.email, 'navi.jador@gmail.com'); 18 | // console.log(data); 19 | }); 20 | 21 | it.skip("should handle existing extension ID:hlepfoohegkhhmjieoechaddaejaokhf", async function () { 22 | const data = await extMeta('hlepfoohegkhhmjieoechaddaejaokhf'); 23 | assert.typeOf(data, 'object'); 24 | assert.equal(data.success, true); 25 | assert.isNull(data.error); 26 | assert.equal(data.name, 'Refined GitHub'); 27 | assert.equal(data.details.languages, 'English'); 28 | assert.equal(data.details.email, 'sindresorhus@gmail.com'); 29 | // console.log(data); 30 | }); 31 | 32 | it("should handle existing extension ID:hlepfoohegkhhmjieoechaddaejaokhf", async function () { 33 | const data = await extMeta('bkhaagjahfmjljalopjnoealnfndnagc'); 34 | assert.typeOf(data, 'object'); 35 | assert.equal(data.success, true); 36 | assert.isNull(data.error); 37 | assert.equal(data.details.languages, 'English (United States)'); 38 | assert.equal(data.details.email, 'support@octotree.io'); 39 | assert.equal(data.details.websiteUrl, 'https://octotree.io'); 40 | // console.log(data); 41 | }); 42 | 43 | it.skip("should handle existing extension ID:gmimocjjppdelmhpcmpkhekmpoddgima", async function () { 44 | const data = await extMeta('gmimocjjppdelmhpcmpkhekmpoddgima'); 45 | assert.typeOf(data, 'object'); 46 | assert.equal(data.success, true); 47 | assert.isNull(data.error); 48 | assert.equal(data.name, 'Full Screen for Google Chrome'); 49 | // assert.equal(data.details.languages, '55 languages'); 50 | }); 51 | 52 | 53 | it.skip("should handle existing extension ID:cdnlfphfngnfhjcnoikfhaomaaflaiie", async function () { 54 | const data = await extMeta('cdnlfphfngnfhjcnoikfhaomaaflaiie'); 55 | assert.typeOf(data, 'object'); 56 | assert.equal(data.success, true); 57 | assert.isNull(data.error); 58 | assert.equal(data.name, 'Video Maximizer'); 59 | assert.equal(data.details.languages, 'English'); 60 | assert.equal(data.details.email, 'trophygeek@trophygeek.com'); 61 | }); 62 | }); 63 | 64 | describe("Multiple IDs Tests", function () { 65 | this.timeout(6000); // Set timeout for all tests in this describe block 66 | it("should handle array of IDs", async function () { 67 | var data = await extMeta(['gkkmiofalnjagdcjheckamobghglpdpm', 'gkkmiofalnjagdcjheckamobghglpdpz']); 68 | assert.typeOf(data, 'object'); 69 | assert.lengthOf(Object.keys(data), 2); 70 | 71 | // console.log(data); 72 | 73 | const e1 = data['gkkmiofalnjagdcjheckamobghglpdpm']; 74 | const e2 = data['gkkmiofalnjagdcjheckamobghglpdpz']; 75 | 76 | assert.equal(e1.success, true); 77 | assert.isNull(e1.error); 78 | assert.equal(e1.name, 'YouTube Windowed FullScreen'); 79 | assert.typeOf(e1.installCount, 'number'); 80 | assert.typeOf(e1.reviewCount, 'number'); 81 | assert.typeOf(e1.rating, 'number'); 82 | 83 | assert.equal(e2.success, false); 84 | assert.equal(e2.error, 'Couldn\'t find extension with ID gkkmiofalnjagdcjheckamobghglpdpz'); 85 | }); 86 | }); 87 | 88 | describe("Edge Cases", function () { 89 | it("should handle empty instantiation", async function () { 90 | const data = await extMeta(); 91 | 92 | assert.typeOf(data, 'object'); 93 | assert.equal(data.success, false); 94 | assert.equal(data.error, 'Invalid extension ID.'); 95 | }); 96 | 97 | it("should handle null instantiation", async function () { 98 | const data = await extMeta(null); 99 | assert.typeOf(data, 'object'); 100 | assert.equal(data.success, false); 101 | assert.equal(data.error, 'Invalid extension ID.'); 102 | }); 103 | 104 | it("should handle undefined instantiation", async function () { 105 | const data = await extMeta(undefined); 106 | assert.typeOf(data, 'object'); 107 | assert.equal(data.success, false); 108 | assert.equal(data.error, 'Invalid extension ID.'); 109 | 110 | }); 111 | 112 | it("should handle numeric extension ID", async function () { 113 | const data = await extMeta(3409); 114 | assert.typeOf(data, 'object'); 115 | assert.equal(data.success, false); 116 | assert.equal(data.error, 'Invalid extension ID.'); 117 | 118 | }); 119 | 120 | it("should handle incorrect string instantiation", async function () { 121 | const data = await extMeta('3409'); 122 | assert.typeOf(data, 'object'); 123 | assert.equal(data.success, false); 124 | assert.equal(data.error, 'Invalid extension ID.'); 125 | 126 | }); 127 | }); 128 | }); 129 | 130 | 131 | //fail 132 | describe.skip("chrome Quick Search ", () => { 133 | it("should handle existing keyword", async () => { 134 | const data = await quickSearch('youtube'); 135 | console.log(data); 136 | assert.equal(data.success, true); 137 | assert.isNull(data.error); 138 | assert.isAbove(data.data.length, 0); 139 | assert.isBelow(data.data.length, 11); 140 | 141 | }); 142 | 143 | it("should handle existing keyword", async () => { 144 | const data = await quickSearch('飞书'); 145 | console.log('data', data) 146 | assert.equal(data.success, true); 147 | assert.isNull(data.error); 148 | assert.isAbove(data.data.length, 0); 149 | // console.log(data.data); 150 | }); 151 | 152 | }) 153 | 154 | 155 | describe.skip('chorm full searh', () => { 156 | it('should handle existing keyword', async () => { 157 | const data = await fullSearch('youtube', 18); 158 | console.log(data.data); 159 | assert.equal(data.success, true); 160 | assert.isNull(data.error); 161 | assert.isAbove(data.data.length, 3); 162 | // assert.equal(data.number, 10); 163 | }); 164 | it('grade make it', async () => { 165 | const data = await fullSearch('豆瓣', { 166 | limit: 10, 167 | minRating: 4, 168 | }); 169 | assert.isNull(data.error); 170 | assert.equal(data.number, 10); 171 | assert.isAbove(data.number, 10); 172 | }); 173 | it.only('should handle existing keyword', async () => { 174 | const data = await fullSearch('monica', { 175 | limit: 10 176 | }); 177 | console.log(data.data); 178 | assert.equal(data.success, true); 179 | assert.isNull(data.error); 180 | // assert.isAbove(data.data.length, 3); 181 | // assert.equal(data.number, 10); 182 | }); 183 | it('should handle existing keyword', async () => { 184 | const data_ = await fullSearch('豆瓣', { 185 | quantity: 100, 186 | minRating: 5 187 | }); 188 | const data__ = await fullSearch('豆瓣', { 189 | quantity: 100, 190 | minRating: 4 191 | }); 192 | assert.notEqual(data_.data.length, data__.data.length); 193 | }); 194 | 195 | // ifFeatured = false, 196 | it('should handle existing keyword', async () => { 197 | const data = await fullSearch('豆瓣', { 198 | quantity: 100, 199 | ifWellKnown: false 200 | }); 201 | console.log(data.data.length); 202 | const data_ = await fullSearch('豆瓣', { 203 | quantity: 100, 204 | ifWellKnown: true 205 | }); 206 | console.log(data_.data.length); 207 | assert.notEqual(data.data.length, data_.data.length); 208 | }); 209 | }) 210 | 211 | describe.only('chrome comment', function () { 212 | this.timeout(8000); // 设置较长的超时时间,以防 API 响应较慢 213 | 214 | it('amount test', async () => { 215 | const data = await getExtComments('ofpnmcalabcbjgholdjcjblkibolbppb', { 216 | limit: 300 217 | }); 218 | assert.strictEqual(data.data.length, 300); 219 | }); 220 | 221 | it('lanuguage test', async () => { 222 | const data = await getExtComments('ofpnmcalabcbjgholdjcjblkibolbppb', { 223 | limit: 3, 224 | lang: 'zh' 225 | }); 226 | const allChinese = data.data.every(item => { 227 | return /[\u4e00-\u9fa5]/.test(item.review); 228 | }); 229 | assert.isTrue(allChinese); 230 | }); 231 | 232 | it('sturcture test', async () => { 233 | const data = await getExtComments('ofpnmcalabcbjgholdjcjblkibolbppb', { 234 | limit: 2 235 | }); 236 | 237 | const firstComment = data.data[0]; 238 | console.log('firstComment', firstComment) 239 | assert.hasAllKeys(firstComment, ['userId', 'name', 'avatarUrl', 'rating', 'review', 'version']); 240 | }); 241 | 242 | it('sort test', async () => { 243 | const data = await getExtComments('ofpnmcalabcbjgholdjcjblkibolbppb', { 244 | limit: 10, 245 | lang: 'zh', 246 | sort: 'low-rate-first' 247 | }); 248 | console.log(data.data); 249 | }); 250 | }); 251 | 252 | // test qu 253 | --------------------------------------------------------------------------------