├── .github └── workflows │ ├── codeql-analysis.yml │ └── workflow.yml ├── .gitignore ├── .npmrc ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── logger.ts ├── main.ts ├── spinner.ts └── version.ts └── tsconfig.json /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '44 8 * * 4' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'javascript' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 37 | # Learn more: 38 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 39 | 40 | steps: 41 | - name: Checkout repository 42 | uses: actions/checkout@v2 43 | 44 | # Initializes the CodeQL tools for scanning. 45 | - name: Initialize CodeQL 46 | uses: github/codeql-action/init@v1 47 | with: 48 | languages: ${{ matrix.language }} 49 | # If you wish to specify custom queries, you can do so here or in a config file. 50 | # By default, queries listed here will override any specified in a config file. 51 | # Prefix the list here with "+" to use these queries and those in the config file. 52 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 53 | 54 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 55 | # If this step fails, then you should remove it and run the build manually (see below) 56 | - name: Autobuild 57 | uses: github/codeql-action/autobuild@v1 58 | 59 | # ℹ️ Command-line programs to run using the OS shell. 60 | # 📚 https://git.io/JvXDl 61 | 62 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 63 | # and modify them (or add more) to build your code if your project 64 | # uses a compiled language 65 | 66 | #- run: | 67 | # make bootstrap 68 | # make release 69 | 70 | - name: Perform CodeQL Analysis 71 | uses: github/codeql-action/analyze@v1 72 | -------------------------------------------------------------------------------- /.github/workflows/workflow.yml: -------------------------------------------------------------------------------- 1 | name: workflow 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*.*.*' 7 | branches: 8 | - '**' 9 | pull_request: 10 | branches: 11 | - master 12 | 13 | jobs: 14 | build: 15 | runs-on: ubuntu-latest 16 | env: 17 | TZ: Europe/Amsterdam 18 | steps: 19 | - uses: actions/checkout@v4 20 | - uses: actions/setup-node@v4 21 | with: 22 | node-version: 20 23 | registry-url: https://registry.npmjs.org/ 24 | - run: | 25 | npm ci --ignore-scripts --legacy-peer-deps 26 | npm run build 27 | 28 | publish: 29 | if: startsWith(github.ref, 'refs/tags/') 30 | needs: [build] 31 | runs-on: ubuntu-latest 32 | env: 33 | TZ: Europe/Amsterdam 34 | steps: 35 | - uses: actions/checkout@v4 36 | - uses: actions/setup-node@v4 37 | with: 38 | node-version: 20 39 | registry-url: https://registry.npmjs.org/ 40 | env: 41 | NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} 42 | - run: | 43 | version=${{ github.ref_name }} 44 | sed -i "s/{{PLACEHOLDER_VERSION}}/${version}/" ./src/version.ts 45 | cat ./src/version.ts 46 | - run: | 47 | npm ci --ignore-scripts --legacy-peer-deps 48 | npm run build 49 | - run: | 50 | cp README.md ./dist 51 | cp LICENSE ./dist 52 | cp package.json ./dist 53 | cd dist && npm publish 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Caches 14 | 15 | .cache 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | 19 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 20 | 21 | # Runtime data 22 | 23 | pids 24 | _.pid 25 | _.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | 30 | lib-cov 31 | 32 | # Coverage directory used by tools like istanbul 33 | 34 | coverage 35 | *.lcov 36 | 37 | # nyc test coverage 38 | 39 | .nyc_output 40 | 41 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 42 | 43 | .grunt 44 | 45 | # Bower dependency directory (https://bower.io/) 46 | 47 | bower_components 48 | 49 | # node-waf configuration 50 | 51 | .lock-wscript 52 | 53 | # Compiled binary addons (https://nodejs.org/api/addons.html) 54 | 55 | build/Release 56 | 57 | # Dependency directories 58 | 59 | node_modules/ 60 | jspm_packages/ 61 | 62 | # Snowpack dependency directory (https://snowpack.dev/) 63 | 64 | web_modules/ 65 | 66 | # TypeScript cache 67 | 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | 72 | .npm 73 | 74 | # Optional eslint cache 75 | 76 | .eslintcache 77 | 78 | # Optional stylelint cache 79 | 80 | .stylelintcache 81 | 82 | # Microbundle cache 83 | 84 | .rpt2_cache/ 85 | .rts2_cache_cjs/ 86 | .rts2_cache_es/ 87 | .rts2_cache_umd/ 88 | 89 | # Optional REPL history 90 | 91 | .node_repl_history 92 | 93 | # Output of 'npm pack' 94 | 95 | *.tgz 96 | 97 | # Yarn Integrity file 98 | 99 | .yarn-integrity 100 | 101 | # dotenv environment variable files 102 | 103 | .env 104 | .env.development.local 105 | .env.test.local 106 | .env.production.local 107 | .env.local 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | 111 | .parcel-cache 112 | 113 | # Next.js build output 114 | 115 | .next 116 | out 117 | 118 | # Nuxt.js build / generate output 119 | 120 | .nuxt 121 | dist 122 | 123 | # Gatsby files 124 | 125 | # Comment in the public line in if your project uses Gatsby and not Next.js 126 | 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | 129 | # public 130 | 131 | # vuepress build output 132 | 133 | .vuepress/dist 134 | 135 | # vuepress v2.x temp and cache directory 136 | 137 | .temp 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.* 170 | 171 | # IntelliJ based IDEs 172 | .idea 173 | 174 | # Finder (MacOS) folder config 175 | .DS_Store 176 | 177 | node_modules/ 178 | lib/ 179 | test/ 180 | dist/ 181 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Lars Kniep 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 | # @larscom/ng-chrome-extension 2 | 3 | [![npm-release](https://img.shields.io/npm/v/@larscom/ng-chrome-extension.svg?label=npm)](https://www.npmjs.com/package/@larscom/ng-chrome-extension) 4 | ![npm](https://img.shields.io/npm/dt/@larscom/ng-chrome-extension) 5 | 6 | > Easily create `Angular` Chrome Extensions (manifest v3) 7 | 8 | The following scenarios are supported: 9 | 10 | - Popup ✓ 11 | - New Tab ✓ 12 | - Options ✓ 13 | - Side Panel ✓ 14 | - Service Worker ✓ 15 | - Content Page ✓ 16 | 17 | ## Disclaimer 18 | 19 | This CLI tool should work on Linux/macOS, it is not tested on Windows. 20 | 21 | ## How to install 22 | 23 | ```bash 24 | npm install -g @larscom/ng-chrome-extension 25 | ``` 26 | 27 | ## Start creating a new project 28 | 29 | ```bash 30 | ng-chrome new 31 | ``` 32 | 33 | ![alt text](https://snipboard.io/OYcNzx.jpg 'ng-chrome CLI') 34 | 35 | ## How to use/develop 36 | 37 | - change directory to your newly created project 38 | - run `npm run start` 39 | - goto: `chrome://extensions` in the browser and enable `'developer mode'` 40 | - press `Load unpacked` and target the folder `angular/dist` 41 | 42 | The project is automatically being watched, any changes to the files will recompile the project. 43 | 44 | **NOTE**: changes to the **content page** and **service worker** scripts requires you to reload the extension in `chrome://extensions` 45 | 46 | ![alt text](https://snipboard.io/KToCI3.jpg 'Angular Chrome Popup') 47 | ![alt text](https://snipboard.io/VYfGoD.jpg 'Angular Chrome Tab') 48 | 49 | ## Build/package for production 50 | 51 | - update version number inside `./angular/src/manifest.json` 52 | - run `npm run build:production` 53 | - upload `extension-build.zip` to the chrome webstore. 54 | 55 | This will run a production build and will automatically zip it as a extension package in the root folder named: `extension-build.zip` 56 | 57 | ## Debugging 58 | 59 | Run: `npm start` 60 | 61 | Go to: Developer tools (inspect popup) => Sources => webpack 62 | 63 | You can find your source files (TypeScript) over there. 64 | 65 | ## Upgrade Angular 66 | 67 | After you have created a new project with `ng-chrome` and you want to update angular. 68 | 69 | Just follow the regular upgrade guide of angular. See: https://update.angular.io/ 70 | 71 | ## Angular folder 72 | 73 | This folder contains the angular source code. 74 | Each feature (popup,options,tab,side-panel) lives inside its own standalone component and gets lazily loaded. 75 | 76 | see: `./angular/src/app/modules` 77 | 78 | ## Chrome folder 79 | 80 | This folder contains the content page/service worker scripts and has its own `package.json` to manage it's dependencies. 81 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@larscom/ng-chrome-extension", 3 | "version": "3.2.4", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@larscom/ng-chrome-extension", 9 | "version": "3.2.4", 10 | "license": "MIT", 11 | "dependencies": { 12 | "adm-zip": "^0.5.14", 13 | "axios": "^1.7.2", 14 | "clear": "^0.1.0", 15 | "commander": "^12.1.0", 16 | "figlet": "^1.7.0", 17 | "fs-extra": "^11.2.0", 18 | "inquirer": "^9.2.23", 19 | "kleur": "^4.1.5", 20 | "ora": "^8.0.1" 21 | }, 22 | "bin": { 23 | "ng-chrome": "bin/main.js" 24 | }, 25 | "devDependencies": { 26 | "@rollup/plugin-commonjs": "^26.0.1", 27 | "@rollup/plugin-json": "^6.1.0", 28 | "@rollup/plugin-node-resolve": "^15.2.3", 29 | "@rollup/plugin-typescript": "^11.1.6", 30 | "@types/adm-zip": "^0.5.5", 31 | "@types/bun": "latest", 32 | "@types/clear": "^0.1.4", 33 | "@types/figlet": "^1.5.8", 34 | "@types/fs-extra": "^11.0.4", 35 | "@types/inquirer": "^9.0.7", 36 | "@types/node": "^20.14.8", 37 | "rimraf": "^5.0.7", 38 | "rollup": "^4.18.0", 39 | "typescript": "^5.5.2" 40 | } 41 | }, 42 | "node_modules/@inquirer/figures": { 43 | "version": "1.0.3", 44 | "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.3.tgz", 45 | "integrity": "sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==", 46 | "engines": { 47 | "node": ">=18" 48 | } 49 | }, 50 | "node_modules/@isaacs/cliui": { 51 | "version": "8.0.2", 52 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 53 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 54 | "dev": true, 55 | "dependencies": { 56 | "string-width": "^5.1.2", 57 | "string-width-cjs": "npm:string-width@^4.2.0", 58 | "strip-ansi": "^7.0.1", 59 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 60 | "wrap-ansi": "^8.1.0", 61 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 62 | }, 63 | "engines": { 64 | "node": ">=12" 65 | } 66 | }, 67 | "node_modules/@isaacs/cliui/node_modules/ansi-regex": { 68 | "version": "6.0.1", 69 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 70 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 71 | "dev": true, 72 | "engines": { 73 | "node": ">=12" 74 | }, 75 | "funding": { 76 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 77 | } 78 | }, 79 | "node_modules/@isaacs/cliui/node_modules/ansi-styles": { 80 | "version": "6.2.1", 81 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 82 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 83 | "dev": true, 84 | "engines": { 85 | "node": ">=12" 86 | }, 87 | "funding": { 88 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 89 | } 90 | }, 91 | "node_modules/@isaacs/cliui/node_modules/emoji-regex": { 92 | "version": "9.2.2", 93 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 94 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 95 | "dev": true 96 | }, 97 | "node_modules/@isaacs/cliui/node_modules/string-width": { 98 | "version": "5.1.2", 99 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 100 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 101 | "dev": true, 102 | "dependencies": { 103 | "eastasianwidth": "^0.2.0", 104 | "emoji-regex": "^9.2.2", 105 | "strip-ansi": "^7.0.1" 106 | }, 107 | "engines": { 108 | "node": ">=12" 109 | }, 110 | "funding": { 111 | "url": "https://github.com/sponsors/sindresorhus" 112 | } 113 | }, 114 | "node_modules/@isaacs/cliui/node_modules/strip-ansi": { 115 | "version": "7.1.0", 116 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 117 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 118 | "dev": true, 119 | "dependencies": { 120 | "ansi-regex": "^6.0.1" 121 | }, 122 | "engines": { 123 | "node": ">=12" 124 | }, 125 | "funding": { 126 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 127 | } 128 | }, 129 | "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { 130 | "version": "8.1.0", 131 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 132 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 133 | "dev": true, 134 | "dependencies": { 135 | "ansi-styles": "^6.1.0", 136 | "string-width": "^5.0.1", 137 | "strip-ansi": "^7.0.1" 138 | }, 139 | "engines": { 140 | "node": ">=12" 141 | }, 142 | "funding": { 143 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 144 | } 145 | }, 146 | "node_modules/@jridgewell/sourcemap-codec": { 147 | "version": "1.4.15", 148 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 149 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 150 | "dev": true 151 | }, 152 | "node_modules/@ljharb/through": { 153 | "version": "2.3.13", 154 | "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", 155 | "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", 156 | "dependencies": { 157 | "call-bind": "^1.0.7" 158 | }, 159 | "engines": { 160 | "node": ">= 0.4" 161 | } 162 | }, 163 | "node_modules/@pkgjs/parseargs": { 164 | "version": "0.11.0", 165 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 166 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 167 | "dev": true, 168 | "optional": true, 169 | "engines": { 170 | "node": ">=14" 171 | } 172 | }, 173 | "node_modules/@rollup/plugin-commonjs": { 174 | "version": "26.0.1", 175 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-26.0.1.tgz", 176 | "integrity": "sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==", 177 | "dev": true, 178 | "dependencies": { 179 | "@rollup/pluginutils": "^5.0.1", 180 | "commondir": "^1.0.1", 181 | "estree-walker": "^2.0.2", 182 | "glob": "^10.4.1", 183 | "is-reference": "1.2.1", 184 | "magic-string": "^0.30.3" 185 | }, 186 | "engines": { 187 | "node": ">=16.0.0 || 14 >= 14.17" 188 | }, 189 | "peerDependencies": { 190 | "rollup": "^2.68.0||^3.0.0||^4.0.0" 191 | }, 192 | "peerDependenciesMeta": { 193 | "rollup": { 194 | "optional": true 195 | } 196 | } 197 | }, 198 | "node_modules/@rollup/plugin-json": { 199 | "version": "6.1.0", 200 | "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", 201 | "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", 202 | "dev": true, 203 | "dependencies": { 204 | "@rollup/pluginutils": "^5.1.0" 205 | }, 206 | "engines": { 207 | "node": ">=14.0.0" 208 | }, 209 | "peerDependencies": { 210 | "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" 211 | }, 212 | "peerDependenciesMeta": { 213 | "rollup": { 214 | "optional": true 215 | } 216 | } 217 | }, 218 | "node_modules/@rollup/plugin-node-resolve": { 219 | "version": "15.2.3", 220 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", 221 | "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", 222 | "dev": true, 223 | "dependencies": { 224 | "@rollup/pluginutils": "^5.0.1", 225 | "@types/resolve": "1.20.2", 226 | "deepmerge": "^4.2.2", 227 | "is-builtin-module": "^3.2.1", 228 | "is-module": "^1.0.0", 229 | "resolve": "^1.22.1" 230 | }, 231 | "engines": { 232 | "node": ">=14.0.0" 233 | }, 234 | "peerDependencies": { 235 | "rollup": "^2.78.0||^3.0.0||^4.0.0" 236 | }, 237 | "peerDependenciesMeta": { 238 | "rollup": { 239 | "optional": true 240 | } 241 | } 242 | }, 243 | "node_modules/@rollup/plugin-typescript": { 244 | "version": "11.1.6", 245 | "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz", 246 | "integrity": "sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==", 247 | "dev": true, 248 | "dependencies": { 249 | "@rollup/pluginutils": "^5.1.0", 250 | "resolve": "^1.22.1" 251 | }, 252 | "engines": { 253 | "node": ">=14.0.0" 254 | }, 255 | "peerDependencies": { 256 | "rollup": "^2.14.0||^3.0.0||^4.0.0", 257 | "tslib": "*", 258 | "typescript": ">=3.7.0" 259 | }, 260 | "peerDependenciesMeta": { 261 | "rollup": { 262 | "optional": true 263 | }, 264 | "tslib": { 265 | "optional": true 266 | } 267 | } 268 | }, 269 | "node_modules/@rollup/pluginutils": { 270 | "version": "5.1.0", 271 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", 272 | "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", 273 | "dev": true, 274 | "dependencies": { 275 | "@types/estree": "^1.0.0", 276 | "estree-walker": "^2.0.2", 277 | "picomatch": "^2.3.1" 278 | }, 279 | "engines": { 280 | "node": ">=14.0.0" 281 | }, 282 | "peerDependencies": { 283 | "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" 284 | }, 285 | "peerDependenciesMeta": { 286 | "rollup": { 287 | "optional": true 288 | } 289 | } 290 | }, 291 | "node_modules/@rollup/rollup-android-arm-eabi": { 292 | "version": "4.18.0", 293 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", 294 | "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", 295 | "cpu": [ 296 | "arm" 297 | ], 298 | "dev": true, 299 | "optional": true, 300 | "os": [ 301 | "android" 302 | ] 303 | }, 304 | "node_modules/@rollup/rollup-android-arm64": { 305 | "version": "4.18.0", 306 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", 307 | "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", 308 | "cpu": [ 309 | "arm64" 310 | ], 311 | "dev": true, 312 | "optional": true, 313 | "os": [ 314 | "android" 315 | ] 316 | }, 317 | "node_modules/@rollup/rollup-darwin-arm64": { 318 | "version": "4.18.0", 319 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", 320 | "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", 321 | "cpu": [ 322 | "arm64" 323 | ], 324 | "dev": true, 325 | "optional": true, 326 | "os": [ 327 | "darwin" 328 | ] 329 | }, 330 | "node_modules/@rollup/rollup-darwin-x64": { 331 | "version": "4.18.0", 332 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", 333 | "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", 334 | "cpu": [ 335 | "x64" 336 | ], 337 | "dev": true, 338 | "optional": true, 339 | "os": [ 340 | "darwin" 341 | ] 342 | }, 343 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 344 | "version": "4.18.0", 345 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", 346 | "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", 347 | "cpu": [ 348 | "arm" 349 | ], 350 | "dev": true, 351 | "optional": true, 352 | "os": [ 353 | "linux" 354 | ] 355 | }, 356 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 357 | "version": "4.18.0", 358 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", 359 | "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", 360 | "cpu": [ 361 | "arm" 362 | ], 363 | "dev": true, 364 | "optional": true, 365 | "os": [ 366 | "linux" 367 | ] 368 | }, 369 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 370 | "version": "4.18.0", 371 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", 372 | "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", 373 | "cpu": [ 374 | "arm64" 375 | ], 376 | "dev": true, 377 | "optional": true, 378 | "os": [ 379 | "linux" 380 | ] 381 | }, 382 | "node_modules/@rollup/rollup-linux-arm64-musl": { 383 | "version": "4.18.0", 384 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", 385 | "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", 386 | "cpu": [ 387 | "arm64" 388 | ], 389 | "dev": true, 390 | "optional": true, 391 | "os": [ 392 | "linux" 393 | ] 394 | }, 395 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 396 | "version": "4.18.0", 397 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", 398 | "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", 399 | "cpu": [ 400 | "ppc64" 401 | ], 402 | "dev": true, 403 | "optional": true, 404 | "os": [ 405 | "linux" 406 | ] 407 | }, 408 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 409 | "version": "4.18.0", 410 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", 411 | "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", 412 | "cpu": [ 413 | "riscv64" 414 | ], 415 | "dev": true, 416 | "optional": true, 417 | "os": [ 418 | "linux" 419 | ] 420 | }, 421 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 422 | "version": "4.18.0", 423 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", 424 | "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", 425 | "cpu": [ 426 | "s390x" 427 | ], 428 | "dev": true, 429 | "optional": true, 430 | "os": [ 431 | "linux" 432 | ] 433 | }, 434 | "node_modules/@rollup/rollup-linux-x64-gnu": { 435 | "version": "4.18.0", 436 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", 437 | "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", 438 | "cpu": [ 439 | "x64" 440 | ], 441 | "dev": true, 442 | "optional": true, 443 | "os": [ 444 | "linux" 445 | ] 446 | }, 447 | "node_modules/@rollup/rollup-linux-x64-musl": { 448 | "version": "4.18.0", 449 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", 450 | "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", 451 | "cpu": [ 452 | "x64" 453 | ], 454 | "dev": true, 455 | "optional": true, 456 | "os": [ 457 | "linux" 458 | ] 459 | }, 460 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 461 | "version": "4.18.0", 462 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", 463 | "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", 464 | "cpu": [ 465 | "arm64" 466 | ], 467 | "dev": true, 468 | "optional": true, 469 | "os": [ 470 | "win32" 471 | ] 472 | }, 473 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 474 | "version": "4.18.0", 475 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", 476 | "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", 477 | "cpu": [ 478 | "ia32" 479 | ], 480 | "dev": true, 481 | "optional": true, 482 | "os": [ 483 | "win32" 484 | ] 485 | }, 486 | "node_modules/@rollup/rollup-win32-x64-msvc": { 487 | "version": "4.18.0", 488 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", 489 | "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", 490 | "cpu": [ 491 | "x64" 492 | ], 493 | "dev": true, 494 | "optional": true, 495 | "os": [ 496 | "win32" 497 | ] 498 | }, 499 | "node_modules/@types/adm-zip": { 500 | "version": "0.5.5", 501 | "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.5.tgz", 502 | "integrity": "sha512-YCGstVMjc4LTY5uK9/obvxBya93axZOVOyf2GSUulADzmLhYE45u2nAssCs/fWBs1Ifq5Vat75JTPwd5XZoPJw==", 503 | "dev": true, 504 | "dependencies": { 505 | "@types/node": "*" 506 | } 507 | }, 508 | "node_modules/@types/bun": { 509 | "version": "1.1.5", 510 | "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.5.tgz", 511 | "integrity": "sha512-7RprVDMF+1o+EWSo7F1+iJpkfNz+Ikw9K//vwambcY+D1QHXfb9l7jWY1hSBfuFEkW9yFAhkMzP2uTi1pQXoqw==", 512 | "dev": true, 513 | "dependencies": { 514 | "bun-types": "1.1.14" 515 | } 516 | }, 517 | "node_modules/@types/clear": { 518 | "version": "0.1.4", 519 | "resolved": "https://registry.npmjs.org/@types/clear/-/clear-0.1.4.tgz", 520 | "integrity": "sha512-4nJjoilJPTbYF7Q4y5+F7JFDK8QdcwOItzwVv3RDEMWALT9Mx9UzfxCiUfpbFK05REhieXTCvhbNkiDW/Wfejw==", 521 | "dev": true 522 | }, 523 | "node_modules/@types/estree": { 524 | "version": "1.0.5", 525 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 526 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 527 | "dev": true 528 | }, 529 | "node_modules/@types/figlet": { 530 | "version": "1.5.8", 531 | "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.8.tgz", 532 | "integrity": "sha512-G22AUvy4Tl95XLE7jmUM8s8mKcoz+Hr+Xm9W90gJsppJq9f9tHvOGkrpn4gRX0q/cLtBdNkWtWCKDg2UDZoZvQ==", 533 | "dev": true 534 | }, 535 | "node_modules/@types/fs-extra": { 536 | "version": "11.0.4", 537 | "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", 538 | "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", 539 | "dev": true, 540 | "dependencies": { 541 | "@types/jsonfile": "*", 542 | "@types/node": "*" 543 | } 544 | }, 545 | "node_modules/@types/inquirer": { 546 | "version": "9.0.7", 547 | "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.7.tgz", 548 | "integrity": "sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==", 549 | "dev": true, 550 | "dependencies": { 551 | "@types/through": "*", 552 | "rxjs": "^7.2.0" 553 | } 554 | }, 555 | "node_modules/@types/jsonfile": { 556 | "version": "6.1.4", 557 | "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", 558 | "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", 559 | "dev": true, 560 | "dependencies": { 561 | "@types/node": "*" 562 | } 563 | }, 564 | "node_modules/@types/node": { 565 | "version": "20.14.8", 566 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz", 567 | "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==", 568 | "dev": true, 569 | "dependencies": { 570 | "undici-types": "~5.26.4" 571 | } 572 | }, 573 | "node_modules/@types/resolve": { 574 | "version": "1.20.2", 575 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", 576 | "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", 577 | "dev": true 578 | }, 579 | "node_modules/@types/through": { 580 | "version": "0.0.33", 581 | "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", 582 | "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", 583 | "dev": true, 584 | "dependencies": { 585 | "@types/node": "*" 586 | } 587 | }, 588 | "node_modules/@types/ws": { 589 | "version": "8.5.10", 590 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", 591 | "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", 592 | "dev": true, 593 | "dependencies": { 594 | "@types/node": "*" 595 | } 596 | }, 597 | "node_modules/adm-zip": { 598 | "version": "0.5.14", 599 | "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.14.tgz", 600 | "integrity": "sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==", 601 | "engines": { 602 | "node": ">=12.0" 603 | } 604 | }, 605 | "node_modules/ansi-escapes": { 606 | "version": "4.3.2", 607 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 608 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 609 | "dependencies": { 610 | "type-fest": "^0.21.3" 611 | }, 612 | "engines": { 613 | "node": ">=8" 614 | }, 615 | "funding": { 616 | "url": "https://github.com/sponsors/sindresorhus" 617 | } 618 | }, 619 | "node_modules/ansi-regex": { 620 | "version": "5.0.1", 621 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 622 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 623 | "engines": { 624 | "node": ">=8" 625 | } 626 | }, 627 | "node_modules/ansi-styles": { 628 | "version": "4.3.0", 629 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 630 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 631 | "dependencies": { 632 | "color-convert": "^2.0.1" 633 | }, 634 | "engines": { 635 | "node": ">=8" 636 | }, 637 | "funding": { 638 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 639 | } 640 | }, 641 | "node_modules/asynckit": { 642 | "version": "0.4.0", 643 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 644 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 645 | }, 646 | "node_modules/axios": { 647 | "version": "1.7.2", 648 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", 649 | "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", 650 | "dependencies": { 651 | "follow-redirects": "^1.15.6", 652 | "form-data": "^4.0.0", 653 | "proxy-from-env": "^1.1.0" 654 | } 655 | }, 656 | "node_modules/balanced-match": { 657 | "version": "1.0.2", 658 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 659 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 660 | "dev": true 661 | }, 662 | "node_modules/base64-js": { 663 | "version": "1.5.1", 664 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 665 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 666 | "funding": [ 667 | { 668 | "type": "github", 669 | "url": "https://github.com/sponsors/feross" 670 | }, 671 | { 672 | "type": "patreon", 673 | "url": "https://www.patreon.com/feross" 674 | }, 675 | { 676 | "type": "consulting", 677 | "url": "https://feross.org/support" 678 | } 679 | ] 680 | }, 681 | "node_modules/bl": { 682 | "version": "4.1.0", 683 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 684 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 685 | "dependencies": { 686 | "buffer": "^5.5.0", 687 | "inherits": "^2.0.4", 688 | "readable-stream": "^3.4.0" 689 | } 690 | }, 691 | "node_modules/brace-expansion": { 692 | "version": "2.0.1", 693 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 694 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 695 | "dev": true, 696 | "dependencies": { 697 | "balanced-match": "^1.0.0" 698 | } 699 | }, 700 | "node_modules/buffer": { 701 | "version": "5.7.1", 702 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 703 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 704 | "funding": [ 705 | { 706 | "type": "github", 707 | "url": "https://github.com/sponsors/feross" 708 | }, 709 | { 710 | "type": "patreon", 711 | "url": "https://www.patreon.com/feross" 712 | }, 713 | { 714 | "type": "consulting", 715 | "url": "https://feross.org/support" 716 | } 717 | ], 718 | "dependencies": { 719 | "base64-js": "^1.3.1", 720 | "ieee754": "^1.1.13" 721 | } 722 | }, 723 | "node_modules/builtin-modules": { 724 | "version": "3.3.0", 725 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 726 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 727 | "dev": true, 728 | "engines": { 729 | "node": ">=6" 730 | }, 731 | "funding": { 732 | "url": "https://github.com/sponsors/sindresorhus" 733 | } 734 | }, 735 | "node_modules/bun-types": { 736 | "version": "1.1.14", 737 | "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.14.tgz", 738 | "integrity": "sha512-esfxOvECTkjEuUEHBOoOo590Qggf4b9cz5h29AOB2SKt3yZwG3LbAX4iIYwWZX7GnO7vaY5hIdcQygwN0xGdNw==", 739 | "dev": true, 740 | "dependencies": { 741 | "@types/node": "~20.12.8", 742 | "@types/ws": "~8.5.10" 743 | } 744 | }, 745 | "node_modules/bun-types/node_modules/@types/node": { 746 | "version": "20.12.14", 747 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.14.tgz", 748 | "integrity": "sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==", 749 | "dev": true, 750 | "dependencies": { 751 | "undici-types": "~5.26.4" 752 | } 753 | }, 754 | "node_modules/call-bind": { 755 | "version": "1.0.7", 756 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 757 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 758 | "dependencies": { 759 | "es-define-property": "^1.0.0", 760 | "es-errors": "^1.3.0", 761 | "function-bind": "^1.1.2", 762 | "get-intrinsic": "^1.2.4", 763 | "set-function-length": "^1.2.1" 764 | }, 765 | "engines": { 766 | "node": ">= 0.4" 767 | }, 768 | "funding": { 769 | "url": "https://github.com/sponsors/ljharb" 770 | } 771 | }, 772 | "node_modules/chalk": { 773 | "version": "5.3.0", 774 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 775 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 776 | "engines": { 777 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 778 | }, 779 | "funding": { 780 | "url": "https://github.com/chalk/chalk?sponsor=1" 781 | } 782 | }, 783 | "node_modules/chardet": { 784 | "version": "0.7.0", 785 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 786 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 787 | }, 788 | "node_modules/clear": { 789 | "version": "0.1.0", 790 | "resolved": "https://registry.npmjs.org/clear/-/clear-0.1.0.tgz", 791 | "integrity": "sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==", 792 | "engines": { 793 | "node": "*" 794 | } 795 | }, 796 | "node_modules/cli-cursor": { 797 | "version": "3.1.0", 798 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 799 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 800 | "dependencies": { 801 | "restore-cursor": "^3.1.0" 802 | }, 803 | "engines": { 804 | "node": ">=8" 805 | } 806 | }, 807 | "node_modules/cli-spinners": { 808 | "version": "2.9.2", 809 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", 810 | "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", 811 | "engines": { 812 | "node": ">=6" 813 | }, 814 | "funding": { 815 | "url": "https://github.com/sponsors/sindresorhus" 816 | } 817 | }, 818 | "node_modules/cli-width": { 819 | "version": "4.1.0", 820 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", 821 | "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", 822 | "engines": { 823 | "node": ">= 12" 824 | } 825 | }, 826 | "node_modules/clone": { 827 | "version": "1.0.4", 828 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 829 | "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", 830 | "engines": { 831 | "node": ">=0.8" 832 | } 833 | }, 834 | "node_modules/color-convert": { 835 | "version": "2.0.1", 836 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 837 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 838 | "dependencies": { 839 | "color-name": "~1.1.4" 840 | }, 841 | "engines": { 842 | "node": ">=7.0.0" 843 | } 844 | }, 845 | "node_modules/color-name": { 846 | "version": "1.1.4", 847 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 848 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 849 | }, 850 | "node_modules/combined-stream": { 851 | "version": "1.0.8", 852 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 853 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 854 | "dependencies": { 855 | "delayed-stream": "~1.0.0" 856 | }, 857 | "engines": { 858 | "node": ">= 0.8" 859 | } 860 | }, 861 | "node_modules/commander": { 862 | "version": "12.1.0", 863 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", 864 | "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", 865 | "engines": { 866 | "node": ">=18" 867 | } 868 | }, 869 | "node_modules/commondir": { 870 | "version": "1.0.1", 871 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 872 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 873 | "dev": true 874 | }, 875 | "node_modules/cross-spawn": { 876 | "version": "7.0.3", 877 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 878 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 879 | "dev": true, 880 | "dependencies": { 881 | "path-key": "^3.1.0", 882 | "shebang-command": "^2.0.0", 883 | "which": "^2.0.1" 884 | }, 885 | "engines": { 886 | "node": ">= 8" 887 | } 888 | }, 889 | "node_modules/deepmerge": { 890 | "version": "4.3.1", 891 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 892 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 893 | "dev": true, 894 | "engines": { 895 | "node": ">=0.10.0" 896 | } 897 | }, 898 | "node_modules/defaults": { 899 | "version": "1.0.4", 900 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", 901 | "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", 902 | "dependencies": { 903 | "clone": "^1.0.2" 904 | }, 905 | "funding": { 906 | "url": "https://github.com/sponsors/sindresorhus" 907 | } 908 | }, 909 | "node_modules/define-data-property": { 910 | "version": "1.1.4", 911 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 912 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 913 | "dependencies": { 914 | "es-define-property": "^1.0.0", 915 | "es-errors": "^1.3.0", 916 | "gopd": "^1.0.1" 917 | }, 918 | "engines": { 919 | "node": ">= 0.4" 920 | }, 921 | "funding": { 922 | "url": "https://github.com/sponsors/ljharb" 923 | } 924 | }, 925 | "node_modules/delayed-stream": { 926 | "version": "1.0.0", 927 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 928 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 929 | "engines": { 930 | "node": ">=0.4.0" 931 | } 932 | }, 933 | "node_modules/eastasianwidth": { 934 | "version": "0.2.0", 935 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 936 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 937 | "dev": true 938 | }, 939 | "node_modules/emoji-regex": { 940 | "version": "8.0.0", 941 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 942 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 943 | }, 944 | "node_modules/es-define-property": { 945 | "version": "1.0.0", 946 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 947 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 948 | "dependencies": { 949 | "get-intrinsic": "^1.2.4" 950 | }, 951 | "engines": { 952 | "node": ">= 0.4" 953 | } 954 | }, 955 | "node_modules/es-errors": { 956 | "version": "1.3.0", 957 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 958 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 959 | "engines": { 960 | "node": ">= 0.4" 961 | } 962 | }, 963 | "node_modules/estree-walker": { 964 | "version": "2.0.2", 965 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 966 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 967 | "dev": true 968 | }, 969 | "node_modules/external-editor": { 970 | "version": "3.1.0", 971 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 972 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 973 | "dependencies": { 974 | "chardet": "^0.7.0", 975 | "iconv-lite": "^0.4.24", 976 | "tmp": "^0.0.33" 977 | }, 978 | "engines": { 979 | "node": ">=4" 980 | } 981 | }, 982 | "node_modules/figlet": { 983 | "version": "1.7.0", 984 | "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz", 985 | "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==", 986 | "bin": { 987 | "figlet": "bin/index.js" 988 | }, 989 | "engines": { 990 | "node": ">= 0.4.0" 991 | } 992 | }, 993 | "node_modules/follow-redirects": { 994 | "version": "1.15.6", 995 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", 996 | "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", 997 | "funding": [ 998 | { 999 | "type": "individual", 1000 | "url": "https://github.com/sponsors/RubenVerborgh" 1001 | } 1002 | ], 1003 | "engines": { 1004 | "node": ">=4.0" 1005 | }, 1006 | "peerDependenciesMeta": { 1007 | "debug": { 1008 | "optional": true 1009 | } 1010 | } 1011 | }, 1012 | "node_modules/foreground-child": { 1013 | "version": "3.2.1", 1014 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", 1015 | "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", 1016 | "dev": true, 1017 | "dependencies": { 1018 | "cross-spawn": "^7.0.0", 1019 | "signal-exit": "^4.0.1" 1020 | }, 1021 | "engines": { 1022 | "node": ">=14" 1023 | }, 1024 | "funding": { 1025 | "url": "https://github.com/sponsors/isaacs" 1026 | } 1027 | }, 1028 | "node_modules/form-data": { 1029 | "version": "4.0.0", 1030 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 1031 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 1032 | "dependencies": { 1033 | "asynckit": "^0.4.0", 1034 | "combined-stream": "^1.0.8", 1035 | "mime-types": "^2.1.12" 1036 | }, 1037 | "engines": { 1038 | "node": ">= 6" 1039 | } 1040 | }, 1041 | "node_modules/fs-extra": { 1042 | "version": "11.2.0", 1043 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", 1044 | "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", 1045 | "dependencies": { 1046 | "graceful-fs": "^4.2.0", 1047 | "jsonfile": "^6.0.1", 1048 | "universalify": "^2.0.0" 1049 | }, 1050 | "engines": { 1051 | "node": ">=14.14" 1052 | } 1053 | }, 1054 | "node_modules/fsevents": { 1055 | "version": "2.3.3", 1056 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1057 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1058 | "dev": true, 1059 | "hasInstallScript": true, 1060 | "optional": true, 1061 | "os": [ 1062 | "darwin" 1063 | ], 1064 | "engines": { 1065 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1066 | } 1067 | }, 1068 | "node_modules/function-bind": { 1069 | "version": "1.1.2", 1070 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1071 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1072 | "funding": { 1073 | "url": "https://github.com/sponsors/ljharb" 1074 | } 1075 | }, 1076 | "node_modules/get-east-asian-width": { 1077 | "version": "1.2.0", 1078 | "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", 1079 | "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", 1080 | "engines": { 1081 | "node": ">=18" 1082 | }, 1083 | "funding": { 1084 | "url": "https://github.com/sponsors/sindresorhus" 1085 | } 1086 | }, 1087 | "node_modules/get-intrinsic": { 1088 | "version": "1.2.4", 1089 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 1090 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 1091 | "dependencies": { 1092 | "es-errors": "^1.3.0", 1093 | "function-bind": "^1.1.2", 1094 | "has-proto": "^1.0.1", 1095 | "has-symbols": "^1.0.3", 1096 | "hasown": "^2.0.0" 1097 | }, 1098 | "engines": { 1099 | "node": ">= 0.4" 1100 | }, 1101 | "funding": { 1102 | "url": "https://github.com/sponsors/ljharb" 1103 | } 1104 | }, 1105 | "node_modules/glob": { 1106 | "version": "10.4.2", 1107 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", 1108 | "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", 1109 | "dev": true, 1110 | "dependencies": { 1111 | "foreground-child": "^3.1.0", 1112 | "jackspeak": "^3.1.2", 1113 | "minimatch": "^9.0.4", 1114 | "minipass": "^7.1.2", 1115 | "package-json-from-dist": "^1.0.0", 1116 | "path-scurry": "^1.11.1" 1117 | }, 1118 | "bin": { 1119 | "glob": "dist/esm/bin.mjs" 1120 | }, 1121 | "engines": { 1122 | "node": ">=16 || 14 >=14.18" 1123 | }, 1124 | "funding": { 1125 | "url": "https://github.com/sponsors/isaacs" 1126 | } 1127 | }, 1128 | "node_modules/gopd": { 1129 | "version": "1.0.1", 1130 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1131 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1132 | "dependencies": { 1133 | "get-intrinsic": "^1.1.3" 1134 | }, 1135 | "funding": { 1136 | "url": "https://github.com/sponsors/ljharb" 1137 | } 1138 | }, 1139 | "node_modules/graceful-fs": { 1140 | "version": "4.2.11", 1141 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1142 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 1143 | }, 1144 | "node_modules/has-flag": { 1145 | "version": "4.0.0", 1146 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1147 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1148 | "engines": { 1149 | "node": ">=8" 1150 | } 1151 | }, 1152 | "node_modules/has-property-descriptors": { 1153 | "version": "1.0.2", 1154 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 1155 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 1156 | "dependencies": { 1157 | "es-define-property": "^1.0.0" 1158 | }, 1159 | "funding": { 1160 | "url": "https://github.com/sponsors/ljharb" 1161 | } 1162 | }, 1163 | "node_modules/has-proto": { 1164 | "version": "1.0.3", 1165 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 1166 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 1167 | "engines": { 1168 | "node": ">= 0.4" 1169 | }, 1170 | "funding": { 1171 | "url": "https://github.com/sponsors/ljharb" 1172 | } 1173 | }, 1174 | "node_modules/has-symbols": { 1175 | "version": "1.0.3", 1176 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1177 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1178 | "engines": { 1179 | "node": ">= 0.4" 1180 | }, 1181 | "funding": { 1182 | "url": "https://github.com/sponsors/ljharb" 1183 | } 1184 | }, 1185 | "node_modules/hasown": { 1186 | "version": "2.0.2", 1187 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1188 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1189 | "dependencies": { 1190 | "function-bind": "^1.1.2" 1191 | }, 1192 | "engines": { 1193 | "node": ">= 0.4" 1194 | } 1195 | }, 1196 | "node_modules/iconv-lite": { 1197 | "version": "0.4.24", 1198 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1199 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1200 | "dependencies": { 1201 | "safer-buffer": ">= 2.1.2 < 3" 1202 | }, 1203 | "engines": { 1204 | "node": ">=0.10.0" 1205 | } 1206 | }, 1207 | "node_modules/ieee754": { 1208 | "version": "1.2.1", 1209 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1210 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1211 | "funding": [ 1212 | { 1213 | "type": "github", 1214 | "url": "https://github.com/sponsors/feross" 1215 | }, 1216 | { 1217 | "type": "patreon", 1218 | "url": "https://www.patreon.com/feross" 1219 | }, 1220 | { 1221 | "type": "consulting", 1222 | "url": "https://feross.org/support" 1223 | } 1224 | ] 1225 | }, 1226 | "node_modules/inherits": { 1227 | "version": "2.0.4", 1228 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1229 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1230 | }, 1231 | "node_modules/inquirer": { 1232 | "version": "9.2.23", 1233 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.23.tgz", 1234 | "integrity": "sha512-kod5s+FBPIDM2xiy9fu+6wdU/SkK5le5GS9lh4FEBjBHqiMgD9lLFbCbuqFNAjNL2ZOy9Wd9F694IOzN9pZHBA==", 1235 | "dependencies": { 1236 | "@inquirer/figures": "^1.0.3", 1237 | "@ljharb/through": "^2.3.13", 1238 | "ansi-escapes": "^4.3.2", 1239 | "chalk": "^5.3.0", 1240 | "cli-cursor": "^3.1.0", 1241 | "cli-width": "^4.1.0", 1242 | "external-editor": "^3.1.0", 1243 | "lodash": "^4.17.21", 1244 | "mute-stream": "1.0.0", 1245 | "ora": "^5.4.1", 1246 | "run-async": "^3.0.0", 1247 | "rxjs": "^7.8.1", 1248 | "string-width": "^4.2.3", 1249 | "strip-ansi": "^6.0.1", 1250 | "wrap-ansi": "^6.2.0" 1251 | }, 1252 | "engines": { 1253 | "node": ">=18" 1254 | } 1255 | }, 1256 | "node_modules/inquirer/node_modules/is-interactive": { 1257 | "version": "1.0.0", 1258 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 1259 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", 1260 | "engines": { 1261 | "node": ">=8" 1262 | } 1263 | }, 1264 | "node_modules/inquirer/node_modules/is-unicode-supported": { 1265 | "version": "0.1.0", 1266 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1267 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1268 | "engines": { 1269 | "node": ">=10" 1270 | }, 1271 | "funding": { 1272 | "url": "https://github.com/sponsors/sindresorhus" 1273 | } 1274 | }, 1275 | "node_modules/inquirer/node_modules/log-symbols": { 1276 | "version": "4.1.0", 1277 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1278 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1279 | "dependencies": { 1280 | "chalk": "^4.1.0", 1281 | "is-unicode-supported": "^0.1.0" 1282 | }, 1283 | "engines": { 1284 | "node": ">=10" 1285 | }, 1286 | "funding": { 1287 | "url": "https://github.com/sponsors/sindresorhus" 1288 | } 1289 | }, 1290 | "node_modules/inquirer/node_modules/log-symbols/node_modules/chalk": { 1291 | "version": "4.1.2", 1292 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1293 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1294 | "dependencies": { 1295 | "ansi-styles": "^4.1.0", 1296 | "supports-color": "^7.1.0" 1297 | }, 1298 | "engines": { 1299 | "node": ">=10" 1300 | }, 1301 | "funding": { 1302 | "url": "https://github.com/chalk/chalk?sponsor=1" 1303 | } 1304 | }, 1305 | "node_modules/inquirer/node_modules/ora": { 1306 | "version": "5.4.1", 1307 | "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", 1308 | "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", 1309 | "dependencies": { 1310 | "bl": "^4.1.0", 1311 | "chalk": "^4.1.0", 1312 | "cli-cursor": "^3.1.0", 1313 | "cli-spinners": "^2.5.0", 1314 | "is-interactive": "^1.0.0", 1315 | "is-unicode-supported": "^0.1.0", 1316 | "log-symbols": "^4.1.0", 1317 | "strip-ansi": "^6.0.0", 1318 | "wcwidth": "^1.0.1" 1319 | }, 1320 | "engines": { 1321 | "node": ">=10" 1322 | }, 1323 | "funding": { 1324 | "url": "https://github.com/sponsors/sindresorhus" 1325 | } 1326 | }, 1327 | "node_modules/inquirer/node_modules/ora/node_modules/chalk": { 1328 | "version": "4.1.2", 1329 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1330 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1331 | "dependencies": { 1332 | "ansi-styles": "^4.1.0", 1333 | "supports-color": "^7.1.0" 1334 | }, 1335 | "engines": { 1336 | "node": ">=10" 1337 | }, 1338 | "funding": { 1339 | "url": "https://github.com/chalk/chalk?sponsor=1" 1340 | } 1341 | }, 1342 | "node_modules/is-builtin-module": { 1343 | "version": "3.2.1", 1344 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", 1345 | "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", 1346 | "dev": true, 1347 | "dependencies": { 1348 | "builtin-modules": "^3.3.0" 1349 | }, 1350 | "engines": { 1351 | "node": ">=6" 1352 | }, 1353 | "funding": { 1354 | "url": "https://github.com/sponsors/sindresorhus" 1355 | } 1356 | }, 1357 | "node_modules/is-core-module": { 1358 | "version": "2.14.0", 1359 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", 1360 | "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", 1361 | "dev": true, 1362 | "dependencies": { 1363 | "hasown": "^2.0.2" 1364 | }, 1365 | "engines": { 1366 | "node": ">= 0.4" 1367 | }, 1368 | "funding": { 1369 | "url": "https://github.com/sponsors/ljharb" 1370 | } 1371 | }, 1372 | "node_modules/is-fullwidth-code-point": { 1373 | "version": "3.0.0", 1374 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1375 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1376 | "engines": { 1377 | "node": ">=8" 1378 | } 1379 | }, 1380 | "node_modules/is-interactive": { 1381 | "version": "2.0.0", 1382 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", 1383 | "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", 1384 | "engines": { 1385 | "node": ">=12" 1386 | }, 1387 | "funding": { 1388 | "url": "https://github.com/sponsors/sindresorhus" 1389 | } 1390 | }, 1391 | "node_modules/is-module": { 1392 | "version": "1.0.0", 1393 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1394 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 1395 | "dev": true 1396 | }, 1397 | "node_modules/is-reference": { 1398 | "version": "1.2.1", 1399 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 1400 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 1401 | "dev": true, 1402 | "dependencies": { 1403 | "@types/estree": "*" 1404 | } 1405 | }, 1406 | "node_modules/is-unicode-supported": { 1407 | "version": "2.0.0", 1408 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", 1409 | "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", 1410 | "engines": { 1411 | "node": ">=18" 1412 | }, 1413 | "funding": { 1414 | "url": "https://github.com/sponsors/sindresorhus" 1415 | } 1416 | }, 1417 | "node_modules/isexe": { 1418 | "version": "2.0.0", 1419 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1420 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1421 | "dev": true 1422 | }, 1423 | "node_modules/jackspeak": { 1424 | "version": "3.4.0", 1425 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", 1426 | "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", 1427 | "dev": true, 1428 | "dependencies": { 1429 | "@isaacs/cliui": "^8.0.2" 1430 | }, 1431 | "engines": { 1432 | "node": ">=14" 1433 | }, 1434 | "funding": { 1435 | "url": "https://github.com/sponsors/isaacs" 1436 | }, 1437 | "optionalDependencies": { 1438 | "@pkgjs/parseargs": "^0.11.0" 1439 | } 1440 | }, 1441 | "node_modules/jsonfile": { 1442 | "version": "6.1.0", 1443 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 1444 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 1445 | "dependencies": { 1446 | "universalify": "^2.0.0" 1447 | }, 1448 | "optionalDependencies": { 1449 | "graceful-fs": "^4.1.6" 1450 | } 1451 | }, 1452 | "node_modules/kleur": { 1453 | "version": "4.1.5", 1454 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1455 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 1456 | "engines": { 1457 | "node": ">=6" 1458 | } 1459 | }, 1460 | "node_modules/lodash": { 1461 | "version": "4.17.21", 1462 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1463 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1464 | }, 1465 | "node_modules/log-symbols": { 1466 | "version": "6.0.0", 1467 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", 1468 | "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", 1469 | "dependencies": { 1470 | "chalk": "^5.3.0", 1471 | "is-unicode-supported": "^1.3.0" 1472 | }, 1473 | "engines": { 1474 | "node": ">=18" 1475 | }, 1476 | "funding": { 1477 | "url": "https://github.com/sponsors/sindresorhus" 1478 | } 1479 | }, 1480 | "node_modules/log-symbols/node_modules/is-unicode-supported": { 1481 | "version": "1.3.0", 1482 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", 1483 | "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", 1484 | "engines": { 1485 | "node": ">=12" 1486 | }, 1487 | "funding": { 1488 | "url": "https://github.com/sponsors/sindresorhus" 1489 | } 1490 | }, 1491 | "node_modules/lru-cache": { 1492 | "version": "10.2.2", 1493 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", 1494 | "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", 1495 | "dev": true, 1496 | "engines": { 1497 | "node": "14 || >=16.14" 1498 | } 1499 | }, 1500 | "node_modules/magic-string": { 1501 | "version": "0.30.10", 1502 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", 1503 | "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", 1504 | "dev": true, 1505 | "dependencies": { 1506 | "@jridgewell/sourcemap-codec": "^1.4.15" 1507 | } 1508 | }, 1509 | "node_modules/mime-db": { 1510 | "version": "1.52.0", 1511 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1512 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1513 | "engines": { 1514 | "node": ">= 0.6" 1515 | } 1516 | }, 1517 | "node_modules/mime-types": { 1518 | "version": "2.1.35", 1519 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1520 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1521 | "dependencies": { 1522 | "mime-db": "1.52.0" 1523 | }, 1524 | "engines": { 1525 | "node": ">= 0.6" 1526 | } 1527 | }, 1528 | "node_modules/mimic-fn": { 1529 | "version": "2.1.0", 1530 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1531 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1532 | "engines": { 1533 | "node": ">=6" 1534 | } 1535 | }, 1536 | "node_modules/minimatch": { 1537 | "version": "9.0.4", 1538 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", 1539 | "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", 1540 | "dev": true, 1541 | "dependencies": { 1542 | "brace-expansion": "^2.0.1" 1543 | }, 1544 | "engines": { 1545 | "node": ">=16 || 14 >=14.17" 1546 | }, 1547 | "funding": { 1548 | "url": "https://github.com/sponsors/isaacs" 1549 | } 1550 | }, 1551 | "node_modules/minipass": { 1552 | "version": "7.1.2", 1553 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1554 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1555 | "dev": true, 1556 | "engines": { 1557 | "node": ">=16 || 14 >=14.17" 1558 | } 1559 | }, 1560 | "node_modules/mute-stream": { 1561 | "version": "1.0.0", 1562 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", 1563 | "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", 1564 | "engines": { 1565 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 1566 | } 1567 | }, 1568 | "node_modules/onetime": { 1569 | "version": "5.1.2", 1570 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1571 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1572 | "dependencies": { 1573 | "mimic-fn": "^2.1.0" 1574 | }, 1575 | "engines": { 1576 | "node": ">=6" 1577 | }, 1578 | "funding": { 1579 | "url": "https://github.com/sponsors/sindresorhus" 1580 | } 1581 | }, 1582 | "node_modules/ora": { 1583 | "version": "8.0.1", 1584 | "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", 1585 | "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", 1586 | "dependencies": { 1587 | "chalk": "^5.3.0", 1588 | "cli-cursor": "^4.0.0", 1589 | "cli-spinners": "^2.9.2", 1590 | "is-interactive": "^2.0.0", 1591 | "is-unicode-supported": "^2.0.0", 1592 | "log-symbols": "^6.0.0", 1593 | "stdin-discarder": "^0.2.1", 1594 | "string-width": "^7.0.0", 1595 | "strip-ansi": "^7.1.0" 1596 | }, 1597 | "engines": { 1598 | "node": ">=18" 1599 | }, 1600 | "funding": { 1601 | "url": "https://github.com/sponsors/sindresorhus" 1602 | } 1603 | }, 1604 | "node_modules/ora/node_modules/ansi-regex": { 1605 | "version": "6.0.1", 1606 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 1607 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 1608 | "engines": { 1609 | "node": ">=12" 1610 | }, 1611 | "funding": { 1612 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1613 | } 1614 | }, 1615 | "node_modules/ora/node_modules/cli-cursor": { 1616 | "version": "4.0.0", 1617 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", 1618 | "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", 1619 | "dependencies": { 1620 | "restore-cursor": "^4.0.0" 1621 | }, 1622 | "engines": { 1623 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1624 | }, 1625 | "funding": { 1626 | "url": "https://github.com/sponsors/sindresorhus" 1627 | } 1628 | }, 1629 | "node_modules/ora/node_modules/emoji-regex": { 1630 | "version": "10.3.0", 1631 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", 1632 | "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" 1633 | }, 1634 | "node_modules/ora/node_modules/restore-cursor": { 1635 | "version": "4.0.0", 1636 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", 1637 | "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", 1638 | "dependencies": { 1639 | "onetime": "^5.1.0", 1640 | "signal-exit": "^3.0.2" 1641 | }, 1642 | "engines": { 1643 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1644 | }, 1645 | "funding": { 1646 | "url": "https://github.com/sponsors/sindresorhus" 1647 | } 1648 | }, 1649 | "node_modules/ora/node_modules/signal-exit": { 1650 | "version": "3.0.7", 1651 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1652 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1653 | }, 1654 | "node_modules/ora/node_modules/string-width": { 1655 | "version": "7.1.0", 1656 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", 1657 | "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", 1658 | "dependencies": { 1659 | "emoji-regex": "^10.3.0", 1660 | "get-east-asian-width": "^1.0.0", 1661 | "strip-ansi": "^7.1.0" 1662 | }, 1663 | "engines": { 1664 | "node": ">=18" 1665 | }, 1666 | "funding": { 1667 | "url": "https://github.com/sponsors/sindresorhus" 1668 | } 1669 | }, 1670 | "node_modules/ora/node_modules/strip-ansi": { 1671 | "version": "7.1.0", 1672 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1673 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1674 | "dependencies": { 1675 | "ansi-regex": "^6.0.1" 1676 | }, 1677 | "engines": { 1678 | "node": ">=12" 1679 | }, 1680 | "funding": { 1681 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1682 | } 1683 | }, 1684 | "node_modules/os-tmpdir": { 1685 | "version": "1.0.2", 1686 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1687 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 1688 | "engines": { 1689 | "node": ">=0.10.0" 1690 | } 1691 | }, 1692 | "node_modules/package-json-from-dist": { 1693 | "version": "1.0.0", 1694 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", 1695 | "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", 1696 | "dev": true 1697 | }, 1698 | "node_modules/path-key": { 1699 | "version": "3.1.1", 1700 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1701 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1702 | "dev": true, 1703 | "engines": { 1704 | "node": ">=8" 1705 | } 1706 | }, 1707 | "node_modules/path-parse": { 1708 | "version": "1.0.7", 1709 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1710 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1711 | "dev": true 1712 | }, 1713 | "node_modules/path-scurry": { 1714 | "version": "1.11.1", 1715 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1716 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1717 | "dev": true, 1718 | "dependencies": { 1719 | "lru-cache": "^10.2.0", 1720 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1721 | }, 1722 | "engines": { 1723 | "node": ">=16 || 14 >=14.18" 1724 | }, 1725 | "funding": { 1726 | "url": "https://github.com/sponsors/isaacs" 1727 | } 1728 | }, 1729 | "node_modules/picomatch": { 1730 | "version": "2.3.1", 1731 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1732 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1733 | "dev": true, 1734 | "engines": { 1735 | "node": ">=8.6" 1736 | }, 1737 | "funding": { 1738 | "url": "https://github.com/sponsors/jonschlinkert" 1739 | } 1740 | }, 1741 | "node_modules/proxy-from-env": { 1742 | "version": "1.1.0", 1743 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1744 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 1745 | }, 1746 | "node_modules/readable-stream": { 1747 | "version": "3.6.2", 1748 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1749 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1750 | "dependencies": { 1751 | "inherits": "^2.0.3", 1752 | "string_decoder": "^1.1.1", 1753 | "util-deprecate": "^1.0.1" 1754 | }, 1755 | "engines": { 1756 | "node": ">= 6" 1757 | } 1758 | }, 1759 | "node_modules/resolve": { 1760 | "version": "1.22.8", 1761 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 1762 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 1763 | "dev": true, 1764 | "dependencies": { 1765 | "is-core-module": "^2.13.0", 1766 | "path-parse": "^1.0.7", 1767 | "supports-preserve-symlinks-flag": "^1.0.0" 1768 | }, 1769 | "bin": { 1770 | "resolve": "bin/resolve" 1771 | }, 1772 | "funding": { 1773 | "url": "https://github.com/sponsors/ljharb" 1774 | } 1775 | }, 1776 | "node_modules/restore-cursor": { 1777 | "version": "3.1.0", 1778 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1779 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1780 | "dependencies": { 1781 | "onetime": "^5.1.0", 1782 | "signal-exit": "^3.0.2" 1783 | }, 1784 | "engines": { 1785 | "node": ">=8" 1786 | } 1787 | }, 1788 | "node_modules/restore-cursor/node_modules/signal-exit": { 1789 | "version": "3.0.7", 1790 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1791 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1792 | }, 1793 | "node_modules/rimraf": { 1794 | "version": "5.0.7", 1795 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz", 1796 | "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==", 1797 | "dev": true, 1798 | "dependencies": { 1799 | "glob": "^10.3.7" 1800 | }, 1801 | "bin": { 1802 | "rimraf": "dist/esm/bin.mjs" 1803 | }, 1804 | "engines": { 1805 | "node": ">=14.18" 1806 | }, 1807 | "funding": { 1808 | "url": "https://github.com/sponsors/isaacs" 1809 | } 1810 | }, 1811 | "node_modules/rollup": { 1812 | "version": "4.18.0", 1813 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", 1814 | "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", 1815 | "dev": true, 1816 | "dependencies": { 1817 | "@types/estree": "1.0.5" 1818 | }, 1819 | "bin": { 1820 | "rollup": "dist/bin/rollup" 1821 | }, 1822 | "engines": { 1823 | "node": ">=18.0.0", 1824 | "npm": ">=8.0.0" 1825 | }, 1826 | "optionalDependencies": { 1827 | "@rollup/rollup-android-arm-eabi": "4.18.0", 1828 | "@rollup/rollup-android-arm64": "4.18.0", 1829 | "@rollup/rollup-darwin-arm64": "4.18.0", 1830 | "@rollup/rollup-darwin-x64": "4.18.0", 1831 | "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", 1832 | "@rollup/rollup-linux-arm-musleabihf": "4.18.0", 1833 | "@rollup/rollup-linux-arm64-gnu": "4.18.0", 1834 | "@rollup/rollup-linux-arm64-musl": "4.18.0", 1835 | "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", 1836 | "@rollup/rollup-linux-riscv64-gnu": "4.18.0", 1837 | "@rollup/rollup-linux-s390x-gnu": "4.18.0", 1838 | "@rollup/rollup-linux-x64-gnu": "4.18.0", 1839 | "@rollup/rollup-linux-x64-musl": "4.18.0", 1840 | "@rollup/rollup-win32-arm64-msvc": "4.18.0", 1841 | "@rollup/rollup-win32-ia32-msvc": "4.18.0", 1842 | "@rollup/rollup-win32-x64-msvc": "4.18.0", 1843 | "fsevents": "~2.3.2" 1844 | } 1845 | }, 1846 | "node_modules/run-async": { 1847 | "version": "3.0.0", 1848 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", 1849 | "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", 1850 | "engines": { 1851 | "node": ">=0.12.0" 1852 | } 1853 | }, 1854 | "node_modules/rxjs": { 1855 | "version": "7.8.1", 1856 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", 1857 | "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", 1858 | "dependencies": { 1859 | "tslib": "^2.1.0" 1860 | } 1861 | }, 1862 | "node_modules/safe-buffer": { 1863 | "version": "5.2.1", 1864 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1865 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1866 | "funding": [ 1867 | { 1868 | "type": "github", 1869 | "url": "https://github.com/sponsors/feross" 1870 | }, 1871 | { 1872 | "type": "patreon", 1873 | "url": "https://www.patreon.com/feross" 1874 | }, 1875 | { 1876 | "type": "consulting", 1877 | "url": "https://feross.org/support" 1878 | } 1879 | ] 1880 | }, 1881 | "node_modules/safer-buffer": { 1882 | "version": "2.1.2", 1883 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1884 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1885 | }, 1886 | "node_modules/set-function-length": { 1887 | "version": "1.2.2", 1888 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 1889 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 1890 | "dependencies": { 1891 | "define-data-property": "^1.1.4", 1892 | "es-errors": "^1.3.0", 1893 | "function-bind": "^1.1.2", 1894 | "get-intrinsic": "^1.2.4", 1895 | "gopd": "^1.0.1", 1896 | "has-property-descriptors": "^1.0.2" 1897 | }, 1898 | "engines": { 1899 | "node": ">= 0.4" 1900 | } 1901 | }, 1902 | "node_modules/shebang-command": { 1903 | "version": "2.0.0", 1904 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1905 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1906 | "dev": true, 1907 | "dependencies": { 1908 | "shebang-regex": "^3.0.0" 1909 | }, 1910 | "engines": { 1911 | "node": ">=8" 1912 | } 1913 | }, 1914 | "node_modules/shebang-regex": { 1915 | "version": "3.0.0", 1916 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1917 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1918 | "dev": true, 1919 | "engines": { 1920 | "node": ">=8" 1921 | } 1922 | }, 1923 | "node_modules/signal-exit": { 1924 | "version": "4.1.0", 1925 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1926 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1927 | "dev": true, 1928 | "engines": { 1929 | "node": ">=14" 1930 | }, 1931 | "funding": { 1932 | "url": "https://github.com/sponsors/isaacs" 1933 | } 1934 | }, 1935 | "node_modules/stdin-discarder": { 1936 | "version": "0.2.2", 1937 | "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", 1938 | "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", 1939 | "engines": { 1940 | "node": ">=18" 1941 | }, 1942 | "funding": { 1943 | "url": "https://github.com/sponsors/sindresorhus" 1944 | } 1945 | }, 1946 | "node_modules/string_decoder": { 1947 | "version": "1.3.0", 1948 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1949 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1950 | "dependencies": { 1951 | "safe-buffer": "~5.2.0" 1952 | } 1953 | }, 1954 | "node_modules/string-width": { 1955 | "version": "4.2.3", 1956 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1957 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1958 | "dependencies": { 1959 | "emoji-regex": "^8.0.0", 1960 | "is-fullwidth-code-point": "^3.0.0", 1961 | "strip-ansi": "^6.0.1" 1962 | }, 1963 | "engines": { 1964 | "node": ">=8" 1965 | } 1966 | }, 1967 | "node_modules/string-width-cjs": { 1968 | "name": "string-width", 1969 | "version": "4.2.3", 1970 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1971 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1972 | "dev": true, 1973 | "dependencies": { 1974 | "emoji-regex": "^8.0.0", 1975 | "is-fullwidth-code-point": "^3.0.0", 1976 | "strip-ansi": "^6.0.1" 1977 | }, 1978 | "engines": { 1979 | "node": ">=8" 1980 | } 1981 | }, 1982 | "node_modules/strip-ansi": { 1983 | "version": "6.0.1", 1984 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1985 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1986 | "dependencies": { 1987 | "ansi-regex": "^5.0.1" 1988 | }, 1989 | "engines": { 1990 | "node": ">=8" 1991 | } 1992 | }, 1993 | "node_modules/strip-ansi-cjs": { 1994 | "name": "strip-ansi", 1995 | "version": "6.0.1", 1996 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1997 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1998 | "dev": true, 1999 | "dependencies": { 2000 | "ansi-regex": "^5.0.1" 2001 | }, 2002 | "engines": { 2003 | "node": ">=8" 2004 | } 2005 | }, 2006 | "node_modules/supports-color": { 2007 | "version": "7.2.0", 2008 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2009 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2010 | "dependencies": { 2011 | "has-flag": "^4.0.0" 2012 | }, 2013 | "engines": { 2014 | "node": ">=8" 2015 | } 2016 | }, 2017 | "node_modules/supports-preserve-symlinks-flag": { 2018 | "version": "1.0.0", 2019 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2020 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2021 | "dev": true, 2022 | "engines": { 2023 | "node": ">= 0.4" 2024 | }, 2025 | "funding": { 2026 | "url": "https://github.com/sponsors/ljharb" 2027 | } 2028 | }, 2029 | "node_modules/tmp": { 2030 | "version": "0.0.33", 2031 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2032 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2033 | "dependencies": { 2034 | "os-tmpdir": "~1.0.2" 2035 | }, 2036 | "engines": { 2037 | "node": ">=0.6.0" 2038 | } 2039 | }, 2040 | "node_modules/tslib": { 2041 | "version": "2.6.3", 2042 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", 2043 | "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" 2044 | }, 2045 | "node_modules/type-fest": { 2046 | "version": "0.21.3", 2047 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 2048 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 2049 | "engines": { 2050 | "node": ">=10" 2051 | }, 2052 | "funding": { 2053 | "url": "https://github.com/sponsors/sindresorhus" 2054 | } 2055 | }, 2056 | "node_modules/typescript": { 2057 | "version": "5.5.2", 2058 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", 2059 | "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", 2060 | "dev": true, 2061 | "bin": { 2062 | "tsc": "bin/tsc", 2063 | "tsserver": "bin/tsserver" 2064 | }, 2065 | "engines": { 2066 | "node": ">=14.17" 2067 | } 2068 | }, 2069 | "node_modules/undici-types": { 2070 | "version": "5.26.5", 2071 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2072 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 2073 | "dev": true 2074 | }, 2075 | "node_modules/universalify": { 2076 | "version": "2.0.1", 2077 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", 2078 | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", 2079 | "engines": { 2080 | "node": ">= 10.0.0" 2081 | } 2082 | }, 2083 | "node_modules/util-deprecate": { 2084 | "version": "1.0.2", 2085 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2086 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2087 | }, 2088 | "node_modules/wcwidth": { 2089 | "version": "1.0.1", 2090 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 2091 | "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", 2092 | "dependencies": { 2093 | "defaults": "^1.0.3" 2094 | } 2095 | }, 2096 | "node_modules/which": { 2097 | "version": "2.0.2", 2098 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2099 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2100 | "dev": true, 2101 | "dependencies": { 2102 | "isexe": "^2.0.0" 2103 | }, 2104 | "bin": { 2105 | "node-which": "bin/node-which" 2106 | }, 2107 | "engines": { 2108 | "node": ">= 8" 2109 | } 2110 | }, 2111 | "node_modules/wrap-ansi": { 2112 | "version": "6.2.0", 2113 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 2114 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 2115 | "dependencies": { 2116 | "ansi-styles": "^4.0.0", 2117 | "string-width": "^4.1.0", 2118 | "strip-ansi": "^6.0.0" 2119 | }, 2120 | "engines": { 2121 | "node": ">=8" 2122 | } 2123 | }, 2124 | "node_modules/wrap-ansi-cjs": { 2125 | "name": "wrap-ansi", 2126 | "version": "7.0.0", 2127 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2128 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2129 | "dev": true, 2130 | "dependencies": { 2131 | "ansi-styles": "^4.0.0", 2132 | "string-width": "^4.1.0", 2133 | "strip-ansi": "^6.0.0" 2134 | }, 2135 | "engines": { 2136 | "node": ">=10" 2137 | }, 2138 | "funding": { 2139 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2140 | } 2141 | } 2142 | } 2143 | } 2144 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@larscom/ng-chrome-extension", 3 | "shortName": "ng-chrome", 4 | "version": "3.2.4", 5 | "description": "CLI to generate angular chrome extensions", 6 | "main": "./bin/main.js", 7 | "type": "module", 8 | "bin": { 9 | "ng-chrome": "bin/main.js" 10 | }, 11 | "publishConfig": { 12 | "access": "public" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/larscom/ng-chrome-extension.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/larscom/ng-chrome-extension/issues" 20 | }, 21 | "homepage": "https://github.com/larscom/ng-chrome-extension#readme", 22 | "scripts": { 23 | "start": "rollup -c && node ./dist/bin/main.js", 24 | "build": "rollup -c" 25 | }, 26 | "keywords": [ 27 | "ng-chrome", 28 | "ng", 29 | "angular", 30 | "chrome", 31 | "extension", 32 | "google", 33 | "manifest", 34 | "rxjs" 35 | ], 36 | "author": "Lars Kniep", 37 | "license": "MIT", 38 | "dependencies": { 39 | "adm-zip": "^0.5.14", 40 | "axios": "^1.7.2", 41 | "clear": "^0.1.0", 42 | "commander": "^12.1.0", 43 | "figlet": "^1.7.0", 44 | "fs-extra": "^11.2.0", 45 | "inquirer": "^9.2.23", 46 | "kleur": "^4.1.5", 47 | "ora": "^8.0.1" 48 | }, 49 | "devDependencies": { 50 | "@rollup/plugin-commonjs": "^26.0.1", 51 | "@rollup/plugin-json": "^6.1.0", 52 | "@rollup/plugin-node-resolve": "^15.2.3", 53 | "@rollup/plugin-typescript": "^11.1.6", 54 | "@types/adm-zip": "^0.5.5", 55 | "@types/bun": "latest", 56 | "@types/clear": "^0.1.4", 57 | "@types/figlet": "^1.5.8", 58 | "@types/fs-extra": "^11.0.4", 59 | "@types/inquirer": "^9.0.7", 60 | "@types/node": "^20.14.8", 61 | "rimraf": "^5.0.7", 62 | "rollup": "^4.18.0", 63 | "typescript": "^5.5.2" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import commonjs from '@rollup/plugin-commonjs' 2 | import json from '@rollup/plugin-json' 3 | import resolve from '@rollup/plugin-node-resolve' 4 | import typescript from '@rollup/plugin-typescript' 5 | 6 | export default { 7 | input: './src/main.ts', 8 | output: { 9 | file: './dist/bin/main.js' 10 | }, 11 | external: ['adm-zip', 'axios', 'clear', 'commander', 'figlet', 'fs-extra', 'inquirer', 'kleur', 'ora'], 12 | plugins: [typescript(), resolve(), commonjs(), json()] 13 | } 14 | -------------------------------------------------------------------------------- /src/logger.ts: -------------------------------------------------------------------------------- 1 | import clear from 'clear' 2 | import figlet from 'figlet' 3 | import kleur from 'kleur' 4 | 5 | const red = kleur.red 6 | const yellow = kleur.yellow 7 | const cyan = kleur.cyan 8 | const green = kleur.green 9 | const bold = kleur.bold 10 | 11 | export class Logger { 12 | private readonly githubUrl: string 13 | 14 | constructor(githubUrl: string) { 15 | this.githubUrl = githubUrl 16 | } 17 | 18 | error(message: string, ...optionalParams: any[]) { 19 | console.log(red(`ERROR: ${message}`), ...optionalParams) 20 | } 21 | 22 | warn(message: string, ...optionalParams: any[]) { 23 | console.log(yellow(`WARN: ${message}`), ...optionalParams) 24 | } 25 | 26 | info(message: string, ...optionalParams: any[]) { 27 | console.log(cyan(`INFO: ${message}`), ...optionalParams) 28 | } 29 | 30 | showIntro(name: string, version: string) { 31 | clear({ fullClear: true }) 32 | 33 | console.log(red(figlet.textSync(name, { horizontalLayout: 'full' }))) 34 | console.log(green(version)) 35 | console.log('---------------------------------------------------------------') 36 | console.log(`${this.githubUrl}`) 37 | console.log() 38 | } 39 | 40 | showOutro(name: string) { 41 | console.log() 42 | console.log('---------------------------------------------------------------') 43 | console.log(`You can now change directory to ${yellow(name)} and type the following commands:`) 44 | 45 | console.log() 46 | console.log(` ${cyan('npm start')}`) 47 | console.log(' The project is automatically being watched/build') 48 | console.log(` Go to ${yellow('chrome://extensions')} in the browser and enable '${bold('developer mode')}'`) 49 | console.log(` Press ${yellow('Load unpacked')} and target the folder '${bold('angular/dist')}'`) 50 | 51 | console.log() 52 | console.log(` ${cyan('npm run build:production')}`) 53 | console.log(' Creates a production ready zip file') 54 | console.log(` Upload ${yellow('extension-build.zip')} directly to the chrome webstore`) 55 | console.log() 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import admZip from 'adm-zip' 4 | import axios from 'axios' 5 | import { exec } from 'child_process' 6 | import { program } from 'commander' 7 | import fs from 'fs-extra' 8 | import inquirer from 'inquirer' 9 | import path from 'path' 10 | import { Logger } from './logger' 11 | import { Spinner } from './spinner' 12 | import { version } from './version' 13 | 14 | const packageName = 'ng-chrome' 15 | const githubUrl = 'https://github.com/larscom/ng-chrome-extension' 16 | const templateUrl = 'https://github.com/larscom/angular-chrome-extension/archive/refs/heads/master.zip' 17 | 18 | const nameRegex = new RegExp(/^[a-z0-9-_]+$/) 19 | const log = new Logger(githubUrl) 20 | const spinner = new Spinner() 21 | 22 | program 23 | .name(packageName) 24 | .description(`Create Google Chrome (V3) extensions with Angular!\n${githubUrl}`) 25 | .version(version) 26 | 27 | .command('new [name]') 28 | .description('Create a new Angular Chrome extension') 29 | .action(handleNewProject) 30 | 31 | program.parse(process.argv, { from: 'node' }) 32 | 33 | async function handleNewProject(name: string): Promise { 34 | log.showIntro(packageName, version) 35 | if (name) { 36 | const projectName = await parseName(name) 37 | await setupNewProject(projectName) 38 | } else { 39 | const { name } = await askName('name') 40 | const projectName = await parseName(name) 41 | await setupNewProject(projectName) 42 | } 43 | } 44 | 45 | async function setupNewProject(name: string): Promise { 46 | await createProject(name) 47 | await installDeps(name) 48 | 49 | log.showOutro(name) 50 | } 51 | 52 | async function createProject(name: string): Promise { 53 | const projectDir = getProjectDir(name) 54 | 55 | try { 56 | spinner.start('Creating new extension...') 57 | 58 | await downloadTemplate(projectDir, templateUrl) 59 | 60 | spinner.stop(`Created new Angular chrome extension at: ${projectDir}`) 61 | } catch (e) { 62 | spinner.stop() 63 | log.error('Failed creating new extension', e) 64 | process.exit(1) 65 | } 66 | } 67 | 68 | async function installDeps(name: string): Promise { 69 | process.chdir(getProjectDir(name)) 70 | 71 | try { 72 | spinner.start('Installing dependencies...') 73 | 74 | await execCmd('npm ci --legacy-peer-deps') 75 | await execCmd('(cd chrome && npm ci --legacy-peer-deps)') 76 | 77 | spinner.stop('Successfully installed dependencies') 78 | } catch (e) { 79 | spinner.stop() 80 | log.error('Failed installing dependencies', e) 81 | process.exit(1) 82 | } 83 | } 84 | 85 | async function downloadTemplate(dir: string, templateUrl: string): Promise { 86 | await fs.mkdirp(dir) 87 | const zip = new admZip(await getZipBuffer(templateUrl)) 88 | 89 | const entries = zip.getEntries() 90 | for (const entry of entries) { 91 | const path = `${dir}/${entry.entryName.replace('angular-chrome-extension-master/', '')}` 92 | if (path.includes('..')) { 93 | const msg = `Unexpected path: ${path}` 94 | log.error(msg) 95 | throw Error(msg) 96 | } 97 | 98 | if (entry.isDirectory) { 99 | fs.mkdirpSync(path) 100 | } else { 101 | fs.writeFileSync(path, entry.getData().toString('utf-8')) 102 | } 103 | } 104 | } 105 | 106 | async function parseName(name: string): Promise { 107 | if (isValidName(name)) { 108 | const exist = await dirExists(name) 109 | if (exist) { 110 | log.error(`Project with name '${name}' already exists`) 111 | process.exit(1) 112 | } 113 | return name 114 | } else { 115 | log.error(`Project name invalid, must match: ${nameRegex.toString()}`) 116 | process.exit(1) 117 | } 118 | } 119 | 120 | async function getZipBuffer(url: string) { 121 | return await axios({ url, responseType: 'arraybuffer' }).then(({ data }) => data) 122 | } 123 | 124 | async function execCmd(command: string): Promise { 125 | return new Promise((resolve, reject) => exec(command, (error) => (error ? reject(error) : resolve()))) 126 | } 127 | 128 | function dirExists(name: string): Promise { 129 | return fs.pathExists(getProjectDir(name)) 130 | } 131 | 132 | function getProjectDir(name: string): string { 133 | return path.join(process.cwd(), name) 134 | } 135 | 136 | function isValidName(name: string): boolean { 137 | return nameRegex.test(name) 138 | } 139 | 140 | function askName(name: string): Promise { 141 | return inquirer.prompt([{ name, type: 'input', message: 'Enter a project name:' }]) 142 | } 143 | -------------------------------------------------------------------------------- /src/spinner.ts: -------------------------------------------------------------------------------- 1 | import ora from 'ora' 2 | 3 | export class Spinner { 4 | private loader = ora({ color: 'green', hideCursor: true }) 5 | 6 | start(text: string) { 7 | this.loader.start(text) 8 | } 9 | 10 | stop(text?: string) { 11 | this.loader.succeed(text) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/version.ts: -------------------------------------------------------------------------------- 1 | export const version = '{{PLACEHOLDER_VERSION}}' 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "module": "ESNext", 5 | "outDir": "./dist", 6 | "rootDir": "./src", 7 | "moduleResolution": "Node", 8 | "strict": true, 9 | "esModuleInterop": true, 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true 12 | }, 13 | "include": ["src"], 14 | "exclude": ["node_modules", "dist"] 15 | } 16 | --------------------------------------------------------------------------------