From 5bb1f1dcb54c7c57f5a1275c20df42162f29e81f Mon Sep 17 00:00:00 2001 From: botre Date: Fri, 8 May 2026 23:21:23 +0200 Subject: [PATCH] Release 1.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modernize toolchain and add new flags: - Migrate to TypeScript + tsup build (src/cli.ts → dist/cli.js) - Upgrade yargs 17 → 18, prettier 2 → 3, husky 7 → 9 - Drop unused pretty-quick dev dep - Add GitHub Actions workflows (check, release via npm trusted publishing) - Replace dns.lookup with os.networkInterfaces(); prompt with classified numbered list when multiple non-internal IPv4 interfaces are detected - Validate --port is an integer in [1, 65535] - Wire up -P short alias - Add --path flag for deep-linking - Add --host flag to override auto-detected LAN IP - Set Node engines to ^20.19.0 || ^22.12.0 || >=23 - Replace static screenshot with vhs-generated demo gif - Rewrite README with Options table and examples --- .github/workflows/check.yml | 28 + .github/workflows/release.yml | 41 + .gitignore | 3 +- .husky/pre-commit | 3 - README.md | 27 +- bin/cli.js | 34 - package-lock.json | 2289 +++++++++++++++++++++------------ package.json | 26 +- src/cli.ts | 149 +++ static/demo.gif | Bin 0 -> 59114 bytes static/demo.tape | 22 + static/screenshot.png | Bin 10738 -> 0 bytes tsconfig.json | 21 + 13 files changed, 1751 insertions(+), 892 deletions(-) create mode 100644 .github/workflows/check.yml create mode 100644 .github/workflows/release.yml delete mode 100644 bin/cli.js create mode 100644 src/cli.ts create mode 100644 static/demo.gif create mode 100644 static/demo.tape delete mode 100644 static/screenshot.png create mode 100644 tsconfig.json diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..78e291a --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,28 @@ +name: Check + +on: + pull_request: + branches: + - master + workflow_call: + +jobs: + check: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-node@v6 + with: + node-version: "22.x" + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Lint + run: npm run lint + + - name: Build + run: npm run build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..37d4b72 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,41 @@ +name: Release + +on: + push: + branches: + - master + +permissions: + contents: write + id-token: write + +jobs: + check: + uses: ./.github/workflows/check.yml + + release: + needs: check + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-node@v6 + with: + node-version: "24.x" + registry-url: "https://registry.npmjs.org" + cache: "npm" + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Bump version + uses: phips28/gh-action-bump-version@v11.0.7 + with: + tag-prefix: "" + + - name: Publish to NPM + run: npm publish --access public --provenance diff --git a/.gitignore b/.gitignore index 2d2b47d..7d2f2e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -node_modules \ No newline at end of file +dist +node_modules diff --git a/.husky/pre-commit b/.husky/pre-commit index 8ab6149..3932801 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - npm run format diff --git a/README.md b/README.md index 23fdcf7..cd0dec8 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,35 @@ Easily access a localhost website from your mobile device. npx localview --port 8080 ``` -The `--port` argument should match the port exposed by the server. - 3. To visit the exposed URL, scan the QR code with your mobile device. -![Screenshot](./static/screenshot.png) +![Demo](./static/demo.gif) + +## Options + +| Flag | Description | +| -------------- | ------------------------------------------------------------- | +| `--port`, `-P` | Port exposed by the local server. **Required.** | +| `--path` | Path appended to the URL (e.g. `/admin`). Optional. | +| `--host` | Override the auto-detected LAN IP (Docker, multi-NIC, demos). | + +### Examples + +```bash +# Deep-link to a specific route: +npx localview --port 3000 --path /admin + +# Pin the LAN IP yourself instead of auto-detecting: +npx localview --port 8080 --host 192.168.1.42 +``` + +If multiple non-internal IPv4 interfaces are detected (e.g. wifi + VPN + Docker bridges), localview prints a numbered list and asks which one to use; press Enter to accept the smart default. ## Notes +- Requires Node.js `^20.19.0`, `^22.12.0`, or `>=23`. - Both the server and the mobile device need to be connected to the same network. -- You may need to set you server's host to `0.0.0.0`. +- You may need to set your server's host to `0.0.0.0`. ## License diff --git a/bin/cli.js b/bin/cli.js deleted file mode 100644 index 0801313..0000000 --- a/bin/cli.js +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env node - -"use strict"; - -const pjson = require("../package.json"); -const dns = require("dns"); -const os = require("os"); -const yargs = require("yargs/yargs"); -const { hideBin } = require("yargs/helpers"); -const qrcode = require("qrcode-terminal"); - -console.log(`localview v${pjson.version}`); - -const argv = yargs(hideBin(process.argv)).argv; -const port = argv.port || argv.P; - -if (!port) { - console.log("Missing port argument."); - console.log("Correct usage: localview --port 8080"); -} else { - dns.lookup(os.hostname(), async (error, address) => { - const url = `http://${address}:${port}`; - qrcode.setErrorLevel("H"); - qrcode.generate(url, { small: true }, async (code) => { - console.log(`Port: ${port}`); - console.log(`URL: ${url}`); - console.log(""); - console.log(code); - console.log( - "To visit the exposed URL, scan the QR code with your mobile device." - ); - }); - }); -} diff --git a/package-lock.json b/package-lock.json index d404f5f..05f36d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "localview", "version": "0.0.9", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -10,1113 +10,1718 @@ "license": "MIT", "dependencies": { "qrcode-terminal": "^0.12.0", - "yargs": "^17.3.0" + "yargs": "^18.0.0" }, "bin": { - "localview": "bin/cli.js" + "localview": "dist/cli.js" }, "devDependencies": { - "husky": "^7.0.4", - "prettier": "^2.5.1", - "pretty-quick": "^3.1.2" + "@types/node": "^25.6.2", + "@types/qrcode-terminal": "^0.12.2", + "@types/yargs": "^17.0.35", + "husky": "^9.1.7", + "prettier": "^3.8.3", + "tsup": "^8.5.1", + "typescript": "^6.0.3" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" } }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18" } }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=7.0.0" + "node": ">=18" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "once": "^1.4.0" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=18" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=18" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=8.12.0" + "node": ">=18" } }, - "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "husky": "lib/bin.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "node": ">=18" } }, - "node_modules/ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 4" + "node": ">=18" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { - "wrappy": "1" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.3.tgz", + "integrity": "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.3.tgz", + "integrity": "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.3.tgz", + "integrity": "sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.3.tgz", + "integrity": "sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.3.tgz", + "integrity": "sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.3.tgz", + "integrity": "sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.3.tgz", + "integrity": "sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.3.tgz", + "integrity": "sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.3.tgz", + "integrity": "sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.3.tgz", + "integrity": "sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.3.tgz", + "integrity": "sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.3.tgz", + "integrity": "sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.3.tgz", + "integrity": "sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.3.tgz", + "integrity": "sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.3.tgz", + "integrity": "sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.3.tgz", + "integrity": "sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.3.tgz", + "integrity": "sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.3.tgz", + "integrity": "sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.3.tgz", + "integrity": "sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.3.tgz", + "integrity": "sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.3.tgz", + "integrity": "sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.3.tgz", + "integrity": "sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.3.tgz", + "integrity": "sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.3.tgz", + "integrity": "sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.3.tgz", + "integrity": "sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.2.tgz", + "integrity": "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw==", + "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "undici-types": "~7.19.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@types/qrcode-terminal": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", + "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=6" + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", "dev": true, + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/pretty-quick": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.2.tgz", - "integrity": "sha512-T+fpTJrDjTzewql4p3lKrRA7z3MrNyjBK1MKeaBm5PpKwATgVm885TpY7TgY8KFt5Q1Qn3QDseRQcyX9AKTKkA==", - "dev": true, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", "dependencies": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "bin": { - "pretty-quick": "bin/pretty-quick.js" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "prettier": ">=2.0.0" + "node": ">=20" } }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "license": "MIT", + "engines": { + "node": ">= 6" } }, - "node_modules/qrcode-terminal": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" } }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/yargs": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } - } - }, - "dependencies": { - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, - "requires": { - "pump": "^3.0.0" + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true - }, - "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "requires": { - "p-locate": "^4.1.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, - "requires": { - "brace-expansion": "^1.1.7" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" + "license": "MIT", + "engines": { + "node": ">= 6" } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dev": true, - "requires": { - "path-key": "^3.0.0" + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "dev": true, - "requires": { - "wrappy": "1" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, - "requires": { - "mimic-fn": "^2.1.0" + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" + "node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "requires": { - "p-limit": "^2.2.0" + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "node_modules/rollup": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.3.tgz", + "integrity": "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.3", + "@rollup/rollup-android-arm64": "4.60.3", + "@rollup/rollup-darwin-arm64": "4.60.3", + "@rollup/rollup-darwin-x64": "4.60.3", + "@rollup/rollup-freebsd-arm64": "4.60.3", + "@rollup/rollup-freebsd-x64": "4.60.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", + "@rollup/rollup-linux-arm-musleabihf": "4.60.3", + "@rollup/rollup-linux-arm64-gnu": "4.60.3", + "@rollup/rollup-linux-arm64-musl": "4.60.3", + "@rollup/rollup-linux-loong64-gnu": "4.60.3", + "@rollup/rollup-linux-loong64-musl": "4.60.3", + "@rollup/rollup-linux-ppc64-gnu": "4.60.3", + "@rollup/rollup-linux-ppc64-musl": "4.60.3", + "@rollup/rollup-linux-riscv64-gnu": "4.60.3", + "@rollup/rollup-linux-riscv64-musl": "4.60.3", + "@rollup/rollup-linux-s390x-gnu": "4.60.3", + "@rollup/rollup-linux-x64-gnu": "4.60.3", + "@rollup/rollup-linux-x64-musl": "4.60.3", + "@rollup/rollup-openbsd-x64": "4.60.3", + "@rollup/rollup-openharmony-arm64": "4.60.3", + "@rollup/rollup-win32-arm64-msvc": "4.60.3", + "@rollup/rollup-win32-ia32-msvc": "4.60.3", + "@rollup/rollup-win32-x64-gnu": "4.60.3", + "@rollup/rollup-win32-x64-msvc": "4.60.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "pretty-quick": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.2.tgz", - "integrity": "sha512-T+fpTJrDjTzewql4p3lKrRA7z3MrNyjBK1MKeaBm5PpKwATgVm885TpY7TgY8KFt5Q1Qn3QDseRQcyX9AKTKkA==", + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dev": true, - "requires": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" } }, - "qrcode-terminal": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, - "requires": { - "shebang-regex": "^3.0.0" + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" } }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/tsup": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz", + "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.27.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "^0.7.6", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, - "requires": { - "has-flag": "^4.0.0" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "license": "MIT" }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } + "node_modules/undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "dev": true, + "license": "MIT" }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", - "requires": { - "cliui": "^7.0.2", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" } }, - "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } } } } diff --git a/package.json b/package.json index 42599ed..33a876d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "localview", "description": "Easily access a localhost website from your mobile device", "private": false, - "version": "0.0.9", + "version": "1.0.0-rc.0", "author": "Bjorn Krols (https://formspark.io)", "license": "MIT", "keywords": [ @@ -19,20 +19,30 @@ "url": "https://github.com/formspark/localview/issues" }, "files": [ - "bin" + "dist" ], - "bin": "bin/cli.js", + "bin": "dist/cli.js", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + }, "scripts": { + "build": "tsup src/cli.ts --format cjs --clean", "format": "prettier --write . --ignore-path .gitignore", - "prepare": "husky install" + "lint": "tsc --noEmit", + "prepare": "husky", + "start": "tsup src/cli.ts --format cjs --watch" }, "dependencies": { "qrcode-terminal": "^0.12.0", - "yargs": "^17.3.0" + "yargs": "^18.0.0" }, "devDependencies": { - "husky": "^7.0.4", - "prettier": "^2.5.1", - "pretty-quick": "^3.1.2" + "@types/node": "^25.6.2", + "@types/qrcode-terminal": "^0.12.2", + "@types/yargs": "^17.0.35", + "husky": "^9.1.7", + "prettier": "^3.8.3", + "tsup": "^8.5.1", + "typescript": "^6.0.3" } } diff --git a/src/cli.ts b/src/cli.ts new file mode 100644 index 0000000..b6f4f9a --- /dev/null +++ b/src/cli.ts @@ -0,0 +1,149 @@ +#!/usr/bin/env node + +import os from "os"; +import readline from "readline"; +import yargs from "yargs/yargs"; +import { hideBin } from "yargs/helpers"; +import qrcode from "qrcode-terminal"; +import pjson from "../package.json"; + +console.log(`localview v${pjson.version}`); + +const argv = yargs(hideBin(process.argv)) + .option("port", { + alias: "P", + type: "number", + describe: "Port exposed by the local server", + }) + .option("path", { + type: "string", + describe: "Path appended to the URL (e.g. /admin)", + default: "", + }) + .option("host", { + type: "string", + describe: "Override the auto-detected LAN IP", + }) + .parseSync(); + +const port = argv.port; +const path = normalizePath(argv.path); + +if ( + typeof port !== "number" || + !Number.isInteger(port) || + port < 1 || + port > 65535 +) { + console.log("Missing or invalid port argument."); + console.log("Correct usage: localview --port 8080"); + process.exit(1); +} + +async function main() { + const address = argv.host ? argv.host : await pickAddress(); + + if (!address) { + console.log("Could not determine a non-internal IPv4 address."); + process.exit(1); + } + + const url = `http://${address}:${port}${path}`; + qrcode.setErrorLevel("H"); + qrcode.generate(url, { small: true }, (code) => { + console.log(`Port: ${port}`); + console.log(`URL: ${url}`); + console.log(""); + console.log(code); + console.log( + "To visit the exposed URL, scan the QR code with your mobile device.", + ); + }); +} + +async function pickAddress(): Promise { + const candidates = collectLanAddresses(); + if (candidates.length === 0) return null; + if (candidates.length === 1) return candidates[0].address; + + if (!process.stdin.isTTY) { + const first = candidates[0]; + console.log( + `Multiple interfaces detected; defaulting to ${first.name} (${first.address}).`, + ); + return first.address; + } + + console.log("Multiple network interfaces detected:"); + candidates.forEach((c, i) => { + const label = c.kind === "other" ? "" : ` (${c.kind})`; + console.log(` ${i + 1}. ${c.name}${label} — ${c.address}`); + }); + const answer = await prompt( + `Select interface [1-${candidates.length}] (default: 1): `, + ); + const trimmed = answer.trim(); + const choice = trimmed === "" ? 1 : Number(trimmed); + if (!Number.isInteger(choice) || choice < 1 || choice > candidates.length) { + console.log("Invalid selection."); + process.exit(1); + } + return candidates[choice - 1].address; +} + +function prompt(question: string): Promise { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + return new Promise((resolve) => { + rl.question(question, (answer) => { + rl.close(); + resolve(answer); + }); + }); +} + +function normalizePath(value: string): string { + if (!value) return ""; + return value.startsWith("/") ? value : `/${value}`; +} + +type InterfaceKind = "wifi" | "ethernet" | "vpn" | "virtual" | "other"; +type Candidate = { name: string; address: string; kind: InterfaceKind }; + +const KIND_PRIORITY: Record = { + wifi: 0, + ethernet: 1, + other: 2, + vpn: 3, + virtual: 4, +}; + +function collectLanAddresses(): Candidate[] { + const interfaces = os.networkInterfaces(); + const result: Candidate[] = []; + for (const name of Object.keys(interfaces)) { + const ifaces = interfaces[name]; + if (!ifaces) continue; + for (const iface of ifaces) { + if (iface.family === "IPv4" && !iface.internal) { + result.push({ name, address: iface.address, kind: classify(name) }); + } + } + } + result.sort((a, b) => KIND_PRIORITY[a.kind] - KIND_PRIORITY[b.kind]); + return result; +} + +function classify(name: string): InterfaceKind { + const n = name.toLowerCase(); + if (/^(wlan|wlp|wlo|wifi)/.test(n) || n.startsWith("wi-fi")) return "wifi"; + if (/^(eth|enp|eno|ens|en\d)/.test(n) || n.startsWith("ethernet")) + return "ethernet"; + if (/^(tailscale|tun|tap|utun|wg|ppp|ipsec|gpd)/.test(n)) return "vpn"; + if (/^(docker|br-|veth|vmnet|vboxnet|virbr|bridge)/.test(n)) return "virtual"; + return "other"; +} + +main(); diff --git a/static/demo.gif b/static/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..306127cd4492a1a9793efe190eafbb240a2f4719 GIT binary patch literal 59114 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 D39qiH literal 0 HcmV?d00001 diff --git a/static/demo.tape b/static/demo.tape new file mode 100644 index 0000000..3747a5a --- /dev/null +++ b/static/demo.tape @@ -0,0 +1,22 @@ +# vhs tape for the README demo gif. +# +# Install: https://github.com/charmbracelet/vhs#installation +# Regenerate: vhs static/demo.tape (writes static/demo.gif) +# +# During development before publishing, swap `npx localview` for +# `node dist/cli.js` after `npm run build`. + +Output static/demo.gif + +Set FontSize 14 +Set Width 900 +Set Height 600 +Set Padding 20 +Set Theme "Catppuccin Mocha" + +# --host pins the IP shown in the QR/URL so the demo doesn't leak +# the recording machine's real LAN address. +Type "npx localview --port 8080 --host 192.168.1.42" +Sleep 500ms +Enter +Sleep 4s diff --git a/static/screenshot.png b/static/screenshot.png deleted file mode 100644 index b6baa8330e7fc3096279add0d09315957a719d61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10738 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