├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── assets ├── app.js ├── report.pug └── style.css ├── package-lock.json ├── package.json ├── src ├── crystalball-cli.ts ├── crystalball.ts ├── parser.ts ├── puppetry.ts └── report.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | /lib 3 | /crystalball 4 | *.DS_Store -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | tsconfig.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Caleb Kinney 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Crystal Ball 🔮 2 | 3 | ![](https://img.shields.io/npm/v/crystalball.svg) 4 | ![](https://img.shields.io/npm/l/crystalball.svg) 5 | ![](https://img.shields.io/npm/types/crystalball.svg) 6 | 7 | A Magical Web Screenshot Project 8 | 9 | Crystal Ball 🔮 is a library that takes an array or file of URLs and returns a report with screenshots (using [Puppeteer](https://developers.google.com/web/tools/puppeteer/)), application headers and src/href references. 10 | 11 | *For information on downloading and installing Node.js, see [nodejs.org](https://nodejs.org).* 12 | 13 | ## Usage 14 | ### Crystal Ball Command Line Install 15 | 16 | ``` 17 | $ npm install crystalball -g 18 | ``` 19 | 20 | #### Crystal Ball (cli) 21 | 22 | The *first* parameter is URL(s) (encapsulated in quotes, separated by commas) or a filename and followed by individual options. 23 | 24 | ##### Options 25 | 26 | * `prefix` : Prefix http and https to each URL 27 | * `port` : Add additional port 8080 for HTTP and 8443 for HTTPS 28 | * `file` : Use the first parameter as a filename (instead of URLs) to parse *(URLs separated by a new line)* 29 | 30 | If the last argument is a number, it will specify the number of concurrent connections *(default = 10)*. 31 | 32 | *Note: The `file` argument **must** be included to use a filename.* 33 | 34 | ### Examples: 35 | 36 | **Array of URLS:** 37 | `crystalball 'http://example.com, http://example1.com'` 38 | 39 | **Array of URLS with Options:** 40 | `crystalball 'http://example.com, http://example1.com' prefix ports 15` 41 | 42 | **File (must include `file` argument):** 43 | `crystalball 'example.txt' file` 44 | 45 | **File with Options:** 46 | `crystalball 'example.txt' file prefix ports 15` 47 | 48 | *Note: The **first** argument should be encapsulated in quotes.* 49 | 50 | ### Module Install 51 | 52 | ``` 53 | $ npm install crystalball 54 | ``` 55 | 56 | #### Modules 57 | 58 | Import: `import * as O from "crystalball";` 59 | Require: `const O = require("crystalball");` 60 | 61 | ## Options 62 | 63 | Options are passed as an object with the following properties and values. 64 | 65 | * `file : true ` : Use filename as argument 66 | * `filename: "example"` : Report filename *(defaults to `cb`)* 67 | * `prefix: true ` : Prefix http and https 68 | * `ports : boolean` : Add port 8080 for http and port 8443 for https 69 | * `connections : number` : Number of concurrent connections *(default = 10)* 70 | 71 | ##### Example: 72 | 73 | ```javascript 74 | O.see("example.txt", { file: true, filename: "example", prefix: true }); 75 | => Report output in ./crystalball/example_date.html 76 | => Data output in ./crystalball/data/ 77 | ``` 78 | 79 | ## Functions 80 | 81 | The `see` function takes an array of URLS and options. 82 | 83 | ```javascript 84 | O.see(["http://www.example.com", "http://www.example2.com"], options); 85 | => Report output in ./crystalball/cb_date.html 86 | => Data output in ./crystalball/data/ 87 | ``` 88 | 89 | The `file` function takes a filename and options. 90 | 91 | ```javascript 92 | O.file("example.txt", options); 93 | => Report output in ./crystalball/cb_date.html 94 | => Data output in ./crystalball/data/ 95 | ``` 96 | 97 | ## Reporting 98 | 99 | ![](https://cakinney.com/img/crystalball-example.png) 100 | 101 | 1. HTML report with screenshots, application headers and src/href references at `./crystalball/cb_date.html`. *(Note: Clicking on each screenshot will toggle size)* 102 | 2. Data files with application source, headers and src/href references at `./crystalball/data/`. 103 | 104 | -------------------------------------------------------------------------------- /assets/app.js: -------------------------------------------------------------------------------- 1 | const screenshots = document.querySelectorAll(".screenshot"); 2 | 3 | screenshots.forEach(screenshot => { 4 | screenshot.addEventListener("click", () => { 5 | if (screenshot.className === "screenshot small") { 6 | screenshot.className = "screenshot large"; 7 | } else { 8 | screenshot.className = "screenshot small"; 9 | } 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /assets/report.pug: -------------------------------------------------------------------------------- 1 | title #{title} 2 | head 3 | style 4 | include style.css 5 | meta(charset="UTF-8") 6 | body 7 | h1.logo Crystalball 8 | hr 9 | div.data 10 | each site in data 11 | h1.title #{site.title} 🔮 12 | a(href=site.url) #{site.url} 13 | img.screenshot.small(src=site.image) 14 | br 15 | br 16 | div.data-items 17 | div.headers 18 | table.headers 19 | tr 20 | th.header(colspan="2") Headers 21 | tr 22 | th Name 23 | th Value 24 | each value, name in site.headers 25 | tr 26 | td= name 27 | td= value 28 | tr 29 | 30 | div.href 31 | table.href 32 | tr 33 | th.header HREF 34 | each url in site.href 35 | tr 36 | td= url 37 | 38 | div.src 39 | table.src 40 | tr 41 | th.header SRC 42 | each url in site.src 43 | tr 44 | td= url 45 | 46 | br.clear 47 | br 48 | hr 49 | script 50 | include app.js -------------------------------------------------------------------------------- /assets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width: 90%; 3 | margin: auto; 4 | background-color: #242e2e; 5 | } 6 | 7 | a { 8 | color: #cd5fd7; 9 | text-decoration: none; 10 | } 11 | 12 | h1.title { 13 | margin-top: 50px; 14 | color: #eb6123; 15 | } 16 | 17 | th { 18 | color: #242e2e; 19 | font-weight: bold; 20 | font-size: 16px; 21 | padding-left: 10px; 22 | } 23 | 24 | th.header { 25 | font-size: 20px; 26 | } 27 | 28 | table, 29 | th, 30 | td { 31 | border-collapse: collapse; 32 | text-align: left; 33 | border-style: hidden; 34 | } 35 | 36 | table tr:first-child th:first-child { 37 | border-top-left-radius: 10px; 38 | } 39 | 40 | table tr:first-child th:last-child { 41 | border-top-right-radius: 10px; 42 | } 43 | 44 | td { 45 | padding: 5px; 46 | border: 3px solid #465959; 47 | font-size: 12px; 48 | } 49 | 50 | tr:nth-child(odd) { 51 | background-color: #2e2e24; 52 | } 53 | 54 | tr:nth-child(even) { 55 | background-color: #2e242e; 56 | } 57 | 58 | table.headers th { 59 | background-color: #91e435; 60 | } 61 | 62 | table.headers td { 63 | color: #91e435; 64 | } 65 | 66 | table.headers td:first-child { 67 | font-weight: bold; 68 | font-size: 14px; 69 | } 70 | 71 | table.href th { 72 | background-color: #a2edfd; 73 | } 74 | 75 | table.src th { 76 | background-color: #f0c383; 77 | } 78 | 79 | table.headers, 80 | table.href, 81 | table.src td { 82 | word-wrap: break-word; 83 | } 84 | 85 | table.src td { 86 | color: #f0c383; 87 | } 88 | 89 | div.data-items { 90 | width: 95%; 91 | margin: 0 auto; 92 | display: flex; 93 | justify-content: center; 94 | } 95 | 96 | div.headers { 97 | color: #91e435; 98 | float: left; 99 | } 100 | 101 | div.src, 102 | div.href { 103 | float: left; 104 | padding-left: 20px; 105 | } 106 | 107 | div.href { 108 | color: #a2edfd; 109 | } 110 | 111 | div.src { 112 | color: #f0c383; 113 | float: left; 114 | padding-left: 20px; 115 | } 116 | 117 | table.href td { 118 | color: #a2edfd; 119 | } 120 | 121 | ol { 122 | list-style: decimal-leading-zero; 123 | list-style-position: outside; 124 | } 125 | 126 | ul.headers { 127 | list-style: none; 128 | list-style-position: outside; 129 | } 130 | 131 | br.clear { 132 | clear: both; 133 | } 134 | 135 | h1.logo { 136 | color: #cd5fd7; 137 | font-size: 100px; 138 | text-shadow: -2px 0px 2px #fff, -4px 1px 3px #f0c383, -6px 2px 5px #91e435; 139 | margin-bottom: 0px; 140 | } 141 | 142 | h1 { 143 | text-align: center; 144 | } 145 | 146 | img.screenshot { 147 | height: auto; 148 | display: block; 149 | margin: 0 auto; 150 | border-radius: 5%; 151 | border: 5px solid #cd5fd7; 152 | } 153 | 154 | img.small { 155 | max-width: 45%; 156 | } 157 | 158 | img.large { 159 | max-width: 95%; 160 | } 161 | 162 | hr { 163 | border-top: 5px solid #f0c383; 164 | border-bottom: 5px solid #cd5fd7; 165 | } 166 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "crystalball", 3 | "version": "1.0.4", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "crystalball", 9 | "version": "1.0.4", 10 | "license": "MIT", 11 | "dependencies": { 12 | "larp": "^1.0.1", 13 | "pug": "^3.0.3", 14 | "puppeteer": "^22.12.1" 15 | }, 16 | "bin": { 17 | "crystalball": "lib/crystalball-cli.js" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "^20.14.9", 21 | "@types/pug": "^2.0.10", 22 | "ts-node": "^10.9.2" 23 | } 24 | }, 25 | "node_modules/@babel/code-frame": { 26 | "version": "7.24.7", 27 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", 28 | "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", 29 | "license": "MIT", 30 | "dependencies": { 31 | "@babel/highlight": "^7.24.7", 32 | "picocolors": "^1.0.0" 33 | }, 34 | "engines": { 35 | "node": ">=6.9.0" 36 | } 37 | }, 38 | "node_modules/@babel/helper-string-parser": { 39 | "version": "7.24.7", 40 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", 41 | "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", 42 | "license": "MIT", 43 | "engines": { 44 | "node": ">=6.9.0" 45 | } 46 | }, 47 | "node_modules/@babel/helper-validator-identifier": { 48 | "version": "7.24.7", 49 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", 50 | "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", 51 | "license": "MIT", 52 | "engines": { 53 | "node": ">=6.9.0" 54 | } 55 | }, 56 | "node_modules/@babel/highlight": { 57 | "version": "7.24.7", 58 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", 59 | "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", 60 | "license": "MIT", 61 | "dependencies": { 62 | "@babel/helper-validator-identifier": "^7.24.7", 63 | "chalk": "^2.4.2", 64 | "js-tokens": "^4.0.0", 65 | "picocolors": "^1.0.0" 66 | }, 67 | "engines": { 68 | "node": ">=6.9.0" 69 | } 70 | }, 71 | "node_modules/@babel/parser": { 72 | "version": "7.24.7", 73 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", 74 | "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", 75 | "license": "MIT", 76 | "bin": { 77 | "parser": "bin/babel-parser.js" 78 | }, 79 | "engines": { 80 | "node": ">=6.0.0" 81 | } 82 | }, 83 | "node_modules/@babel/types": { 84 | "version": "7.24.7", 85 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", 86 | "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", 87 | "license": "MIT", 88 | "dependencies": { 89 | "@babel/helper-string-parser": "^7.24.7", 90 | "@babel/helper-validator-identifier": "^7.24.7", 91 | "to-fast-properties": "^2.0.0" 92 | }, 93 | "engines": { 94 | "node": ">=6.9.0" 95 | } 96 | }, 97 | "node_modules/@cspotcode/source-map-support": { 98 | "version": "0.8.1", 99 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 100 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 101 | "dev": true, 102 | "license": "MIT", 103 | "dependencies": { 104 | "@jridgewell/trace-mapping": "0.3.9" 105 | }, 106 | "engines": { 107 | "node": ">=12" 108 | } 109 | }, 110 | "node_modules/@jridgewell/resolve-uri": { 111 | "version": "3.1.2", 112 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 113 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 114 | "dev": true, 115 | "license": "MIT", 116 | "engines": { 117 | "node": ">=6.0.0" 118 | } 119 | }, 120 | "node_modules/@jridgewell/sourcemap-codec": { 121 | "version": "1.4.15", 122 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 123 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 124 | "dev": true, 125 | "license": "MIT" 126 | }, 127 | "node_modules/@jridgewell/trace-mapping": { 128 | "version": "0.3.9", 129 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 130 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 131 | "dev": true, 132 | "license": "MIT", 133 | "dependencies": { 134 | "@jridgewell/resolve-uri": "^3.0.3", 135 | "@jridgewell/sourcemap-codec": "^1.4.10" 136 | } 137 | }, 138 | "node_modules/@puppeteer/browsers": { 139 | "version": "2.2.3", 140 | "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", 141 | "integrity": "sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==", 142 | "license": "Apache-2.0", 143 | "dependencies": { 144 | "debug": "4.3.4", 145 | "extract-zip": "2.0.1", 146 | "progress": "2.0.3", 147 | "proxy-agent": "6.4.0", 148 | "semver": "7.6.0", 149 | "tar-fs": "3.0.5", 150 | "unbzip2-stream": "1.4.3", 151 | "yargs": "17.7.2" 152 | }, 153 | "bin": { 154 | "browsers": "lib/cjs/main-cli.js" 155 | }, 156 | "engines": { 157 | "node": ">=18" 158 | } 159 | }, 160 | "node_modules/@tootallnate/quickjs-emscripten": { 161 | "version": "0.23.0", 162 | "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", 163 | "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", 164 | "license": "MIT" 165 | }, 166 | "node_modules/@tsconfig/node10": { 167 | "version": "1.0.11", 168 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 169 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 170 | "dev": true, 171 | "license": "MIT" 172 | }, 173 | "node_modules/@tsconfig/node12": { 174 | "version": "1.0.11", 175 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 176 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 177 | "dev": true, 178 | "license": "MIT" 179 | }, 180 | "node_modules/@tsconfig/node14": { 181 | "version": "1.0.3", 182 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 183 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 184 | "dev": true, 185 | "license": "MIT" 186 | }, 187 | "node_modules/@tsconfig/node16": { 188 | "version": "1.0.4", 189 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 190 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 191 | "dev": true, 192 | "license": "MIT" 193 | }, 194 | "node_modules/@types/node": { 195 | "version": "20.14.9", 196 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", 197 | "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", 198 | "devOptional": true, 199 | "license": "MIT", 200 | "dependencies": { 201 | "undici-types": "~5.26.4" 202 | } 203 | }, 204 | "node_modules/@types/pug": { 205 | "version": "2.0.10", 206 | "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", 207 | "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", 208 | "dev": true, 209 | "license": "MIT" 210 | }, 211 | "node_modules/@types/yauzl": { 212 | "version": "2.10.3", 213 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", 214 | "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", 215 | "license": "MIT", 216 | "optional": true, 217 | "dependencies": { 218 | "@types/node": "*" 219 | } 220 | }, 221 | "node_modules/acorn": { 222 | "version": "7.4.1", 223 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 224 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 225 | "license": "MIT", 226 | "bin": { 227 | "acorn": "bin/acorn" 228 | }, 229 | "engines": { 230 | "node": ">=0.4.0" 231 | } 232 | }, 233 | "node_modules/acorn-walk": { 234 | "version": "8.3.3", 235 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", 236 | "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", 237 | "dev": true, 238 | "license": "MIT", 239 | "dependencies": { 240 | "acorn": "^8.11.0" 241 | }, 242 | "engines": { 243 | "node": ">=0.4.0" 244 | } 245 | }, 246 | "node_modules/acorn-walk/node_modules/acorn": { 247 | "version": "8.12.0", 248 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", 249 | "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", 250 | "dev": true, 251 | "license": "MIT", 252 | "bin": { 253 | "acorn": "bin/acorn" 254 | }, 255 | "engines": { 256 | "node": ">=0.4.0" 257 | } 258 | }, 259 | "node_modules/agent-base": { 260 | "version": "7.1.1", 261 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", 262 | "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", 263 | "license": "MIT", 264 | "dependencies": { 265 | "debug": "^4.3.4" 266 | }, 267 | "engines": { 268 | "node": ">= 14" 269 | } 270 | }, 271 | "node_modules/ansi-regex": { 272 | "version": "5.0.1", 273 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 274 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 275 | "license": "MIT", 276 | "engines": { 277 | "node": ">=8" 278 | } 279 | }, 280 | "node_modules/ansi-styles": { 281 | "version": "3.2.1", 282 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 283 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 284 | "license": "MIT", 285 | "dependencies": { 286 | "color-convert": "^1.9.0" 287 | }, 288 | "engines": { 289 | "node": ">=4" 290 | } 291 | }, 292 | "node_modules/arg": { 293 | "version": "4.1.3", 294 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 295 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 296 | "dev": true, 297 | "license": "MIT" 298 | }, 299 | "node_modules/argparse": { 300 | "version": "2.0.1", 301 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 302 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 303 | "license": "Python-2.0" 304 | }, 305 | "node_modules/asap": { 306 | "version": "2.0.6", 307 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 308 | "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", 309 | "license": "MIT" 310 | }, 311 | "node_modules/assert-never": { 312 | "version": "1.2.1", 313 | "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", 314 | "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", 315 | "license": "MIT" 316 | }, 317 | "node_modules/ast-types": { 318 | "version": "0.13.4", 319 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", 320 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", 321 | "license": "MIT", 322 | "dependencies": { 323 | "tslib": "^2.0.1" 324 | }, 325 | "engines": { 326 | "node": ">=4" 327 | } 328 | }, 329 | "node_modules/b4a": { 330 | "version": "1.6.6", 331 | "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", 332 | "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", 333 | "license": "Apache-2.0" 334 | }, 335 | "node_modules/babel-walk": { 336 | "version": "3.0.0-canary-5", 337 | "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", 338 | "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", 339 | "license": "MIT", 340 | "dependencies": { 341 | "@babel/types": "^7.9.6" 342 | }, 343 | "engines": { 344 | "node": ">= 10.0.0" 345 | } 346 | }, 347 | "node_modules/bare-events": { 348 | "version": "2.4.2", 349 | "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", 350 | "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", 351 | "license": "Apache-2.0", 352 | "optional": true 353 | }, 354 | "node_modules/bare-fs": { 355 | "version": "2.3.1", 356 | "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", 357 | "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", 358 | "license": "Apache-2.0", 359 | "optional": true, 360 | "dependencies": { 361 | "bare-events": "^2.0.0", 362 | "bare-path": "^2.0.0", 363 | "bare-stream": "^2.0.0" 364 | } 365 | }, 366 | "node_modules/bare-os": { 367 | "version": "2.4.0", 368 | "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", 369 | "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", 370 | "license": "Apache-2.0", 371 | "optional": true 372 | }, 373 | "node_modules/bare-path": { 374 | "version": "2.1.3", 375 | "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", 376 | "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", 377 | "license": "Apache-2.0", 378 | "optional": true, 379 | "dependencies": { 380 | "bare-os": "^2.1.0" 381 | } 382 | }, 383 | "node_modules/bare-stream": { 384 | "version": "2.1.3", 385 | "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", 386 | "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", 387 | "license": "Apache-2.0", 388 | "optional": true, 389 | "dependencies": { 390 | "streamx": "^2.18.0" 391 | } 392 | }, 393 | "node_modules/base64-js": { 394 | "version": "1.5.1", 395 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 396 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 397 | "funding": [ 398 | { 399 | "type": "github", 400 | "url": "https://github.com/sponsors/feross" 401 | }, 402 | { 403 | "type": "patreon", 404 | "url": "https://www.patreon.com/feross" 405 | }, 406 | { 407 | "type": "consulting", 408 | "url": "https://feross.org/support" 409 | } 410 | ], 411 | "license": "MIT" 412 | }, 413 | "node_modules/basic-ftp": { 414 | "version": "5.0.5", 415 | "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", 416 | "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", 417 | "license": "MIT", 418 | "engines": { 419 | "node": ">=10.0.0" 420 | } 421 | }, 422 | "node_modules/buffer": { 423 | "version": "5.7.1", 424 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 425 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 426 | "funding": [ 427 | { 428 | "type": "github", 429 | "url": "https://github.com/sponsors/feross" 430 | }, 431 | { 432 | "type": "patreon", 433 | "url": "https://www.patreon.com/feross" 434 | }, 435 | { 436 | "type": "consulting", 437 | "url": "https://feross.org/support" 438 | } 439 | ], 440 | "license": "MIT", 441 | "dependencies": { 442 | "base64-js": "^1.3.1", 443 | "ieee754": "^1.1.13" 444 | } 445 | }, 446 | "node_modules/buffer-crc32": { 447 | "version": "0.2.13", 448 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 449 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 450 | "license": "MIT", 451 | "engines": { 452 | "node": "*" 453 | } 454 | }, 455 | "node_modules/call-bind": { 456 | "version": "1.0.7", 457 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 458 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 459 | "license": "MIT", 460 | "dependencies": { 461 | "es-define-property": "^1.0.0", 462 | "es-errors": "^1.3.0", 463 | "function-bind": "^1.1.2", 464 | "get-intrinsic": "^1.2.4", 465 | "set-function-length": "^1.2.1" 466 | }, 467 | "engines": { 468 | "node": ">= 0.4" 469 | }, 470 | "funding": { 471 | "url": "https://github.com/sponsors/ljharb" 472 | } 473 | }, 474 | "node_modules/callsites": { 475 | "version": "3.1.0", 476 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 477 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 478 | "license": "MIT", 479 | "engines": { 480 | "node": ">=6" 481 | } 482 | }, 483 | "node_modules/chalk": { 484 | "version": "2.4.2", 485 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 486 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 487 | "license": "MIT", 488 | "dependencies": { 489 | "ansi-styles": "^3.2.1", 490 | "escape-string-regexp": "^1.0.5", 491 | "supports-color": "^5.3.0" 492 | }, 493 | "engines": { 494 | "node": ">=4" 495 | } 496 | }, 497 | "node_modules/character-parser": { 498 | "version": "2.2.0", 499 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", 500 | "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", 501 | "license": "MIT", 502 | "dependencies": { 503 | "is-regex": "^1.0.3" 504 | } 505 | }, 506 | "node_modules/chromium-bidi": { 507 | "version": "0.5.24", 508 | "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.24.tgz", 509 | "integrity": "sha512-5xQNN2SVBdZv4TxeMLaI+PelrnZsHDhn8h2JtyriLr+0qHcZS8BMuo93qN6J1VmtmrgYP+rmcLHcbpnA8QJh+w==", 510 | "license": "Apache-2.0", 511 | "dependencies": { 512 | "mitt": "3.0.1", 513 | "urlpattern-polyfill": "10.0.0", 514 | "zod": "3.23.8" 515 | }, 516 | "peerDependencies": { 517 | "devtools-protocol": "*" 518 | } 519 | }, 520 | "node_modules/cliui": { 521 | "version": "8.0.1", 522 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 523 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 524 | "license": "ISC", 525 | "dependencies": { 526 | "string-width": "^4.2.0", 527 | "strip-ansi": "^6.0.1", 528 | "wrap-ansi": "^7.0.0" 529 | }, 530 | "engines": { 531 | "node": ">=12" 532 | } 533 | }, 534 | "node_modules/color-convert": { 535 | "version": "1.9.3", 536 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 537 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 538 | "license": "MIT", 539 | "dependencies": { 540 | "color-name": "1.1.3" 541 | } 542 | }, 543 | "node_modules/color-name": { 544 | "version": "1.1.3", 545 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 546 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 547 | "license": "MIT" 548 | }, 549 | "node_modules/constantinople": { 550 | "version": "4.0.1", 551 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", 552 | "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", 553 | "license": "MIT", 554 | "dependencies": { 555 | "@babel/parser": "^7.6.0", 556 | "@babel/types": "^7.6.1" 557 | } 558 | }, 559 | "node_modules/cosmiconfig": { 560 | "version": "9.0.0", 561 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", 562 | "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", 563 | "license": "MIT", 564 | "dependencies": { 565 | "env-paths": "^2.2.1", 566 | "import-fresh": "^3.3.0", 567 | "js-yaml": "^4.1.0", 568 | "parse-json": "^5.2.0" 569 | }, 570 | "engines": { 571 | "node": ">=14" 572 | }, 573 | "funding": { 574 | "url": "https://github.com/sponsors/d-fischer" 575 | }, 576 | "peerDependencies": { 577 | "typescript": ">=4.9.5" 578 | }, 579 | "peerDependenciesMeta": { 580 | "typescript": { 581 | "optional": true 582 | } 583 | } 584 | }, 585 | "node_modules/create-require": { 586 | "version": "1.1.1", 587 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 588 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 589 | "dev": true, 590 | "license": "MIT" 591 | }, 592 | "node_modules/data-uri-to-buffer": { 593 | "version": "6.0.2", 594 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", 595 | "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", 596 | "license": "MIT", 597 | "engines": { 598 | "node": ">= 14" 599 | } 600 | }, 601 | "node_modules/debug": { 602 | "version": "4.3.4", 603 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 604 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 605 | "license": "MIT", 606 | "dependencies": { 607 | "ms": "2.1.2" 608 | }, 609 | "engines": { 610 | "node": ">=6.0" 611 | }, 612 | "peerDependenciesMeta": { 613 | "supports-color": { 614 | "optional": true 615 | } 616 | } 617 | }, 618 | "node_modules/define-data-property": { 619 | "version": "1.1.4", 620 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 621 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 622 | "license": "MIT", 623 | "dependencies": { 624 | "es-define-property": "^1.0.0", 625 | "es-errors": "^1.3.0", 626 | "gopd": "^1.0.1" 627 | }, 628 | "engines": { 629 | "node": ">= 0.4" 630 | }, 631 | "funding": { 632 | "url": "https://github.com/sponsors/ljharb" 633 | } 634 | }, 635 | "node_modules/degenerator": { 636 | "version": "5.0.1", 637 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", 638 | "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", 639 | "license": "MIT", 640 | "dependencies": { 641 | "ast-types": "^0.13.4", 642 | "escodegen": "^2.1.0", 643 | "esprima": "^4.0.1" 644 | }, 645 | "engines": { 646 | "node": ">= 14" 647 | } 648 | }, 649 | "node_modules/devtools-protocol": { 650 | "version": "0.0.1299070", 651 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", 652 | "integrity": "sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==", 653 | "license": "BSD-3-Clause" 654 | }, 655 | "node_modules/diff": { 656 | "version": "4.0.2", 657 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 658 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 659 | "dev": true, 660 | "license": "BSD-3-Clause", 661 | "engines": { 662 | "node": ">=0.3.1" 663 | } 664 | }, 665 | "node_modules/doctypes": { 666 | "version": "1.1.0", 667 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", 668 | "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", 669 | "license": "MIT" 670 | }, 671 | "node_modules/emoji-regex": { 672 | "version": "8.0.0", 673 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 674 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 675 | "license": "MIT" 676 | }, 677 | "node_modules/end-of-stream": { 678 | "version": "1.4.4", 679 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 680 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 681 | "license": "MIT", 682 | "dependencies": { 683 | "once": "^1.4.0" 684 | } 685 | }, 686 | "node_modules/env-paths": { 687 | "version": "2.2.1", 688 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 689 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 690 | "license": "MIT", 691 | "engines": { 692 | "node": ">=6" 693 | } 694 | }, 695 | "node_modules/error-ex": { 696 | "version": "1.3.2", 697 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 698 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 699 | "license": "MIT", 700 | "dependencies": { 701 | "is-arrayish": "^0.2.1" 702 | } 703 | }, 704 | "node_modules/es-define-property": { 705 | "version": "1.0.0", 706 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 707 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 708 | "license": "MIT", 709 | "dependencies": { 710 | "get-intrinsic": "^1.2.4" 711 | }, 712 | "engines": { 713 | "node": ">= 0.4" 714 | } 715 | }, 716 | "node_modules/es-errors": { 717 | "version": "1.3.0", 718 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 719 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 720 | "license": "MIT", 721 | "engines": { 722 | "node": ">= 0.4" 723 | } 724 | }, 725 | "node_modules/escalade": { 726 | "version": "3.1.2", 727 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 728 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 729 | "license": "MIT", 730 | "engines": { 731 | "node": ">=6" 732 | } 733 | }, 734 | "node_modules/escape-string-regexp": { 735 | "version": "1.0.5", 736 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 737 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 738 | "license": "MIT", 739 | "engines": { 740 | "node": ">=0.8.0" 741 | } 742 | }, 743 | "node_modules/escodegen": { 744 | "version": "2.1.0", 745 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", 746 | "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", 747 | "license": "BSD-2-Clause", 748 | "dependencies": { 749 | "esprima": "^4.0.1", 750 | "estraverse": "^5.2.0", 751 | "esutils": "^2.0.2" 752 | }, 753 | "bin": { 754 | "escodegen": "bin/escodegen.js", 755 | "esgenerate": "bin/esgenerate.js" 756 | }, 757 | "engines": { 758 | "node": ">=6.0" 759 | }, 760 | "optionalDependencies": { 761 | "source-map": "~0.6.1" 762 | } 763 | }, 764 | "node_modules/esprima": { 765 | "version": "4.0.1", 766 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 767 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 768 | "license": "BSD-2-Clause", 769 | "bin": { 770 | "esparse": "bin/esparse.js", 771 | "esvalidate": "bin/esvalidate.js" 772 | }, 773 | "engines": { 774 | "node": ">=4" 775 | } 776 | }, 777 | "node_modules/estraverse": { 778 | "version": "5.3.0", 779 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 780 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 781 | "license": "BSD-2-Clause", 782 | "engines": { 783 | "node": ">=4.0" 784 | } 785 | }, 786 | "node_modules/esutils": { 787 | "version": "2.0.3", 788 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 789 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 790 | "license": "BSD-2-Clause", 791 | "engines": { 792 | "node": ">=0.10.0" 793 | } 794 | }, 795 | "node_modules/extract-zip": { 796 | "version": "2.0.1", 797 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 798 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 799 | "license": "BSD-2-Clause", 800 | "dependencies": { 801 | "debug": "^4.1.1", 802 | "get-stream": "^5.1.0", 803 | "yauzl": "^2.10.0" 804 | }, 805 | "bin": { 806 | "extract-zip": "cli.js" 807 | }, 808 | "engines": { 809 | "node": ">= 10.17.0" 810 | }, 811 | "optionalDependencies": { 812 | "@types/yauzl": "^2.9.1" 813 | } 814 | }, 815 | "node_modules/fast-fifo": { 816 | "version": "1.3.2", 817 | "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", 818 | "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", 819 | "license": "MIT" 820 | }, 821 | "node_modules/fd-slicer": { 822 | "version": "1.1.0", 823 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 824 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 825 | "license": "MIT", 826 | "dependencies": { 827 | "pend": "~1.2.0" 828 | } 829 | }, 830 | "node_modules/fs-extra": { 831 | "version": "11.2.0", 832 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", 833 | "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", 834 | "license": "MIT", 835 | "dependencies": { 836 | "graceful-fs": "^4.2.0", 837 | "jsonfile": "^6.0.1", 838 | "universalify": "^2.0.0" 839 | }, 840 | "engines": { 841 | "node": ">=14.14" 842 | } 843 | }, 844 | "node_modules/function-bind": { 845 | "version": "1.1.2", 846 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 847 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 848 | "license": "MIT", 849 | "funding": { 850 | "url": "https://github.com/sponsors/ljharb" 851 | } 852 | }, 853 | "node_modules/get-caller-file": { 854 | "version": "2.0.5", 855 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 856 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 857 | "license": "ISC", 858 | "engines": { 859 | "node": "6.* || 8.* || >= 10.*" 860 | } 861 | }, 862 | "node_modules/get-intrinsic": { 863 | "version": "1.2.4", 864 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 865 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 866 | "license": "MIT", 867 | "dependencies": { 868 | "es-errors": "^1.3.0", 869 | "function-bind": "^1.1.2", 870 | "has-proto": "^1.0.1", 871 | "has-symbols": "^1.0.3", 872 | "hasown": "^2.0.0" 873 | }, 874 | "engines": { 875 | "node": ">= 0.4" 876 | }, 877 | "funding": { 878 | "url": "https://github.com/sponsors/ljharb" 879 | } 880 | }, 881 | "node_modules/get-stream": { 882 | "version": "5.2.0", 883 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 884 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 885 | "license": "MIT", 886 | "dependencies": { 887 | "pump": "^3.0.0" 888 | }, 889 | "engines": { 890 | "node": ">=8" 891 | }, 892 | "funding": { 893 | "url": "https://github.com/sponsors/sindresorhus" 894 | } 895 | }, 896 | "node_modules/get-uri": { 897 | "version": "6.0.3", 898 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", 899 | "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", 900 | "license": "MIT", 901 | "dependencies": { 902 | "basic-ftp": "^5.0.2", 903 | "data-uri-to-buffer": "^6.0.2", 904 | "debug": "^4.3.4", 905 | "fs-extra": "^11.2.0" 906 | }, 907 | "engines": { 908 | "node": ">= 14" 909 | } 910 | }, 911 | "node_modules/gopd": { 912 | "version": "1.0.1", 913 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 914 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 915 | "license": "MIT", 916 | "dependencies": { 917 | "get-intrinsic": "^1.1.3" 918 | }, 919 | "funding": { 920 | "url": "https://github.com/sponsors/ljharb" 921 | } 922 | }, 923 | "node_modules/graceful-fs": { 924 | "version": "4.2.11", 925 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 926 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 927 | "license": "ISC" 928 | }, 929 | "node_modules/has-flag": { 930 | "version": "3.0.0", 931 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 932 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 933 | "license": "MIT", 934 | "engines": { 935 | "node": ">=4" 936 | } 937 | }, 938 | "node_modules/has-property-descriptors": { 939 | "version": "1.0.2", 940 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 941 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 942 | "license": "MIT", 943 | "dependencies": { 944 | "es-define-property": "^1.0.0" 945 | }, 946 | "funding": { 947 | "url": "https://github.com/sponsors/ljharb" 948 | } 949 | }, 950 | "node_modules/has-proto": { 951 | "version": "1.0.3", 952 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 953 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 954 | "license": "MIT", 955 | "engines": { 956 | "node": ">= 0.4" 957 | }, 958 | "funding": { 959 | "url": "https://github.com/sponsors/ljharb" 960 | } 961 | }, 962 | "node_modules/has-symbols": { 963 | "version": "1.0.3", 964 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 965 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 966 | "license": "MIT", 967 | "engines": { 968 | "node": ">= 0.4" 969 | }, 970 | "funding": { 971 | "url": "https://github.com/sponsors/ljharb" 972 | } 973 | }, 974 | "node_modules/has-tostringtag": { 975 | "version": "1.0.2", 976 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 977 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 978 | "license": "MIT", 979 | "dependencies": { 980 | "has-symbols": "^1.0.3" 981 | }, 982 | "engines": { 983 | "node": ">= 0.4" 984 | }, 985 | "funding": { 986 | "url": "https://github.com/sponsors/ljharb" 987 | } 988 | }, 989 | "node_modules/hasown": { 990 | "version": "2.0.2", 991 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 992 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 993 | "license": "MIT", 994 | "dependencies": { 995 | "function-bind": "^1.1.2" 996 | }, 997 | "engines": { 998 | "node": ">= 0.4" 999 | } 1000 | }, 1001 | "node_modules/http-proxy-agent": { 1002 | "version": "7.0.2", 1003 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", 1004 | "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", 1005 | "license": "MIT", 1006 | "dependencies": { 1007 | "agent-base": "^7.1.0", 1008 | "debug": "^4.3.4" 1009 | }, 1010 | "engines": { 1011 | "node": ">= 14" 1012 | } 1013 | }, 1014 | "node_modules/https-proxy-agent": { 1015 | "version": "7.0.5", 1016 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", 1017 | "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", 1018 | "license": "MIT", 1019 | "dependencies": { 1020 | "agent-base": "^7.0.2", 1021 | "debug": "4" 1022 | }, 1023 | "engines": { 1024 | "node": ">= 14" 1025 | } 1026 | }, 1027 | "node_modules/ieee754": { 1028 | "version": "1.2.1", 1029 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1030 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1031 | "funding": [ 1032 | { 1033 | "type": "github", 1034 | "url": "https://github.com/sponsors/feross" 1035 | }, 1036 | { 1037 | "type": "patreon", 1038 | "url": "https://www.patreon.com/feross" 1039 | }, 1040 | { 1041 | "type": "consulting", 1042 | "url": "https://feross.org/support" 1043 | } 1044 | ], 1045 | "license": "BSD-3-Clause" 1046 | }, 1047 | "node_modules/import-fresh": { 1048 | "version": "3.3.0", 1049 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1050 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1051 | "license": "MIT", 1052 | "dependencies": { 1053 | "parent-module": "^1.0.0", 1054 | "resolve-from": "^4.0.0" 1055 | }, 1056 | "engines": { 1057 | "node": ">=6" 1058 | }, 1059 | "funding": { 1060 | "url": "https://github.com/sponsors/sindresorhus" 1061 | } 1062 | }, 1063 | "node_modules/ip-address": { 1064 | "version": "9.0.5", 1065 | "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", 1066 | "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", 1067 | "license": "MIT", 1068 | "dependencies": { 1069 | "jsbn": "1.1.0", 1070 | "sprintf-js": "^1.1.3" 1071 | }, 1072 | "engines": { 1073 | "node": ">= 12" 1074 | } 1075 | }, 1076 | "node_modules/is-arrayish": { 1077 | "version": "0.2.1", 1078 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1079 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 1080 | "license": "MIT" 1081 | }, 1082 | "node_modules/is-core-module": { 1083 | "version": "2.14.0", 1084 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", 1085 | "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", 1086 | "license": "MIT", 1087 | "dependencies": { 1088 | "hasown": "^2.0.2" 1089 | }, 1090 | "engines": { 1091 | "node": ">= 0.4" 1092 | }, 1093 | "funding": { 1094 | "url": "https://github.com/sponsors/ljharb" 1095 | } 1096 | }, 1097 | "node_modules/is-expression": { 1098 | "version": "4.0.0", 1099 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", 1100 | "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", 1101 | "license": "MIT", 1102 | "dependencies": { 1103 | "acorn": "^7.1.1", 1104 | "object-assign": "^4.1.1" 1105 | } 1106 | }, 1107 | "node_modules/is-fullwidth-code-point": { 1108 | "version": "3.0.0", 1109 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1110 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1111 | "license": "MIT", 1112 | "engines": { 1113 | "node": ">=8" 1114 | } 1115 | }, 1116 | "node_modules/is-promise": { 1117 | "version": "2.2.2", 1118 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", 1119 | "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", 1120 | "license": "MIT" 1121 | }, 1122 | "node_modules/is-regex": { 1123 | "version": "1.1.4", 1124 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1125 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1126 | "license": "MIT", 1127 | "dependencies": { 1128 | "call-bind": "^1.0.2", 1129 | "has-tostringtag": "^1.0.0" 1130 | }, 1131 | "engines": { 1132 | "node": ">= 0.4" 1133 | }, 1134 | "funding": { 1135 | "url": "https://github.com/sponsors/ljharb" 1136 | } 1137 | }, 1138 | "node_modules/js-stringify": { 1139 | "version": "1.0.2", 1140 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", 1141 | "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", 1142 | "license": "MIT" 1143 | }, 1144 | "node_modules/js-tokens": { 1145 | "version": "4.0.0", 1146 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1147 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1148 | "license": "MIT" 1149 | }, 1150 | "node_modules/js-yaml": { 1151 | "version": "4.1.0", 1152 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1153 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1154 | "license": "MIT", 1155 | "dependencies": { 1156 | "argparse": "^2.0.1" 1157 | }, 1158 | "bin": { 1159 | "js-yaml": "bin/js-yaml.js" 1160 | } 1161 | }, 1162 | "node_modules/jsbn": { 1163 | "version": "1.1.0", 1164 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", 1165 | "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", 1166 | "license": "MIT" 1167 | }, 1168 | "node_modules/json-parse-even-better-errors": { 1169 | "version": "2.3.1", 1170 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1171 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1172 | "license": "MIT" 1173 | }, 1174 | "node_modules/jsonfile": { 1175 | "version": "6.1.0", 1176 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 1177 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 1178 | "license": "MIT", 1179 | "dependencies": { 1180 | "universalify": "^2.0.0" 1181 | }, 1182 | "optionalDependencies": { 1183 | "graceful-fs": "^4.1.6" 1184 | } 1185 | }, 1186 | "node_modules/jstransformer": { 1187 | "version": "1.0.0", 1188 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", 1189 | "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", 1190 | "license": "MIT", 1191 | "dependencies": { 1192 | "is-promise": "^2.0.0", 1193 | "promise": "^7.0.1" 1194 | } 1195 | }, 1196 | "node_modules/larp": { 1197 | "version": "1.0.1", 1198 | "resolved": "https://registry.npmjs.org/larp/-/larp-1.0.1.tgz", 1199 | "integrity": "sha512-M3CiMOcNMUJ+tV2LXoYwH84sIzt1SeiFab/+M+EYB/UDgaThUmqV30wC8fsUPUbRY1+7IUE5yQeW8o32tL2EtQ==", 1200 | "license": "MIT", 1201 | "dependencies": { 1202 | "node-fetch": "^2.2.0" 1203 | } 1204 | }, 1205 | "node_modules/lines-and-columns": { 1206 | "version": "1.2.4", 1207 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1208 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1209 | "license": "MIT" 1210 | }, 1211 | "node_modules/lru-cache": { 1212 | "version": "7.18.3", 1213 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 1214 | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", 1215 | "license": "ISC", 1216 | "engines": { 1217 | "node": ">=12" 1218 | } 1219 | }, 1220 | "node_modules/make-error": { 1221 | "version": "1.3.6", 1222 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1223 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1224 | "dev": true, 1225 | "license": "ISC" 1226 | }, 1227 | "node_modules/mitt": { 1228 | "version": "3.0.1", 1229 | "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 1230 | "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", 1231 | "license": "MIT" 1232 | }, 1233 | "node_modules/ms": { 1234 | "version": "2.1.2", 1235 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1236 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1237 | "license": "MIT" 1238 | }, 1239 | "node_modules/netmask": { 1240 | "version": "2.0.2", 1241 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", 1242 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", 1243 | "license": "MIT", 1244 | "engines": { 1245 | "node": ">= 0.4.0" 1246 | } 1247 | }, 1248 | "node_modules/node-fetch": { 1249 | "version": "2.7.0", 1250 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 1251 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 1252 | "license": "MIT", 1253 | "dependencies": { 1254 | "whatwg-url": "^5.0.0" 1255 | }, 1256 | "engines": { 1257 | "node": "4.x || >=6.0.0" 1258 | }, 1259 | "peerDependencies": { 1260 | "encoding": "^0.1.0" 1261 | }, 1262 | "peerDependenciesMeta": { 1263 | "encoding": { 1264 | "optional": true 1265 | } 1266 | } 1267 | }, 1268 | "node_modules/object-assign": { 1269 | "version": "4.1.1", 1270 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1271 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1272 | "license": "MIT", 1273 | "engines": { 1274 | "node": ">=0.10.0" 1275 | } 1276 | }, 1277 | "node_modules/once": { 1278 | "version": "1.4.0", 1279 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1280 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1281 | "license": "ISC", 1282 | "dependencies": { 1283 | "wrappy": "1" 1284 | } 1285 | }, 1286 | "node_modules/pac-proxy-agent": { 1287 | "version": "7.0.2", 1288 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", 1289 | "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", 1290 | "license": "MIT", 1291 | "dependencies": { 1292 | "@tootallnate/quickjs-emscripten": "^0.23.0", 1293 | "agent-base": "^7.0.2", 1294 | "debug": "^4.3.4", 1295 | "get-uri": "^6.0.1", 1296 | "http-proxy-agent": "^7.0.0", 1297 | "https-proxy-agent": "^7.0.5", 1298 | "pac-resolver": "^7.0.1", 1299 | "socks-proxy-agent": "^8.0.4" 1300 | }, 1301 | "engines": { 1302 | "node": ">= 14" 1303 | } 1304 | }, 1305 | "node_modules/pac-resolver": { 1306 | "version": "7.0.1", 1307 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", 1308 | "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", 1309 | "license": "MIT", 1310 | "dependencies": { 1311 | "degenerator": "^5.0.0", 1312 | "netmask": "^2.0.2" 1313 | }, 1314 | "engines": { 1315 | "node": ">= 14" 1316 | } 1317 | }, 1318 | "node_modules/parent-module": { 1319 | "version": "1.0.1", 1320 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1321 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1322 | "license": "MIT", 1323 | "dependencies": { 1324 | "callsites": "^3.0.0" 1325 | }, 1326 | "engines": { 1327 | "node": ">=6" 1328 | } 1329 | }, 1330 | "node_modules/parse-json": { 1331 | "version": "5.2.0", 1332 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1333 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1334 | "license": "MIT", 1335 | "dependencies": { 1336 | "@babel/code-frame": "^7.0.0", 1337 | "error-ex": "^1.3.1", 1338 | "json-parse-even-better-errors": "^2.3.0", 1339 | "lines-and-columns": "^1.1.6" 1340 | }, 1341 | "engines": { 1342 | "node": ">=8" 1343 | }, 1344 | "funding": { 1345 | "url": "https://github.com/sponsors/sindresorhus" 1346 | } 1347 | }, 1348 | "node_modules/path-parse": { 1349 | "version": "1.0.7", 1350 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1351 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1352 | "license": "MIT" 1353 | }, 1354 | "node_modules/pend": { 1355 | "version": "1.2.0", 1356 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1357 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 1358 | "license": "MIT" 1359 | }, 1360 | "node_modules/picocolors": { 1361 | "version": "1.0.1", 1362 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 1363 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", 1364 | "license": "ISC" 1365 | }, 1366 | "node_modules/progress": { 1367 | "version": "2.0.3", 1368 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1369 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1370 | "license": "MIT", 1371 | "engines": { 1372 | "node": ">=0.4.0" 1373 | } 1374 | }, 1375 | "node_modules/promise": { 1376 | "version": "7.3.1", 1377 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 1378 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 1379 | "license": "MIT", 1380 | "dependencies": { 1381 | "asap": "~2.0.3" 1382 | } 1383 | }, 1384 | "node_modules/proxy-agent": { 1385 | "version": "6.4.0", 1386 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", 1387 | "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", 1388 | "license": "MIT", 1389 | "dependencies": { 1390 | "agent-base": "^7.0.2", 1391 | "debug": "^4.3.4", 1392 | "http-proxy-agent": "^7.0.1", 1393 | "https-proxy-agent": "^7.0.3", 1394 | "lru-cache": "^7.14.1", 1395 | "pac-proxy-agent": "^7.0.1", 1396 | "proxy-from-env": "^1.1.0", 1397 | "socks-proxy-agent": "^8.0.2" 1398 | }, 1399 | "engines": { 1400 | "node": ">= 14" 1401 | } 1402 | }, 1403 | "node_modules/proxy-from-env": { 1404 | "version": "1.1.0", 1405 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1406 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 1407 | "license": "MIT" 1408 | }, 1409 | "node_modules/pug": { 1410 | "version": "3.0.3", 1411 | "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", 1412 | "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", 1413 | "license": "MIT", 1414 | "dependencies": { 1415 | "pug-code-gen": "^3.0.3", 1416 | "pug-filters": "^4.0.0", 1417 | "pug-lexer": "^5.0.1", 1418 | "pug-linker": "^4.0.0", 1419 | "pug-load": "^3.0.0", 1420 | "pug-parser": "^6.0.0", 1421 | "pug-runtime": "^3.0.1", 1422 | "pug-strip-comments": "^2.0.0" 1423 | } 1424 | }, 1425 | "node_modules/pug-attrs": { 1426 | "version": "3.0.0", 1427 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", 1428 | "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", 1429 | "license": "MIT", 1430 | "dependencies": { 1431 | "constantinople": "^4.0.1", 1432 | "js-stringify": "^1.0.2", 1433 | "pug-runtime": "^3.0.0" 1434 | } 1435 | }, 1436 | "node_modules/pug-code-gen": { 1437 | "version": "3.0.3", 1438 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", 1439 | "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", 1440 | "license": "MIT", 1441 | "dependencies": { 1442 | "constantinople": "^4.0.1", 1443 | "doctypes": "^1.1.0", 1444 | "js-stringify": "^1.0.2", 1445 | "pug-attrs": "^3.0.0", 1446 | "pug-error": "^2.1.0", 1447 | "pug-runtime": "^3.0.1", 1448 | "void-elements": "^3.1.0", 1449 | "with": "^7.0.0" 1450 | } 1451 | }, 1452 | "node_modules/pug-error": { 1453 | "version": "2.1.0", 1454 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", 1455 | "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", 1456 | "license": "MIT" 1457 | }, 1458 | "node_modules/pug-filters": { 1459 | "version": "4.0.0", 1460 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", 1461 | "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", 1462 | "license": "MIT", 1463 | "dependencies": { 1464 | "constantinople": "^4.0.1", 1465 | "jstransformer": "1.0.0", 1466 | "pug-error": "^2.0.0", 1467 | "pug-walk": "^2.0.0", 1468 | "resolve": "^1.15.1" 1469 | } 1470 | }, 1471 | "node_modules/pug-lexer": { 1472 | "version": "5.0.1", 1473 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", 1474 | "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", 1475 | "license": "MIT", 1476 | "dependencies": { 1477 | "character-parser": "^2.2.0", 1478 | "is-expression": "^4.0.0", 1479 | "pug-error": "^2.0.0" 1480 | } 1481 | }, 1482 | "node_modules/pug-linker": { 1483 | "version": "4.0.0", 1484 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", 1485 | "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", 1486 | "license": "MIT", 1487 | "dependencies": { 1488 | "pug-error": "^2.0.0", 1489 | "pug-walk": "^2.0.0" 1490 | } 1491 | }, 1492 | "node_modules/pug-load": { 1493 | "version": "3.0.0", 1494 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", 1495 | "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", 1496 | "license": "MIT", 1497 | "dependencies": { 1498 | "object-assign": "^4.1.1", 1499 | "pug-walk": "^2.0.0" 1500 | } 1501 | }, 1502 | "node_modules/pug-parser": { 1503 | "version": "6.0.0", 1504 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", 1505 | "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", 1506 | "license": "MIT", 1507 | "dependencies": { 1508 | "pug-error": "^2.0.0", 1509 | "token-stream": "1.0.0" 1510 | } 1511 | }, 1512 | "node_modules/pug-runtime": { 1513 | "version": "3.0.1", 1514 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", 1515 | "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", 1516 | "license": "MIT" 1517 | }, 1518 | "node_modules/pug-strip-comments": { 1519 | "version": "2.0.0", 1520 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", 1521 | "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", 1522 | "license": "MIT", 1523 | "dependencies": { 1524 | "pug-error": "^2.0.0" 1525 | } 1526 | }, 1527 | "node_modules/pug-walk": { 1528 | "version": "2.0.0", 1529 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", 1530 | "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", 1531 | "license": "MIT" 1532 | }, 1533 | "node_modules/pump": { 1534 | "version": "3.0.0", 1535 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1536 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1537 | "license": "MIT", 1538 | "dependencies": { 1539 | "end-of-stream": "^1.1.0", 1540 | "once": "^1.3.1" 1541 | } 1542 | }, 1543 | "node_modules/puppeteer": { 1544 | "version": "22.12.1", 1545 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.12.1.tgz", 1546 | "integrity": "sha512-1GxY8dnEnHr1SLzdSDr0FCjM6JQfAh2E2I/EqzeF8a58DbGVk9oVjj4lFdqNoVbpgFSpAbz7VER9St7S1wDpNg==", 1547 | "hasInstallScript": true, 1548 | "license": "Apache-2.0", 1549 | "dependencies": { 1550 | "@puppeteer/browsers": "2.2.3", 1551 | "cosmiconfig": "^9.0.0", 1552 | "devtools-protocol": "0.0.1299070", 1553 | "puppeteer-core": "22.12.1" 1554 | }, 1555 | "bin": { 1556 | "puppeteer": "lib/esm/puppeteer/node/cli.js" 1557 | }, 1558 | "engines": { 1559 | "node": ">=18" 1560 | } 1561 | }, 1562 | "node_modules/puppeteer-core": { 1563 | "version": "22.12.1", 1564 | "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.12.1.tgz", 1565 | "integrity": "sha512-XmqeDPVdC5/3nGJys1jbgeoZ02wP0WV1GBlPtr/ULRbGXJFuqgXMcKQ3eeNtFpBzGRbpeoCGWHge1ZWKWl0Exw==", 1566 | "license": "Apache-2.0", 1567 | "dependencies": { 1568 | "@puppeteer/browsers": "2.2.3", 1569 | "chromium-bidi": "0.5.24", 1570 | "debug": "^4.3.5", 1571 | "devtools-protocol": "0.0.1299070", 1572 | "ws": "^8.17.1" 1573 | }, 1574 | "engines": { 1575 | "node": ">=18" 1576 | } 1577 | }, 1578 | "node_modules/puppeteer-core/node_modules/debug": { 1579 | "version": "4.3.5", 1580 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", 1581 | "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", 1582 | "license": "MIT", 1583 | "dependencies": { 1584 | "ms": "2.1.2" 1585 | }, 1586 | "engines": { 1587 | "node": ">=6.0" 1588 | }, 1589 | "peerDependenciesMeta": { 1590 | "supports-color": { 1591 | "optional": true 1592 | } 1593 | } 1594 | }, 1595 | "node_modules/queue-tick": { 1596 | "version": "1.0.1", 1597 | "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", 1598 | "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", 1599 | "license": "MIT" 1600 | }, 1601 | "node_modules/require-directory": { 1602 | "version": "2.1.1", 1603 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1604 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1605 | "license": "MIT", 1606 | "engines": { 1607 | "node": ">=0.10.0" 1608 | } 1609 | }, 1610 | "node_modules/resolve": { 1611 | "version": "1.22.8", 1612 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 1613 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 1614 | "license": "MIT", 1615 | "dependencies": { 1616 | "is-core-module": "^2.13.0", 1617 | "path-parse": "^1.0.7", 1618 | "supports-preserve-symlinks-flag": "^1.0.0" 1619 | }, 1620 | "bin": { 1621 | "resolve": "bin/resolve" 1622 | }, 1623 | "funding": { 1624 | "url": "https://github.com/sponsors/ljharb" 1625 | } 1626 | }, 1627 | "node_modules/resolve-from": { 1628 | "version": "4.0.0", 1629 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1630 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1631 | "license": "MIT", 1632 | "engines": { 1633 | "node": ">=4" 1634 | } 1635 | }, 1636 | "node_modules/semver": { 1637 | "version": "7.6.0", 1638 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 1639 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 1640 | "license": "ISC", 1641 | "dependencies": { 1642 | "lru-cache": "^6.0.0" 1643 | }, 1644 | "bin": { 1645 | "semver": "bin/semver.js" 1646 | }, 1647 | "engines": { 1648 | "node": ">=10" 1649 | } 1650 | }, 1651 | "node_modules/semver/node_modules/lru-cache": { 1652 | "version": "6.0.0", 1653 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1654 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1655 | "license": "ISC", 1656 | "dependencies": { 1657 | "yallist": "^4.0.0" 1658 | }, 1659 | "engines": { 1660 | "node": ">=10" 1661 | } 1662 | }, 1663 | "node_modules/set-function-length": { 1664 | "version": "1.2.2", 1665 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 1666 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 1667 | "license": "MIT", 1668 | "dependencies": { 1669 | "define-data-property": "^1.1.4", 1670 | "es-errors": "^1.3.0", 1671 | "function-bind": "^1.1.2", 1672 | "get-intrinsic": "^1.2.4", 1673 | "gopd": "^1.0.1", 1674 | "has-property-descriptors": "^1.0.2" 1675 | }, 1676 | "engines": { 1677 | "node": ">= 0.4" 1678 | } 1679 | }, 1680 | "node_modules/smart-buffer": { 1681 | "version": "4.2.0", 1682 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1683 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1684 | "license": "MIT", 1685 | "engines": { 1686 | "node": ">= 6.0.0", 1687 | "npm": ">= 3.0.0" 1688 | } 1689 | }, 1690 | "node_modules/socks": { 1691 | "version": "2.8.3", 1692 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", 1693 | "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", 1694 | "license": "MIT", 1695 | "dependencies": { 1696 | "ip-address": "^9.0.5", 1697 | "smart-buffer": "^4.2.0" 1698 | }, 1699 | "engines": { 1700 | "node": ">= 10.0.0", 1701 | "npm": ">= 3.0.0" 1702 | } 1703 | }, 1704 | "node_modules/socks-proxy-agent": { 1705 | "version": "8.0.4", 1706 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", 1707 | "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", 1708 | "license": "MIT", 1709 | "dependencies": { 1710 | "agent-base": "^7.1.1", 1711 | "debug": "^4.3.4", 1712 | "socks": "^2.8.3" 1713 | }, 1714 | "engines": { 1715 | "node": ">= 14" 1716 | } 1717 | }, 1718 | "node_modules/source-map": { 1719 | "version": "0.6.1", 1720 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1721 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1722 | "license": "BSD-3-Clause", 1723 | "optional": true, 1724 | "engines": { 1725 | "node": ">=0.10.0" 1726 | } 1727 | }, 1728 | "node_modules/sprintf-js": { 1729 | "version": "1.1.3", 1730 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", 1731 | "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", 1732 | "license": "BSD-3-Clause" 1733 | }, 1734 | "node_modules/streamx": { 1735 | "version": "2.18.0", 1736 | "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", 1737 | "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", 1738 | "license": "MIT", 1739 | "dependencies": { 1740 | "fast-fifo": "^1.3.2", 1741 | "queue-tick": "^1.0.1", 1742 | "text-decoder": "^1.1.0" 1743 | }, 1744 | "optionalDependencies": { 1745 | "bare-events": "^2.2.0" 1746 | } 1747 | }, 1748 | "node_modules/string-width": { 1749 | "version": "4.2.3", 1750 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1751 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1752 | "license": "MIT", 1753 | "dependencies": { 1754 | "emoji-regex": "^8.0.0", 1755 | "is-fullwidth-code-point": "^3.0.0", 1756 | "strip-ansi": "^6.0.1" 1757 | }, 1758 | "engines": { 1759 | "node": ">=8" 1760 | } 1761 | }, 1762 | "node_modules/strip-ansi": { 1763 | "version": "6.0.1", 1764 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1765 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1766 | "license": "MIT", 1767 | "dependencies": { 1768 | "ansi-regex": "^5.0.1" 1769 | }, 1770 | "engines": { 1771 | "node": ">=8" 1772 | } 1773 | }, 1774 | "node_modules/supports-color": { 1775 | "version": "5.5.0", 1776 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1777 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1778 | "license": "MIT", 1779 | "dependencies": { 1780 | "has-flag": "^3.0.0" 1781 | }, 1782 | "engines": { 1783 | "node": ">=4" 1784 | } 1785 | }, 1786 | "node_modules/supports-preserve-symlinks-flag": { 1787 | "version": "1.0.0", 1788 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1789 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1790 | "license": "MIT", 1791 | "engines": { 1792 | "node": ">= 0.4" 1793 | }, 1794 | "funding": { 1795 | "url": "https://github.com/sponsors/ljharb" 1796 | } 1797 | }, 1798 | "node_modules/tar-fs": { 1799 | "version": "3.0.5", 1800 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", 1801 | "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", 1802 | "license": "MIT", 1803 | "dependencies": { 1804 | "pump": "^3.0.0", 1805 | "tar-stream": "^3.1.5" 1806 | }, 1807 | "optionalDependencies": { 1808 | "bare-fs": "^2.1.1", 1809 | "bare-path": "^2.1.0" 1810 | } 1811 | }, 1812 | "node_modules/tar-stream": { 1813 | "version": "3.1.7", 1814 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", 1815 | "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", 1816 | "license": "MIT", 1817 | "dependencies": { 1818 | "b4a": "^1.6.4", 1819 | "fast-fifo": "^1.2.0", 1820 | "streamx": "^2.15.0" 1821 | } 1822 | }, 1823 | "node_modules/text-decoder": { 1824 | "version": "1.1.0", 1825 | "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", 1826 | "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", 1827 | "license": "Apache-2.0", 1828 | "dependencies": { 1829 | "b4a": "^1.6.4" 1830 | } 1831 | }, 1832 | "node_modules/through": { 1833 | "version": "2.3.8", 1834 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1835 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 1836 | "license": "MIT" 1837 | }, 1838 | "node_modules/to-fast-properties": { 1839 | "version": "2.0.0", 1840 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1841 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 1842 | "license": "MIT", 1843 | "engines": { 1844 | "node": ">=4" 1845 | } 1846 | }, 1847 | "node_modules/token-stream": { 1848 | "version": "1.0.0", 1849 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", 1850 | "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", 1851 | "license": "MIT" 1852 | }, 1853 | "node_modules/tr46": { 1854 | "version": "0.0.3", 1855 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1856 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", 1857 | "license": "MIT" 1858 | }, 1859 | "node_modules/ts-node": { 1860 | "version": "10.9.2", 1861 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 1862 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 1863 | "dev": true, 1864 | "license": "MIT", 1865 | "dependencies": { 1866 | "@cspotcode/source-map-support": "^0.8.0", 1867 | "@tsconfig/node10": "^1.0.7", 1868 | "@tsconfig/node12": "^1.0.7", 1869 | "@tsconfig/node14": "^1.0.0", 1870 | "@tsconfig/node16": "^1.0.2", 1871 | "acorn": "^8.4.1", 1872 | "acorn-walk": "^8.1.1", 1873 | "arg": "^4.1.0", 1874 | "create-require": "^1.1.0", 1875 | "diff": "^4.0.1", 1876 | "make-error": "^1.1.1", 1877 | "v8-compile-cache-lib": "^3.0.1", 1878 | "yn": "3.1.1" 1879 | }, 1880 | "bin": { 1881 | "ts-node": "dist/bin.js", 1882 | "ts-node-cwd": "dist/bin-cwd.js", 1883 | "ts-node-esm": "dist/bin-esm.js", 1884 | "ts-node-script": "dist/bin-script.js", 1885 | "ts-node-transpile-only": "dist/bin-transpile.js", 1886 | "ts-script": "dist/bin-script-deprecated.js" 1887 | }, 1888 | "peerDependencies": { 1889 | "@swc/core": ">=1.2.50", 1890 | "@swc/wasm": ">=1.2.50", 1891 | "@types/node": "*", 1892 | "typescript": ">=2.7" 1893 | }, 1894 | "peerDependenciesMeta": { 1895 | "@swc/core": { 1896 | "optional": true 1897 | }, 1898 | "@swc/wasm": { 1899 | "optional": true 1900 | } 1901 | } 1902 | }, 1903 | "node_modules/ts-node/node_modules/acorn": { 1904 | "version": "8.12.0", 1905 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", 1906 | "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", 1907 | "dev": true, 1908 | "license": "MIT", 1909 | "bin": { 1910 | "acorn": "bin/acorn" 1911 | }, 1912 | "engines": { 1913 | "node": ">=0.4.0" 1914 | } 1915 | }, 1916 | "node_modules/tslib": { 1917 | "version": "2.6.3", 1918 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", 1919 | "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", 1920 | "license": "0BSD" 1921 | }, 1922 | "node_modules/typescript": { 1923 | "version": "5.5.2", 1924 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", 1925 | "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", 1926 | "devOptional": true, 1927 | "license": "Apache-2.0", 1928 | "peer": true, 1929 | "bin": { 1930 | "tsc": "bin/tsc", 1931 | "tsserver": "bin/tsserver" 1932 | }, 1933 | "engines": { 1934 | "node": ">=14.17" 1935 | } 1936 | }, 1937 | "node_modules/unbzip2-stream": { 1938 | "version": "1.4.3", 1939 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", 1940 | "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", 1941 | "license": "MIT", 1942 | "dependencies": { 1943 | "buffer": "^5.2.1", 1944 | "through": "^2.3.8" 1945 | } 1946 | }, 1947 | "node_modules/undici-types": { 1948 | "version": "5.26.5", 1949 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 1950 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 1951 | "devOptional": true, 1952 | "license": "MIT" 1953 | }, 1954 | "node_modules/universalify": { 1955 | "version": "2.0.1", 1956 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", 1957 | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", 1958 | "license": "MIT", 1959 | "engines": { 1960 | "node": ">= 10.0.0" 1961 | } 1962 | }, 1963 | "node_modules/urlpattern-polyfill": { 1964 | "version": "10.0.0", 1965 | "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", 1966 | "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", 1967 | "license": "MIT" 1968 | }, 1969 | "node_modules/v8-compile-cache-lib": { 1970 | "version": "3.0.1", 1971 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 1972 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 1973 | "dev": true, 1974 | "license": "MIT" 1975 | }, 1976 | "node_modules/void-elements": { 1977 | "version": "3.1.0", 1978 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", 1979 | "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", 1980 | "license": "MIT", 1981 | "engines": { 1982 | "node": ">=0.10.0" 1983 | } 1984 | }, 1985 | "node_modules/webidl-conversions": { 1986 | "version": "3.0.1", 1987 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1988 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 1989 | "license": "BSD-2-Clause" 1990 | }, 1991 | "node_modules/whatwg-url": { 1992 | "version": "5.0.0", 1993 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1994 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1995 | "license": "MIT", 1996 | "dependencies": { 1997 | "tr46": "~0.0.3", 1998 | "webidl-conversions": "^3.0.0" 1999 | } 2000 | }, 2001 | "node_modules/with": { 2002 | "version": "7.0.2", 2003 | "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", 2004 | "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", 2005 | "license": "MIT", 2006 | "dependencies": { 2007 | "@babel/parser": "^7.9.6", 2008 | "@babel/types": "^7.9.6", 2009 | "assert-never": "^1.2.1", 2010 | "babel-walk": "3.0.0-canary-5" 2011 | }, 2012 | "engines": { 2013 | "node": ">= 10.0.0" 2014 | } 2015 | }, 2016 | "node_modules/wrap-ansi": { 2017 | "version": "7.0.0", 2018 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2019 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2020 | "license": "MIT", 2021 | "dependencies": { 2022 | "ansi-styles": "^4.0.0", 2023 | "string-width": "^4.1.0", 2024 | "strip-ansi": "^6.0.0" 2025 | }, 2026 | "engines": { 2027 | "node": ">=10" 2028 | }, 2029 | "funding": { 2030 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2031 | } 2032 | }, 2033 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 2034 | "version": "4.3.0", 2035 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2036 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2037 | "license": "MIT", 2038 | "dependencies": { 2039 | "color-convert": "^2.0.1" 2040 | }, 2041 | "engines": { 2042 | "node": ">=8" 2043 | }, 2044 | "funding": { 2045 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2046 | } 2047 | }, 2048 | "node_modules/wrap-ansi/node_modules/color-convert": { 2049 | "version": "2.0.1", 2050 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2051 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2052 | "license": "MIT", 2053 | "dependencies": { 2054 | "color-name": "~1.1.4" 2055 | }, 2056 | "engines": { 2057 | "node": ">=7.0.0" 2058 | } 2059 | }, 2060 | "node_modules/wrap-ansi/node_modules/color-name": { 2061 | "version": "1.1.4", 2062 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2063 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2064 | "license": "MIT" 2065 | }, 2066 | "node_modules/wrappy": { 2067 | "version": "1.0.2", 2068 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2069 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2070 | "license": "ISC" 2071 | }, 2072 | "node_modules/ws": { 2073 | "version": "8.17.1", 2074 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", 2075 | "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", 2076 | "license": "MIT", 2077 | "engines": { 2078 | "node": ">=10.0.0" 2079 | }, 2080 | "peerDependencies": { 2081 | "bufferutil": "^4.0.1", 2082 | "utf-8-validate": ">=5.0.2" 2083 | }, 2084 | "peerDependenciesMeta": { 2085 | "bufferutil": { 2086 | "optional": true 2087 | }, 2088 | "utf-8-validate": { 2089 | "optional": true 2090 | } 2091 | } 2092 | }, 2093 | "node_modules/y18n": { 2094 | "version": "5.0.8", 2095 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2096 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2097 | "license": "ISC", 2098 | "engines": { 2099 | "node": ">=10" 2100 | } 2101 | }, 2102 | "node_modules/yallist": { 2103 | "version": "4.0.0", 2104 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2105 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2106 | "license": "ISC" 2107 | }, 2108 | "node_modules/yargs": { 2109 | "version": "17.7.2", 2110 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 2111 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 2112 | "license": "MIT", 2113 | "dependencies": { 2114 | "cliui": "^8.0.1", 2115 | "escalade": "^3.1.1", 2116 | "get-caller-file": "^2.0.5", 2117 | "require-directory": "^2.1.1", 2118 | "string-width": "^4.2.3", 2119 | "y18n": "^5.0.5", 2120 | "yargs-parser": "^21.1.1" 2121 | }, 2122 | "engines": { 2123 | "node": ">=12" 2124 | } 2125 | }, 2126 | "node_modules/yargs-parser": { 2127 | "version": "21.1.1", 2128 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 2129 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 2130 | "license": "ISC", 2131 | "engines": { 2132 | "node": ">=12" 2133 | } 2134 | }, 2135 | "node_modules/yauzl": { 2136 | "version": "2.10.0", 2137 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2138 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 2139 | "license": "MIT", 2140 | "dependencies": { 2141 | "buffer-crc32": "~0.2.3", 2142 | "fd-slicer": "~1.1.0" 2143 | } 2144 | }, 2145 | "node_modules/yn": { 2146 | "version": "3.1.1", 2147 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 2148 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 2149 | "dev": true, 2150 | "license": "MIT", 2151 | "engines": { 2152 | "node": ">=6" 2153 | } 2154 | }, 2155 | "node_modules/zod": { 2156 | "version": "3.23.8", 2157 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", 2158 | "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", 2159 | "license": "MIT", 2160 | "funding": { 2161 | "url": "https://github.com/sponsors/colinhacks" 2162 | } 2163 | } 2164 | } 2165 | } 2166 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "crystalball", 3 | "version": "1.0.4", 4 | "repository": { 5 | "type": "git", 6 | "url": "https://github.com/typeerror/crystalball" 7 | }, 8 | "keywords": [ 9 | "scraping", 10 | "screenshot" 11 | ], 12 | "description": "Web Screenshot Project", 13 | "main": "lib/crystalball.js", 14 | "types": "lib/crystalball.d.ts", 15 | "scripts": { 16 | "test": "echo \"Error: no test specified\" && exit 1", 17 | "build": "tsc", 18 | "prepare": "npm run build" 19 | }, 20 | "author": "Caleb Kinney", 21 | "license": "MIT", 22 | "bin": { 23 | "crystalball": "lib/crystalball-cli.js" 24 | }, 25 | "dependencies": { 26 | "larp": "^1.0.1", 27 | "pug": "^3.0.3", 28 | "puppeteer": "^22.12.1" 29 | }, 30 | "devDependencies": { 31 | "@types/node": "^20.14.9", 32 | "@types/pug": "^2.0.10", 33 | "ts-node": "^10.9.2" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/crystalball-cli.ts: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | 3 | const O = require("./crystalball"); 4 | 5 | interface parseOptions { 6 | file?: boolean; 7 | filename?: string; 8 | prefix?: boolean; 9 | ports?: boolean; 10 | connections?: number; 11 | } 12 | function commands() { 13 | try { 14 | let options: parseOptions = {}; 15 | var args = process.argv.slice(2); 16 | if (process.argv.length >= 3) { 17 | var args = process.argv.slice(2); 18 | if (args.includes("prefix")) { 19 | options.prefix = true; 20 | } 21 | if (args.includes("ports")) { 22 | options.ports = true; 23 | } 24 | 25 | if (typeof Number(args[args.length - 1]) == "number") { 26 | options.connections = parseInt(args[args.length - 1]); 27 | } 28 | 29 | if (args.includes("file")) { 30 | const input = args[0]; 31 | O.file(input, options); 32 | } else { 33 | const input = args[0].split(","); 34 | O.see(input, options); 35 | } 36 | } else { 37 | console.log( 38 | `Please run CrystalBall with URL(s) or filename and options (file, prefix, and/or ports) 39 | Example: crystalball example.txt file prefix ports` 40 | ); 41 | } 42 | } catch (err: any) { 43 | console.error("CrystalBall Error:", err.message); 44 | } 45 | } 46 | 47 | commands(); 48 | -------------------------------------------------------------------------------- /src/crystalball.ts: -------------------------------------------------------------------------------- 1 | const report = require("./report"); 2 | const parser = require("./parser"); 3 | const puppetry = require("./puppetry"); 4 | const fs = require("fs"); 5 | 6 | interface parseOptions { 7 | file?: boolean; 8 | filename?: string; 9 | prefix?: boolean; 10 | ports?: boolean; 11 | connections?: number; 12 | } 13 | 14 | interface puppetObject { 15 | url: string; 16 | title: string; 17 | image: string; 18 | headers: Object; 19 | source: string; 20 | src: string[]; 21 | href: string[]; 22 | fileName?: string; 23 | } 24 | 25 | export function file( 26 | filename: string, 27 | options: parseOptions = { filename: "cb" } 28 | ) { 29 | fs.readFile(filename, "utf8", (err: Error, data: string) => { 30 | if (err) { 31 | console.error("File Error:", err.message); 32 | } else { 33 | const urls = data.split("\n"); 34 | see(urls, options); 35 | } 36 | }); 37 | } 38 | 39 | export async function see( 40 | input: string[], 41 | options: parseOptions = { filename: "cb" } 42 | ) { 43 | if (!options.filename) { 44 | options.filename = "cb"; 45 | } 46 | const dateNow = new Date(); 47 | const timeStamp = `${dateNow.getMonth() + 48 | 1}-${dateNow.getDate()}-${dateNow.getFullYear()}-${dateNow.getHours()}${dateNow.getMinutes()}`; 49 | 50 | const reportFile = `crystalball/${options.filename}_${timeStamp}.html`; 51 | report.createFolders(); 52 | const urls = await parser.urlParse(input, options); 53 | let reportData: object[] = []; 54 | 55 | for (let chunk of urls) { 56 | await Promise.all( 57 | chunk.map(async function(url: string) { 58 | try { 59 | const data = await puppetry.go(url); 60 | if (data !== undefined) { 61 | reportData.push(data); 62 | } 63 | return data; 64 | } catch (err) { 65 | console.error("Puppeteer Error: ", err); 66 | } 67 | }) 68 | ); 69 | } 70 | 71 | console.log("Creating CrystalBall report"); 72 | await report.createReport(reportData, reportFile); 73 | await report.saveData(reportData); 74 | console.log("CrystalBall Complete"); 75 | process.exit(); 76 | } 77 | -------------------------------------------------------------------------------- /src/parser.ts: -------------------------------------------------------------------------------- 1 | const O = require("./crystalball"); 2 | 3 | interface parseOptions { 4 | file?: boolean; 5 | filename?: string; 6 | prefix?: boolean; 7 | ports?: boolean; 8 | connections?: number; 9 | } 10 | 11 | export function urlParse(urls: string[], options?: parseOptions) { 12 | let chunkSize = 10; 13 | 14 | if (options) { 15 | if (options.prefix) { 16 | urls = urls.map(url => 17 | url.replace("http://", "").replace("https://", "") 18 | ); 19 | const urlsHttp = urls.map(url => `http://${url}`); 20 | const urlsHttps = urls.map(url => `https://${url}`); 21 | urls = urlsHttp.concat(urlsHttps); 22 | } 23 | 24 | if (options.ports) { 25 | let urlPort: string[] = urls.map(url => { 26 | const newUrl = url.split("/"); 27 | if (url.includes("http://")) { 28 | return `${newUrl[0]}//${newUrl[2]}:8080`; 29 | } else if (url.includes("https://")) { 30 | return `${newUrl[0]}//${newUrl[2]}:8443`; 31 | } else { 32 | return url; 33 | } 34 | }); 35 | 36 | urls = urls.concat(urlPort); 37 | } 38 | 39 | if (options.connections) { 40 | chunkSize = options.connections; 41 | } 42 | } 43 | 44 | const urlSet = new Set(urls); 45 | urls = [...urlSet]; 46 | urls = urls.filter(url => url.length > 6).filter(url => url !== undefined); 47 | 48 | let results = []; 49 | 50 | while (urls.length) { 51 | results.push(urls.splice(0, chunkSize)); 52 | } 53 | 54 | return results; 55 | } 56 | -------------------------------------------------------------------------------- /src/puppetry.ts: -------------------------------------------------------------------------------- 1 | const larp = require("larp"); 2 | const puppeteer = require("puppeteer"); 3 | 4 | export async function go(url: string) { 5 | let puppetData: Object | undefined = {}; 6 | console.log(`Running Puppeteer on: ${url}`); 7 | const urlFileName = url 8 | .replace("://", "_") 9 | .replace(/\//g, "-") 10 | .replace(/\./g, "_"); 11 | const imageFile = `crystalball/screenshots/${urlFileName}.png`; 12 | try { 13 | const browser = await puppeteer.launch(); 14 | const page = await browser.newPage(); 15 | const response = await page.goto(url, { 16 | waitUntil: "networkidle0", 17 | }); 18 | if (response.ok) { 19 | await page.screenshot({ path: imageFile, fullPage: true }); 20 | const html = await page.content(); //? 21 | const headers = await response.headers(); 22 | const pageTitle = await page.title(); 23 | await browser.close(); 24 | const pageSrc = (await larp.src(html)) || ["None"]; 25 | const pageHref = (await larp.href(html)) || ["None"]; 26 | const resData = { 27 | url: url, 28 | title: pageTitle, 29 | image: imageFile.replace("crystalball/", ""), 30 | headers: headers, 31 | source: html, 32 | src: pageSrc, 33 | href: pageHref, 34 | fileName: urlFileName, 35 | }; 36 | puppetData = resData; 37 | } 38 | } catch (err: any) { 39 | console.error("Puppeteer Error: ", err.message); 40 | puppetData = undefined; 41 | } finally { 42 | return puppetData; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/report.ts: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const pug = require("pug"); 3 | 4 | interface puppetObject { 5 | url: string; 6 | title: string; 7 | image: string; 8 | headers: Object; 9 | source: string; 10 | src: string[]; 11 | href: string[]; 12 | fileName: string; 13 | } 14 | 15 | export function createReport( 16 | reportData: Array, 17 | filename: string 18 | ) { 19 | const assetsFolder = `${__dirname}/../assets`; 20 | const pugFileName = `${assetsFolder}/report.pug`; 21 | const pugFile = pug.compileFile(pugFileName); 22 | const html = pugFile({ title: "CrystalBall", data: reportData }); 23 | fs.appendFileSync(filename, html, function(err: Error) { 24 | if (err) throw err; 25 | }); 26 | } 27 | 28 | export function saveData(reportData: Array) { 29 | for (let dataObj of reportData) { 30 | const fileLocation = `crystalball/data/${dataObj.fileName}`; 31 | const headersData = JSON.stringify(dataObj.headers); 32 | const srcData = dataObj.src.toString().replace(/,/g, "\n"); 33 | const hrefData = dataObj.href.toString().replace(/,/g, "\n"); 34 | dataFile(fileLocation, headersData, "headers.txt"); 35 | dataFile(fileLocation, srcData, "src.txt"); 36 | dataFile(fileLocation, hrefData, "href.txt"); 37 | dataFile(fileLocation, dataObj.source, "source.html"); 38 | } 39 | } 40 | 41 | function dataFile(fileLocation: string, data: string, type: string) { 42 | fs.appendFileSync(`${fileLocation}-${type}`, data, function(err: Error) { 43 | if (err) throw err; 44 | }); 45 | } 46 | 47 | export function createFolders() { 48 | if (!fs.existsSync("crystalball")) { 49 | fs.mkdirSync("crystalball"); 50 | } 51 | if (!fs.existsSync("crystalball/screenshots")) { 52 | fs.mkdirSync("crystalball/screenshots"); 53 | } 54 | if (!fs.existsSync("crystalball/data")) { 55 | fs.mkdirSync("crystalball/data"); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "module": "commonjs", 5 | "declaration": true, 6 | "outDir": "./lib", 7 | "strict": true, 8 | "lib": ["es2017", "dom"] 9 | }, 10 | "include": ["src", "node_modules/@types/puppeteer/index.d.ts"], 11 | "exclude": ["node_modules"] 12 | } 13 | --------------------------------------------------------------------------------