diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 201706e52..5301a0b1f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -20,14 +20,11 @@ jobs: - name: Setup node uses: actions/setup-node@v6 with: - node-version: 24 + node-version: 26 registry-url: 'https://registry.npmjs.org/' - - name: Update npm - run: npm install -g npm@latest - - name: Install pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@v6 with: version: latest @@ -48,7 +45,7 @@ jobs: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Send Slack notification - uses: slackapi/slack-github-action@v2.1.1 + uses: slackapi/slack-github-action@v3.0.3 with: method: chat.postMessage token: ${{ secrets.SLACK_BOT_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2485e50a8..2937c8c39 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,8 +13,8 @@ jobs: strategy: fail-fast: false matrix: - node: ['20', '22', '24'] - os: [ubuntu-latest, windows-latest, macOS-latest] + node: ['22', '24', '26'] + os: [ubuntu-latest, windows-latest, macos-latest] steps: - name: Checkout repository @@ -26,7 +26,7 @@ jobs: node-version: ${{ matrix.node }} - name: Install pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@v6 with: version: latest diff --git a/CHANGELOG.md b/CHANGELOG.md index b89dabe20..c4e5e4661 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +9.0.0 (6/18/2026) +------------------- + * BREAKING CHANGE: Require Node.js 22.19.0 or newer + * chore: Updated dependencies + 8.1.5 (2/2/2026) ------------------- * fix: Scan custom hooks path after loading the Titanium SDK diff --git a/package.json b/package.json index b488ea6e4..393f1302e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "titanium", - "version": "8.1.5", + "version": "9.0.0", "author": "TiDev, Inc. ", "description": "Command line interface for building Titanium SDK apps", "type": "module", @@ -23,27 +23,28 @@ "dependencies": { "@xmldom/xmldom": "0.9.10", "chalk": "5.6.2", - "commander": "14.0.3", + "commander": "15.0.0", "execa": "9.6.1", - "fs-extra": "11.3.4", + "fs-extra": "11.3.5", "pretty-bytes": "7.1.0", "prompts": "2.4.2", - "semver": "7.7.4", - "undici": "8.0.2", - "which": "6.0.1", + "semver": "7.8.4", + "undici": "8.5.0", + "which": "7.0.0", "wrap-ansi": "10.0.0", "xpath": "0.0.34", - "yauzl": "3.3.0" + "yauzl": "3.4.0" }, "devDependencies": { - "@reporters/github": "1.13.1", - "@vitest/coverage-istanbul": "4.1.5", + "@reporters/github": "2.0.1", + "@vitest/coverage-v8": "4.1.9", "c8": "11.0.0", "glob": "13.0.6", "globals": "17.6.0", "memory-streams": "0.1.3", - "oxlint": "1.63.0", - "proxy": "4.0.0" + "oxlint": "1.70.0", + "proxy": "4.1.0", + "vitest": "4.1.9" }, "license": "Apache-2.0", "bin": { @@ -54,12 +55,11 @@ "./src" ], "scripts": { - "coverage": "node scripts/test.js --coverage", + "coverage": "vitest --coverage", "lint": "oxlint", - "test": "node scripts/test.js", - "test-only": "node scripts/test.js --only" + "test": "vitest" }, "engines": { - "node": ">=20.18.1" + "node": ">=22.19.0" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bff0b84b7..bf8df5beb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,14 +15,14 @@ importers: specifier: 5.6.2 version: 5.6.2 commander: - specifier: 14.0.3 - version: 14.0.3 + specifier: 15.0.0 + version: 15.0.0 execa: specifier: 9.6.1 version: 9.6.1 fs-extra: - specifier: 11.3.4 - version: 11.3.4 + specifier: 11.3.5 + version: 11.3.5 pretty-bytes: specifier: 7.1.0 version: 7.1.0 @@ -30,14 +30,14 @@ importers: specifier: 2.4.2 version: 2.4.2 semver: - specifier: 7.7.4 - version: 7.7.4 + specifier: 7.8.4 + version: 7.8.4 undici: - specifier: 8.0.2 - version: 8.0.2 + specifier: 8.5.0 + version: 8.5.0 which: - specifier: 6.0.1 - version: 6.0.1 + specifier: 7.0.0 + version: 7.0.0 wrap-ansi: specifier: 10.0.0 version: 10.0.0 @@ -45,15 +45,15 @@ importers: specifier: 0.0.34 version: 0.0.34 yauzl: - specifier: 3.3.0 - version: 3.3.0 + specifier: 3.4.0 + version: 3.4.0 devDependencies: '@reporters/github': - specifier: 1.13.1 - version: 1.13.1 - '@vitest/coverage-istanbul': - specifier: 4.1.5 - version: 4.1.5(vitest@1.4.0) + specifier: 2.0.1 + version: 2.0.1 + '@vitest/coverage-v8': + specifier: 4.1.9 + version: 4.1.9(vitest@4.1.9) c8: specifier: 11.0.0 version: 11.0.0 @@ -67,253 +67,63 @@ importers: specifier: 0.1.3 version: 0.1.3 oxlint: - specifier: 1.63.0 - version: 1.63.0 + specifier: 1.70.0 + version: 1.70.0 proxy: - specifier: 4.0.0 - version: 4.0.0 + specifier: 4.1.0 + version: 4.1.0 + vitest: + specifier: 4.1.9 + version: 4.1.9(@vitest/coverage-v8@4.1.9)(vite@8.0.16) packages: - '@actions/core@2.0.3': - resolution: {integrity: sha512-Od9Thc3T1mQJYddvVPM4QGiLUewdh+3txmDYHHxoNdkqysR1MbCT+rFOtNUxYAz+7+6RIsqipVahY2GJqGPyxA==} - - '@actions/exec@2.0.0': - resolution: {integrity: sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw==} - - '@actions/http-client@3.0.2': - resolution: {integrity: sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==} - - '@actions/io@2.0.0': - resolution: {integrity: sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==} - - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} - engines: {node: '>=6.9.0'} + '@actions/core@3.0.1': + resolution: {integrity: sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==} - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@actions/exec@3.0.0': + resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} + '@actions/http-client@4.0.1': + resolution: {integrity: sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} + '@actions/io@3.0.2': + resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} '@istanbuljs/schema@0.1.6': resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} engines: {node: '>=8'} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -324,297 +134,305 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@oxlint/binding-android-arm-eabi@1.63.0': - resolution: {integrity: sha512-A9xLtQt7i0OA1PoB/meog6kikXI9CdwEp7ZwQqmgnpKn3G3b1orvTDy8CQ6T7w1HvDrgWGB78PkFKcWgibcTCg==} + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + + '@oxlint/binding-android-arm-eabi@1.70.0': + resolution: {integrity: sha512-zFh0P4cswmRvw6nkyb89dr18rRanuaCPAsEXsFDoQY8WdaquI8Pt4NWFjaMJg6L23cy5NeN8J9cBnREbWzZhaw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.63.0': - resolution: {integrity: sha512-SQo+ZMvdR9l3CxZp5W5gFNxSiDxclY6lOzzNpKYLF8asESpm3Pwumx0gER5T7aHLF1/2BAAtLD3DiDkdgy4V1A==} + '@oxlint/binding-android-arm64@1.70.0': + resolution: {integrity: sha512-qI8o4HZjeGiBrWv+pJv4lH0Yi2Gl/JSp/EumBUApezJprIKa5PS4nU0lQsQngtky8k+SplQIOjv6hwu0SSxeyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.63.0': - resolution: {integrity: sha512-6W82XjJDTmMnjg30427l0dufpnyLoq7wEukKdM6/g2VIybRVuQiBVh43EA4b+UxZ3+tLcKm+Or/pXGNgLCEU8g==} + '@oxlint/binding-darwin-arm64@1.70.0': + resolution: {integrity: sha512-8KjgVVHI5F9nVwHCRwwA78Ty7zNKP4Wd9OeN5PSv3iu/F/u1RVXoOCgLhWqust6HmwQG6xc8c+RCyaWENy24+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.63.0': - resolution: {integrity: sha512-CnWd/YCuVG5W1BYkjJEVbJG11o526O9qAwBEQM+nh8K19CRFUkFdROXCyYkGmroHEYQe4vgQ6+lh3550Lp35Xw==} + '@oxlint/binding-darwin-x64@1.70.0': + resolution: {integrity: sha512-WVydssv5PSUBXFJTdNBWlmGkbNmvPGaFt/2SUT/EZRB6bq6bEOHmMlbnupZD5jmlEvi9+mZJHi8TCw15lyfSfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.63.0': - resolution: {integrity: sha512-a4eZAqrmtajqcxfdAzC+l7g3PaE3V8hpAYqqeD3fTxLXOMFdK3eNTZrU80n4dDEVm0JXy1aL5PqvqWldBl6zYA==} + '@oxlint/binding-freebsd-x64@1.70.0': + resolution: {integrity: sha512-hJucmUf8OlinHNb1R7fI4Fw6WsAstOz7i8nmkWQfiHoZXtbufNm+MxiDTIMk1ggh2Ro4vLzgQ+bKvRY54MZoRA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.63.0': - resolution: {integrity: sha512-tYUtU9TdbU3uXF5D62g5zXJ13iniFGhXQx5vp9cyEjGdbSAY3VdFBSaldYvyoDmgMZ0ZYuwQP1Y4t2Fhejwa0w==} + '@oxlint/binding-linux-arm-gnueabihf@1.70.0': + resolution: {integrity: sha512-1BnS7wbCYDSXwWzJJ+mc3NURoha6m6m6RT5c6vgAY3oz7C3OVXP+S0awo2mRq97arrJkVvO3qRQfyAHL+76xtQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.63.0': - resolution: {integrity: sha512-I5r3twFf776UZg9dmRo2xbrKt00tTkORXEVe0ctg4vdTkQvJAjiCHxnbAU2HL1AiJ9cqADA76MAliuilsAWnvg==} + '@oxlint/binding-linux-arm-musleabihf@1.70.0': + resolution: {integrity: sha512-yKy/UdbR55+M2yEcuiV5DCNC/gdQAjr/GioUy50QwBzSrKm8ueWADqyRLS9Xk+qjNeCYGg6A8FvUBds56ttfqg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.63.0': - resolution: {integrity: sha512-t7ltUkg6FFh4b564QyGir8xIj/QZbXu8FlcRkcyW9+ztr/mfRHlvUOFd95pJCXi9s/L5DrUeWWgpXRS+V+6igQ==} + '@oxlint/binding-linux-arm64-gnu@1.70.0': + resolution: {integrity: sha512-0A5XJ4alvmqFUFP/4oYSyaO+qLto/HrKEWTSaegiVl+HOufFngK2BjYw9x4RbwBt/du5QG6l5q1zeWiJYYG5yg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.63.0': - resolution: {integrity: sha512-Q5mmZy/XWjuYFUuQyYjOvZ5U/JkKEwnpir6hGxhh6HcdP0V/BKxLo8dqkfF/t7r7AguB17dfS/8+go5AQDRR6g==} + '@oxlint/binding-linux-arm64-musl@1.70.0': + resolution: {integrity: sha512-JiylyurlB0CLSedNtx1gzv3FvfWPF1h/2Y3BJszPLNt5XQFlBsH5ke0Jle3iJb3uqu5m2e7A/DwzpuCAHdiU+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] - '@oxlint/binding-linux-ppc64-gnu@1.63.0': - resolution: {integrity: sha512-uBGtuZ0TzLB4x5wVa82HGNvYqY8buwDhyCnCP0R0gkk9szqVsP0MeTtD5HX7EsEuFIt+aYmYxuxeVxs3nTSwtQ==} + '@oxlint/binding-linux-ppc64-gnu@1.70.0': + resolution: {integrity: sha512-J8VPG7I3/HmgaU4u8pNU2kFx2+0U+vPLS1dXFxXOaR/2TQ0f8AC7DRz0SRGRI1bfphnX2hVYTTtLuhL4nYKL+Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.63.0': - resolution: {integrity: sha512-h4s6FwxE+9MeA181o0dnDwHP32Y/bG8EiB/vrD6Ib+AMt6haigDc/0bUtI/sLmQDBMJnUfaCmtSSrEAqjtEVrA==} + '@oxlint/binding-linux-riscv64-gnu@1.70.0': + resolution: {integrity: sha512-N2+4lV2KLN+oXTIIIwmWDhwkrnvqf5oX7Hw0zPjk+RuIVgiBQSOlJWF7uQoFx2siEYX0ZQ5cfSbEAHm+J3t7Wg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.63.0': - resolution: {integrity: sha512-2EaNcCBR8Mcjl5ARtuN3BdEpVkX7KpjSjMGZ/mJMIeaXgTtdz5ytg2VwygMSStA/k0ixfvZFoZOfjDEcouV5vQ==} + '@oxlint/binding-linux-riscv64-musl@1.70.0': + resolution: {integrity: sha512-1e2L7cFCvx9QDzq6NPP+0tABKb5z6nWHyddWTNKprEsjO9xNrAtPowuCGpjNXxkTdsMiZ4jc8YQ5SstZd4XK6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.63.0': - resolution: {integrity: sha512-p4hlf/fd7TrYYl3QrWWD0GocqJefwMu3cHQhmi2FvEB/YOvFb5DZN3SMBaPi7B1TM5DeypkEtrVib674q1KKPg==} + '@oxlint/binding-linux-s390x-gnu@1.70.0': + resolution: {integrity: sha512-Kwu/l/8GcYibCWA9m9N5pRXMIKVSsL/YbgpLzYkqDhWTiqdRfnNJ/+nqIKRKQiFbHWsdlHEhzMwruJK+qcEruA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.63.0': - resolution: {integrity: sha512-Vgq9rkRVcPcjbcH+ihYTfpeR7vCXfqpd+z5ItTGc0yYUV59L5ceHYN1iV4H9bKGV7Rn5hkVc7x3mSvHegduENA==} + '@oxlint/binding-linux-x64-gnu@1.70.0': + resolution: {integrity: sha512-tap04CsHYOl0nSAQJfPNIuBxqEPB2HnhQqwaOXLg1jnp2XfRo8Fa814dA4QC4zpvTWXCjAAaCY1W5LOORkEQuQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.63.0': - resolution: {integrity: sha512-3/Lkq/ncooA61rorrC+ZQed1Bc4VpGj+WnGsp58zmxKgvZ2vhreu+dcVyr3mX8NUpq7mfZ4gDDTou/yrF1Pd7A==} + '@oxlint/binding-linux-x64-musl@1.70.0': + resolution: {integrity: sha512-hzJa/WgvtJpbBD9rgfy0qe+MjbxOXNUT0bfR1S6EQQzfTtBFA9xg5q8KSwRrQ2QfSS+TaP4j+4mVPQrfNc6UNg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] - '@oxlint/binding-openharmony-arm64@1.63.0': - resolution: {integrity: sha512-0/EdD/6hDkx5Mfd769PTjvEM8mZ/6Dfukp1dBCL/2PjlIVGEtYdNZyok6ChqYPsT9JcFnlQnUeQzO0/1L/oC9w==} + '@oxlint/binding-openharmony-arm64@1.70.0': + resolution: {integrity: sha512-xbsaNSNzVSnaJACCUYr1HQMyY/Q/Q1LkePmHG3UvZPvGCYGNxrsZp9OmtA6ick8xH47ltRRbRrPCM1YXYcyC+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.63.0': - resolution: {integrity: sha512-wb0CUkN8ngwPiRQBjD1Cj0LsHeNvm+Xt6YBHDMtj2DVQVD6Oj8Ri7g6BD+KICf6LaBqZlmzOvy6nF9E/8yyGOg==} + '@oxlint/binding-win32-arm64-msvc@1.70.0': + resolution: {integrity: sha512-icAEsUI7JbW1TMRdEXV83mVAInhRVQYuuAlPpxdGwJ95chNdnCzjloRW8GglT0WvzOEZSio6fnYSk2DJ2Hv7LQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.63.0': - resolution: {integrity: sha512-BX5iq+ovdNlVYhSn5qPMUIT0uwAwt2lmEnCnzK+Gkhw4DovIvhGb96OFhV8yzQNUnQxn/xGkOR+X+BLrLDNm8w==} + '@oxlint/binding-win32-ia32-msvc@1.70.0': + resolution: {integrity: sha512-FHMSWbVsPVs/f+Jcl04ws4JJ2wUnauyTzlpxWRG/lSO/8GpX08Fo2gQZqdA6CrRFI+zvkxl+N/KwJGWfUwYVZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.63.0': - resolution: {integrity: sha512-QeN/WELOfsXMeYwxvfgQrl6CbVftYUCZsGXHjXQd5Trccm8+i4gmtxaOui4xbJQaiDlviF8F3yLSBloQUeFsfA==} + '@oxlint/binding-win32-x64-msvc@1.70.0': + resolution: {integrity: sha512-ptOlKwCz7n4AKs5VweMqG6DAg677FmKOK+vBkkL9DMNgFATIQ+upqUYBTOEwRQyRAx1ncGlPlXleV2hIcm3z4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@reporters/github@1.13.1': - resolution: {integrity: sha512-+wZhzw6ZGUCnaiiKSO0mX0VdiMtO9f4CcnnbHMbP1Ad0xt0ySGcOpRNopMgzFKQKxZgElfiKczfB2P87cqAgWQ==} + '@reporters/github@2.0.1': + resolution: {integrity: sha512-bOrxLp0b763IQ+Mv3RqxPxUQA94KgAig88zY0W+A42wx8wBX2w5p9ZEQEcHV2fZvj7PGR8Rh0mw8aReRj3XEpw==} - '@rollup/rollup-android-arm-eabi@4.60.3': - resolution: {integrity: sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.60.3': - resolution: {integrity: sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==} + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.3': - resolution: {integrity: sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==} + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.3': - resolution: {integrity: sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==} + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.3': - resolution: {integrity: sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.60.3': - resolution: {integrity: sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==} + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.3': - resolution: {integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.60.3': - resolution: {integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.60.3': - resolution: {integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==} + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.3': - resolution: {integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==} + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.3': - resolution: {integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-loong64-musl@4.60.3': - resolution: {integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.60.3': - resolution: {integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-musl@4.60.3': - resolution: {integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==} + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.60.3': - resolution: {integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.60.3': - resolution: {integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.60.3': - resolution: {integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==} + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.3': - resolution: {integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==} + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.3': - resolution: {integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==} + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.3': - resolution: {integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.60.3': - resolution: {integrity: sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==} + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.3': - resolution: {integrity: sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==} - cpu: [arm64] - os: [win32] + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] - '@rollup/rollup-win32-ia32-msvc@4.60.3': - resolution: {integrity: sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==} - cpu: [ia32] + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.3': - resolution: {integrity: sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==} + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.3': - resolution: {integrity: sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==} - cpu: [x64] - os: [win32] + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@sinclair/typebox@0.27.10': - resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} - '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - '@vitest/coverage-istanbul@4.1.5': - resolution: {integrity: sha512-X4kQMDEWh9mA0IiLuigtdYv4kXe+W8KLTbucoz15lbyZRPAxT5l+hu0JizI7Am050+G9vQnB7QJNgYi2LnwV4w==} + '@vitest/coverage-v8@4.1.9': + resolution: {integrity: sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==} peerDependencies: - vitest: 4.1.5 + '@vitest/browser': 4.1.9 + vitest: 4.1.9 + peerDependenciesMeta: + '@vitest/browser': + optional: true - '@vitest/expect@1.4.0': - resolution: {integrity: sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==} + '@vitest/expect@4.1.9': + resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} - '@vitest/runner@1.4.0': - resolution: {integrity: sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==} + '@vitest/mocker@4.1.9': + resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.9': + resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} - '@vitest/snapshot@1.4.0': - resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==} + '@vitest/runner@4.1.9': + resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} - '@vitest/spy@1.4.0': - resolution: {integrity: sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==} + '@vitest/snapshot@4.1.9': + resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} - '@vitest/utils@1.4.0': - resolution: {integrity: sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==} + '@vitest/spy@4.1.9': + resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} + + '@vitest/utils@4.1.9': + resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} '@xmldom/xmldom@0.9.10': resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==} engines: {node: '>=14.6'} - acorn-walk@8.3.5: - resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} - engines: {node: '>=0.4.0'} - - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -631,10 +449,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -643,33 +457,21 @@ packages: resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} engines: {node: '>= 6.0.0'} - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-v8-to-istanbul@1.0.4: + resolution: {integrity: sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA==} balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.20: - resolution: {integrity: sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - basic-auth-parser@0.0.2-1: - resolution: {integrity: sha512-GFj8iVxo9onSU6BnnQvVwqvxh60UcSHJEDnIk3z4B6iOjsKSmqe+ibW0Rsz7YO7IE1HG3D3tqCNIidP46SZVdQ==} - - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} - browserslist@4.28.2: - resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - c8@11.0.0: resolution: {integrity: sha512-e/uRViGHSVIJv7zsaDKM7VRn2390TgHXqUSvYwPHBQaU6L7E9L0n9JbdkwdYPvshDT0KymBmmlwSpms3yBaMNg==} engines: {node: 20 || >=22} @@ -680,20 +482,13 @@ packages: monocart-coverage-reports: optional: true - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - camelcase@5.0.0: resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} engines: {node: '>=6'} - caniuse-lite@1.0.30001788: - resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} - - chai@4.5.0: - resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} - engines: {node: '>=4'} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -703,9 +498,6 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -723,12 +515,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commander@14.0.3: - resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} - engines: {node: '>=20'} - - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + commander@15.0.0: + resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} + engines: {node: '>=22.12.0'} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -749,24 +538,15 @@ packages: supports-color: optional: true - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} - engines: {node: '>=6'} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - electron-to-chromium@1.5.343: - resolution: {integrity: sha512-YHnQ3MXI08icvL9ZKnEBy05F2EQ8ob01UaMOuMbM8l+4UcAq6MPPbBTJBbsBUg3H8JeZNt+O4fjsoWth3p6IFg==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} @@ -783,14 +563,23 @@ packages: estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - execa@9.6.1: resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} @@ -803,8 +592,8 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - fs-extra@11.3.4: - resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} + fs-extra@11.3.5: + resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} fsevents@2.3.3: @@ -812,25 +601,14 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-stream@9.0.1: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} @@ -857,10 +635,6 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - human-signals@8.0.1: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} @@ -876,10 +650,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-stream@4.0.1: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} @@ -910,24 +680,11 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} @@ -937,29 +694,93 @@ packages: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} engines: {node: '>=0.10.0'} - local-pkg@0.5.1: - resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} - engines: {node: '>=14'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} engines: {node: 20 || >=22} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.2: - resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -968,13 +789,6 @@ packages: memory-streams@0.1.3: resolution: {integrity: sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -983,9 +797,6 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - mlly@1.8.2: - resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} - mri@1.1.4: resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} engines: {node: '>=4'} @@ -998,42 +809,31 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - node-releases@2.0.37: - resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} - - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - oxlint@1.63.0: - resolution: {integrity: sha512-9TGXetdjgIHOJ9OiReomP7nnrMkV9HxC1xM2ramJSLQpzxjsAJtQwa4wqkJN2f/uCrqZuJseFuSlWDdvcruveg==} + oxlint@1.70.0: + resolution: {integrity: sha512-D6JgHtzkhRwvEC+A0Nw5AEc5bk8x5i1pHzvZIEf/a0C4hOzmAACNGtkDGPyFaxxX3ZVGxCPeig3P3rMM8XU3/g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: oxlint-tsgolint: '>=0.22.1' + vite-plus: '*' peerDependenciesMeta: oxlint-tsgolint: optional: true + vite-plus: + optional: true p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -1058,36 +858,27 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} - postcss@8.5.14: - resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} pretty-bytes@7.1.0: resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} engines: {node: '>=20'} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-ms@9.3.0: resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} @@ -1096,14 +887,11 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - proxy@4.0.0: - resolution: {integrity: sha512-qYi7N3kisRTQW0Y13JL0upO8e9mVLpu4yuxrXvWzCsaJVA9yqVF+iQkC/rCdnx2lGPQhC+qjefWSY7M6SHclhQ==} + proxy@4.1.0: + resolution: {integrity: sha512-X3gqRNkp5dLWQolWksIfFSltI0ls8oQ01+tckxnPoz3bQ5+OUsdE7bwX/i/Q3TDEG4gx2PQjc3D07dIx90CQdg==} engines: {node: '>= 20'} hasBin: true - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - readable-stream@1.0.34: resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} @@ -1111,17 +899,13 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - rollup@4.60.3: - resolution: {integrity: sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} engines: {node: '>=10'} hasBin: true @@ -1154,15 +938,15 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@8.2.0: - resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} engines: {node: '>=20'} string_decoder@0.10.31: @@ -1172,21 +956,14 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-final-newline@4.0.0: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} - strip-literal@2.1.1: - resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -1202,35 +979,31 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinypool@0.8.4: - resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} - engines: {node: '>=14.0.0'} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} - tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} - engines: {node: '>=14.0.0'} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - type-detect@4.1.0: - resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} - engines: {node: '>=4'} - - ufo@1.6.4: - resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} - - undici@6.25.0: - resolution: {integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==} + undici@6.27.0: + resolution: {integrity: sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==} engines: {node: '>=18.17'} - undici@8.0.2: - resolution: {integrity: sha512-B9MeU5wuFhkFAuNeA19K2GDFcQXZxq33fL0nRy2Aq30wdufZbyyvxW3/ChaeipXVfy/wUweZyzovQGk39+9k2w==} + undici@8.5.0: + resolution: {integrity: sha512-xamtWoB1EshgjpmlXd7GGm2VfdDtw1+rD8uhry8pSNW3If6S8E0m2T2+orSKeZXEn/aPJMviCpDBA65WJt8zhg==} engines: {node: '>=22.19.0'} unicorn-magic@0.3.0: @@ -1241,41 +1014,38 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} - vite-node@1.4.0: - resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - vite@5.4.21: - resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@8.0.16: + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -1286,24 +1056,44 @@ packages: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true - vitest@1.4.0: - resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@4.1.9: + resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.4.0 - '@vitest/ui': 1.4.0 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.9 + '@vitest/browser-preview': 4.1.9 + '@vitest/browser-webdriverio': 4.1.9 + '@vitest/coverage-istanbul': 4.1.9 + '@vitest/coverage-v8': 4.1.9 + '@vitest/ui': 4.1.9 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@opentelemetry/api': + optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': optional: true '@vitest/ui': optional: true @@ -1317,9 +1107,9 @@ packages: engines: {node: '>= 8'} hasBin: true - which@6.0.1: - resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} - engines: {node: ^20.17.0 || >=22.9.0} + which@7.0.0: + resolution: {integrity: sha512-RancgH2dmbLdHl6LRhEqvklWMgl/Hdnun0Y90KhBOLkMefg8Qa7/Zel8Sm+8HEcP6DEjzsWzpkuBQEZok58isA==} + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} hasBin: true why-is-node-running@2.3.0: @@ -1343,9 +1133,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -1354,229 +1141,69 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@3.3.0: - resolution: {integrity: sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==} + yauzl@3.4.0: + resolution: {integrity: sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==} engines: {node: '>=12'} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.2: - resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} - engines: {node: '>=12.20'} - yoctocolors@2.1.2: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} snapshots: - '@actions/core@2.0.3': + '@actions/core@3.0.1': dependencies: - '@actions/exec': 2.0.0 - '@actions/http-client': 3.0.2 + '@actions/exec': 3.0.0 + '@actions/http-client': 4.0.1 - '@actions/exec@2.0.0': + '@actions/exec@3.0.0': dependencies: - '@actions/io': 2.0.0 + '@actions/io': 3.0.2 - '@actions/http-client@3.0.2': + '@actions/http-client@4.0.1': dependencies: tunnel: 0.0.6 - undici: 6.25.0 - - '@actions/io@2.0.0': {} - - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.0': {} - - '@babel/core@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.1': - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.28.6': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-module-imports@7.28.6': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} + undici: 6.27.0 - '@babel/helpers@7.29.2': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@actions/io@3.0.2': {} - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 + '@babel/helper-string-parser@7.29.7': {} - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/traverse@7.29.0': + '@babel/parser@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.29.7 - '@babel/types@7.29.0': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 '@bcoe/v8-coverage@1.0.2': {} - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 optional: true - '@esbuild/win32-ia32@0.21.5': + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 optional: true - '@esbuild/win32-x64@0.21.5': + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 optional: true - '@istanbuljs/schema@0.1.3': {} - '@istanbuljs/schema@0.1.6': {} - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.10 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.5': {} @@ -1586,205 +1213,206 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@oxlint/binding-android-arm-eabi@1.63.0': - optional: true - - '@oxlint/binding-android-arm64@1.63.0': - optional: true - - '@oxlint/binding-darwin-arm64@1.63.0': + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 optional: true - '@oxlint/binding-darwin-x64@1.63.0': - optional: true + '@oxc-project/types@0.133.0': {} - '@oxlint/binding-freebsd-x64@1.63.0': + '@oxlint/binding-android-arm-eabi@1.70.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.63.0': + '@oxlint/binding-android-arm64@1.70.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.63.0': + '@oxlint/binding-darwin-arm64@1.70.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.63.0': + '@oxlint/binding-darwin-x64@1.70.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.63.0': + '@oxlint/binding-freebsd-x64@1.70.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.63.0': + '@oxlint/binding-linux-arm-gnueabihf@1.70.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.63.0': + '@oxlint/binding-linux-arm-musleabihf@1.70.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.63.0': + '@oxlint/binding-linux-arm64-gnu@1.70.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.63.0': + '@oxlint/binding-linux-arm64-musl@1.70.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.63.0': + '@oxlint/binding-linux-ppc64-gnu@1.70.0': optional: true - '@oxlint/binding-linux-x64-musl@1.63.0': + '@oxlint/binding-linux-riscv64-gnu@1.70.0': optional: true - '@oxlint/binding-openharmony-arm64@1.63.0': + '@oxlint/binding-linux-riscv64-musl@1.70.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.63.0': + '@oxlint/binding-linux-s390x-gnu@1.70.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.63.0': + '@oxlint/binding-linux-x64-gnu@1.70.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.63.0': + '@oxlint/binding-linux-x64-musl@1.70.0': optional: true - '@reporters/github@1.13.1': - dependencies: - '@actions/core': 2.0.3 - stack-utils: 2.0.6 - - '@rollup/rollup-android-arm-eabi@4.60.3': + '@oxlint/binding-openharmony-arm64@1.70.0': optional: true - '@rollup/rollup-android-arm64@4.60.3': + '@oxlint/binding-win32-arm64-msvc@1.70.0': optional: true - '@rollup/rollup-darwin-arm64@4.60.3': + '@oxlint/binding-win32-ia32-msvc@1.70.0': optional: true - '@rollup/rollup-darwin-x64@4.60.3': + '@oxlint/binding-win32-x64-msvc@1.70.0': optional: true - '@rollup/rollup-freebsd-arm64@4.60.3': - optional: true + '@reporters/github@2.0.1': + dependencies: + '@actions/core': 3.0.1 + stack-utils: 2.0.6 - '@rollup/rollup-freebsd-x64@4.60.3': + '@rolldown/binding-android-arm64@1.0.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.3': + '@rolldown/binding-darwin-arm64@1.0.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.3': + '@rolldown/binding-darwin-x64@1.0.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.3': + '@rolldown/binding-freebsd-x64@1.0.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.3': + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.3': + '@rolldown/binding-linux-arm64-gnu@1.0.3': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.3': + '@rolldown/binding-linux-arm64-musl@1.0.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.3': + '@rolldown/binding-linux-ppc64-gnu@1.0.3': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.3': + '@rolldown/binding-linux-s390x-gnu@1.0.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.3': + '@rolldown/binding-linux-x64-gnu@1.0.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.3': + '@rolldown/binding-linux-x64-musl@1.0.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.3': + '@rolldown/binding-openharmony-arm64@1.0.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.3': + '@rolldown/binding-wasm32-wasi@1.0.3': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rollup/rollup-linux-x64-musl@4.60.3': + '@rolldown/binding-win32-arm64-msvc@1.0.3': optional: true - '@rollup/rollup-openbsd-x64@4.60.3': + '@rolldown/binding-win32-x64-msvc@1.0.3': optional: true - '@rollup/rollup-openharmony-arm64@4.60.3': - optional: true + '@rolldown/pluginutils@1.0.1': {} - '@rollup/rollup-win32-arm64-msvc@4.60.3': - optional: true + '@sec-ant/readable-stream@0.4.1': {} - '@rollup/rollup-win32-ia32-msvc@4.60.3': - optional: true + '@sindresorhus/merge-streams@4.0.0': {} - '@rollup/rollup-win32-x64-gnu@4.60.3': - optional: true + '@standard-schema/spec@1.1.0': {} - '@rollup/rollup-win32-x64-msvc@4.60.3': + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 optional: true - '@sec-ant/readable-stream@0.4.1': {} - - '@sinclair/typebox@0.27.10': {} + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 - '@sindresorhus/merge-streams@4.0.0': {} + '@types/deep-eql@4.0.2': {} - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} '@types/istanbul-lib-coverage@2.0.6': {} - '@vitest/coverage-istanbul@4.1.5(vitest@1.4.0)': + '@vitest/coverage-v8@4.1.9(vitest@4.1.9)': dependencies: - '@babel/core': 7.29.0 - '@istanbuljs/schema': 0.1.6 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.1.9 + ast-v8-to-istanbul: 1.0.4 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.2 - obug: 2.1.1 + magicast: 0.5.3 + obug: 2.1.3 + std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 1.4.0 - transitivePeerDependencies: - - supports-color + vitest: 4.1.9(@vitest/coverage-v8@4.1.9)(vite@8.0.16) - '@vitest/expect@1.4.0': + '@vitest/expect@4.1.9': dependencies: - '@vitest/spy': 1.4.0 - '@vitest/utils': 1.4.0 - chai: 4.5.0 + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + chai: 6.2.2 + tinyrainbow: 3.1.0 - '@vitest/runner@1.4.0': + '@vitest/mocker@4.1.9(vite@8.0.16)': dependencies: - '@vitest/utils': 1.4.0 - p-limit: 5.0.0 - pathe: 1.1.2 + '@vitest/spy': 4.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.16 - '@vitest/snapshot@1.4.0': + '@vitest/pretty-format@4.1.9': dependencies: - magic-string: 0.30.21 - pathe: 1.1.2 - pretty-format: 29.7.0 + tinyrainbow: 3.1.0 - '@vitest/spy@1.4.0': + '@vitest/runner@4.1.9': dependencies: - tinyspy: 2.2.1 + '@vitest/utils': 4.1.9 + pathe: 2.0.3 - '@vitest/utils@1.4.0': + '@vitest/snapshot@4.1.9': dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 + '@vitest/pretty-format': 4.1.9 + '@vitest/utils': 4.1.9 + magic-string: 0.30.21 + pathe: 2.0.3 - '@xmldom/xmldom@0.9.10': {} + '@vitest/spy@4.1.9': {} - acorn-walk@8.3.5: + '@vitest/utils@4.1.9': dependencies: - acorn: 8.16.0 + '@vitest/pretty-format': 4.1.9 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 - acorn@8.16.0: {} + '@xmldom/xmldom@0.9.10': {} ansi-regex@5.0.1: {} @@ -1798,8 +1426,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.3: {} args@5.0.3: @@ -1809,32 +1435,24 @@ snapshots: leven: 2.1.0 mri: 1.1.4 - assertion-error@1.1.0: {} - - balanced-match@4.0.4: {} + assertion-error@2.0.1: {} - baseline-browser-mapping@2.10.20: {} + ast-v8-to-istanbul@1.0.4: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 - basic-auth-parser@0.0.2-1: {} + balanced-match@4.0.4: {} - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 - browserslist@4.28.2: - dependencies: - baseline-browser-mapping: 2.10.20 - caniuse-lite: 1.0.30001788 - electron-to-chromium: 1.5.343 - node-releases: 2.0.37 - update-browserslist-db: 1.2.3(browserslist@4.28.2) - - buffer-crc32@0.2.13: {} - c8@11.0.0: dependencies: '@bcoe/v8-coverage': 1.0.2 - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 find-up: 5.0.0 foreground-child: 3.3.1 istanbul-lib-coverage: 3.2.2 @@ -1845,21 +1463,9 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 - cac@6.7.14: {} - camelcase@5.0.0: {} - caniuse-lite@1.0.30001788: {} - - chai@4.5.0: - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.1.0 + chai@6.2.2: {} chalk@2.4.2: dependencies: @@ -1869,10 +1475,6 @@ snapshots: chalk@5.6.2: {} - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -1891,9 +1493,7 @@ snapshots: color-name@1.1.4: {} - commander@14.0.3: {} - - confbox@0.1.8: {} + commander@15.0.0: {} convert-source-map@2.0.0: {} @@ -1909,41 +1509,11 @@ snapshots: dependencies: ms: 2.1.3 - deep-eql@4.1.4: - dependencies: - type-detect: 4.1.0 - - diff-sequences@29.6.3: {} - - electron-to-chromium@1.5.343: {} + detect-libc@2.1.2: {} emoji-regex@8.0.0: {} - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + es-module-lexer@2.1.0: {} escalade@3.2.0: {} @@ -1953,19 +1523,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 - - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 + '@types/estree': 1.0.9 execa@9.6.1: dependencies: @@ -1982,6 +1540,12 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.2 + expect-type@1.3.0: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 @@ -1996,24 +1560,18 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fs-extra@11.3.4: + fs-extra@11.3.5: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fsevents@2.3.3: optional: true - gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} - - get-func-name@2.0.2: {} - - get-stream@8.0.1: {} + get-east-asian-width@1.6.0: {} get-stream@9.0.1: dependencies: @@ -2036,8 +1594,6 @@ snapshots: html-escaper@2.0.2: {} - human-signals@5.0.0: {} - human-signals@8.0.1: {} inherits@2.0.4: {} @@ -2046,8 +1602,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-stream@3.0.0: {} - is-stream@4.0.1: {} is-unicode-supported@2.1.0: {} @@ -2071,15 +1625,9 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - js-tokens@4.0.0: {} - - js-tokens@9.0.1: {} + js-tokens@10.0.0: {} - jsesc@3.1.0: {} - - json5@2.2.3: {} - - jsonfile@6.2.0: + jsonfile@6.2.1: dependencies: universalify: 2.0.1 optionalDependencies: @@ -2089,113 +1637,124 @@ snapshots: leven@2.1.0: {} - local-pkg@0.5.1: + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: dependencies: - mlly: 1.8.2 - pkg-types: 1.3.1 + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 locate-path@6.0.0: dependencies: p-locate: 5.0.0 - loupe@2.3.7: - dependencies: - get-func-name: 2.0.2 - - lru-cache@11.2.6: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 + lru-cache@11.5.1: {} magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.2: + magicast@0.5.3: dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 source-map-js: 1.2.1 make-dir@4.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.4 memory-streams@0.1.3: dependencies: readable-stream: 1.0.34 - merge-stream@2.0.0: {} - - mimic-fn@4.0.0: {} - minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minipass@7.1.3: {} - mlly@1.8.2: - dependencies: - acorn: 8.16.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.4 - mri@1.1.4: {} ms@2.1.3: {} nanoid@3.3.12: {} - node-releases@2.0.37: {} - - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - npm-run-path@6.0.0: dependencies: path-key: 4.0.0 unicorn-magic: 0.3.0 - obug@2.1.1: {} - - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 + obug@2.1.3: {} - oxlint@1.63.0: + oxlint@1.70.0: optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.63.0 - '@oxlint/binding-android-arm64': 1.63.0 - '@oxlint/binding-darwin-arm64': 1.63.0 - '@oxlint/binding-darwin-x64': 1.63.0 - '@oxlint/binding-freebsd-x64': 1.63.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.63.0 - '@oxlint/binding-linux-arm-musleabihf': 1.63.0 - '@oxlint/binding-linux-arm64-gnu': 1.63.0 - '@oxlint/binding-linux-arm64-musl': 1.63.0 - '@oxlint/binding-linux-ppc64-gnu': 1.63.0 - '@oxlint/binding-linux-riscv64-gnu': 1.63.0 - '@oxlint/binding-linux-riscv64-musl': 1.63.0 - '@oxlint/binding-linux-s390x-gnu': 1.63.0 - '@oxlint/binding-linux-x64-gnu': 1.63.0 - '@oxlint/binding-linux-x64-musl': 1.63.0 - '@oxlint/binding-openharmony-arm64': 1.63.0 - '@oxlint/binding-win32-arm64-msvc': 1.63.0 - '@oxlint/binding-win32-ia32-msvc': 1.63.0 - '@oxlint/binding-win32-x64-msvc': 1.63.0 + '@oxlint/binding-android-arm-eabi': 1.70.0 + '@oxlint/binding-android-arm64': 1.70.0 + '@oxlint/binding-darwin-arm64': 1.70.0 + '@oxlint/binding-darwin-x64': 1.70.0 + '@oxlint/binding-freebsd-x64': 1.70.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.70.0 + '@oxlint/binding-linux-arm-musleabihf': 1.70.0 + '@oxlint/binding-linux-arm64-gnu': 1.70.0 + '@oxlint/binding-linux-arm64-musl': 1.70.0 + '@oxlint/binding-linux-ppc64-gnu': 1.70.0 + '@oxlint/binding-linux-riscv64-gnu': 1.70.0 + '@oxlint/binding-linux-riscv64-musl': 1.70.0 + '@oxlint/binding-linux-s390x-gnu': 1.70.0 + '@oxlint/binding-linux-x64-gnu': 1.70.0 + '@oxlint/binding-linux-x64-musl': 1.70.0 + '@oxlint/binding-openharmony-arm64': 1.70.0 + '@oxlint/binding-win32-arm64-msvc': 1.70.0 + '@oxlint/binding-win32-ia32-msvc': 1.70.0 + '@oxlint/binding-win32-x64-msvc': 1.70.0 p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.2.2 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -2210,26 +1769,18 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.2.6 + lru-cache: 11.5.1 minipass: 7.1.3 - pathe@1.1.2: {} - pathe@2.0.3: {} - pathval@1.1.1: {} - pend@1.2.0: {} picocolors@1.1.1: {} - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.8.2 - pathe: 2.0.3 + picomatch@4.0.4: {} - postcss@8.5.14: + postcss@8.5.15: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -2237,12 +1788,6 @@ snapshots: pretty-bytes@7.1.0: {} - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - pretty-ms@9.3.0: dependencies: parse-ms: 4.0.0 @@ -2252,16 +1797,13 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - proxy@4.0.0: + proxy@4.1.0: dependencies: args: 5.0.3 - basic-auth-parser: 0.0.2-1 debug: 4.4.3 transitivePeerDependencies: - supports-color - react-is@18.3.1: {} - readable-stream@1.0.34: dependencies: core-util-is: 1.0.3 @@ -2271,40 +1813,28 @@ snapshots: require-directory@2.1.1: {} - rollup@4.60.3: + rolldown@1.0.3: dependencies: - '@types/estree': 1.0.8 + '@oxc-project/types': 0.133.0 + '@rolldown/pluginutils': 1.0.1 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.3 - - semver@6.3.1: {} - - semver@7.7.4: {} + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 + + semver@7.8.4: {} shebang-command@2.0.0: dependencies: @@ -2326,7 +1856,7 @@ snapshots: stackback@0.0.2: {} - std-env@3.10.0: {} + std-env@4.1.0: {} string-width@4.2.3: dependencies: @@ -2334,10 +1864,10 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@8.2.0: + string-width@8.2.1: dependencies: - get-east-asian-width: 1.5.0 - strip-ansi: 7.1.2 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 string_decoder@0.10.31: {} @@ -2345,18 +1875,12 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 - strip-final-newline@3.0.0: {} - strip-final-newline@4.0.0: {} - strip-literal@2.1.1: - dependencies: - js-tokens: 9.0.1 - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -2367,107 +1891,82 @@ snapshots: test-exclude@8.0.0: dependencies: - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 glob: 13.0.6 minimatch: 10.2.5 tinybench@2.9.0: {} - tinypool@0.8.4: {} + tinyexec@1.2.4: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tinyrainbow@3.1.0: {} - tinyspy@2.2.1: {} + tslib@2.8.1: + optional: true tunnel@0.0.6: {} - type-detect@4.1.0: {} - - ufo@1.6.4: {} + undici@6.27.0: {} - undici@6.25.0: {} - - undici@8.0.2: {} + undici@8.5.0: {} unicorn-magic@0.3.0: {} universalify@2.0.1: {} - update-browserslist-db@1.2.3(browserslist@4.28.2): - dependencies: - browserslist: 4.28.2 - escalade: 3.2.0 - picocolors: 1.1.1 - v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - vite-node@1.4.0: - dependencies: - cac: 6.7.14 - debug: 4.4.3 - pathe: 1.1.2 - picocolors: 1.1.1 - vite: 5.4.21 - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite@5.4.21: + vite@8.0.16: dependencies: - esbuild: 0.21.5 - postcss: 8.5.14 - rollup: 4.60.3 + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.0.3 + tinyglobby: 0.2.17 optionalDependencies: fsevents: 2.3.3 - vitest@1.4.0: - dependencies: - '@vitest/expect': 1.4.0 - '@vitest/runner': 1.4.0 - '@vitest/snapshot': 1.4.0 - '@vitest/spy': 1.4.0 - '@vitest/utils': 1.4.0 - acorn-walk: 8.3.5 - chai: 4.5.0 - debug: 4.4.3 - execa: 8.0.1 - local-pkg: 0.5.1 + vitest@4.1.9(@vitest/coverage-v8@4.1.9)(vite@8.0.16): + dependencies: + '@vitest/expect': 4.1.9 + '@vitest/mocker': 4.1.9(vite@8.0.16) + '@vitest/pretty-format': 4.1.9 + '@vitest/runner': 4.1.9 + '@vitest/snapshot': 4.1.9 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 magic-string: 0.30.21 - pathe: 1.1.2 - picocolors: 1.1.1 - std-env: 3.10.0 - strip-literal: 2.1.1 + obug: 2.1.3 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 tinybench: 2.9.0 - tinypool: 0.8.4 - vite: 5.4.21 - vite-node: 1.4.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.0.16 why-is-node-running: 2.3.0 + optionalDependencies: + '@vitest/coverage-v8': 4.1.9(vitest@4.1.9) transitivePeerDependencies: - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser + - msw which@2.0.2: dependencies: isexe: 2.0.0 - which@6.0.1: + which@7.0.0: dependencies: isexe: 4.0.0 @@ -2479,8 +1978,8 @@ snapshots: wrap-ansi@10.0.0: dependencies: ansi-styles: 6.2.3 - string-width: 8.2.0 - strip-ansi: 7.1.2 + string-width: 8.2.1 + strip-ansi: 7.2.0 wrap-ansi@7.0.0: dependencies: @@ -2492,8 +1991,6 @@ snapshots: y18n@5.0.8: {} - yallist@3.1.1: {} - yargs-parser@21.1.1: {} yargs@17.7.2: @@ -2506,13 +2003,10 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@3.3.0: + yauzl@3.4.0: dependencies: - buffer-crc32: 0.2.13 pend: 1.2.0 yocto-queue@0.1.0: {} - yocto-queue@1.2.2: {} - yoctocolors@2.1.2: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..5ed0b5af0 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +allowBuilds: + esbuild: true diff --git a/scripts/test.js b/scripts/test.js deleted file mode 100644 index 2541fde45..000000000 --- a/scripts/test.js +++ /dev/null @@ -1,66 +0,0 @@ -import { execa } from 'execa'; -import { glob } from 'glob'; -import { basename, join } from 'node:path'; - -let cover = false; -let only = false; - -const argv = process.argv - .slice(2) - .map(arg => { - if (arg === '--coverage') { - cover = true; - } else if (arg === '--only') { - only = true; - } else { - return arg; - } - }) - .filter(Boolean); - -const args = []; - -if (cover) { - args.push( - join('node_modules', 'c8', 'bin', 'c8.js'), - process.execPath - ); -} - -let tests = await glob([ - './test/**/*.test.js' -]); -tests.sort(); -if (argv.length) { - tests = tests.filter(file => { - const filename = basename(file); - return argv.some(filter => filename.includes(filter)); - }); -} - -if (!tests.length) { - console.error('No tests found'); - process.exit(1); -} - -args.push( - `--test${only ? '-only' : ''}`, - '--test-reporter=@reporters/github', - '--test-reporter-destination=stdout', - '--test-reporter=spec', - '--test-reporter-destination=stdout', - ...tests -); - -console.log(`\n> ${process.execPath} ${args.join(' ')}\n\n`); - -await execa( - process.execPath, - args, - { - env: { - TI_CLI_SKIP_ENV_PATHS: 1 - }, - stdio: 'inherit' - } -); diff --git a/test/cli/hook.test.js b/test/cli/hook.test.js index 104b82f0e..f9a627c89 100644 --- a/test/cli/hook.test.js +++ b/test/cli/hook.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { CLI } from '../../src/cli.js'; import { setTimeout } from 'timers/promises'; @@ -29,14 +28,14 @@ describe('CLI hooks', () => { }); await cli.emit('foo', { count: 2 }); - assert.strictEqual(fooCounter, 2); + expect(fooCounter).toBe(2); await cli.emit('bar'); - assert.strictEqual(barCounter, 1); + expect(barCounter).toBe(1); await cli.emit('baz'); - assert.strictEqual(bazPreCounter, 1); - assert.strictEqual(bazPostCounter, 1); + expect(bazPreCounter).toBe(1); + expect(bazPostCounter).toBe(1); }); it('should fire async event hooks', async () => { @@ -50,7 +49,7 @@ describe('CLI hooks', () => { }); await cli.emit('foo', { count: 2 }); - assert.strictEqual(fooCounter, 2); + expect(fooCounter).toBe(2); let barCounter = 0; @@ -60,7 +59,7 @@ describe('CLI hooks', () => { }); await cli.emit('bar'); - assert.strictEqual(barCounter, 1); + expect(barCounter).toBe(1); }); it('should fire function hooks', async () => { @@ -77,7 +76,7 @@ describe('CLI hooks', () => { cb(); }); await new Promise(resolve => foo(3, resolve)); - assert.strictEqual(fooCounter, 7); + expect(fooCounter).toBe(7); let barCounter = 0; @@ -95,7 +94,7 @@ describe('CLI hooks', () => { cb(9); }); await new Promise(resolve => bar(resolve)); - assert.strictEqual(barCounter, 13); + expect(barCounter).toBe(13); }); it('should fire event hook with a data payload', async () => { @@ -122,6 +121,6 @@ describe('CLI hooks', () => { }); }); - assert.strictEqual(foo.counter, 1); + expect(foo.counter).toBe(1); }); }); diff --git a/test/commands/custom.test.js b/test/commands/custom.test.js index a9233695e..d190452af 100644 --- a/test/commands/custom.test.js +++ b/test/commands/custom.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { initCLI } from '../helpers/init-cli.js'; import { stripColor } from '../helpers/strip-color.js'; import { dirname, join } from 'node:path'; @@ -20,15 +19,15 @@ describe('Custom command', () => { ]); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium/); - assert.match(output, /Commands:/); - assert.match(output, /foo/); - // assert.match(output, /an example of a custom command/); - assert.match(output, /Global Options:/); - assert.match(output, /-h, --help/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium/); + expect(output).toMatch(/Commands:/); + expect(output).toMatch(/foo/); + // expect(output).toMatch(/an example of a custom command/); + expect(output).toMatch(/Global Options:/); + expect(output).toMatch(/-h, --help/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should run custom command', initCLI(async ({ run }) => { @@ -44,9 +43,9 @@ describe('Custom command', () => { ]); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Foo!/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Foo!/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); diff --git a/test/commands/ti-build.test.js b/test/commands/ti-build.test.js index f11485987..7fd9fbf66 100644 --- a/test/commands/ti-build.test.js +++ b/test/commands/ti-build.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { stripColor } from '../helpers/strip-color.js'; import { initMockSDKHome } from '../helpers/init-sdk-home.js'; @@ -8,12 +7,12 @@ describe('ti build', () => { const { exitCode, stdout } = await run(['build', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium build \[options\]/); - assert.match(output, /Builds an existing app or module project./); - assert.match(output, /Build Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium build \[options\]/); + expect(output).toMatch(/Builds an existing app or module project./); + expect(output).toMatch(/Build Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); diff --git a/test/commands/ti-clean.test.js b/test/commands/ti-clean.test.js index d11f6a2fc..281037244 100644 --- a/test/commands/ti-clean.test.js +++ b/test/commands/ti-clean.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { stripColor } from '../helpers/strip-color.js'; import { initMockSDKHome } from '../helpers/init-sdk-home.js'; @@ -8,12 +7,12 @@ describe('ti clean', () => { const { exitCode, stdout } = await run(['clean', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium clean \[options\]/); - assert.match(output, /Removes previous build directories./); - assert.match(output, /Clean Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium clean \[options\]/); + expect(output).toMatch(/Removes previous build directories./); + expect(output).toMatch(/Clean Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); diff --git a/test/commands/ti-config.test.js b/test/commands/ti-config.test.js index 7b7a0d7c2..6ebdedbf3 100644 --- a/test/commands/ti-config.test.js +++ b/test/commands/ti-config.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { initCLI } from '../helpers/init-cli.js'; import { stripColor } from '../helpers/strip-color.js'; import { tmpdir } from 'node:os'; @@ -10,185 +9,185 @@ describe('ti config', () => { const { exitCode, stdout } = await run(['config', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium config \[options\] \[key\] \[value\]/); - assert.match(output, /Config Arguments:/); - assert.match(output, /Config Options:/); - assert.match(output, /Global Options:/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium config \[options\] \[key\] \[value\]/); + expect(output).toMatch(/Config Arguments:/); + expect(output).toMatch(/Config Options:/); + expect(output).toMatch(/Global Options:/); + expect(exitCode).toBe(0); })); it('should show all config settings', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['config']); const output = stripColor(stdout); - assert.match(output, /cli.colors\s+= (?:true|false)/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/cli.colors\s+= (?:true|false)/); + expect(exitCode).toBe(0); })); it('should show all config settings as JSON', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['config', '--json']); const json = JSON.parse(stdout); - assert(Object.hasOwn(json, 'cli')); - assert(Object.hasOwn(json.cli, 'colors')); - assert.strictEqual(exitCode, 0); + expect(Object.hasOwn(json, 'cli')).toBe(true); + expect(Object.hasOwn(json.cli, 'colors')).toBe(true); + expect(exitCode).toBe(0); })); it('should get all config settings matching a namespace', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['config', 'cli']); const output = stripColor(stdout); - assert.match(output, /cli.colors\s+= (?:true|false)/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/cli.colors\s+= (?:true|false)/); + expect(exitCode).toBe(0); })); it('should get all config settings matching a namespace as JSON', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['config', 'cli', '--json']); const json = JSON.parse(stdout); - assert(Object.hasOwn(json, 'colors')); - assert.strictEqual(exitCode, 0); + expect(Object.hasOwn(json, 'colors')).toBe(true); + expect(exitCode).toBe(0); })); it('should get a single config setting', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['config', 'cli.colors']); const output = stripColor(stdout); - assert.match(output, /true|false/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/true|false/); + expect(exitCode).toBe(0); })); it('should get a single config setting as JSON', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['config', 'cli.colors', '--json']); - assert.match(stdout, /true|false/); - assert.strictEqual(exitCode, 0); + expect(stdout).toMatch(/true|false/); + expect(exitCode).toBe(0); })); it('should error if key is invalid', initCLI(async ({ run }) => { const { exitCode, stderr } = await run(['config', '123']); const output = stripColor(stderr); - assert.match(output, /Invalid key "123"/); - assert.strictEqual(exitCode, 1); + expect(output).toMatch(/Invalid key "123"/); + expect(exitCode).toBe(1); })); it('should error if setting is not found', initCLI(async ({ run }) => { const { exitCode, stderr } = await run(['config', 'does_not_exist']); const output = stripColor(stderr); - assert.match(output, /Key "does_not_exist" not found/); - assert.strictEqual(exitCode, 1); + expect(output).toMatch(/Key "does_not_exist" not found/); + expect(exitCode).toBe(1); })); it('should error as JSON if setting is not found', initCLI(async ({ run }) => { const { exitCode, stderr } = await run(['config', 'does_not_exist', '--json']); const json = JSON.parse(stderr); - assert.deepStrictEqual(json, { + expect(json).toEqual({ success: false, error: 'Key "does_not_exist" not found' }); - assert.strictEqual(exitCode, 1); + expect(exitCode).toBe(1); })); it('should set a single config setting', initCLI(async ({ run }) => { let { exitCode, stdout } = await run(['config', 'foo', 'bar']); let output = stripColor(stdout); - assert.match(output, /foo saved/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/foo saved/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'foo'])); output = stripColor(stdout); - assert.match(output, /bar/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/bar/); + expect(exitCode).toBe(0); })); it('should set a nested config setting', initCLI(async ({ run }) => { let { exitCode, stdout } = await run(['config', 'foo.bar', 'baz']); let output = stripColor(stdout); - assert.match(output, /foo.bar saved/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/foo.bar saved/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config'])); output = stripColor(stdout); - assert.match(output, /foo.bar\s+= "baz"/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/foo.bar\s+= "baz"/); + expect(exitCode).toBe(0); })); it('should delete a single config setting', initCLI(async ({ run }) => { let { exitCode, stdout, stderr } = await run(['config', 'foo', 'bar']); let output = stripColor(stdout); - assert.match(output, /foo saved/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/foo saved/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'foo'])); output = stripColor(stdout); - assert.match(output, /bar/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/bar/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'foo', '--remove'])); output = stripColor(stdout); - assert.match(output, /"foo" removed/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/"foo" removed/); + expect(exitCode).toBe(0); ({ exitCode, stderr } = await run(['config', 'foo'])); output = stripColor(stderr); - assert.match(output, /Key "foo" not found/); - assert.strictEqual(exitCode, 1); + expect(output).toMatch(/Key "foo" not found/); + expect(exitCode).toBe(1); })); it('should delete a nested config setting', initCLI(async ({ run }) => { let { exitCode, stdout, stderr } = await run(['config', 'foo.bar', 'baz']); let output = stripColor(stdout); - assert.match(output, /foo.bar saved/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/foo.bar saved/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config'])); output = stripColor(stdout); - assert.match(output, /foo.bar\s+= "baz"/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/foo.bar\s+= "baz"/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'foo', '--remove'])); output = stripColor(stdout); - assert.match(output, /"foo" removed/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/"foo" removed/); + expect(exitCode).toBe(0); ({ exitCode, stderr } = await run(['config', 'foo'])); output = stripColor(stderr); - assert.match(output, /Key "foo" not found/); - assert.strictEqual(exitCode, 1); + expect(output).toMatch(/Key "foo" not found/); + expect(exitCode).toBe(1); })); it('should error deleting without a key', initCLI(async ({ run }) => { const { exitCode, stderr } = await run(['config', '--remove']); const output = stripColor(stderr); - assert.match(output, /Missing key of the config setting to remove/); + expect(output).toMatch(/Missing key of the config setting to remove/); - assert.strictEqual(exitCode, 1); + expect(exitCode).toBe(1); })); it('should error deleting with too many args', initCLI(async ({ run }) => { const { exitCode, stderr } = await run(['config', 'foo', 'bar', '--remove']); const output = stripColor(stderr); - assert.match(output, /Too many arguments for "--remove" flag/); + expect(output).toMatch(/Too many arguments for "--remove" flag/); - assert.strictEqual(exitCode, 1); + expect(exitCode).toBe(1); })); it('should error setting an unsupported path', initCLI(async ({ run }) => { const { exitCode, stderr } = await run(['config', 'paths.foo', 'bar']); const output = stripColor(stderr); - assert.match(output, /Unsupported key "paths.foo"/); - assert.strictEqual(exitCode, 1); + expect(output).toMatch(/Unsupported key "paths.foo"/); + expect(exitCode).toBe(1); })); it('should set a path setting', initCLI(async ({ run }) => { @@ -198,53 +197,53 @@ describe('ti config', () => { let { exitCode, stdout } = await run(['config', 'paths.modules', fooPath]); let output = stripColor(stdout); - assert.match(output, /paths.modules saved/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/paths.modules saved/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths.modules', '--json'])); let json = JSON.parse(stdout); - assert.deepStrictEqual(json, [fooPath]); - assert.strictEqual(exitCode, 0); + expect(json).toEqual([fooPath]); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths.modules', barPath, '--json'])); json = JSON.parse(stdout); - assert.deepStrictEqual(json, { success: true }); - assert.strictEqual(exitCode, 0); + expect(json).toEqual({ success: true }); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths'])); output = stripColor(stdout); - assert.match(output, new RegExp(`= "${barPath.replace(/\\/g, '\\\\\\\\')}"`)); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(new RegExp(`= "${barPath.replace(/\\/g, '\\\\\\\\')}"`)); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths.modules', bazPath, '--append'])); output = stripColor(stdout); - assert.match(output, /paths.modules saved/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/paths.modules saved/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths.modules'])); output = stripColor(stdout); - assert.match(output, new RegExp(`${barPath.replace(/\\/g, '\\\\')}\n${bazPath.replace(/\\/g, '\\\\')}`)); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(new RegExp(`${barPath.replace(/\\/g, '\\\\')}\n${bazPath.replace(/\\/g, '\\\\')}`)); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths.modules', '--json'])); json = JSON.parse(stdout); - assert.deepStrictEqual(json, [barPath, bazPath]); - assert.strictEqual(exitCode, 0); + expect(json).toEqual([barPath, bazPath]); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths.modules', barPath, '--remove'])); output = stripColor(stdout); - assert.match(output, /paths.modules saved/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/paths.modules saved/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths.modules', '--json'])); json = JSON.parse(stdout); - assert.deepStrictEqual(json, [bazPath]); - assert.strictEqual(exitCode, 0); + expect(json).toEqual([bazPath]); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['config', 'paths.modules', barPath, '--remove'])); output = stripColor(stdout); - assert.match(output, /paths.modules saved/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/paths.modules saved/); + expect(exitCode).toBe(0); })); }); diff --git a/test/commands/ti-create.test.js b/test/commands/ti-create.test.js index 9f6e708dc..87a73514e 100644 --- a/test/commands/ti-create.test.js +++ b/test/commands/ti-create.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { stripColor } from '../helpers/strip-color.js'; import { initMockSDKHome } from '../helpers/init-sdk-home.js'; @@ -8,14 +7,14 @@ describe('ti create', () => { const { exitCode, stdout } = await run(['create', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium create \[options\]/); - assert.match(output, /Creates a new Titanium application, native module, or Apple Watchâ„¢ app./); - assert.match(output, /Create Options:/); - assert.match(output, /Create --type=app Options:/); - assert.match(output, /Create --type=module Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium create \[options\]/); + expect(output).toMatch(/Creates a new Titanium application, native module, or Apple Watchâ„¢ app./); + expect(output).toMatch(/Create Options:/); + expect(output).toMatch(/Create --type=app Options:/); + expect(output).toMatch(/Create --type=module Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); diff --git a/test/commands/ti-info.test.js b/test/commands/ti-info.test.js index dc55c8fdc..9e3d6742e 100644 --- a/test/commands/ti-info.test.js +++ b/test/commands/ti-info.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import fs from 'fs-extra'; @@ -14,140 +13,140 @@ describe('ti info', () => { const { exitCode, stdout } = await run(['info', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium info/); - assert.match(output, /Info Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium info/); + expect(output).toMatch(/Info Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should show all info', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['info']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Operating System/); - assert.match(output, new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); - assert.match(output, new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); - assert.match(output, /Titanium SDKs/); - assert.match(output, /Java Development Kit/); - assert.match(output, /Issues/); - - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Operating System/); + expect(output).toMatch(new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); + expect(output).toMatch(new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); + expect(output).toMatch(/Titanium SDKs/); + expect(output).toMatch(/Java Development Kit/); + expect(output).toMatch(/Issues/); + + expect(exitCode).toBe(0); }), 60000); it('should show all info as JSON', initCLI(async ({ run }) => { let { exitCode, stdout } = await run(['info', '--json']); let json = JSON.parse(stdout); - assert(Object.hasOwn(json, 'os')); - assert(Object.hasOwn(json, 'node')); - assert(Object.hasOwn(json, 'npm')); - assert(Object.hasOwn(json, 'titanium')); - assert(Object.hasOwn(json, 'titaniumCLI')); - assert(Object.hasOwn(json, 'jdk')); + expect(Object.hasOwn(json, 'os')).toBe(true); + expect(Object.hasOwn(json, 'node')).toBe(true); + expect(Object.hasOwn(json, 'npm')).toBe(true); + expect(Object.hasOwn(json, 'titanium')).toBe(true); + expect(Object.hasOwn(json, 'titaniumCLI')).toBe(true); + expect(Object.hasOwn(json, 'jdk')).toBe(true); // legacy ({ exitCode, stdout } = await run(['info', '--output', 'json'])); json = JSON.parse(stdout); - assert(Object.hasOwn(json, 'os')); - assert(Object.hasOwn(json, 'node')); - assert(Object.hasOwn(json, 'npm')); - assert(Object.hasOwn(json, 'titanium')); - assert(Object.hasOwn(json, 'titaniumCLI')); - assert(Object.hasOwn(json, 'jdk')); - - assert.strictEqual(exitCode, 0); + expect(Object.hasOwn(json, 'os')).toBe(true); + expect(Object.hasOwn(json, 'node')).toBe(true); + expect(Object.hasOwn(json, 'npm')).toBe(true); + expect(Object.hasOwn(json, 'titanium')).toBe(true); + expect(Object.hasOwn(json, 'titaniumCLI')).toBe(true); + expect(Object.hasOwn(json, 'jdk')).toBe(true); + + expect(exitCode).toBe(0); }), 60000); it('should only show "os" info', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['info', '--types', 'os']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Operating System/); - assert.doesNotMatch(output, new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); - assert.doesNotMatch(output, new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); - assert.doesNotMatch(output, /Titanium SDKs/); - assert.doesNotMatch(output, /Java Development Kit/); - assert.match(output, /Issues/); - - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Operating System/); + expect(output).not.toMatch(new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); + expect(output).not.toMatch(new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); + expect(output).not.toMatch(/Titanium SDKs/); + expect(output).not.toMatch(/Java Development Kit/); + expect(output).toMatch(/Issues/); + + expect(exitCode).toBe(0); }), 60000); it('should only show "os" info as JSON', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['info', '--types', 'os', '--json']); const json = JSON.parse(stdout); - assert(Object.hasOwn(json, 'os')); - assert(!Object.hasOwn(json, 'node')); - assert(!Object.hasOwn(json, 'npm')); - assert(!Object.hasOwn(json, 'titanium')); - assert(!Object.hasOwn(json, 'titaniumCLI')); - assert(!Object.hasOwn(json, 'jdk')); - - assert.strictEqual(exitCode, 0); + expect(Object.hasOwn(json, 'os')).toBe(true); + expect(Object.hasOwn(json, 'node')).toBe(false); + expect(Object.hasOwn(json, 'npm')).toBe(false); + expect(Object.hasOwn(json, 'titanium')).toBe(false); + expect(Object.hasOwn(json, 'titaniumCLI')).toBe(false); + expect(Object.hasOwn(json, 'jdk')).toBe(false); + + expect(exitCode).toBe(0); }), 60000); it('should only show "nodejs" info', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['info', '--types', 'nodejs']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.doesNotMatch(output, /Operating System/); - assert.match(output, new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); - assert.doesNotMatch(output, new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); - assert.doesNotMatch(output, /Titanium SDKs/); - assert.doesNotMatch(output, /Java Development Kit/); - assert.match(output, /Issues/); - - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).not.toMatch(/Operating System/); + expect(output).toMatch(new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); + expect(output).not.toMatch(new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); + expect(output).not.toMatch(/Titanium SDKs/); + expect(output).not.toMatch(/Java Development Kit/); + expect(output).toMatch(/Issues/); + + expect(exitCode).toBe(0); }), 60000); it('should only show "nodejs" info as JSON', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['info', '--types', 'nodejs', '--json']); const json = JSON.parse(stdout); - assert(!Object.hasOwn(json, 'os')); - assert(Object.hasOwn(json, 'node')); - assert.strictEqual(json.node.version, process.versions.node); - assert(Object.hasOwn(json, 'npm')); - assert(!Object.hasOwn(json, 'titanium')); - assert(!Object.hasOwn(json, 'titaniumCLI')); - assert(!Object.hasOwn(json, 'jdk')); - - assert.strictEqual(exitCode, 0); + expect(Object.hasOwn(json, 'os')).toBe(false); + expect(Object.hasOwn(json, 'node')).toBe(true); + expect(json.node.version).toBe(process.versions.node); + expect(Object.hasOwn(json, 'npm')).toBe(true); + expect(Object.hasOwn(json, 'titanium')).toBe(false); + expect(Object.hasOwn(json, 'titaniumCLI')).toBe(false); + expect(Object.hasOwn(json, 'jdk')).toBe(false); + + expect(exitCode).toBe(0); }), 60000); it('should only show "titanium" info', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['info', '--types', 'titanium']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.doesNotMatch(output, /Operating System/); - assert.doesNotMatch(output, new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); - assert.match(output, new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); - assert.match(output, /Titanium SDKs/); - assert.doesNotMatch(output, /Java Development Kit/); - assert.match(output, /Issues/); - - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).not.toMatch(/Operating System/); + expect(output).not.toMatch(new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); + expect(output).toMatch(new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); + expect(output).toMatch(/Titanium SDKs/); + expect(output).not.toMatch(/Java Development Kit/); + expect(output).toMatch(/Issues/); + + expect(exitCode).toBe(0); }), 60000); it('should only show "jdk" info', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['info', '--types', 'jdk']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.doesNotMatch(output, /Operating System/); - assert.doesNotMatch(output, new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); - assert.doesNotMatch(output, new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); - assert.doesNotMatch(output, /Titanium SDKs/); - assert.match(output, /Java Development Kit/); - assert.match(output, /Issues/); - - assert.strictEqual(exitCode, 0); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).not.toMatch(/Operating System/); + expect(output).not.toMatch(new RegExp(`Node.js\n\\s*Node.js Version\\s*= ${process.versions.node}`)); + expect(output).not.toMatch(new RegExp(`Titanium CLI\n\\s*CLI Version\\s*= ${pkgJson.version}`)); + expect(output).not.toMatch(/Titanium SDKs/); + expect(output).toMatch(/Java Development Kit/); + expect(output).toMatch(/Issues/); + + expect(exitCode).toBe(0); }), 60000); }); diff --git a/test/commands/ti-module.test.js b/test/commands/ti-module.test.js index 285ed709b..248dd9c73 100644 --- a/test/commands/ti-module.test.js +++ b/test/commands/ti-module.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { initCLI } from '../helpers/init-cli.js'; import { stripColor } from '../helpers/strip-color.js'; import { fileURLToPath } from 'node:url'; @@ -12,48 +11,48 @@ describe('ti module', () => { const { exitCode, stdout } = await run(['module', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium module \[options\] \[command\]/); - assert.match(output, /Commands:/); - assert.match(output, /Module Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium module \[options\] \[command\]/); + expect(output).toMatch(/Commands:/); + expect(output).toMatch(/Module Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should show list help', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['module', 'list', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium module list|ls/); - assert.match(output, /List Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium module list|ls/); + expect(output).toMatch(/List Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should list no installed modules', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['module']); const output = stripColor(stdout); - assert.match(output, /Configured Path Modules/); - assert.match(output, /Global Modules/); + expect(output).toMatch(/Configured Path Modules/); + expect(output).toMatch(/Global Modules/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should list no installed modules as JSON', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['module', '--json']); const json = JSON.parse(stdout); - assert.deepStrictEqual(json, { + expect(json).toEqual({ project: {}, config: {}, global: {} }); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should list installed modules', initCLI(async ({ run }) => { @@ -70,7 +69,7 @@ describe('ti module', () => { ]); const output = stripColor(stdout); - assert.match(output, new RegExp(`Configured Path Modules + expect(output).toMatch(new RegExp(`Configured Path Modules Android com.test.module 1.0.0 ${join(fixturesDir, 'module', 'android', 'test-module', '1.0.0').replace(/\\/g, '\\\\')} @@ -91,7 +90,7 @@ describe('ti module', () => { Global Modules No modules found`)); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should list installed modules as JSON', initCLI(async ({ run }) => { @@ -109,7 +108,7 @@ Global Modules ]); const json = JSON.parse(stdout); - assert.deepStrictEqual(json, { + expect(json).toEqual({ project: {}, config: { android: { @@ -245,12 +244,12 @@ Global Modules global: {} }); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should install module during detection', initCLI(async ({ run }) => { const { exitCode, _stdout } = await run(['module']); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); diff --git a/test/commands/ti-project.test.js b/test/commands/ti-project.test.js index d51d13fbb..7f45ce939 100644 --- a/test/commands/ti-project.test.js +++ b/test/commands/ti-project.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { stripColor } from '../helpers/strip-color.js'; import { initMockSDKHome } from '../helpers/init-sdk-home.js'; @@ -8,13 +7,13 @@ describe('ti project', () => { const { exitCode, stdout } = await run(['project', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium project \[options\]/); - assert.match(output, /Get and set tiapp.xml settings./); - assert.match(output, /Project Arguments:/); - assert.match(output, /Project Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium project \[options\]/); + expect(output).toMatch(/Get and set tiapp.xml settings./); + expect(output).toMatch(/Project Arguments:/); + expect(output).toMatch(/Project Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); diff --git a/test/commands/ti-sdk.test.js b/test/commands/ti-sdk.test.js index 091359327..068da8985 100644 --- a/test/commands/ti-sdk.test.js +++ b/test/commands/ti-sdk.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import fs from 'fs-extra'; import { initCLI } from '../helpers/init-cli.js'; import { initSDKHome, initMockSDKHome } from '../helpers/init-sdk-home.js'; @@ -23,51 +22,51 @@ describe('ti sdk', () => { const { exitCode, stdout } = await run(['sdk', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium sdk/); - assert.match(output, /Commands:/); - assert.match(output, /SDK Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium sdk/); + expect(output).toMatch(/Commands:/); + expect(output).toMatch(/SDK Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should show install help', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['sdk', 'install', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium sdk install|i/); - assert.match(output, /Install Arguments:/); - assert.match(output, /Install Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium sdk install|i/); + expect(output).toMatch(/Install Arguments:/); + expect(output).toMatch(/Install Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should show list help', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['sdk', 'list', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium sdk list|ls/); - assert.match(output, /List Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium sdk list|ls/); + expect(output).toMatch(/List Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); it('should show uninstall help', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['sdk', 'uninstall', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium sdk uninstall|rm/); - assert.match(output, /Uninstall Arguments:/); - assert.match(output, /Uninstall Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium sdk uninstall|rm/); + expect(output).toMatch(/Uninstall Arguments:/); + expect(output).toMatch(/Uninstall Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); @@ -79,14 +78,14 @@ describe('ti sdk', () => { // eslint-disable-next-line no-unused-vars let { exitCode, stdout, stderr } = await run(['sdk']); // no `ls` to test default subcommand let output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); - assert.match(output, /No Titanium SDKs found/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); + expect(output).toMatch(/No Titanium SDKs found/); // list SDKs as JSON (no SDKs installed) ({ exitCode, stdout } = await run(['sdk', 'ls', '--json'])); let json = JSON.parse(stdout); - assert.deepStrictEqual(json, { + expect(json).toEqual({ branch: {}, branches: { defaultBranch: 'main', @@ -98,12 +97,12 @@ describe('ti sdk', () => { releases: {}, sdks: {} }); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); // install an SDK ({ exitCode, stdout, stderr } = await run(['sdk', 'install', sdkName, '--no-progress-bars', '--keep-files'])); - assert.match(stdout, /successfully installed/); - assert.strictEqual(exitCode, 0); + expect(stdout).toMatch(/successfully installed/); + expect(exitCode).toBe(0); // find the downloaded file and move it to the tmp dir for subsequent tests const src = join(tmpHome, '.titanium', 'downloads', sdkFilename); @@ -116,17 +115,17 @@ describe('ti sdk', () => { // list SDKs ({ exitCode, stdout } = await run(['sdk', 'ls'])); output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); - assert.match(output, new RegExp(`Installed SDKs:\n\\s*${sdkName}\\s+${sdkVersion}\\s+${ + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); + expect(output).toMatch(new RegExp(`Installed SDKs:\n\\s*${sdkName}\\s+${sdkVersion}\\s+${ sdkPath.replace(/\\/g, '\\\\') }`)); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); // list SDKs as JSON ({ exitCode, stdout } = await run(['sdk', 'ls', '--json'])); json = JSON.parse(stdout); - assert.deepStrictEqual(json, { + expect(json).toEqual({ branch: {}, branches: { defaultBranch: 'main', @@ -158,17 +157,17 @@ describe('ti sdk', () => { }, } }); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); // remove the SDK ({ exitCode, stdout } = await run(['sdk', 'uninstall', sdkName, '--force'])); - assert.match(stdout, /removed/); - assert.strictEqual(exitCode, 0); + expect(stdout).toMatch(/removed/); + expect(exitCode).toBe(0); // verify removed ({ exitCode, stdout } = await run(['sdk', 'ls', '--json'])); json = JSON.parse(stdout); - assert.deepStrictEqual(json, { + expect(json).toEqual({ branch: {}, branches: { defaultBranch: 'main', @@ -180,7 +179,7 @@ describe('ti sdk', () => { releases: {}, sdks: {} }); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); }), 240000); it('should install an SDK from a local zip', initSDKHome(async ({ run, tmpSDKDir }) => { @@ -188,12 +187,12 @@ describe('ti sdk', () => { const sdkName = '0.0.0.GA'; const sdkPath = join(tmpSDKDir, 'mobilesdk', os, sdkName); let { exitCode, stdout } = await run(['sdk', 'install', sdkZipFile, '--no-progress-bars']); - assert.match(stdout, /successfully installed/); - assert.strictEqual(exitCode, 0); + expect(stdout).toMatch(/successfully installed/); + expect(exitCode).toBe(0); ({ exitCode, stdout } = await run(['sdk', 'ls', '--json'])); const json = JSON.parse(stdout); - assert.deepStrictEqual(json, { + expect(json).toEqual({ branch: {}, branches: { defaultBranch: 'main', @@ -225,7 +224,7 @@ describe('ti sdk', () => { }, } }); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); }), 120000); it('should error if local zip does not exist', initSDKHome(async ({ run }) => { @@ -236,20 +235,20 @@ describe('ti sdk', () => { '--no-progress-bars' ]); const { exitCode, stderr } = result; - assert.match(stderr, /Specified file does not exist/); - assert.strictEqual(exitCode, 1); + expect(stderr).toMatch(/Specified file does not exist/); + expect(exitCode).toBe(1); })); it('should error if local zip is not a .zip', initSDKHome(async ({ run }) => { const { exitCode, stderr } = await run(['sdk', 'install', join(fixturesDir, 'not_a_zip'), '--no-progress-bars']); - assert.match(stderr, /Specified file is not a zip file/); - assert.strictEqual(exitCode, 1); + expect(stderr).toMatch(/Specified file is not a zip file/); + expect(exitCode).toBe(1); })); it.skip('should install an SDK from a URL', initSDKHome(async ({ _run }) => { // const { exitCode, stderr } = await run(['sdk', 'install', 'https://titaniumsdk.com/', '--no-progress-bars']); - // assert.match(stderr, /Specified file does not exist/); - // assert.strictEqual(exitCode, 1); + // expect(stderr).toMatch(/Specified file does not exist/); + // expect(exitCode).toBe(1); })); it('should install an SDK from a branch', initSDKHome(async ({ _run }) => { @@ -258,8 +257,8 @@ describe('ti sdk', () => { it('should error if SDK release not found', initSDKHome(async ({ run }) => { const { exitCode, stderr } = await run(['sdk', 'install', 'foo', '--no-progress-bars']); - assert.match(stderr, /Unable to find any Titanium SDK releases or CI builds that match "foo"/); - assert.strictEqual(exitCode, 1); + expect(stderr).toMatch(/Unable to find any Titanium SDK releases or CI builds that match "foo"/); + expect(exitCode).toBe(1); })); }); @@ -268,60 +267,59 @@ describe('ti sdk', () => { // list branches let { exitCode, stdout } = await run(['sdk', 'list', '-b']); let output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); - assert.match(output, /Branches:\n\s*(main|master)/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); + expect(output).toMatch(/Branches:\n\s*(main|master)/); // list stable releases ({ exitCode, stdout } = await run(['sdk', 'list', '-r'])); output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); - assert.match(output, /Releases:/); - assert.match(output, /12\.2\.0\.GA\s+9\/15\/23/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); + expect(output).toMatch(/Releases:/); + expect(output).toMatch(/12\.2\.0\.GA\s+9\/15\/23/); // list stable and unstable releases ({ exitCode, stdout } = await run(['sdk', 'list', '-u'])); output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); - assert.match(output, /Releases:/); - assert.match(output, /12\.2\.0\.GA\s+9\/15\/23/); - assert.match(output, /12\.2\.0\.RC\s+8\/11\/23/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); + expect(output).toMatch(/Releases:/); + expect(output).toMatch(/12\.2\.0\.GA\s+9\/15\/23/); + expect(output).toMatch(/12\.2\.0\.RC\s+8\/11\/23/); // list branch builds ({ exitCode, stdout } = await run(['sdk', 'list', '--branch', 'main'])); output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); - assert.match(output, /'main' Branch Builds:/); - // assert.match(output, /\d+\.\d+\.\d+\.v\d+\s+\d+\/\d+\/\d+\s+\d+(\.\d+)? .B \[unstable\]/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); + expect(output).toMatch(/'main' Branch Builds:/); + // expect(output).toMatch(/\d+\.\d+\.\d+\.v\d+\s+\d+\/\d+\/\d+\s+\d+(\.\d+)? .B \[unstable\]/); // list branches, stable, and unstable releases as JSON ({ exitCode, stdout } = await run(['sdk', 'ls', '-bu', '--json'])); const json = JSON.parse(stdout); - assert(json.branches.branches.includes('main') || json.branches.branches.includes('master')); - assert(json.branches.branches.includes('12_6_X')); - assert(json.releases[sdkName]); + expect(json.branches.branches.includes('main') || json.branches.branches.includes('master')).toBe(true); + expect(json.branches.branches.some(branch => /^\d+_\d+_X$/.test(branch))).toBe(true); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); }), 60000); it('should not find any SDKs in empty SDK home directory', initSDKHome(async ({ run, tmpSDKDir }) => { const { exitCode, stdout } = await run(['sdk', 'list']); const output = stripColor(stdout); - assert.match(output, new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); - assert.match(output, /No Titanium SDKs found/); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); + expect(output).toMatch(/No Titanium SDKs found/); + expect(exitCode).toBe(0); }), 60000); it('should list SDKs in SDK home directory', initMockSDKHome(async ({ run, tmpSDKDir }) => { const { exitCode, stdout } = await run(['sdk', 'list']); const output = stripColor(stdout); - assert.match(output, new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); - assert.match(output, /Installed SDKs:/); - assert.match(output, new RegExp(`0.0.0.GA\\s+0.0.0\\s+${join(tmpSDKDir, 'mobilesdk', os, '0.0.0.GA').replace(/\\/g, '\\\\')}`)); - assert.strictEqual(exitCode, 0); + expect(output).toMatch(new RegExp(`SDK Install Locations:\n\\s*${tmpSDKDir.replace(/\\/g, '\\\\')}`)); + expect(output).toMatch(/Installed SDKs:/); + expect(output).toMatch(new RegExp(`0.0.0.GA\\s+0.0.0\\s+${join(tmpSDKDir, 'mobilesdk', os, '0.0.0.GA').replace(/\\/g, '\\\\')}`)); + expect(exitCode).toBe(0); }), 60000); }); @@ -330,10 +328,10 @@ describe('ti sdk', () => { const { exitCode, stdout } = await run(['sdk', 'select']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /The "select" subcommand is no longer required./); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/The "select" subcommand is no longer required./); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); }); diff --git a/test/commands/ti-setup.test.js b/test/commands/ti-setup.test.js index a70db7b50..47a4ebccc 100644 --- a/test/commands/ti-setup.test.js +++ b/test/commands/ti-setup.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { initCLI } from '../helpers/init-cli.js'; import { stripColor } from '../helpers/strip-color.js'; @@ -8,12 +7,12 @@ describe('ti setup', () => { const { exitCode, stdout } = await run(['setup', '-h']); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium setup \[options\] \[screen\]/); - assert.match(output, /Setup Arguments:/); - assert.match(output, /Setup Options:/); - assert.match(output, /Global Options:/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium setup \[options\] \[screen\]/); + expect(output).toMatch(/Setup Arguments:/); + expect(output).toMatch(/Setup Options:/); + expect(output).toMatch(/Global Options:/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); diff --git a/test/commands/ti.test.js b/test/commands/ti.test.js index b60640343..e5f938b75 100644 --- a/test/commands/ti.test.js +++ b/test/commands/ti.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import fs from 'fs-extra'; @@ -12,26 +11,26 @@ const pkgJson = fs.readJsonSync(join(__dirname, '../../package.json')); describe('ti', () => { it('should display the version using short flag', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['-v']); - assert.strictEqual(stdout, pkgJson.version); - assert.strictEqual(exitCode, 0); + expect(stdout).toBe(pkgJson.version); + expect(exitCode).toBe(0); })); it('should display the version using long flag', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(['--version']); - assert.strictEqual(stdout, pkgJson.version); - assert.strictEqual(exitCode, 0); + expect(stdout).toBe(pkgJson.version); + expect(exitCode).toBe(0); })); it('should display the help', initCLI(async ({ run }) => { const { exitCode, stdout } = await run(); const output = stripColor(stdout); - assert.match(output, /Titanium Command-Line Interface/); - assert.match(output, /Usage: titanium/); - assert.match(output, /Commands:/); - assert.match(output, /Global Options:/); - assert.match(output, /-h, --help/); + expect(output).toMatch(/Titanium Command-Line Interface/); + expect(output).toMatch(/Usage: titanium/); + expect(output).toMatch(/Commands:/); + expect(output).toMatch(/Global Options:/); + expect(output).toMatch(/-h, --help/); - assert.strictEqual(exitCode, 0); + expect(exitCode).toBe(0); })); }); diff --git a/test/helpers/init-cli.js b/test/helpers/init-cli.js index b2452f4a8..924b5855e 100644 --- a/test/helpers/init-cli.js +++ b/test/helpers/init-cli.js @@ -28,7 +28,8 @@ export function initCLI(fixture, fn, sharedOpts = {}) { ...process.env, ...sharedOpts.env, ...opts.env, - HOME: tmpHome + HOME: tmpHome, + TI_CLI_SKIP_ENV_PATHS: '1' } }); } catch (e) { diff --git a/test/util/arrayify.test.js b/test/util/arrayify.test.js index cb9994382..a64e4aea1 100644 --- a/test/util/arrayify.test.js +++ b/test/util/arrayify.test.js @@ -1,29 +1,24 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { arrayify } from '../../src/util/arrayify.js'; describe('arrayify', () => { it('should init undefined array', () => { - assert.deepStrictEqual(arrayify(), []); + expect(arrayify()).toEqual([]); }); it('should arrayify a non-array', () => { - assert.deepStrictEqual(arrayify(1), [1]); - assert.deepStrictEqual(arrayify('a'), ['a']); - assert.deepStrictEqual(arrayify(true), [true]); - assert.deepStrictEqual(arrayify(false), [false]); + expect(arrayify(1)).toEqual([1]); + expect(arrayify('a')).toEqual(['a']); + expect(arrayify(true)).toEqual([true]); + expect(arrayify(false)).toEqual([false]); }); it('should arrayify a set', () => { - assert.deepStrictEqual( - arrayify(new Set([1, 'a', true])), - [1, 'a', true] - ); + expect(arrayify(new Set([1, 'a', true]))).toEqual([1, 'a', true]); }); it('should remove falsey values', () => { - assert.deepStrictEqual( - arrayify([ + expect(arrayify([ 0, 1, null, @@ -32,13 +27,11 @@ describe('arrayify', () => { 'a', true, false - ], true), - [ + ], true)).toEqual([ 0, 1, 'a', true - ] - ); + ]); }); }); diff --git a/test/util/busyindicator.test.js b/test/util/busyindicator.test.js index cd80a6488..6d5ba77c8 100644 --- a/test/util/busyindicator.test.js +++ b/test/util/busyindicator.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { BusyIndicator } from '../../src/util/busyindicator.js'; import { setTimeout } from 'node:timers/promises'; import { MockStream } from '../helpers/mock-stream.js'; @@ -13,10 +12,10 @@ describe('BusyIndicator', () => { await setTimeout(200); busy.stop(); - assert.match(stream.buffer, / |\n \/\n -\n +\n/); + expect(stream.buffer).toMatch(/ |\n \/\n -\n +\n/); stream.buffer = 'foo'; await setTimeout(100); - assert.strictEqual(stream.buffer, 'foo'); + expect(stream.buffer).toBe('foo'); }); }); diff --git a/test/util/capitalize.test.js b/test/util/capitalize.test.js index 8b3eab07c..295c9f027 100644 --- a/test/util/capitalize.test.js +++ b/test/util/capitalize.test.js @@ -1,11 +1,10 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { capitalize } from '../../src/util/capitalize.js'; describe('capitalize', () => { it('should capitalize a string', () => { - assert.strictEqual(capitalize('foo'), 'Foo'); - assert.strictEqual(capitalize('123 foo'), '123 foo'); - assert.strictEqual(capitalize(''), ''); + expect(capitalize('foo')).toBe('Foo'); + expect(capitalize('123 foo')).toBe('123 foo'); + expect(capitalize('')).toBe(''); }); }); diff --git a/test/util/columns.test.js b/test/util/columns.test.js index 170244f3f..15111df05 100644 --- a/test/util/columns.test.js +++ b/test/util/columns.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { columns } from '../../src/util/columns.js'; const data = [ @@ -33,21 +32,21 @@ const data = [ describe('columns', () => { it('should render columns with no wrapping', () => { - assert.strictEqual(columns([ + expect(columns([ 'foo', 'bar' - ]), 'foo bar'); + ])).toBe('foo bar'); }); it('should render columns with margin', () => { - assert.strictEqual(columns([ + expect(columns([ 'foo', 'bar' - ], ' '), ' foo bar'); + ], ' ')).toBe(' foo bar'); }); it('should render lots of data in columns with wrapping', () => { - assert.strictEqual(columns(data, ' ', 50), [ + expect(columns(data, ' ', 50)).toBe([ ' aaaa hhhh oooo vvvv', ' bbbb iiii pppp wwww', ' cccc jjjj qqqq xxxx', @@ -59,7 +58,7 @@ describe('columns', () => { }); it('should render lots of data with huge width', () => { - assert.strictEqual(columns(data, ' ', 1000), [ + expect(columns(data, ' ', 1000)).toBe([ ' aaaa eeee iiii mmmm qqqq uuuu yyyy', ' bbbb ffff jjjj nnnn rrrr vvvv zzzz', ' cccc gggg kkkk oooo ssss wwww', @@ -68,7 +67,7 @@ describe('columns', () => { }); it('should render lots of data with zero width', () => { - assert.strictEqual(columns(data, ' ', 0), [ + expect(columns(data, ' ', 0)).toBe([ ' aaaa eeee iiii mmmm qqqq uuuu yyyy', ' bbbb ffff jjjj nnnn rrrr vvvv zzzz', ' cccc gggg kkkk oooo ssss wwww', diff --git a/test/util/detect.test.js b/test/util/detect.test.js index c5daa76ec..9efbfecc0 100644 --- a/test/util/detect.test.js +++ b/test/util/detect.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { detect } from '../../src/util/detect.js'; import { TiConfig } from '../../src/util/ticonfig.js'; import { join } from 'node:path'; @@ -13,10 +12,10 @@ describe('detect', () => { version: '1.2.3' }; const results = await detect(null, new TiConfig(goodConfig), mockCLI); - assert(Object.hasOwn(results, 'data')); - assert(Object.hasOwn(results, 'platformInfo')); - assert(Object.hasOwn(results.data.titaniumCLI, 'version')); - assert.strictEqual(results.data.titaniumCLI.version, '1.2.3'); + expect(Object.hasOwn(results, 'data')).toBe(true); + expect(Object.hasOwn(results, 'platformInfo')).toBe(true); + expect(Object.hasOwn(results.data.titaniumCLI, 'version')).toBe(true); + expect(results.data.titaniumCLI.version).toBe('1.2.3'); }, 60000); it('should detect just Titanium development environment', async () => { @@ -24,13 +23,13 @@ describe('detect', () => { version: '1.2.3' }; const results = await detect(null, new TiConfig(goodConfig), mockCLI, { titanium: true }); - assert(Object.hasOwn(results, 'data')); - assert(Object.hasOwn(results, 'platformInfo')); - assert(Object.hasOwn(results.data.titaniumCLI, 'version')); - assert.strictEqual(results.data.titaniumCLI.version, '1.2.3'); - assert.strictEqual(results.data.os, undefined); - assert.strictEqual(results.data.node, undefined); - assert.strictEqual(results.data.npm, undefined); - assert.strictEqual(results.data.jdk, undefined); + expect(Object.hasOwn(results, 'data')).toBe(true); + expect(Object.hasOwn(results, 'platformInfo')).toBe(true); + expect(Object.hasOwn(results.data.titaniumCLI, 'version')).toBe(true); + expect(results.data.titaniumCLI.version).toBe('1.2.3'); + expect(results.data.os).toBe(undefined); + expect(results.data.node).toBe(undefined); + expect(results.data.npm).toBe(undefined); + expect(results.data.jdk).toBe(undefined); }, 60000); }); diff --git a/test/util/expand.test.js b/test/util/expand.test.js index e2ede75bb..b648deffd 100644 --- a/test/util/expand.test.js +++ b/test/util/expand.test.js @@ -1,5 +1,4 @@ -import { afterEach, beforeEach, describe, it } from 'node:test'; -import assert from 'node:assert'; +import { afterEach, beforeEach, describe, it, expect } from 'vitest'; import { expand } from '../../src/util/expand.js'; const backup = {}; @@ -30,7 +29,7 @@ describe('expand', () => { delete process.env.USERPROFILE; const p = expand('~/foo'); - assert.strictEqual(p, isWin ? 'C:\\Users\\username\\foo' : '/Users/username/foo'); + expect(p).toBe(isWin ? 'C:\\Users\\username\\foo' : '/Users/username/foo'); }); it('should resolve the home directory using USERPROFILE', () => { @@ -38,17 +37,17 @@ describe('expand', () => { process.env.USERPROFILE = isWin ? 'C:\\Users\\username' : '/Users/username'; const p = expand('~/foo'); - assert.strictEqual(p, isWin ? 'C:\\Users\\username\\foo' : '/Users/username/foo'); + expect(p).toBe(isWin ? 'C:\\Users\\username\\foo' : '/Users/username/foo'); }); it('should collapse relative segments', () => { const p = expand('/path/./to/../foo'); - assert.match(p, isWin ? /\\path\\foo/ : /\/path\/foo/); + expect(p).toMatch(isWin ? /\\path\\foo/ : /\/path\/foo/); }); (isWin ? it : it.skip)('should resolve environment paths (Windows)', () => { process.env.SystemRoot = 'C:\\WINDOWS'; const p = expand('%SystemRoot%\\foo'); - assert.match(isWin ? p : p.substring(process.cwd().length + 1), /\\WINDOWS\\foo/); + expect(isWin ? p : p.substring(process.cwd().length + 1)).toMatch(/\\WINDOWS\\foo/); }); }); diff --git a/test/util/logger.test.js b/test/util/logger.test.js index 008c213d2..e582c09ac 100644 --- a/test/util/logger.test.js +++ b/test/util/logger.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { Logger } from '../../src/util/logger.js'; import { WritableStream } from 'memory-streams'; import { stripColor } from '../helpers/strip-color.js'; @@ -22,27 +21,21 @@ describe('Logger', () => { logger.info('info test'); logger.warn('warn test'); - assert.strictEqual( - stripColor(stdout.toString()), - [ + expect(stripColor(stdout.toString())).toBe([ 'log test', 'log test', 'log test', '[INFO] info test', '' - ].join('\n') - ); + ].join('\n')); - assert.strictEqual( - stripColor(stderr.toString()), - [ + expect(stripColor(stderr.toString())).toBe([ '[TRACE] trace test', '[DEBUG] debug test', '[ERROR] error test', '[WARN] warn test', '' - ].join('\n') - ); + ].join('\n')); }); it('should only log warnings and above', () => { @@ -62,24 +55,18 @@ describe('Logger', () => { logger.info('info test'); logger.warn('warn test'); - assert.strictEqual( - stripColor(stdout.toString()), - [ + expect(stripColor(stdout.toString())).toBe([ 'log test', 'log test', 'log test', '' - ].join('\n') - ); + ].join('\n')); - assert.strictEqual( - stripColor(stderr.toString()), - [ + expect(stripColor(stderr.toString())).toBe([ '[ERROR] error test', '[WARN] warn test', '' - ].join('\n') - ); + ].join('\n')); }); it('should allow the level to be dynamically changed', () => { @@ -94,68 +81,50 @@ describe('Logger', () => { logger.info('info test'); logger.warn('warn test'); - assert.strictEqual( - stripColor(stdout.toString()), - [ + expect(stripColor(stdout.toString())).toBe([ '[INFO] info test', '' - ].join('\n') - ); + ].join('\n')); - assert.strictEqual( - stripColor(stderr.toString()), - [ + expect(stripColor(stderr.toString())).toBe([ '[WARN] warn test', '' - ].join('\n') - ); + ].join('\n')); logger.setLevel('warn'); logger.debug('debug test'); logger.info('info test'); logger.warn('warn test'); - assert.strictEqual( - stripColor(stdout.toString()), - [ + expect(stripColor(stdout.toString())).toBe([ '[INFO] info test', '' - ].join('\n') - ); + ].join('\n')); - assert.strictEqual( - stripColor(stderr.toString()), - [ + expect(stripColor(stderr.toString())).toBe([ '[WARN] warn test', '[WARN] warn test', '' - ].join('\n') - ); + ].join('\n')); logger.setLevel(2); // debug logger.debug('debug test'); logger.info('info test'); logger.warn('warn test'); - assert.strictEqual( - stripColor(stdout.toString()), - [ + expect(stripColor(stdout.toString())).toBe([ '[INFO] info test', '[INFO] info test', '' - ].join('\n') - ); + ].join('\n')); - assert.strictEqual( - stripColor(stderr.toString()), - [ + expect(stripColor(stderr.toString())).toBe([ '[WARN] warn test', '[WARN] warn test', '[DEBUG] debug test', '[WARN] warn test', '' - ].join('\n') - ); + ].join('\n')); }); it('should be silent', () => { @@ -171,13 +140,13 @@ describe('Logger', () => { logger.info('info test'); logger.warn('warn test'); - assert.strictEqual(stripColor(stdout.toString()), ''); - assert.strictEqual(stripColor(stderr.toString()), ''); + expect(stripColor(stdout.toString())).toBe(''); + expect(stripColor(stderr.toString())).toBe(''); }); it('should get the levels', () => { const logger = new Logger(); - assert.deepStrictEqual(logger.getLevels(), ['trace', 'debug', 'info', 'warn', 'error']); + expect(logger.getLevels()).toEqual(['trace', 'debug', 'info', 'warn', 'error']); }); it('should display the banner', () => { @@ -200,23 +169,23 @@ describe('Logger', () => { ].join('\n'), 's'); logger.setBanner({ name: 'foo', copyright: 'bar', version: '1.2.3', sdkVersion: '4.5.6' }); - assert.match(stripColor(logger.getBanner()), expected); + expect(stripColor(logger.getBanner())).toMatch(expected); - assert.strictEqual(logger.bannerEnabled(), true); - assert.strictEqual(logger.skipBanner(), false); - assert.strictEqual(logger.bannerWasRendered(), false); - assert.strictEqual(emittedCount, 0); + expect(logger.bannerEnabled()).toBe(true); + expect(logger.skipBanner()).toBe(false); + expect(logger.bannerWasRendered()).toBe(false); + expect(emittedCount).toBe(0); logger.banner(); - assert.strictEqual(logger.bannerWasRendered(), true); - assert.strictEqual(emittedCount, 1); + expect(logger.bannerWasRendered()).toBe(true); + expect(emittedCount).toBe(1); - assert.match(stripColor(stdout.toString()), expected); + expect(stripColor(stdout.toString())).toMatch(expected); logger.banner(); - assert.strictEqual(emittedCount, 1); + expect(emittedCount).toBe(1); - assert.match(stripColor(stdout.toString()), expected); + expect(stripColor(stdout.toString())).toMatch(expected); }); it('should not render banner if disabled', () => { @@ -234,15 +203,15 @@ describe('Logger', () => { logger.setBanner({ name: 'foo', copyright: 'bar', version: '1.2.3', sdkVersion: '4.5.6' }); logger.bannerEnabled(false); - assert.strictEqual(logger.bannerEnabled(), false); - assert.strictEqual(logger.skipBanner(), false); - assert.strictEqual(logger.bannerWasRendered(), false); - assert.strictEqual(emittedCount, 0); + expect(logger.bannerEnabled()).toBe(false); + expect(logger.skipBanner()).toBe(false); + expect(logger.bannerWasRendered()).toBe(false); + expect(emittedCount).toBe(0); logger.banner(); - assert.strictEqual(logger.bannerWasRendered(), false); - assert.strictEqual(emittedCount, 0); - assert.strictEqual(stripColor(stdout.toString()), ''); + expect(logger.bannerWasRendered()).toBe(false); + expect(emittedCount).toBe(0); + expect(stripColor(stdout.toString())).toBe(''); }); it('should not render banner if skipped', () => { @@ -259,14 +228,14 @@ describe('Logger', () => { logger.setBanner({ name: 'foo', copyright: 'bar', version: '1.2.3', sdkVersion: '4.5.6' }); - assert.strictEqual(logger.skipBanner(), false); + expect(logger.skipBanner()).toBe(false); logger.skipBanner(true); - assert.strictEqual(logger.skipBanner(), true); + expect(logger.skipBanner()).toBe(true); logger.banner(); - assert.strictEqual(logger.bannerWasRendered(), false); - assert.strictEqual(emittedCount, 0); - assert.strictEqual(stripColor(stdout.toString()), ''); + expect(logger.bannerWasRendered()).toBe(false); + expect(emittedCount).toBe(0); + expect(stripColor(stdout.toString())).toBe(''); }); it('should log with timestamps', () => { @@ -277,11 +246,11 @@ describe('Logger', () => { stderr }); - assert.strictEqual(logger.timestampEnabled(), false); - assert.strictEqual(logger.timestampEnabled(false), false); - assert.strictEqual(logger.timestampEnabled(true), true); + expect(logger.timestampEnabled()).toBe(false); + expect(logger.timestampEnabled(false)).toBe(false); + expect(logger.timestampEnabled(true)).toBe(true); logger.info('- [INFO] info test'); - assert.match(stripColor(stdout.toString()), /\[INFO\] info test/); + expect(stripColor(stdout.toString())).toMatch(/\[INFO\] info test/); }); }); diff --git a/test/util/progress.test.js b/test/util/progress.test.js index be1ae8b0d..49bb8ad6e 100644 --- a/test/util/progress.test.js +++ b/test/util/progress.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { ProgressBar } from '../../src/util/progress.js'; import { MockStream } from '../helpers/mock-stream.js'; @@ -27,9 +26,7 @@ describe('progress', () => { }, 100); }); - assert.strictEqual( - stream.buffer, - ' 10% [====....................................] 1 of 10 (10%)\n' + expect(stream.buffer).toBe(' 10% [====....................................] 1 of 10 (10%)\n' + ' 20% [========................................] 2 of 10 (20%)\n' + ' 30% [============............................] 3 of 10 (30%)\n' + ' 40% [================........................] 4 of 10 (40%)\n' @@ -38,8 +35,7 @@ describe('progress', () => { + ' 70% [============================............] 7 of 10 (70%)\n' + ' 80% [================================........] 8 of 10 (80%)\n' + ' 90% [====================================....] 9 of 10 (90%)\n' - + '100% [========================================] 10 of 10 (100%)\n' - ); + + '100% [========================================] 10 of 10 (100%)\n'); }); it('should render a progress bar with swapped tick() params', async () => { @@ -65,9 +61,7 @@ describe('progress', () => { }, 100); }); - assert.strictEqual( - stream.buffer, - ' 10% [====....................................] 1 of 10 (10%)\n' + expect(stream.buffer).toBe(' 10% [====....................................] 1 of 10 (10%)\n' + ' 20% [========................................] 2 of 10 (20%)\n' + ' 30% [============............................] 3 of 10 (30%)\n' + ' 40% [================........................] 4 of 10 (40%)\n' @@ -76,8 +70,7 @@ describe('progress', () => { + ' 70% [============================............] 7 of 10 (70%)\n' + ' 80% [================================........] 8 of 10 (80%)\n' + ' 90% [====================================....] 9 of 10 (90%)\n' - + '100% [========================================] 10 of 10 (100%)\n' - ); + + '100% [========================================] 10 of 10 (100%)\n'); }); it('should render custom tokens', async () => { @@ -105,9 +98,7 @@ describe('progress', () => { }, 100); }); - assert.strictEqual( - stream.buffer, - ' 10% [====....................................] 0.1\n' + expect(stream.buffer).toBe(' 10% [====....................................] 0.1\n' + ' 20% [========................................] 0.2\n' + ' 30% [============............................] 0.3\n' + ' 40% [================........................] 0.4\n' @@ -116,7 +107,6 @@ describe('progress', () => { + ' 70% [============================............] 0.7\n' + ' 80% [================================........] 0.8\n' + ' 90% [====================================....] 0.9\n' - + '100% [========================================] 1.0\n' - ); + + '100% [========================================] 1.0\n'); }); }); diff --git a/test/util/proxy.test.js b/test/util/proxy.test.js index d03c404d4..6b1b34ff2 100644 --- a/test/util/proxy.test.js +++ b/test/util/proxy.test.js @@ -1,5 +1,4 @@ -import { afterEach, describe, it } from 'node:test'; -import assert from 'node:assert'; +import { afterEach, describe, it, expect } from 'vitest'; import { detect } from '../../src/util/proxy.js'; describe('proxy', () => { @@ -11,26 +10,26 @@ describe('proxy', () => { it('should detect if proxy is present', async () => { let result = await detect(); if (typeof result === 'object') { - assert(Object.hasOwn(result, 'valid')); + expect(Object.hasOwn(result, 'valid')).toBe(true); } else { - assert.strictEqual(result, false); + expect(result).toBe(false); } process.env.http_proxy = 'https://user:pass@localhost:8888'; result = await detect(); if (typeof result === 'object') { - assert(Object.hasOwn(result, 'valid')); + expect(Object.hasOwn(result, 'valid')).toBe(true); } else { - assert.strictEqual(result, false); + expect(result).toBe(false); } delete process.env.http_proxy; process.env.https_proxy = 'https://user:pass@localhost:8888'; result = await detect(); if (typeof result === 'object') { - assert(Object.hasOwn(result, 'valid')); + expect(Object.hasOwn(result, 'valid')).toBe(true); } else { - assert.strictEqual(result, false); + expect(result).toBe(false); } delete process.env.https_proxy; }); diff --git a/test/util/request.test.js b/test/util/request.test.js index 096a40c89..8e343d65c 100644 --- a/test/util/request.test.js +++ b/test/util/request.test.js @@ -1,5 +1,4 @@ -import { afterEach, beforeEach, describe, it } from 'node:test'; -import assert from 'node:assert'; +import { afterEach, beforeEach, describe, it, expect } from 'vitest'; import { request } from '../../src/util/request.js'; import { ticonfig } from '../../src/util/ticonfig.js'; import { createServer } from 'node:http'; @@ -20,7 +19,7 @@ describe('request', () => { it('should fetch TiDev page', async () => { const res = await request('https://github.com'); await res.body.text(); - assert.strictEqual(res.statusCode, 200); + expect(res.statusCode).toBe(200); }); it('should fetch TiDev page via proxy', async () => { @@ -40,7 +39,7 @@ describe('request', () => { const res = await request('https://github.com'); await res.body.text(); - assert.strictEqual(res.statusCode, 200); + expect(res.statusCode).toBe(200); } finally { for (const conn of Object.values(connections)) { conn.destroy(); diff --git a/test/util/suggest.test.js b/test/util/suggest.test.js index 6262a6fcf..f8e27c36d 100644 --- a/test/util/suggest.test.js +++ b/test/util/suggest.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { suggest } from '../../src/util/suggest.js'; import { stripColor } from '../helpers/strip-color.js'; @@ -7,35 +6,20 @@ const cmds = ['build', 'clean', 'config', 'create', 'info']; describe('suggest', () => { it('should suggest a value', () => { - assert.strictEqual( - stripColor(suggest('buid', cmds)), - 'Did you mean this?\n build\n\n' - ); + expect(stripColor(suggest('buid', cmds))).toBe('Did you mean this?\n build\n\n'); }); it('should suggest multiple values', () => { - assert.strictEqual( - stripColor(suggest('cre', cmds)), - 'Did you mean this?\n clean\n create\n\n' - ); + expect(stripColor(suggest('cre', cmds))).toBe('Did you mean this?\n clean\n create\n\n'); - assert.strictEqual( - stripColor(suggest('eat', cmds)), - 'Did you mean this?\n clean\n create\n\n' - ); + expect(stripColor(suggest('eat', cmds))).toBe('Did you mean this?\n clean\n create\n\n'); }); it('should suggest everything if empty', () => { - assert.strictEqual( - stripColor(suggest('', cmds)), - 'Did you mean this?\n build\n clean\n config\n create\n info\n\n' - ); + expect(stripColor(suggest('', cmds))).toBe('Did you mean this?\n build\n clean\n config\n create\n info\n\n'); }); it('should not find any suggestions', () => { - assert.strictEqual( - stripColor(suggest('zzz', cmds)), - '' - ); + expect(stripColor(suggest('zzz', cmds))).toBe(''); }); }); diff --git a/test/util/tiapp.test.js b/test/util/tiapp.test.js index 970429d39..4c7348367 100644 --- a/test/util/tiapp.test.js +++ b/test/util/tiapp.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { Tiapp } from '../../src/util/tiapp.js'; import { join } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -12,7 +11,7 @@ describe('Tiapp', () => { await tiapp.load(join(fixturesDir, 'hassdk.xml')); const value = await tiapp.select1('//sdk-version', '0.0.0'); - assert.strictEqual(value, '1.2.3'); + expect(value).toBe('1.2.3'); }); it('should load a tiapp without an SDK version', async () => { @@ -20,10 +19,10 @@ describe('Tiapp', () => { await tiapp.load(join(fixturesDir, 'nosdk.xml')); let value = await tiapp.select1('//sdk-version', '0.0.0'); - assert.strictEqual(value, '0.0.0'); + expect(value).toBe('0.0.0'); value = await tiapp.select1('//sdk-version'); - assert.strictEqual(value, undefined); + expect(value).toBe(undefined); }); it('should load a tiapp without a pin', async () => { @@ -31,39 +30,30 @@ describe('Tiapp', () => { await tiapp.load(join(fixturesDir, 'nopin.xml')); const value = await tiapp.select1('//sdk-version', '0.0.0'); - assert.strictEqual(value, '1.2.3'); + expect(value).toBe('1.2.3'); }); it('should error if file does not exist', async () => { const tiapp = new Tiapp(); - await assert.rejects( - tiapp.load(join(fixturesDir, 'does_not_exist')), - { - name: 'Error', - message: /^File not found:/ - } - ); + await expect(tiapp.load(join(fixturesDir, 'does_not_exist'))).rejects.toMatchObject({ + name: 'Error', + message: expect.stringMatching(/^File not found:/) + }); }); it('should error selecting if no file loaded', async () => { const tiapp = new Tiapp(); - await assert.rejects( - tiapp.select1(), - { - name: 'Error', - message: 'No tiapp.xml loaded' - } - ); + await expect(tiapp.select1()).rejects.toMatchObject({ + name: 'Error', + message: 'No tiapp.xml loaded' + }); }); it('should error loading if file is malformed', async () => { const tiapp = new Tiapp(); - await assert.rejects( - tiapp.load(join(fixturesDir, 'bad.xml')), - { - name: 'ParseError', - message: 'unclosed xml tag(s): ti:app' - } - ); + await expect(tiapp.load(join(fixturesDir, 'bad.xml'))).rejects.toMatchObject({ + name: 'ParseError', + message: 'unclosed xml tag(s): ti:app' + }); }); }); diff --git a/test/util/ticonfig.test.js b/test/util/ticonfig.test.js index eba3429cb..7c5b0f3c7 100644 --- a/test/util/ticonfig.test.js +++ b/test/util/ticonfig.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { TiConfig } from '../../src/util/ticonfig.js'; import { join } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -14,43 +13,37 @@ describe('TiConfig', () => { }); it('should error load a bad config file', () => { - assert.throws( - () => { + expect(() => { new TiConfig(join(fixturesDir, 'bad.json')); - }, - { - name: 'Error', - message: /^Unable to parse config file/ - } - ); + }).toThrow(expect.objectContaining({ + name: 'Error', + message: expect.stringMatching(/^Unable to parse config file/) + })); }); it('should error if file does not exist', () => { - assert.throws( - () => { + expect(() => { new TiConfig(join(fixturesDir, 'does_not_exist')); - }, - { - name: 'Error', - message: /^Unable to open config file/ - } - ); + }).toThrow(expect.objectContaining({ + name: 'Error', + message: expect.stringMatching(/^Unable to open config file/) + })); }); it('should get values', () => { const cfg = new TiConfig(join(fixturesDir, 'good.json')); - assert.strictEqual(cfg.get('user.name'), 'Titanium'); - assert.strictEqual(cfg.get('does.not.exist'), undefined); - assert.strictEqual(cfg.get('does.not.exist', 'Foo'), 'Foo'); - assert.strictEqual(cfg.user.name, 'Titanium'); - assert.strictEqual(cfg.get().user.name, 'Titanium'); - assert.strictEqual(cfg.get('foo', 'bar'), 'bar'); - assert.strictEqual(cfg.get('cli.width', 80), 80); + expect(cfg.get('user.name')).toBe('Titanium'); + expect(cfg.get('does.not.exist')).toBe(undefined); + expect(cfg.get('does.not.exist', 'Foo')).toBe('Foo'); + expect(cfg.user.name).toBe('Titanium'); + expect(cfg.get().user.name).toBe('Titanium'); + expect(cfg.get('foo', 'bar')).toBe('bar'); + expect(cfg.get('cli.width', 80)).toBe(80); }); it('should get the config path', () => { const cfg = new TiConfig(join(fixturesDir, 'good.json')); - assert.match(cfg.getConfigPath(), /good\.json/); + expect(cfg.getConfigPath()).toMatch(/good\.json/); }); it('should apply values', () => { @@ -62,57 +55,57 @@ describe('TiConfig', () => { nil: 'null', empty: '' }); - assert.strictEqual(cfg.get('truthy'), true); - assert.strictEqual(cfg.get('falsey'), false); - assert.strictEqual(cfg.get('undef'), ''); - assert.strictEqual(cfg.get('nil'), null); - assert.strictEqual(cfg.get('empty'), ''); + expect(cfg.get('truthy')).toBe(true); + expect(cfg.get('falsey')).toBe(false); + expect(cfg.get('undef')).toBe(''); + expect(cfg.get('nil')).toBe(null); + expect(cfg.get('empty')).toBe(''); }); it('should set values', () => { const cfg = new TiConfig(join(fixturesDir, 'good.json')); cfg.set('foo', 'bar'); - assert.strictEqual(cfg.get('foo'), 'bar'); - assert.strictEqual(cfg.foo, 'bar'); + expect(cfg.get('foo')).toBe('bar'); + expect(cfg.foo).toBe('bar'); cfg.set('wiz.pow', 'baz'); - assert.deepStrictEqual(cfg.get('wiz.pow'), 'baz'); - assert.deepStrictEqual(cfg.get('wiz'), { pow: 'baz' }); - assert.deepStrictEqual(cfg.wiz, { pow: 'baz' }); + expect(cfg.get('wiz.pow')).toEqual('baz'); + expect(cfg.get('wiz')).toEqual({ pow: 'baz' }); + expect(cfg.wiz).toEqual({ pow: 'baz' }); cfg.set('user.favorite.food', 'pizza'); - assert.strictEqual(cfg.user.favorite.food, 'pizza'); + expect(cfg.user.favorite.food).toBe('pizza'); cfg.set('bar'); - assert.strictEqual(cfg.get('bar'), ''); + expect(cfg.get('bar')).toBe(''); cfg.set('bar', 'null'); - assert.strictEqual(cfg.get('bar'), null); + expect(cfg.get('bar')).toBe(null); cfg.set('bar', null); - assert.strictEqual(cfg.get('bar'), null); + expect(cfg.get('bar')).toBe(null); cfg.set('bar', true); - assert.strictEqual(cfg.get('bar'), true); + expect(cfg.get('bar')).toBe(true); cfg.set('bar', 'true'); - assert.strictEqual(cfg.get('bar'), true); + expect(cfg.get('bar')).toBe(true); cfg.set('bar', false); - assert.strictEqual(cfg.get('bar'), false); + expect(cfg.get('bar')).toBe(false); cfg.set('bar', 'false'); - assert.strictEqual(cfg.get('bar'), false); + expect(cfg.get('bar')).toBe(false); cfg.set('bar', 123); - assert.strictEqual(cfg.get('bar'), 123); + expect(cfg.get('bar')).toBe(123); cfg.set('bar', 1.23); - assert.strictEqual(cfg.get('bar'), '1.23'); + expect(cfg.get('bar')).toBe('1.23'); cfg.set('bar', ''); - assert.strictEqual(cfg.get('bar'), ''); - assert.strictEqual(cfg.get('bar', 123), 123); + expect(cfg.get('bar')).toBe(''); + expect(cfg.get('bar', 123)).toBe(123); }); it('should save the config', async () => { @@ -129,10 +122,10 @@ describe('TiConfig', () => { cfg.save(); const json = JSON.parse(await readFile(tmpFile, 'utf-8')); - assert.strictEqual(json.user.name, 'Titanium'); - assert.strictEqual(json.foo, 'bar'); - assert.deepStrictEqual(json.wiz, { pow: 123 }); - assert.strictEqual(json.baz, undefined); + expect(json.user.name).toBe('Titanium'); + expect(json.foo).toBe('bar'); + expect(json.wiz).toEqual({ pow: 123 }); + expect(json.baz).toBe(undefined); } finally { await unlink(tmpFile); } @@ -147,15 +140,12 @@ describe('TiConfig', () => { const cfg = new TiConfig(join(fixturesDir, 'good.json')); cfg.setConfigPath(dir); - assert.throws( - () => { + expect(() => { cfg.save(); - }, - { - name: 'Error', - message: /Unable to write config file/ - } - ); + }).toThrow(expect.objectContaining({ + name: 'Error', + message: expect.stringMatching(/Unable to write config file/) + })); } finally { await rmdir(dir); } @@ -163,15 +153,12 @@ describe('TiConfig', () => { it('should access error saving the file', async () => { const cfg = new TiConfig(join(fixturesDir, 'good.json')); - assert.throws( - () => { + expect(() => { cfg.setConfigPath(join(tmpdir(), 'titanium-cli/foo/bar/config.json')); cfg.save(); - }, - { - name: 'Error', - message: /Unable to write config file/ - } - ); + }).toThrow(expect.objectContaining({ + name: 'Error', + message: expect.stringMatching(/Unable to write config file/) + })); }); }); diff --git a/test/util/tierror.test.js b/test/util/tierror.test.js index 8c47d6a8c..7149fee0d 100644 --- a/test/util/tierror.test.js +++ b/test/util/tierror.test.js @@ -1,21 +1,20 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { TiError } from '../../src/util/tierror.js'; describe('TiError', () => { it('should support no meta info', () => { const e = new TiError('oh no'); - assert.strictEqual(e.toString(), 'Error: oh no'); + expect(e.toString()).toBe('Error: oh no'); }); it('should mix in meta info', () => { const e = new TiError('oh no', { reason: 'something' }); - assert.strictEqual(e.toString(), 'Error: oh no'); - assert.strictEqual(e.reason, 'something'); + expect(e.toString()).toBe('Error: oh no'); + expect(e.reason).toBe('something'); }); it('should also be an error', () => { const e = new TiError('oh no'); - assert(e instanceof Error); + expect(e).toBeInstanceOf(Error); }); }); diff --git a/test/util/timodule.test.js b/test/util/timodule.test.js index 7d6906072..0cff90cf2 100644 --- a/test/util/timodule.test.js +++ b/test/util/timodule.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { detect } from '../../src/util/timodule.js'; import { join } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -13,19 +12,19 @@ const goodConfig = join(fileURLToPath(import.meta.url), '../fixtures/ticonfig/go describe('timodule', () => { it('should find nothing if no search paths', async () => { let results = await detect(); - assert.deepStrictEqual(results, {}); + expect(results).toEqual({}); results = await detect(null); - assert.deepStrictEqual(results, {}); + expect(results).toEqual({}); results = await detect({}); - assert.deepStrictEqual(results, {}); + expect(results).toEqual({}); results = await detect( { global: null }, new TiConfig(goodConfig) ); - assert.deepStrictEqual(results, { + expect(results).toEqual({ global: {} }); }); @@ -35,7 +34,7 @@ describe('timodule', () => { { empty: join(fixturesDir, 'empty') }, new TiConfig(goodConfig) ); - assert.deepStrictEqual(results, { + expect(results).toEqual({ empty: {} }); }); @@ -50,20 +49,20 @@ describe('timodule', () => { new TiConfig(goodConfig) ); - assert(Object.hasOwn(results, 'global')); - assert(Object.hasOwn(results.global, 'android')); - assert(Object.hasOwn(results.global, 'commonjs')); - assert(Object.hasOwn(results.global, 'ios')); + expect(Object.hasOwn(results, 'global')).toBe(true); + expect(Object.hasOwn(results.global, 'android')).toBe(true); + expect(Object.hasOwn(results.global, 'commonjs')).toBe(true); + expect(Object.hasOwn(results.global, 'ios')).toBe(true); - assert(Object.hasOwn(results.global.android, 'com.test.module')); + expect(Object.hasOwn(results.global.android, 'com.test.module')).toBe(true); let mod = results.global.android['com.test.module']; - assert(Object.hasOwn(mod, '1.0.0')); - assert(Object.hasOwn(mod['1.0.0'], 'version')); - assert.strictEqual(mod['1.0.0'].version, '1.0.0'); - assert(Object.hasOwn(mod['1.0.0'], 'platform')); - assert.deepStrictEqual(mod['1.0.0'].platform, ['android']); - assert(Object.hasOwn(mod['1.0.0'], 'manifest')); - assert.deepStrictEqual(mod['1.0.0'].manifest, { + expect(Object.hasOwn(mod, '1.0.0')).toBe(true); + expect(Object.hasOwn(mod['1.0.0'], 'version')).toBe(true); + expect(mod['1.0.0'].version).toBe('1.0.0'); + expect(Object.hasOwn(mod['1.0.0'], 'platform')).toBe(true); + expect(mod['1.0.0'].platform).toEqual(['android']); + expect(Object.hasOwn(mod['1.0.0'], 'manifest')).toBe(true); + expect(mod['1.0.0'].manifest).toEqual({ version: '1.0.0', apiversion: 4, architectures: ['arm64-v8a', 'armeabi-v7a', 'x86'], @@ -78,15 +77,15 @@ describe('timodule', () => { minsdk: '7.2.0' }); - assert(Object.hasOwn(results.global.commonjs, 'com.test.module')); + expect(Object.hasOwn(results.global.commonjs, 'com.test.module')).toBe(true); mod = results.global.commonjs['com.test.module']; - assert(Object.hasOwn(mod, '1.0.0')); - assert(Object.hasOwn(mod['1.0.0'], 'version')); - assert.strictEqual(mod['1.0.0'].version, '1.0.0'); - assert(Object.hasOwn(mod['1.0.0'], 'platform')); - assert.deepStrictEqual(mod['1.0.0'].platform, ['commonjs']); - assert(Object.hasOwn(mod['1.0.0'], 'manifest')); - assert.deepStrictEqual(mod['1.0.0'].manifest, { + expect(Object.hasOwn(mod, '1.0.0')).toBe(true); + expect(Object.hasOwn(mod['1.0.0'], 'version')).toBe(true); + expect(mod['1.0.0'].version).toBe('1.0.0'); + expect(Object.hasOwn(mod['1.0.0'], 'platform')).toBe(true); + expect(mod['1.0.0'].platform).toEqual(['commonjs']); + expect(Object.hasOwn(mod['1.0.0'], 'manifest')).toBe(true); + expect(mod['1.0.0'].manifest).toEqual({ version: '1.0.0', description: 'testModule', author: 'Your Name', @@ -99,13 +98,13 @@ describe('timodule', () => { minsdk: '7.2.0' }); - assert(Object.hasOwn(mod, '1.0')); - assert(Object.hasOwn(mod['1.0'], 'version')); - assert.strictEqual(mod['1.0'].version, '1.0'); - assert(Object.hasOwn(mod['1.0'], 'platform')); - assert.deepStrictEqual(mod['1.0'].platform, ['commonjs']); - assert(Object.hasOwn(mod['1.0'], 'manifest')); - assert.deepStrictEqual(mod['1.0'].manifest, { + expect(Object.hasOwn(mod, '1.0')).toBe(true); + expect(Object.hasOwn(mod['1.0'], 'version')).toBe(true); + expect(mod['1.0'].version).toBe('1.0'); + expect(Object.hasOwn(mod['1.0'], 'platform')).toBe(true); + expect(mod['1.0'].platform).toEqual(['commonjs']); + expect(Object.hasOwn(mod['1.0'], 'manifest')).toBe(true); + expect(mod['1.0'].manifest).toEqual({ version: '1.0', description: 'testModule', author: 'Your Name', @@ -118,15 +117,15 @@ describe('timodule', () => { minsdk: '7.2.0' }); - assert(Object.hasOwn(results.global.ios, 'com.test.module')); + expect(Object.hasOwn(results.global.ios, 'com.test.module')).toBe(true); mod = results.global.ios['com.test.module']; - assert(Object.hasOwn(mod, '1.0.0')); - assert(Object.hasOwn(mod['1.0.0'], 'version')); - assert.strictEqual(mod['1.0.0'].version, '1.0.0'); - assert(Object.hasOwn(mod['1.0.0'], 'platform')); - assert.deepStrictEqual(mod['1.0.0'].platform, ['ios']); - assert(Object.hasOwn(mod['1.0.0'], 'manifest')); - assert.deepStrictEqual(mod['1.0.0'].manifest, { + expect(Object.hasOwn(mod, '1.0.0')).toBe(true); + expect(Object.hasOwn(mod['1.0.0'], 'version')).toBe(true); + expect(mod['1.0.0'].version).toBe('1.0.0'); + expect(Object.hasOwn(mod['1.0.0'], 'platform')).toBe(true); + expect(mod['1.0.0'].platform).toEqual(['ios']); + expect(Object.hasOwn(mod['1.0.0'], 'manifest')).toBe(true); + expect(mod['1.0.0'].manifest).toEqual({ version: '1.0.0', apiversion: 2, architectures: ['armv7', 'arm64', 'i386', 'x86_64'], diff --git a/test/util/tisdk.test.js b/test/util/tisdk.test.js index e47e8d6fa..4dd046f6a 100644 --- a/test/util/tisdk.test.js +++ b/test/util/tisdk.test.js @@ -1,5 +1,4 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { getTitaniumSDKPaths } from '../../src/util/tisdk.js'; import { join } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -16,7 +15,7 @@ describe('tisdk', () => { try { let result = await getTitaniumSDKPaths(config); - assert.deepStrictEqual(result, { + expect(result).toEqual({ defaultInstallLocation: undefined, sdkPaths: [] }); @@ -25,7 +24,7 @@ describe('tisdk', () => { config.set('sdk.defaultInstallLocation', tmpSDKDir); result = await getTitaniumSDKPaths(config); - assert.deepStrictEqual(result, { + expect(result).toEqual({ defaultInstallLocation: tmpSDKDir, sdkPaths: [tmpSDKDir] }); diff --git a/test/util/unique.test.js b/test/util/unique.test.js index 51768f8e2..8b6bc507a 100644 --- a/test/util/unique.test.js +++ b/test/util/unique.test.js @@ -1,16 +1,14 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import { unique } from '../../src/util/unique.js'; describe('unique', () => { it('should return empty array if no elements', () => { - assert.deepStrictEqual(unique(), []); - assert.deepStrictEqual(unique([]), []); + expect(unique()).toEqual([]); + expect(unique([])).toEqual([]); }); it('should remove duplicates, null, and undefined values', () => { - assert.deepStrictEqual( - unique([ + expect(unique([ 1, '1', 'a', @@ -23,13 +21,11 @@ describe('unique', () => { true, null, undefined - ]), - [ + ])).toEqual([ 1, '1', 'a', true - ] - ); + ]); }); }); diff --git a/test/util/version.test.js b/test/util/version.test.js index 02f9b5432..d90f4556d 100644 --- a/test/util/version.test.js +++ b/test/util/version.test.js @@ -1,257 +1,253 @@ -import { describe, it } from 'node:test'; -import assert from 'node:assert'; +import { describe, it, expect } from 'vitest'; import * as version from '../../src/util/version.js'; describe('version', () => { describe('compare', () => { it('should compare two versions', () => { - assert(version.compare('1.0.0', '2.0.0') < 0); - assert(version.compare('2.0.0', '1.0.0') > 0); - assert.strictEqual(version.compare('1.0.0', '1.0.0'), 0); + expect(version.compare('1.0.0', '2.0.0') ).toBeLessThan(0); + expect(version.compare('2.0.0', '1.0.0')).toBeGreaterThan(0); + expect(version.compare('1.0.0', '1.0.0')).toBe(0); - assert(version.compare('1.1.0', '1.2.0') < 0); - assert(version.compare('1.2.0', '1.1.0') > 0); - assert.strictEqual(version.compare('1.1.0', '1.1.0'), 0); + expect(version.compare('1.1.0', '1.2.0') ).toBeLessThan(0); + expect(version.compare('1.2.0', '1.1.0') ).toBeGreaterThan(0); + expect(version.compare('1.1.0', '1.1.0')).toBe(0); - assert(version.compare('1.1.1', '1.1.2') < 0); - assert(version.compare('1.1.2', '1.1.1') > 0); - assert.strictEqual(version.compare('1.1.1', '1.1.1'), 0); + expect(version.compare('1.1.1', '1.1.2') ).toBeLessThan(0); + expect(version.compare('1.1.2', '1.1.1') ).toBeGreaterThan(0); + expect(version.compare('1.1.1', '1.1.1')).toBe(0); - assert(version.compare('1.0.0.v20220102', '1.0.0.v20230809') < 0); - assert(version.compare('1.0.0.v20230809', '1.0.0.v20220102') > 0); - assert.strictEqual(version.compare('1.0.0.v20220102', '1.0.0.v20220102'), 0); + expect(version.compare('1.0.0.v20220102', '1.0.0.v20230809') ).toBeLessThan(0); + expect(version.compare('1.0.0.v20230809', '1.0.0.v20220102') ).toBeGreaterThan(0); + expect(version.compare('1.0.0.v20220102', '1.0.0.v20220102')).toBe(0); - assert(version.compare('1.0.0', '1.0.0.v20220102') < 0); - assert(version.compare('1.0.0.v20220102', '1.0.0') > 0); + expect(version.compare('1.0.0', '1.0.0.v20220102') ).toBeLessThan(0); + expect(version.compare('1.0.0.v20220102', '1.0.0')).toBeGreaterThan(0); }); }); describe('format', () => { it('should format a version', () => { - assert.strictEqual(version.format(0), '0'); - assert.strictEqual(version.format('1'), '1'); - assert.strictEqual(version.format('1-tag'), '1-tag'); - - assert.strictEqual(version.format('1', 1), '1'); - assert.strictEqual(version.format('1.2', 1), '1.2'); - assert.strictEqual(version.format('1.2-tag', 1), '1.2-tag'); - assert.strictEqual(version.format('1.2-tag', 1, 3, true), '1.2'); - - assert.strictEqual(version.format('1', 2), '1.0'); - assert.strictEqual(version.format('1.2', 2), '1.2'); - assert.strictEqual(version.format('1.2-tag', 2), '1.2-tag'); - assert.strictEqual(version.format('1.2-tag', 2, 3, true), '1.2'); - - assert.strictEqual(version.format('1.2.3', 3), '1.2.3'); - assert.strictEqual(version.format('1.2.3-tag', 3, 3), '1.2.3-tag'); - assert.strictEqual(version.format('1.2.3-tag', 3, 3, true), '1.2.3'); - - assert.strictEqual(version.format('1.2', 1, 2), '1.2'); - assert.strictEqual(version.format('1.2-tag', 1, 2), '1.2-tag'); - assert.strictEqual(version.format('1.2-tag', 1, 2, true), '1.2'); - - assert.strictEqual(version.format('1.2.3', 1, 2), '1.2'); - assert.strictEqual(version.format('1.2.3-tag', 1, 2), '1.2'); - assert.strictEqual(version.format('1.2.3-tag', 1, 2, true), '1.2'); + expect(version.format(0)).toBe('0'); + expect(version.format('1')).toBe('1'); + expect(version.format('1-tag')).toBe('1-tag'); + + expect(version.format('1', 1)).toBe('1'); + expect(version.format('1.2', 1)).toBe('1.2'); + expect(version.format('1.2-tag', 1)).toBe('1.2-tag'); + expect(version.format('1.2-tag', 1, 3, true)).toBe('1.2'); + + expect(version.format('1', 2)).toBe('1.0'); + expect(version.format('1.2', 2)).toBe('1.2'); + expect(version.format('1.2-tag', 2)).toBe('1.2-tag'); + expect(version.format('1.2-tag', 2, 3, true)).toBe('1.2'); + + expect(version.format('1.2.3', 3)).toBe('1.2.3'); + expect(version.format('1.2.3-tag', 3, 3)).toBe('1.2.3-tag'); + expect(version.format('1.2.3-tag', 3, 3, true)).toBe('1.2.3'); + + expect(version.format('1.2', 1, 2)).toBe('1.2'); + expect(version.format('1.2-tag', 1, 2)).toBe('1.2-tag'); + expect(version.format('1.2-tag', 1, 2, true)).toBe('1.2'); + + expect(version.format('1.2.3', 1, 2)).toBe('1.2'); + expect(version.format('1.2.3-tag', 1, 2)).toBe('1.2'); + expect(version.format('1.2.3-tag', 1, 2, true)).toBe('1.2'); }); }); describe('eq', () => { it('should determine if two versions equal each other', () => { - assert.strictEqual(version.eq('1', '1'), true); - assert.strictEqual(version.eq('1.2', '1.2'), true); - assert.strictEqual(version.eq('1.2.3', '1.2.3'), true); - assert.strictEqual(version.eq('1.2.3.4', '1.2.3.4'), true); - assert.strictEqual(version.eq('1.2.3.4', '1.2.3.5'), true); - - assert.strictEqual(version.eq('1', '2'), false); - assert.strictEqual(version.eq('1.2', '2.2'), false); - assert.strictEqual(version.eq('1.2.3', '2.2.3'), false); - assert.strictEqual(version.eq('1.2.3.4', '2.2.3.4'), false); - assert.strictEqual(version.eq('1.2.3.4', '2.2.3.5'), false); + expect(version.eq('1', '1')).toBe(true); + expect(version.eq('1.2', '1.2')).toBe(true); + expect(version.eq('1.2.3', '1.2.3')).toBe(true); + expect(version.eq('1.2.3.4', '1.2.3.4')).toBe(true); + expect(version.eq('1.2.3.4', '1.2.3.5')).toBe(true); + + expect(version.eq('1', '2')).toBe(false); + expect(version.eq('1.2', '2.2')).toBe(false); + expect(version.eq('1.2.3', '2.2.3')).toBe(false); + expect(version.eq('1.2.3.4', '2.2.3.4')).toBe(false); + expect(version.eq('1.2.3.4', '2.2.3.5')).toBe(false); }); }); describe('lt', () => { it('should determine if a version is less than', () => { - assert.strictEqual(version.lt('1', '1'), false); - assert.strictEqual(version.lt('1.2', '1.2'), false); - assert.strictEqual(version.lt('1.2.3', '1.2.3'), false); - assert.strictEqual(version.lt('1.2.3.4', '1.2.3.4'), false); - assert.strictEqual(version.lt('1.2.3.4', '1.2.3.5'), false); - - assert.strictEqual(version.lt('1', '2'), true); - assert.strictEqual(version.lt('1.2', '1.3'), true); - assert.strictEqual(version.lt('1.2', '2.2'), true); - assert.strictEqual(version.lt('1.2.3', '2.2.3'), true); - assert.strictEqual(version.lt('1.2.3.4', '2.2.3.4'), true); - assert.strictEqual(version.lt('1.2.3.4', '2.2.3.5'), true); + expect(version.lt('1', '1')).toBe(false); + expect(version.lt('1.2', '1.2')).toBe(false); + expect(version.lt('1.2.3', '1.2.3')).toBe(false); + expect(version.lt('1.2.3.4', '1.2.3.4')).toBe(false); + expect(version.lt('1.2.3.4', '1.2.3.5')).toBe(false); + + expect(version.lt('1', '2')).toBe(true); + expect(version.lt('1.2', '1.3')).toBe(true); + expect(version.lt('1.2', '2.2')).toBe(true); + expect(version.lt('1.2.3', '2.2.3')).toBe(true); + expect(version.lt('1.2.3.4', '2.2.3.4')).toBe(true); + expect(version.lt('1.2.3.4', '2.2.3.5')).toBe(true); }); }); describe('lte', () => { it('should determine if a version is less than or equal', () => { - assert.strictEqual(version.lte('1', '1'), true); - assert.strictEqual(version.lte('1.2', '1.2'), true); - assert.strictEqual(version.lte('1.2.3', '1.2.3'), true); - assert.strictEqual(version.lte('1.2.3.4', '1.2.3.4'), true); - assert.strictEqual(version.lte('1.2.3.4', '1.2.3.5'), true); - - assert.strictEqual(version.lte('1', '2'), true); - assert.strictEqual(version.lte('1.2', '1.3'), true); - assert.strictEqual(version.lte('1.2', '2.2'), true); - assert.strictEqual(version.lte('1.2.3', '2.2.3'), true); - assert.strictEqual(version.lte('1.2.3.4', '2.2.3.4'), true); - assert.strictEqual(version.lte('1.2.3.4', '2.2.3.5'), true); - - assert.strictEqual(version.lte('2', '1'), false); - assert.strictEqual(version.lte('2.2', '1.2'), false); - assert.strictEqual(version.lte('2.2.3', '1.2.3'), false); - assert.strictEqual(version.lte('2.2.3.4', '1.2.3.4'), false); - assert.strictEqual(version.lte('2.2.3.4', '1.2.3.5'), false); + expect(version.lte('1', '1')).toBe(true); + expect(version.lte('1.2', '1.2')).toBe(true); + expect(version.lte('1.2.3', '1.2.3')).toBe(true); + expect(version.lte('1.2.3.4', '1.2.3.4')).toBe(true); + expect(version.lte('1.2.3.4', '1.2.3.5')).toBe(true); + + expect(version.lte('1', '2')).toBe(true); + expect(version.lte('1.2', '1.3')).toBe(true); + expect(version.lte('1.2', '2.2')).toBe(true); + expect(version.lte('1.2.3', '2.2.3')).toBe(true); + expect(version.lte('1.2.3.4', '2.2.3.4')).toBe(true); + expect(version.lte('1.2.3.4', '2.2.3.5')).toBe(true); + + expect(version.lte('2', '1')).toBe(false); + expect(version.lte('2.2', '1.2')).toBe(false); + expect(version.lte('2.2.3', '1.2.3')).toBe(false); + expect(version.lte('2.2.3.4', '1.2.3.4')).toBe(false); + expect(version.lte('2.2.3.4', '1.2.3.5')).toBe(false); }); }); describe('gt', () => { it('should determine if a version is greater than', () => { - assert.strictEqual(version.gt('1', '1'), false); - assert.strictEqual(version.gt('1.2', '1.2'), false); - assert.strictEqual(version.gt('1.2.3', '1.2.3'), false); - assert.strictEqual(version.gt('1.2.3.4', '1.2.3.4'), false); - assert.strictEqual(version.gt('1.2.3.4', '1.2.3.5'), false); - - assert.strictEqual(version.gt('1', '2'), false); - assert.strictEqual(version.gt('1.2', '1.3'), false); - assert.strictEqual(version.gt('1.2', '2.2'), false); - assert.strictEqual(version.gt('1.2.3', '2.2.3'), false); - assert.strictEqual(version.gt('1.2.3.4', '2.2.3.4'), false); - assert.strictEqual(version.gt('1.2.3.4', '2.2.3.5'), false); - - assert.strictEqual(version.gt('2', '1'), true); - assert.strictEqual(version.gt('2.2', '1.2'), true); - assert.strictEqual(version.gt('2.2.3', '1.2.3'), true); - assert.strictEqual(version.gt('2.2.3.4', '1.2.3.4'), true); - assert.strictEqual(version.gt('2.2.3.4', '1.2.3.5'), true); + expect(version.gt('1', '1')).toBe(false); + expect(version.gt('1.2', '1.2')).toBe(false); + expect(version.gt('1.2.3', '1.2.3')).toBe(false); + expect(version.gt('1.2.3.4', '1.2.3.4')).toBe(false); + expect(version.gt('1.2.3.4', '1.2.3.5')).toBe(false); + + expect(version.gt('1', '2')).toBe(false); + expect(version.gt('1.2', '1.3')).toBe(false); + expect(version.gt('1.2', '2.2')).toBe(false); + expect(version.gt('1.2.3', '2.2.3')).toBe(false); + expect(version.gt('1.2.3.4', '2.2.3.4')).toBe(false); + expect(version.gt('1.2.3.4', '2.2.3.5')).toBe(false); + + expect(version.gt('2', '1')).toBe(true); + expect(version.gt('2.2', '1.2')).toBe(true); + expect(version.gt('2.2.3', '1.2.3')).toBe(true); + expect(version.gt('2.2.3.4', '1.2.3.4')).toBe(true); + expect(version.gt('2.2.3.4', '1.2.3.5')).toBe(true); }); }); describe('gte', () => { it('should determine if a version is greater than or equal', () => { - assert.strictEqual(version.gte('1', '1'), true); - assert.strictEqual(version.gte('1.2', '1.2'), true); - assert.strictEqual(version.gte('1.2.3', '1.2.3'), true); - assert.strictEqual(version.gte('1.2.3.4', '1.2.3.4'), true); - assert.strictEqual(version.gte('1.2.3.4', '1.2.3.5'), true); - - assert.strictEqual(version.gte('2', '1'), true); - assert.strictEqual(version.gte('1.3', '1.2'), true); - assert.strictEqual(version.gte('2.2', '1.2'), true); - assert.strictEqual(version.gte('2.2.3', '1.2.3'), true); - assert.strictEqual(version.gte('2.2.3.4', '1.2.3.4'), true); - assert.strictEqual(version.gte('2.2.3.4', '1.2.3.5'), true); - - assert.strictEqual(version.gte('1', '2'), false); - assert.strictEqual(version.gte('1.2', '2.2'), false); - assert.strictEqual(version.gte('2.2.3', '2.2.3'), true); - assert.strictEqual(version.gte('1.2.3.4', '2.2.3.4'), false); - assert.strictEqual(version.gte('1.2.3.4', '2.2.3.5'), false); + expect(version.gte('1', '1')).toBe(true); + expect(version.gte('1.2', '1.2')).toBe(true); + expect(version.gte('1.2.3', '1.2.3')).toBe(true); + expect(version.gte('1.2.3.4', '1.2.3.4')).toBe(true); + expect(version.gte('1.2.3.4', '1.2.3.5')).toBe(true); + + expect(version.gte('2', '1')).toBe(true); + expect(version.gte('1.3', '1.2')).toBe(true); + expect(version.gte('2.2', '1.2')).toBe(true); + expect(version.gte('2.2.3', '1.2.3')).toBe(true); + expect(version.gte('2.2.3.4', '1.2.3.4')).toBe(true); + expect(version.gte('2.2.3.4', '1.2.3.5')).toBe(true); + + expect(version.gte('1', '2')).toBe(false); + expect(version.gte('1.2', '2.2')).toBe(false); + expect(version.gte('2.2.3', '2.2.3')).toBe(true); + expect(version.gte('1.2.3.4', '2.2.3.4')).toBe(false); + expect(version.gte('1.2.3.4', '2.2.3.5')).toBe(false); }); }); describe('isValid', () => { it('should determine if a version is valid', () => { - assert.strictEqual(version.isValid(1), '1.0.0'); - assert.strictEqual(version.isValid('1'), '1.0.0'); - assert.strictEqual(version.isValid('1.2'), '1.2.0'); - assert.strictEqual(version.isValid('1.2.3'), '1.2.3'); - assert.strictEqual(version.isValid('1.2.3.4'), '1.2.3'); - assert.strictEqual(version.isValid('1.2.3-tag'), '1.2.3-tag'); - - assert.strictEqual(version.isValid('a'), null); + expect(version.isValid(1)).toBe('1.0.0'); + expect(version.isValid('1')).toBe('1.0.0'); + expect(version.isValid('1.2')).toBe('1.2.0'); + expect(version.isValid('1.2.3')).toBe('1.2.3'); + expect(version.isValid('1.2.3.4')).toBe('1.2.3'); + expect(version.isValid('1.2.3-tag')).toBe('1.2.3-tag'); + + expect(version.isValid('a')).toBe(null); }); }); describe('parseMin', () => { it('should parse the min version from a range', () => { - assert.strictEqual(version.parseMin('1'), '1'); - assert.strictEqual(version.parseMin('1.2'), '1.2'); - assert.strictEqual(version.parseMin('>=1.0'), '1.0'); - assert.strictEqual(version.parseMin('<1.0'), '1.0'); - assert.strictEqual(version.parseMin('>=2.3.3 <=4.2'), '2.3.3'); - assert.strictEqual(version.parseMin('>=2.3.3 <=4.2 || >=1.0'), '1.0'); - assert.strictEqual(version.parseMin('>=2.3.3 <=4.2 || 2.0'), '2.0'); + expect(version.parseMin('1')).toBe('1'); + expect(version.parseMin('1.2')).toBe('1.2'); + expect(version.parseMin('>=1.0')).toBe('1.0'); + expect(version.parseMin('<1.0')).toBe('1.0'); + expect(version.parseMin('>=2.3.3 <=4.2')).toBe('2.3.3'); + expect(version.parseMin('>=2.3.3 <=4.2 || >=1.0')).toBe('1.0'); + expect(version.parseMin('>=2.3.3 <=4.2 || 2.0')).toBe('2.0'); }); }); describe('parseMax', () => { it('should parse the max version from a range', () => { - assert.strictEqual(version.parseMax('1'), '1'); - assert.strictEqual(version.parseMax('1.2'), '1.2'); - assert.strictEqual(version.parseMax('>=1.0'), '1.0'); - assert.strictEqual(version.parseMax('<1.0'), '1.0'); - assert.strictEqual(version.parseMax('<18'), '<18'); - assert.strictEqual(version.parseMax('>=2.3.3 <=4.2'), '4.2'); - assert.strictEqual(version.parseMax('>=2.3.3 <=4.2.x'), '4.2'); - assert.strictEqual(version.parseMax('>=2.3.3 <=4.2.x', true), '4.2.x'); - assert.strictEqual(version.parseMax('>=2.3.3 <=4.2 || >=1.0'), '4.2'); - assert.strictEqual(version.parseMax('>=2.3.3 <=4.2 || 5.0'), '5.0'); + expect(version.parseMax('1')).toBe('1'); + expect(version.parseMax('1.2')).toBe('1.2'); + expect(version.parseMax('>=1.0')).toBe('1.0'); + expect(version.parseMax('<1.0')).toBe('1.0'); + expect(version.parseMax('<18')).toBe('<18'); + expect(version.parseMax('>=2.3.3 <=4.2')).toBe('4.2'); + expect(version.parseMax('>=2.3.3 <=4.2.x')).toBe('4.2'); + expect(version.parseMax('>=2.3.3 <=4.2.x', true)).toBe('4.2.x'); + expect(version.parseMax('>=2.3.3 <=4.2 || >=1.0')).toBe('4.2'); + expect(version.parseMax('>=2.3.3 <=4.2 || 5.0')).toBe('5.0'); }); }); describe('satisfies', () => { it('in range', function () { - assert.strictEqual(version.satisfies('1.0.0', '1.0.0'), true); - assert.strictEqual(version.satisfies('1.0.0', '*'), true); - assert.strictEqual(version.satisfies('1.0.0', '>=2.0.0 || *'), true); - assert.strictEqual(version.satisfies('1.0.0', '>=1.0.0'), true); - assert.strictEqual(version.satisfies('3.0.0', '>=2.3.3 <=4.2'), true); - assert.strictEqual(version.satisfies('4', '>=2.3.3 <=4.2 || 5.0 || >=6.0'), true); - assert.strictEqual(version.satisfies('5', '>=2.3.3 <=4.2 || 5.0 || >=6.0'), true); - assert.strictEqual(version.satisfies('6', '>=2.3.3 <=4.2 || 5.0 || >=6.0'), true); - assert.strictEqual(version.satisfies('7', '>=2.3.3 <=4.2 || 5.0 || >=6.0'), true); - assert.strictEqual(version.satisfies('18.0.1', '<=18.x'), true); - assert.strictEqual(version.satisfies('18.0.1', '>=18.x'), true); - assert.strictEqual(version.satisfies('18.0.1', '>=19.x'), false); + expect(version.satisfies('1.0.0', '1.0.0')).toBe(true); + expect(version.satisfies('1.0.0', '*')).toBe(true); + expect(version.satisfies('1.0.0', '>=2.0.0 || *')).toBe(true); + expect(version.satisfies('1.0.0', '>=1.0.0')).toBe(true); + expect(version.satisfies('3.0.0', '>=2.3.3 <=4.2')).toBe(true); + expect(version.satisfies('4', '>=2.3.3 <=4.2 || 5.0 || >=6.0')).toBe(true); + expect(version.satisfies('5', '>=2.3.3 <=4.2 || 5.0 || >=6.0')).toBe(true); + expect(version.satisfies('6', '>=2.3.3 <=4.2 || 5.0 || >=6.0')).toBe(true); + expect(version.satisfies('7', '>=2.3.3 <=4.2 || 5.0 || >=6.0')).toBe(true); + expect(version.satisfies('18.0.1', '<=18.x')).toBe(true); + expect(version.satisfies('18.0.1', '>=18.x')).toBe(true); + expect(version.satisfies('18.0.1', '>=19.x')).toBe(false); }); it('not in range', function () { - assert.strictEqual(version.satisfies('2.0.0', '1.0.0'), false); - assert.strictEqual(version.satisfies('2.0.0', '>=2.3.3 <=4.2'), false); - assert.strictEqual(version.satisfies('2.3', '>=2.3.3 <=4.2'), false); - assert.strictEqual(version.satisfies('4.3', '>=2.3.3 <=4.2 || 5.0 || >=6.0'), false); - assert.strictEqual(version.satisfies('5.1', '>=2.3.3 <=4.2 || 5.0 || >=6.0'), false); + expect(version.satisfies('2.0.0', '1.0.0')).toBe(false); + expect(version.satisfies('2.0.0', '>=2.3.3 <=4.2')).toBe(false); + expect(version.satisfies('2.3', '>=2.3.3 <=4.2')).toBe(false); + expect(version.satisfies('4.3', '>=2.3.3 <=4.2 || 5.0 || >=6.0')).toBe(false); + expect(version.satisfies('5.1', '>=2.3.3 <=4.2 || 5.0 || >=6.0')).toBe(false); }); it('maybe', function () { - assert.strictEqual(version.satisfies('2.0', '1.0', true), 'maybe'); - assert.strictEqual(version.satisfies('2.0', '>=1.0', true), true); - assert.strictEqual(version.satisfies('2.0', '<1.0', true), 'maybe'); - assert.strictEqual(version.satisfies('2.0', '>=2.3.3 <=4.2', true), false); - assert.strictEqual(version.satisfies('5.0', '>=2.3.3 <=4.2', true), 'maybe'); - assert.strictEqual(version.satisfies('18', '>=10 <=18', true), true); + expect(version.satisfies('2.0', '1.0', true)).toBe('maybe'); + expect(version.satisfies('2.0', '>=1.0', true)).toBe(true); + expect(version.satisfies('2.0', '<1.0', true)).toBe('maybe'); + expect(version.satisfies('2.0', '>=2.3.3 <=4.2', true)).toBe(false); + expect(version.satisfies('5.0', '>=2.3.3 <=4.2', true)).toBe('maybe'); + expect(version.satisfies('18', '>=10 <=18', true)).toBe(true); }); }); describe('sort', () => { it('should sort an array of versions', () => { - assert.deepStrictEqual( - version.sort([ + expect(version.sort([ '1.2.3', '1.0', '0.5', '10', '1.2.3-tag', '4.5.6.7' - ]), - [ + ])).toEqual([ '0.5', '1.0', '1.2.3', '1.2.3-tag', '4.5.6.7', '10' - ] - ); + ]); }); }); }); diff --git a/vitest.config.js b/vitest.config.js new file mode 100644 index 000000000..e9595ab86 --- /dev/null +++ b/vitest.config.js @@ -0,0 +1,20 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + allowOnly: true, + coverage: { + include: ['src/**/*.js'], + reporter: ['html', 'lcov', 'text'], + }, + env: { + TI_CLI_SKIP_ENV_PATHS: '1', + }, + environment: 'node', + globals: false, + include: ['test/**/*.test.js'], + reporters: ['verbose'], + silent: false, + watch: false, + }, +});