diff --git a/.github/workflows/e2e-historic.yml b/.github/workflows/e2e-historic.yml index 9ccb4452..7ca17e19 100644 --- a/.github/workflows/e2e-historic.yml +++ b/.github/workflows/e2e-historic.yml @@ -27,8 +27,9 @@ jobs: - name: Generate matrix id: generate run: | - ./scripts/generate-matrix.jq packages/data/data/texlive-versions.json | - tee -a "${GITHUB_OUTPUT}" + ./scripts/generate-matrix.jq \ + packages/data/data/texlive-versions.json | + tee -a "${GITHUB_OUTPUT}" env: os: ${{ inputs.os }} version: ${{ inputs.version }} diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index c0b5a500..a70ea1b3 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -25,7 +25,8 @@ jobs: - name: Setup TeX Live id: setup uses: ./ - - if: fromJSON(steps.setup.outputs.cache-restored) + - name: Check that a new installation has been made + if: fromJSON(steps.setup.outputs.cache-restored) run: exit 1 - run: tlmgr version - name: Set output @@ -37,7 +38,12 @@ jobs: MATRIX_OS: ${{ matrix.os }} restore-cache: needs: save-cache - if: ${{ !cancelled() }} + if: | + !cancelled() && ( + needs.save-cache.outputs.ubuntu || + needs.save-cache.outputs.windows || + needs.save-cache.outputs.macos + ) strategy: matrix: os: @@ -53,7 +59,8 @@ jobs: - name: Setup TeX Live id: setup uses: ./ - - if: ${{ !fromJSON(steps.setup.outputs.cache-hit) }} + - name: Check that the cache is exactly matched + if: ${{ !fromJSON(steps.setup.outputs.cache-hit) }} run: exit 1 - run: tlmgr version delete-caches: @@ -68,7 +75,7 @@ jobs: continue-on-error: true steps: - uses: actions/checkout@v4 - - name: Install + - name: Install package run: >- npm ci --omit=dev @@ -78,8 +85,8 @@ jobs: - uses: actions/github-script@v7 with: script: | - const args = { context, core, github }; - await require('@setup-texlive-action/e2e/delete-caches')(args); + const { deleteCaches } = require('@setup-texlive-action/e2e'); + await deleteCaches({ context, core, github }); compile: strategy: matrix: diff --git a/package-lock.json b/package-lock.json index 9dc4df0d..b35854c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,16 +11,19 @@ "workspaces": [ "packages/*" ], + "dependencies": { + "semver": "^7.6.0" + }, "devDependencies": { "@go-task/cli": "^3.35.1", "@rspack/cli": "^0.5.9", "@types/node": "~20.0.0", - "better-typescript-lib": "2.4.0", + "better-typescript-lib": "^2.7.0", "dprint": "^0.45.0", "editorconfig-checker": "^5.1.5", "esbuild": "^0.20.2", "eslint": "^8.57.0", - "git-cliff": "^2.1.2", + "git-cliff": "^2.2.0", "markdown-link-check": "^3.12.1", "npm-run-all2": "^6.1.2", "patch-package": "^8.0.0", @@ -72,6 +75,15 @@ "minimatch": "^3.0.4" } }, + "node_modules/@actions/cache/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/@actions/core": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", @@ -81,14 +93,6 @@ "uuid": "^8.3.2" } }, - "node_modules/@actions/core/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@actions/exec": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", @@ -97,6 +101,18 @@ "@actions/io": "^1.0.1" } }, + "node_modules/@actions/github": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz", + "integrity": "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==", + "dev": true, + "dependencies": { + "@actions/http-client": "^2.2.0", + "@octokit/core": "^5.0.1", + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + } + }, "node_modules/@actions/glob": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.4.0.tgz", @@ -133,6 +149,15 @@ "uuid": "^3.3.2" } }, + "node_modules/@actions/tool-cache/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -242,14 +267,6 @@ "node": ">= 6" } }, - "node_modules/@azure/core-http/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@azure/core-lro": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.1.tgz", @@ -352,14 +369,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/@azure/ms-rest-js/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@azure/storage-blob": { "version": "12.17.0", "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.17.0.tgz", @@ -1431,33 +1440,6 @@ "node": ">=8" } }, - "node_modules/@npmcli/config/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/config/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/fs": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", @@ -1470,33 +1452,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/fs/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/git": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", @@ -1534,33 +1489,6 @@ "node": "14 || >=16.14" } }, - "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -1617,16 +1545,16 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -1639,9 +1567,9 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1699,16 +1627,16 @@ } }, "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -1720,22 +1648,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/package-json/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -1747,21 +1663,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/package-json/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", @@ -1838,6 +1739,134 @@ "node": "^16.13.0 || >=18.0.0" } }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz", + "integrity": "sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", + "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", + "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "dev": true, + "dependencies": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/request": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.2.0.tgz", + "integrity": "sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", + "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@opentelemetry/api": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", @@ -1863,9 +1892,9 @@ "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", + "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", "cpu": [ "arm" ], @@ -1876,9 +1905,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", + "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", "cpu": [ "arm64" ], @@ -1889,9 +1918,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", + "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", "cpu": [ "arm64" ], @@ -1902,9 +1931,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", + "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", "cpu": [ "x64" ], @@ -1915,9 +1944,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", + "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", "cpu": [ "arm" ], @@ -1928,9 +1957,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", + "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", "cpu": [ "arm64" ], @@ -1941,9 +1970,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", + "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", "cpu": [ "arm64" ], @@ -1953,10 +1982,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", + "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", + "cpu": [ + "ppc64le" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", + "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", "cpu": [ "riscv64" ], @@ -1966,10 +2008,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", + "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", + "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", "cpu": [ "x64" ], @@ -1980,9 +2035,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", + "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", "cpu": [ "x64" ], @@ -1993,9 +2048,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", + "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", "cpu": [ "arm64" ], @@ -2006,9 +2061,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", + "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", "cpu": [ "ia32" ], @@ -2019,9 +2074,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", + "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", "cpu": [ "x64" ], @@ -2363,9 +2418,9 @@ "dev": true }, "node_modules/@tsconfig/strictest": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/strictest/-/strictest-2.0.4.tgz", - "integrity": "sha512-/VKO/oufDOvAE48KGzZOEXFBKtR3PnGlb4cJoRtw3Ax5tYwaWnaNgyTJDviIbvjlnn82WMfTNvhegFkj5Xt2UA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@tsconfig/strictest/-/strictest-2.0.5.tgz", + "integrity": "sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==", "dev": true }, "node_modules/@tufjs/canonical-json": { @@ -2400,9 +2455,9 @@ } }, "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2656,6 +2711,10 @@ "@types/node": "*" } }, + "node_modules/@types/setup-texlive-action": { + "resolved": "packages/types", + "link": true + }, "node_modules/@types/sockjs": { "version": "0.3.36", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", @@ -2739,33 +2798,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", @@ -2814,33 +2846,6 @@ "node": ">=4.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", @@ -2860,9 +2865,9 @@ }, "node_modules/@typescript/lib-decorators": { "name": "@better-typescript-lib/decorators", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/decorators/-/decorators-2.4.0.tgz", - "integrity": "sha512-phg1WNdqwgNR0SOZksvWUQh+ihAO6BJfyBR7aZuiQ774tI1CD79JjVyrsrf5A9bEeNV98kzvbUfzRpufrVzanw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/decorators/-/decorators-2.7.0.tgz", + "integrity": "sha512-rrHD++7cN9Qijpik07AR/y5lskDqncjh1nv3Vv5bVIfjdZc/kYLIwbDdbniSR33y9ljvm/NeVikq4D7XtuhtRg==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2870,9 +2875,9 @@ }, "node_modules/@typescript/lib-dom": { "name": "@better-typescript-lib/dom", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/dom/-/dom-2.4.0.tgz", - "integrity": "sha512-dbsU1nxiI4vd+um2Rjow0VC17wb8Y8bH3Nohu+UA8OMLWvPpQ+OVwmS1O/nSH/yd3Tdrw9t5Es1giYHa1aj03w==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/dom/-/dom-2.7.0.tgz", + "integrity": "sha512-UY/DTL7+DYhNL63PYeQ0CGagkG5lLBbm+AtxEJpPdyyju+0sgjM6at7cenrvqcU4v1f7o3lRFT6SZ8or4DK74A==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2880,9 +2885,9 @@ }, "node_modules/@typescript/lib-es2015": { "name": "@better-typescript-lib/es2015", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2015/-/es2015-2.4.0.tgz", - "integrity": "sha512-Fca8305Qa7M78+kK3ocUvyRW3f4G5impperBZvfEgxkLN84UwamcgDCVFPfl3NsGijfZz2TeLPEBHBMeEDy2hQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2015/-/es2015-2.7.0.tgz", + "integrity": "sha512-Mpsh8g0K8vaHG/oKXBOqU0osh/38B0jNCdojLJjht3XqXYv7bF6WWslc+M1bvAJT6mjUPz/I8EIJtFt8Lh87HQ==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2890,9 +2895,9 @@ }, "node_modules/@typescript/lib-es2016": { "name": "@better-typescript-lib/es2016", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2016/-/es2016-2.4.0.tgz", - "integrity": "sha512-4UTjc8g/miAN7DK70URgeBm4hqPnDxzdA6Ov7j2u004w5AiZpZWjoJUg61QcMtmAqRPocI8H39jBYpLu9ssNsw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2016/-/es2016-2.7.0.tgz", + "integrity": "sha512-9D8RW8KhvWEKjHxf1+C6IbB9jwEFD+R1Uw5ji2B95yZsbMFMHOb/HLSFuLKIbiN7NpF2Ky7xvBwkYckD9gwm1w==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2900,9 +2905,9 @@ }, "node_modules/@typescript/lib-es2017": { "name": "@better-typescript-lib/es2017", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2017/-/es2017-2.4.0.tgz", - "integrity": "sha512-Q9rInvoShqBWh6cDfdcLA/Pp9Y8WH52wUBx7TygklLvUw++JsfA4EoybVqfGwU6Dlkfx4Q8J7/EpUolIEyQEqw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2017/-/es2017-2.7.0.tgz", + "integrity": "sha512-Xi3/saKmSY28uxxilawjmMAo1ejNygs94Ck833k/iKKri3skTAwHhODD9XtAGXvzcAOwrEJHaiHjQiwYlc5K+Q==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2910,9 +2915,9 @@ }, "node_modules/@typescript/lib-es2018": { "name": "@better-typescript-lib/es2018", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2018/-/es2018-2.4.0.tgz", - "integrity": "sha512-HzqqRAX5yMs6J7SjoWzbqLdkq6xuSBsPc5wmiF6jkJVQLgllLbRVi+6R8T0HAKOUL59f+3qqpHTldRJW5K2Wnw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2018/-/es2018-2.7.0.tgz", + "integrity": "sha512-8awJ5RNSXUhRVXGJNKp/DdC6Rx5LlOWPndJwZnR73akSp9Rk2yUp82Qk+eXhddjXT2vJpGFT1ksab5yWTfwP+A==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2920,9 +2925,9 @@ }, "node_modules/@typescript/lib-es2019": { "name": "@better-typescript-lib/es2019", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2019/-/es2019-2.4.0.tgz", - "integrity": "sha512-AsdRLaO7+1JaBxbh6kXO2H30j96/6/1RP6/pqStLGNtxxME9n6Z1heZFIyQEKYyAI6+ZjBqy0zsaCClGgSOo/A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2019/-/es2019-2.7.0.tgz", + "integrity": "sha512-U0FXEPP5qwp6kKK5jfLXxzjCK13JFhNTjNi5ZUoyWdn9Ar9bxrKm7FeS6IvoD7xLQQ1JVSrdVP9cPvg66gt2WQ==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2930,9 +2935,9 @@ }, "node_modules/@typescript/lib-es2020": { "name": "@better-typescript-lib/es2020", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2020/-/es2020-2.4.0.tgz", - "integrity": "sha512-Oi4rsoEpIQMPELcw+k6DslY9VrPognLcqJRM8sMcEDZyQQidCSJIjmMHSB33AoWUbz2g7DG+XrQqNV4SKaRMiQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2020/-/es2020-2.7.0.tgz", + "integrity": "sha512-EGOnBkhHHzp8mgYDrN8okXwuL3yR/pDqXHlx3W5KzBc/axZTYlxBRZa6hVT+Vft8gQd7N1+3gScu+U5IEQgq5w==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2940,9 +2945,9 @@ }, "node_modules/@typescript/lib-es2021": { "name": "@better-typescript-lib/es2021", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2021/-/es2021-2.4.0.tgz", - "integrity": "sha512-YMW/CJnyldgzFkB03FC0x1WTkIow9J0uIm5EawbUT+uJe5qV8ReOJmy0a7dWaCOkfgdSQsY4bcmnrSiYqnltXA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2021/-/es2021-2.7.0.tgz", + "integrity": "sha512-0s/BHYI89hUIi5pJj/xbkCpeoIBMD/AQ+zf6ATiQC/EfahpQUW8nmELZ+LEnFz7pDA5Z0kcuoQw5wK9Oz8FPDg==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2950,9 +2955,9 @@ }, "node_modules/@typescript/lib-es2022": { "name": "@better-typescript-lib/es2022", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2022/-/es2022-2.4.0.tgz", - "integrity": "sha512-JOZCvCFNS/dnAHRC+uevby2+GKtfBp0EMS4aSVV4isoPFBoN7zgR0yBYazuxG3V6J6Msv8k1QoKs5ECnDl0PGw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2022/-/es2022-2.7.0.tgz", + "integrity": "sha512-mQeoqIpSpHjL3xjjf7t7CpcHt8+l0bira9QW1jjSSAPdt6+LIMuIE5Ey2gt5z0QWUXSoXljdOhXeOw24OE2DUA==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2960,9 +2965,9 @@ }, "node_modules/@typescript/lib-es2023": { "name": "@better-typescript-lib/es2023", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2023/-/es2023-2.4.0.tgz", - "integrity": "sha512-h5J/CNbuScHZxETfJr8QemkKVPtFOO9ZrJbvXrJfsIWXYh0o5My3jr/qxcP/psTZY7i0Hp+Yd/4Fp7o6LskPlg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es2023/-/es2023-2.7.0.tgz", + "integrity": "sha512-dInbZNG9qMMHJjW84p0zPot4ZK2JBD7miHkP6NaYluiu1CYQ2F/Nn+zgbk20FeykVbCCtubD9P0AtVi4k8PcWQ==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2970,9 +2975,9 @@ }, "node_modules/@typescript/lib-es5": { "name": "@better-typescript-lib/es5", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es5/-/es5-2.4.0.tgz", - "integrity": "sha512-jGRqmPxrDcPY+xo7FaOEJdM/Q7c1rCxWSp3ts9UuUvjLeOcl31agJaJFvckKi3ewzHL61MZPrpiWLIJOU5wjCw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es5/-/es5-2.7.0.tgz", + "integrity": "sha512-CC7PbGDCy80WjQwiZvzkvPcDITBIdn/4k5ZGQLIt5T+4J8fvl4yJ9SQ74msQQMmrWhu1DgSX2CR57NypgHbjCw==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2980,9 +2985,9 @@ }, "node_modules/@typescript/lib-es6": { "name": "@better-typescript-lib/es6", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/es6/-/es6-2.4.0.tgz", - "integrity": "sha512-elsjOkPljXbGcZFVyRPoJIeG3G8rHaXi7YLeD0OryyzvyfikbUH7Xzv2dy04ZCZ4XTZ5GykRCrzVQ9TS5OIKPw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/es6/-/es6-2.7.0.tgz", + "integrity": "sha512-AAdktES8yxCWyHMNq3QWqPrHcE67kRbvceRzwutEC2O5tLxoL3jHJt4WPHmeeYQ9NYg3bdAHqV7Txc/oh/0+Sg==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -2990,9 +2995,9 @@ }, "node_modules/@typescript/lib-esnext": { "name": "@better-typescript-lib/esnext", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/esnext/-/esnext-2.4.0.tgz", - "integrity": "sha512-IApFRGRoU8yTm7RLdZtncFlnHD/quYQcxd9p5lvQkMW+wZgmsOyM78L75h00UrDWPQf9Gojx7/SFdRXm6lNE9Q==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/esnext/-/esnext-2.7.0.tgz", + "integrity": "sha512-pZxchLddCYg+56WxDstX2NxhmO7eBIJsG/VhZZGNBwMsyMzwGWiJI/nSF77nEW52w1Ph9pK8FW76MDrSmo6jqQ==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -3000,9 +3005,9 @@ }, "node_modules/@typescript/lib-scripthost": { "name": "@better-typescript-lib/scripthost", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/scripthost/-/scripthost-2.4.0.tgz", - "integrity": "sha512-OjxKeO8+1jKQEkbzlXlcOv3io6B+cJ6IB93zSzKw8sl3uqBN1IWonUBeoK96XL1tNzV1m8eEgAikMtSWt2m/HA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/scripthost/-/scripthost-2.7.0.tgz", + "integrity": "sha512-VQJ9zkMhO1fsn5EPur3WriSch4fEDnUcEkSQGSfV7gb0Zr+KoVXYNj3PuTXgBy9ale31Mk/16z0nCa4xbs11mQ==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -3010,9 +3015,9 @@ }, "node_modules/@typescript/lib-webworker": { "name": "@better-typescript-lib/webworker", - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@better-typescript-lib/webworker/-/webworker-2.4.0.tgz", - "integrity": "sha512-1B0UDJhBP2MkJfNmiH838sEfHgleL1R5HRLiRU1xzxMogmofs61scdZ5oAXL1wQ6r3+RvWXt0xZv9fJZQZAYpg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@better-typescript-lib/webworker/-/webworker-2.7.0.tgz", + "integrity": "sha512-g2xqQFU67qSpAswBH4CtSSahVOtpfFPQF7PkhSI8SXeXu/M/irEKnoGln9/AzwJE+4iSNsAMH9CLYqmcZVsmaw==", "dev": true, "peerDependencies": { "typescript": ">=4.5.2" @@ -3714,28 +3719,34 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true + }, "node_modules/better-typescript-lib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/better-typescript-lib/-/better-typescript-lib-2.4.0.tgz", - "integrity": "sha512-LMFX7HPN5qlJiW5IlJiicTT2XcJJ8wRTq3D1YinmZzqNQ0lKX409EK+4cmkuMZTkfyZXBxOca29zvZwIGt9Q3Q==", - "dev": true, - "dependencies": { - "@typescript/lib-decorators": "npm:@better-typescript-lib/decorators@2.4.0", - "@typescript/lib-dom": "npm:@better-typescript-lib/dom@2.4.0", - "@typescript/lib-es2015": "npm:@better-typescript-lib/es2015@2.4.0", - "@typescript/lib-es2016": "npm:@better-typescript-lib/es2016@2.4.0", - "@typescript/lib-es2017": "npm:@better-typescript-lib/es2017@2.4.0", - "@typescript/lib-es2018": "npm:@better-typescript-lib/es2018@2.4.0", - "@typescript/lib-es2019": "npm:@better-typescript-lib/es2019@2.4.0", - "@typescript/lib-es2020": "npm:@better-typescript-lib/es2020@2.4.0", - "@typescript/lib-es2021": "npm:@better-typescript-lib/es2021@2.4.0", - "@typescript/lib-es2022": "npm:@better-typescript-lib/es2022@2.4.0", - "@typescript/lib-es2023": "npm:@better-typescript-lib/es2023@2.4.0", - "@typescript/lib-es5": "npm:@better-typescript-lib/es5@2.4.0", - "@typescript/lib-es6": "npm:@better-typescript-lib/es6@2.4.0", - "@typescript/lib-esnext": "npm:@better-typescript-lib/esnext@2.4.0", - "@typescript/lib-scripthost": "npm:@better-typescript-lib/scripthost@2.4.0", - "@typescript/lib-webworker": "npm:@better-typescript-lib/webworker@2.4.0" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/better-typescript-lib/-/better-typescript-lib-2.7.0.tgz", + "integrity": "sha512-ba2XF0Eia7r2kYVwpa8ePNY8/FljYQmfKF2jff7bRyNlLxeCkpGDHjJRcv2uu89vfTEnO6zzy5hzZBzW71KsfQ==", + "dev": true, + "dependencies": { + "@typescript/lib-decorators": "npm:@better-typescript-lib/decorators@2.7.0", + "@typescript/lib-dom": "npm:@better-typescript-lib/dom@2.7.0", + "@typescript/lib-es2015": "npm:@better-typescript-lib/es2015@2.7.0", + "@typescript/lib-es2016": "npm:@better-typescript-lib/es2016@2.7.0", + "@typescript/lib-es2017": "npm:@better-typescript-lib/es2017@2.7.0", + "@typescript/lib-es2018": "npm:@better-typescript-lib/es2018@2.7.0", + "@typescript/lib-es2019": "npm:@better-typescript-lib/es2019@2.7.0", + "@typescript/lib-es2020": "npm:@better-typescript-lib/es2020@2.7.0", + "@typescript/lib-es2021": "npm:@better-typescript-lib/es2021@2.7.0", + "@typescript/lib-es2022": "npm:@better-typescript-lib/es2022@2.7.0", + "@typescript/lib-es2023": "npm:@better-typescript-lib/es2023@2.7.0", + "@typescript/lib-es5": "npm:@better-typescript-lib/es5@2.7.0", + "@typescript/lib-es6": "npm:@better-typescript-lib/es6@2.7.0", + "@typescript/lib-esnext": "npm:@better-typescript-lib/esnext@2.7.0", + "@typescript/lib-scripthost": "npm:@better-typescript-lib/scripthost@2.7.0", + "@typescript/lib-webworker": "npm:@better-typescript-lib/webworker@2.7.0" }, "peerDependencies": { "typescript": ">=4.5.2" @@ -3896,33 +3907,6 @@ "semver": "^7.0.0" } }, - "node_modules/builtins/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -3974,16 +3958,16 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -4005,9 +3989,9 @@ } }, "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -4743,6 +4727,12 @@ "node": ">= 0.8" } }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -4923,9 +4913,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.715", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", - "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==", + "version": "1.4.721", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.721.tgz", + "integrity": "sha512-k1x2r6foI8iJOp+1qTxbbrrWMsOiHkzGBYwYigaq+apO1FSqtn44KTo3Sy69qt7CRr7149zTcsDvH7MUKsOuIQ==", "dev": true }, "node_modules/emoji-regex": { @@ -5045,9 +5035,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.2.tgz", - "integrity": "sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true, "peer": true }, @@ -5225,41 +5215,14 @@ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", "dev": true, - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-compat-utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "semver": "^7.5.4" }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, "node_modules/eslint-import-resolver-node": { @@ -5334,22 +5297,10 @@ "balanced-match": "^1.0.0" } }, - "node_modules/eslint-plugin-import-x/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-import-x/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -5361,21 +5312,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-import-x/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-n": { "version": "16.6.2", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", @@ -5404,33 +5340,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-regexp": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.4.0.tgz", @@ -5500,33 +5409,6 @@ "node": ">=8" } }, - "node_modules/eslint-plugin-unicorn/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-vitest": { "version": "0.3.26", "resolved": "https://registry.npmjs.org/eslint-plugin-vitest/-/eslint-plugin-vitest-0.3.26.tgz", @@ -5552,13 +5434,13 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/scope-manager": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", - "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5569,9 +5451,9 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/types": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", - "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -5582,13 +5464,13 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", - "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/visitor-keys": "7.3.1", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5610,17 +5492,17 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/utils": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", - "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.3.1", - "@typescript-eslint/types": "7.3.1", - "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", "semver": "^7.5.4" }, "engines": { @@ -5635,12 +5517,12 @@ } }, "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", - "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -5660,18 +5542,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/eslint-plugin-vitest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-vitest/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -5687,21 +5557,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-vitest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -6332,9 +6187,9 @@ } }, "node_modules/git-cliff": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/git-cliff/-/git-cliff-2.1.2.tgz", - "integrity": "sha512-a+fdMaiUxilj4VBReuhNWiLZUzmgYVnf8RzoxMOmOkd8Xg2XsCToLTkMlpvSNmKxgIAxb1yUF90J0SgPTpmJTg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/git-cliff/-/git-cliff-2.2.0.tgz", + "integrity": "sha512-btyKfNH8UWDwNzx5Lk8JuK3u4e6HJM2G3tggegU0niZ8AK4UfeWNH8vj90dtDtZVmQGkGyPKWr5qFQIgJtSTwQ==", "dev": true, "dependencies": { "execa": "^8.0.1" @@ -6343,18 +6198,18 @@ "git-cliff": "lib/cli/cli.js" }, "optionalDependencies": { - "git-cliff-darwin-arm64": "2.1.2", - "git-cliff-darwin-x64": "2.1.2", - "git-cliff-linux-arm64": "2.1.2", - "git-cliff-linux-x64": "2.1.2", - "git-cliff-windows-arm64": "2.1.2", - "git-cliff-windows-x64": "2.1.2" + "git-cliff-darwin-arm64": "2.2.0", + "git-cliff-darwin-x64": "2.2.0", + "git-cliff-linux-arm64": "2.2.0", + "git-cliff-linux-x64": "2.2.0", + "git-cliff-windows-arm64": "2.2.0", + "git-cliff-windows-x64": "2.2.0" } }, "node_modules/git-cliff-darwin-arm64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/git-cliff-darwin-arm64/-/git-cliff-darwin-arm64-2.1.2.tgz", - "integrity": "sha512-GHZ9Qli3zqCZPPAwcMWUQhAlU5uN21bS6VnVBGmQBJSDae4HaYSXDLkTG0u7fbPc4fFR8YBwFCFVzSX+0P9ySQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/git-cliff-darwin-arm64/-/git-cliff-darwin-arm64-2.2.0.tgz", + "integrity": "sha512-GS4CXFWZI8eeZQg4htONDzV3168H3X4FSdarIKSUwCRo6CauUYZbAqvumJCrNQP4A7Roik/J8euKIJjr6kijUg==", "cpu": [ "arm64" ], @@ -6365,9 +6220,9 @@ ] }, "node_modules/git-cliff-darwin-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/git-cliff-darwin-x64/-/git-cliff-darwin-x64-2.1.2.tgz", - "integrity": "sha512-RPYqke3PwiGhpf35XyaafVG6ympsQWjxF4nxNYADkEbFetAUEVeoOJpKtRjUGzoY6V1BpdoC1XSy4mm6skRwAA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/git-cliff-darwin-x64/-/git-cliff-darwin-x64-2.2.0.tgz", + "integrity": "sha512-TI0g1ajycHi5WuXjPSJHk3QczY2fBpO8mJLRTIChc+FLzQOqqfiaPFS4f22HCrVmcPrWf71Ebxkl3XprkZM1Sw==", "cpu": [ "x64" ], @@ -6378,9 +6233,9 @@ ] }, "node_modules/git-cliff-linux-arm64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/git-cliff-linux-arm64/-/git-cliff-linux-arm64-2.1.2.tgz", - "integrity": "sha512-zYhgsCR0fto3L/WDxBouA5Df3f4cmvzaaaRovNoabvmuRKTI2zkeQCmAg9qXUlGSFOdAnnDKhl+Av/D91NiX1A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/git-cliff-linux-arm64/-/git-cliff-linux-arm64-2.2.0.tgz", + "integrity": "sha512-y2pfXofRGTuu6IpVxkBwBnmOdlAzSXrvOR3bdbYog3yIt5FX1Rtz9yMaA+g9djgRbWPUtq2qNqAaajlnUFrkhw==", "cpu": [ "arm64" ], @@ -6391,9 +6246,9 @@ ] }, "node_modules/git-cliff-linux-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/git-cliff-linux-x64/-/git-cliff-linux-x64-2.1.2.tgz", - "integrity": "sha512-YjsAuGPVctLA08rXWcpT+HQ3SYKDuu7jFp0V7l9CWzlEvWDTiYgE1vhT0ogkf0l6AXBBA/l8XmHnHgB3/H7GFw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/git-cliff-linux-x64/-/git-cliff-linux-x64-2.2.0.tgz", + "integrity": "sha512-HXn9V+YNFQPUz+Eowx8xn3Fh8NWM7dHE5D8jRdwmF/5tKQsXbWAzK3/O/7CnDOQFr7UN298WZMSETsm9j8ANYQ==", "cpu": [ "x64" ], @@ -6404,9 +6259,9 @@ ] }, "node_modules/git-cliff-windows-arm64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/git-cliff-windows-arm64/-/git-cliff-windows-arm64-2.1.2.tgz", - "integrity": "sha512-gBeZga3DjCjBN+HjgST9RTYXU+cEmwMT6aXB+eGXjOMMLr10v7zhF6tHExbcnWr/1IGqdfD02PaXfbuaedjMMA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/git-cliff-windows-arm64/-/git-cliff-windows-arm64-2.2.0.tgz", + "integrity": "sha512-plwaNYxqnU7cfKZXhZQRExOWu+BczZrqkJzQWp15GQb1tImtom+82WxRuxrCeeTBk/b4mnHUhF1iI27sOSlFLQ==", "cpu": [ "arm64" ], @@ -6417,9 +6272,9 @@ ] }, "node_modules/git-cliff-windows-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/git-cliff-windows-x64/-/git-cliff-windows-x64-2.1.2.tgz", - "integrity": "sha512-x2fftQu6zdbwiCcXxr9bwOZsMgL1KD53qPVBknprgxGRlP0shIDifKoGQdVYIMw3V63MgGxKqt/rYQxGguGJEA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/git-cliff-windows-x64/-/git-cliff-windows-x64-2.2.0.tgz", + "integrity": "sha512-f9UUlDiMnA1/qHzyAO8Wo1I8rGhiHiK1pE/I4jGd0IOZmxgjbTpASYxtLsSoKYaJHS1X8GlTOG13z9S6dqZtmQ==", "cpu": [ "x64" ], @@ -6903,9 +6758,9 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -7358,9 +7213,9 @@ } }, "node_modules/js-tokens": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", - "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", "dev": true }, "node_modules/js-yaml": { @@ -7746,33 +7601,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-fetch-happen": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", @@ -8344,9 +8172,9 @@ } }, "node_modules/node-gyp": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", - "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", "dev": true, "dependencies": { "env-paths": "^2.2.0", @@ -8377,16 +8205,16 @@ } }, "node_modules/node-gyp/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -8407,22 +8235,10 @@ "node": ">=16" } }, - "node_modules/node-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -8434,21 +8250,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-gyp/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -8500,33 +8301,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -8556,34 +8330,7 @@ "semver": "^7.1.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-normalize-package-bin": { @@ -8610,33 +8357,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/npm-packlist": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", @@ -8664,33 +8384,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-pick-manifest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/npm-registry-fetch": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", @@ -8756,9 +8449,9 @@ } }, "node_modules/npm-run-all2/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -9203,18 +8896,6 @@ "npm": ">5" } }, - "node_modules/patch-package/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/patch-package/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -9227,21 +8908,6 @@ "rimraf": "bin.js" } }, - "node_modules/patch-package/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9276,12 +8942,12 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -9675,16 +9341,16 @@ } }, "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -9697,9 +9363,9 @@ } }, "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -9822,15 +9488,6 @@ "validate-npm-package-license": "^3.0.1" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -10026,9 +9683,9 @@ } }, "node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", + "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -10041,19 +9698,21 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.13.2", + "@rollup/rollup-android-arm64": "4.13.2", + "@rollup/rollup-darwin-arm64": "4.13.2", + "@rollup/rollup-darwin-x64": "4.13.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.2", + "@rollup/rollup-linux-arm64-gnu": "4.13.2", + "@rollup/rollup-linux-arm64-musl": "4.13.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2", + "@rollup/rollup-linux-riscv64-gnu": "4.13.2", + "@rollup/rollup-linux-s390x-gnu": "4.13.2", + "@rollup/rollup-linux-x64-gnu": "4.13.2", + "@rollup/rollup-linux-x64-musl": "4.13.2", + "@rollup/rollup-win32-arm64-msvc": "4.13.2", + "@rollup/rollup-win32-ia32-msvc": "4.13.2", + "@rollup/rollup-win32-x64-msvc": "4.13.2", "fsevents": "~2.3.2" } }, @@ -10203,11 +9862,28 @@ } }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { @@ -10514,15 +10190,6 @@ "websocket-driver": "^0.7.4" } }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/socks": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", @@ -10799,12 +10466,12 @@ } }, "node_modules/strip-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz", - "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", "dev": true, "dependencies": { - "js-tokens": "^8.0.2" + "js-tokens": "^9.0.0" }, "funding": { "url": "https://github.com/sponsors/antfu" @@ -10920,33 +10587,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/taze/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/taze/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/taze/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -10979,9 +10619,9 @@ "integrity": "sha512-r1AT0XdEp8TMQ13FLvOt8mOtAxDQsRt2QU5rSWCA7YfshddU651Y1NHVrceLANvixKdf9fYO8B/S9fXHodB7HQ==" }, "node_modules/terser": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", - "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.0.tgz", + "integrity": "sha512-Y/SblUl5kEyEFzhMAQdsxVHh+utAxd4IuRNJzKywY/4uzSogh3G219jqbDDxYu4MXO9CzY3tSEqmZvW6AoEDJw==", "dev": true, "peer": true, "dependencies": { @@ -11097,9 +10737,9 @@ "dev": true }, "node_modules/tinypool": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", - "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.3.tgz", + "integrity": "sha512-Ud7uepAklqRH1bvwy22ynrliC7Dljz7Tm8M/0RBUW+YRa4YHhZ6e4PpgE+fu1zr/WqB1kbeuVrdfeuyIBpy4tw==", "dev": true, "engines": { "node": ">=14.0.0" @@ -11408,6 +11048,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -11427,9 +11073,9 @@ } }, "node_modules/unplugin": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.0.tgz", - "integrity": "sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz", + "integrity": "sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==", "dependencies": { "acorn": "^8.11.3", "chokidar": "^3.6.0", @@ -11526,12 +11172,11 @@ } }, "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, "node_modules/v8-to-istanbul": { @@ -11580,13 +11225,13 @@ } }, "node_modules/vite": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.6.tgz", - "integrity": "sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz", + "integrity": "sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==", "dev": true, "dependencies": { "esbuild": "^0.20.1", - "postcss": "^8.4.36", + "postcss": "^8.4.38", "rollup": "^4.13.0" }, "bin": { @@ -11876,9 +11521,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.2.tgz", - "integrity": "sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz", + "integrity": "sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==", "dev": true, "dependencies": { "colorette": "^2.0.10", @@ -12330,7 +11975,7 @@ "name": "@setup-texlive-action/config", "devDependencies": { "@eslint/js": "^8.57.0", - "@tsconfig/strictest": "^2.0.4", + "@tsconfig/strictest": "^2.0.5", "@vitest/coverage-v8": "^1.4.0", "esbuild-loader": "^4.1.0", "eslint-plugin-import-x": "^0.4.4", @@ -12348,9 +11993,8 @@ }, "packages/config/node_modules/@typescript-eslint/eslint-plugin": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", - "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "7.4.0", @@ -12383,9 +12027,8 @@ }, "packages/config/node_modules/@typescript-eslint/parser": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", - "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "7.4.0", "@typescript-eslint/types": "7.4.0", @@ -12411,9 +12054,8 @@ }, "packages/config/node_modules/@typescript-eslint/scope-manager": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.4.0", "@typescript-eslint/visitor-keys": "7.4.0" @@ -12428,9 +12070,8 @@ }, "packages/config/node_modules/@typescript-eslint/type-utils": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", - "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "7.4.0", "@typescript-eslint/utils": "7.4.0", @@ -12455,9 +12096,8 @@ }, "packages/config/node_modules/@typescript-eslint/types": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -12468,9 +12108,8 @@ }, "packages/config/node_modules/@typescript-eslint/typescript-estree": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "7.4.0", "@typescript-eslint/visitor-keys": "7.4.0", @@ -12496,9 +12135,8 @@ }, "packages/config/node_modules/@typescript-eslint/utils": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -12521,9 +12159,8 @@ }, "packages/config/node_modules/@typescript-eslint/visitor-keys": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" @@ -12538,30 +12175,16 @@ }, "packages/config/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "packages/config/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "packages/config/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12572,26 +12195,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/config/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "packages/config/node_modules/typescript-eslint": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.4.0.tgz", - "integrity": "sha512-8GYQsb/joknlAZEAs/kqonfrsAc98C5DoellmwHREPqKwSTKSY2YB93IwmvNuX6+WE5QkKc31X9wHo/UcpYXpw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "7.4.0", "@typescript-eslint/parser": "7.4.0", @@ -12615,13 +12222,45 @@ }, "packages/data": { "name": "@setup-texlive-action/data", + "dependencies": { + "minimatch": "^9.0.4" + }, "devDependencies": { + "@setup-texlive-action/config": "*", + "@types/semver": "^7.5.8", "ajv-cli": "^5.0.0", - "ajv-formats": "^2.1.1" + "ajv-formats": "^2.1.1", + "ts-essentials": "^9.4.1" + }, + "peerDependencies": { + "semver": "*" + } + }, + "packages/data/node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "packages/data/node_modules/minimatch": { + "version": "9.0.4", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "packages/e2e": { - "name": "@setup-texlive-action/e2e" + "name": "@setup-texlive-action/e2e", + "devDependencies": { + "@actions/github": "^6.0.0" + } }, "packages/fixtures": { "name": "@setup-texlive-action/fixtures", @@ -12643,7 +12282,6 @@ "clean-stack": "^5.2.0", "deline": "^1.0.4", "scule": "^1.3.0", - "semver": "^7.6.0", "ts-mixer": "^6.0.4", "ts-pattern": "^5.0.8", "tslib": "^2.6.2", @@ -12665,6 +12303,9 @@ "ts-dedent": "^2.2.0", "ts-essentials": "^9.4.1", "vitest": "^1.4.0" + }, + "peerDependencies": { + "semver": "*" } }, "packages/main/node_modules/ansi-styles": { @@ -12679,8 +12320,7 @@ }, "packages/main/node_modules/clean-stack": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", - "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", + "license": "MIT", "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -12693,8 +12333,7 @@ }, "packages/main/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -12702,42 +12341,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/main/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "packages/main/node_modules/semver": { - "version": "7.6.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "packages/polyfill": { "name": "@setup-texlive-action/polyfill", "dependencies": { "@abraham/reflection": "^0.12.0", "array-from-async": "^3.0.0", - "node-fetch": "^2.7.0", "temporal-polyfill": "^0.2.3" }, "devDependencies": { - "@setup-texlive-action/config": "*", - "@types/node-fetch": "^2.6.11" + "@setup-texlive-action/config": "*" } }, + "packages/types": { + "name": "@types/setup-texlive-action" + }, "packages/utils": { "name": "@setup-texlive-action/utils", "dependencies": { diff --git a/package.json b/package.json index 29cde4eb..4c8193dd 100644 --- a/package.json +++ b/package.json @@ -34,16 +34,19 @@ "workspaces": [ "packages/*" ], + "dependencies": { + "semver": "^7.6.0" + }, "devDependencies": { "@go-task/cli": "^3.35.1", "@rspack/cli": "^0.5.9", "@types/node": "~20.0.0", - "better-typescript-lib": "2.4.0", + "better-typescript-lib": "^2.7.0", "dprint": "^0.45.0", "editorconfig-checker": "^5.1.5", "esbuild": "^0.20.2", "eslint": "^8.57.0", - "git-cliff": "^2.1.2", + "git-cliff": "^2.2.0", "markdown-link-check": "^3.12.1", "npm-run-all2": "^6.1.2", "patch-package": "^8.0.0", @@ -52,12 +55,13 @@ "vitest": "^1.4.0" }, "overrides": { + "@rspack/cli": { + "express": "^4.19.2", + "webpack-dev-middleware": "^6.1.3" + }, "ajv-cli": { "fast-json-patch": "^3.1.1" }, - "@rspack/cli": { - "express": "^4.19.2", - "webpack-dev-middleware": "^6.1.2" - } + "semver": "$semver" } } diff --git a/packages/config/dprint/dprint.jsonc b/packages/config/dprint/dprint.jsonc index b0cc9c63..4f62b348 100644 --- a/packages/config/dprint/dprint.jsonc +++ b/packages/config/dprint/dprint.jsonc @@ -5,7 +5,6 @@ "trailingCommas": "jsonc", "jsonTrailingCommaFiles": [ "tsconfig.json", - "tsconfig.project.json", "*.jsonc", ], }, diff --git a/packages/config/esbuild.config.mjs b/packages/config/esbuild.config.mjs index bb5b7338..cc93640b 100644 --- a/packages/config/esbuild.config.mjs +++ b/packages/config/esbuild.config.mjs @@ -28,8 +28,6 @@ export default { js: requireShim.trim(), }, alias: { - // See: teatimeguest/setup-texlive-action#255 - '@azure/abort-controller': '@setup-texlive-action/polyfill/pure', // This reduces the script size by about 350kb. 'whatwg-url': 'node:url', }, diff --git a/packages/config/eslint.config.mjs b/packages/config/eslint.config.mjs index 51ac607a..f4beb31c 100644 --- a/packages/config/eslint.config.mjs +++ b/packages/config/eslint.config.mjs @@ -4,7 +4,7 @@ import pluginNode from 'eslint-plugin-n'; import pluginRegexp from 'eslint-plugin-regexp'; import pluginUnicorn from 'eslint-plugin-unicorn'; import pluginVitest from 'eslint-plugin-vitest'; -import tseslint, { config as defineConfig } from 'typescript-eslint'; +import ts, { config as defineConfig } from 'typescript-eslint'; export const common = defineConfig( { @@ -32,7 +32,7 @@ export const common = defineConfig( 'require-unicode-regexp': 'error', }, }, - ...tseslint.configs.recommendedTypeChecked, + ...ts.configs.recommendedTypeChecked, { languageOptions: { parserOptions: { @@ -171,7 +171,7 @@ export const sources = defineConfig( 'typeParameter', ], format: null, - filter: '^(?:_$|RUNNER_TEMP$|NOPERLDOC$|TEX|TL_)', + filter: '^(?:_$|GITHUB_|RUNNER_|NOPERLDOC$|TEX|TL_)', }, { selector: 'variable', @@ -314,4 +314,18 @@ export const tests = defineConfig( }, ); +const mockfiles = '**/__mocks__/**/*.ts'; + +export default defineConfig( + { + files: ['src/**/*.ts'], + ignores: [mockfiles], + extends: [...common, ...sources], + }, + { + files: ['__tests__/**/*.ts', mockfiles], + extends: [...common, ...tests], + }, +); + export { defineConfig }; diff --git a/packages/config/package.json b/packages/config/package.json index ea979443..5cd3241d 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@eslint/js": "^8.57.0", - "@tsconfig/strictest": "^2.0.4", + "@tsconfig/strictest": "^2.0.5", "@vitest/coverage-v8": "^1.4.0", "esbuild-loader": "^4.1.0", "eslint-plugin-import-x": "^0.4.4", diff --git a/packages/config/rspack/plugins/licenses.mjs b/packages/config/rspack/plugin-licenses.mjs similarity index 90% rename from packages/config/rspack/plugins/licenses.mjs rename to packages/config/rspack/plugin-licenses.mjs index c2099221..6e62f300 100644 --- a/packages/config/rspack/plugins/licenses.mjs +++ b/packages/config/rspack/plugin-licenses.mjs @@ -40,9 +40,11 @@ export default class PluginLicenses extends LicenseWebpackPlugin { .map((m) => { switch (m.name) { case '@azure/core-http': + // This link is broken. delete m.packageJson?.['homepage']; break; case 'temporal-polyfill': + // Remove dummy text (see below). delete m.licenseText; break; } @@ -68,6 +70,8 @@ export default class PluginLicenses extends LicenseWebpackPlugin { renderLicenses, excludedPackageTest, licenseFileOverrides: { + // This package does not contain a license file and `rspack` will fail, + // so uses a fake file temporarily. 'temporal-polyfill': 'package.json', }, }); diff --git a/packages/config/rspack/plugins/no-emit.mjs b/packages/config/rspack/plugin-no-emit.mjs similarity index 100% rename from packages/config/rspack/plugins/no-emit.mjs rename to packages/config/rspack/plugin-no-emit.mjs diff --git a/packages/config/rspack/rspack.config.mjs b/packages/config/rspack/rspack.config.mjs index 977c502d..16efb5c9 100644 --- a/packages/config/rspack/rspack.config.mjs +++ b/packages/config/rspack/rspack.config.mjs @@ -5,8 +5,8 @@ import esbuildConfig, { transformConfig, } from '@setup-texlive-action/config/esbuild'; -import PluginLicenses from './plugins/licenses.mjs'; -import pluginNoEmit from './plugins/no-emit.mjs'; +import PluginLicenses from './plugin-licenses.mjs'; +import pluginNoEmit from './plugin-no-emit.mjs'; env['FORCE_COLOR'] = '1'; @@ -36,7 +36,7 @@ export default { ], }, target: transformConfig.target, - externals: Object.keys(esbuildConfig.alias), + externals: Object.keys(esbuildConfig.alias ?? {}), optimization: { minimize: false, }, diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json index 43549cb0..67314979 100644 --- a/packages/config/tsconfig.json +++ b/packages/config/tsconfig.json @@ -16,6 +16,7 @@ "allowSyntheticDefaultImports": false, "esModuleInterop": false, "verbatimModuleSyntax": true, + "experimentalDecorators": true, "lib": ["es2023"], "target": "esnext", }, diff --git a/packages/config/vitest/vitest.config.mjs b/packages/config/vitest/vitest.config.mjs index 4460391d..8978dccd 100644 --- a/packages/config/vitest/vitest.config.mjs +++ b/packages/config/vitest/vitest.config.mjs @@ -12,7 +12,6 @@ export default { tsConfigPaths(), ], test: { - include: [], setupFiles: [ fileURLToPath(import.meta.resolve('./suppress-output.mjs')), ], diff --git a/packages/data/Taskfile.yml b/packages/data/Taskfile.yml index 135fe02c..ca4e70d2 100644 --- a/packages/data/Taskfile.yml +++ b/packages/data/Taskfile.yml @@ -6,12 +6,24 @@ tasks: requires: vars: [schema, data] cmd: >- - ajv --strict --all-errors -c ajv-formats -s {{ .schema }} -d {{ .data }} - lint: + ajv + --spec=draft2020 + --strict + --all-errors + -c ajv-formats + -r schemas/target.schema.json + -s {{ .schema }} + -d {{ .data }} + lint:ajv: sources: ['data/*.json'] cmd: for: sources task: ajv vars: data: '{{ .ITEM }}' - schema: 'schemas/{{ .ITEM | osBase | trimSuffix ".json" }}.schema.json' + schema: >- + schemas/{{ .ITEM | osBase | trimSuffix ".json" }}.schema.json + lint:eslint: + cmd: eslint . + lint: + deps: [lint:ajv, lint:eslint] diff --git a/packages/data/data/tlpkg-patches.json b/packages/data/data/tlpkg-patches.json index c0105787..bae1629e 100644 --- a/packages/data/data/tlpkg-patches.json +++ b/packages/data/data/tlpkg-patches.json @@ -14,7 +14,7 @@ }, { "description": "Defines Code Page 65001 as an alias for UTF-8", - "platforms": ["win32"], + "platform": "win32", "versions": "2015", "file": "tlpkg/tlperl/lib/Encode/Alias.pm", "changes": [ @@ -26,7 +26,7 @@ }, { "description": "Makes it possible to use `\\` as a directory separator", - "platforms": ["win32"], + "platform": "win32", "versions": "<2019", "file": "tlpkg/TeXLive/TLUtils.pm", "changes": [ @@ -38,7 +38,7 @@ }, { "description": "Adds support for macOS 11 or later", - "platforms": ["darwin"], + "platform": "darwin", "versions": ">=2017 <2020", "file": "tlpkg/TeXLive/TLUtils.pm", "changes": [ diff --git a/packages/data/eslint.config.js b/packages/data/eslint.config.js new file mode 100644 index 00000000..66692ef5 --- /dev/null +++ b/packages/data/eslint.config.js @@ -0,0 +1 @@ +export { default } from '@setup-texlive-action/config/eslint'; diff --git a/packages/data/package.json b/packages/data/package.json index 52a3c4a3..8baaeb10 100644 --- a/packages/data/package.json +++ b/packages/data/package.json @@ -6,11 +6,21 @@ "lint": "task lint" }, "exports": { + ".": "./src/index.ts", "./*": "./data/*" }, "sideEffects": false, + "dependencies": { + "minimatch": "^9.0.4" + }, + "peerDependencies": { + "semver": "*" + }, "devDependencies": { + "@setup-texlive-action/config": "*", + "@types/semver": "^7.5.8", "ajv-cli": "^5.0.0", - "ajv-formats": "^2.1.1" + "ajv-formats": "^2.1.1", + "ts-essentials": "^9.4.1" } } diff --git a/packages/data/schemas/target.schema.json b/packages/data/schemas/target.schema.json new file mode 100644 index 00000000..7637f19a --- /dev/null +++ b/packages/data/schemas/target.schema.json @@ -0,0 +1,24 @@ +{ + "$id": "target.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Predicate for filtering entries", + "type": "object", + "properties": { + "platform": { + "description": "Minimatch pattern for Node.js platform string", + "type": "string", + "examples": ["darwin", "linux", "!win32"] + }, + "arch": { + "description": "Minimatch pattern for Node.js CPU architecture string", + "type": "string", + "examples": ["arm", "{arm64,x64}"] + }, + "versions": { + "description": "Semver range", + "type": "string", + "examples": ["2008", ">2010 <=2020"] + } + }, + "required": [] +} diff --git a/packages/data/schemas/texlive-versions.schema.json b/packages/data/schemas/texlive-versions.schema.json index 7c800bdf..993f8f50 100644 --- a/packages/data/schemas/texlive-versions.schema.json +++ b/packages/data/schemas/texlive-versions.schema.json @@ -1,6 +1,6 @@ { "$id": "texlive-versions.schema.json", - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "description": "TeX Live versions", "type": "object", "properties": { diff --git a/packages/data/schemas/tlnet.schema.json b/packages/data/schemas/tlnet.schema.json index 6427d33f..21ab45c6 100644 --- a/packages/data/schemas/tlnet.schema.json +++ b/packages/data/schemas/tlnet.schema.json @@ -1,6 +1,6 @@ { "$id": "tlnet.schema.json", - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "ctan": { @@ -54,13 +54,13 @@ }, "additionalProperties": { "type": "object", - "properties": { - "versions": { - "$ref": "#/$defs/semverRange" + "allOf": [ + { + "$ref": "target.schema.json#" } - }, - "required": ["versions"], - "additionalProperties": false + ], + "minProperties": 1, + "unevaluatedProperties": false } } ] @@ -68,9 +68,6 @@ }, "required": [], "additionalProperties": false - }, - "semverRange": { - "type": "string" } } } diff --git a/packages/data/schemas/tlpkg-patches.schema.json b/packages/data/schemas/tlpkg-patches.schema.json index 8d431a64..c8f3683c 100644 --- a/packages/data/schemas/tlpkg-patches.schema.json +++ b/packages/data/schemas/tlpkg-patches.schema.json @@ -1,7 +1,7 @@ { "$id": "tlpkg-patches.schema.json", - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "patches for `tlpkg`", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Patches for `tlpkg`", "type": "object", "properties": { "patches": { @@ -19,36 +19,33 @@ "$defs": { "patch": { "type": "object", - "properties": { - "description": { - "type": "string" - }, - "platforms": { - "type": "array", - "items": { - "$ref": "#/$defs/platform" + "allOf": [ + { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "file": { + "type": "string", + "format": "uri-reference" + }, + "changes": { + "type": "array", + "items": { + "$ref": "#/$defs/change" + }, + "minItems": 1, + "uniqueItems": true + } }, - "minItems": 1, - "uniqueItems": true - }, - "versions": { - "$ref": "#/$defs/semverRange" - }, - "file": { - "type": "string", - "format": "uri-reference" + "required": ["file", "changes"] }, - "changes": { - "type": "array", - "items": { - "$ref": "#/$defs/change" - }, - "minItems": 1, - "uniqueItems": true + { + "$ref": "target.schema.json#" } - }, - "required": ["file", "changes"], - "additionalProperties": false + ], + "unevaluatedProperties": false }, "change": { "type": "object", @@ -63,14 +60,6 @@ }, "required": ["from", "to"], "additionalProperties": false - }, - "platform": { - "description": "Node.js platform string", - "type": "string", - "examples": ["darwin", "linux", "win32"] - }, - "semverRange": { - "type": "string" } } } diff --git a/packages/data/src/index.ts b/packages/data/src/index.ts new file mode 100644 index 00000000..d45a6139 --- /dev/null +++ b/packages/data/src/index.ts @@ -0,0 +1,75 @@ +import * as os from 'node:os'; + +import { type MinimatchOptions, minimatch } from 'minimatch'; +import type { RangeOptions } from 'semver'; +import coerce from 'semver/functions/coerce.js'; +import inRange from 'semver/functions/satisfies.js'; +import type { DeepReadonly } from 'ts-essentials'; + +export interface Target { + platform?: string; + arch?: string; + versions?: string; +} + +export interface Options { + /** @defaultValue `os.platform()` */ + platform?: NodeJS.Platform; + /** @defaultValue `os.arch()` */ + arch?: NodeJS.Architecture; + version?: string; +} + +const semverOptions = { + includePrerelease: true, +} as const satisfies RangeOptions; + +const minimatchOptions = { + platform: 'linux', +} as const satisfies MinimatchOptions; + +export function satisfies( + target: Readonly, + options?: DeepReadonly, +): boolean { + let result = true; + if ('platform' in target) { + result &&= minimatch( + options?.platform ?? os.platform(), + target.platform, + minimatchOptions, + ); + } + if ('arch' in target) { + result &&= minimatch( + options?.arch ?? os.arch(), + target.arch, + minimatchOptions, + ); + } + if ('versions' in target && options?.version !== undefined) { + const v = coerce(options.version, semverOptions); + if (v === null) { + const error = new TypeError('Invalid version string'); + error['value'] = options.version; + throw error; + } + result &&= inRange(v, target.versions, semverOptions); + } + return result; +} + +export function match( + patterns: Readonly>, + options?: DeepReadonly, +): [key: string, value: T] { + for (const [key, value] of Object.entries(patterns)) { + if (satisfies(value, options)) { + return [key, value]; + } + } + const error = new Error('None of the patterns matched'); + const { platform = os.platform(), arch = os.arch(), version } = options ?? {}; + Object.assign(error, { patterns, platform, arch, version }); + throw error; +} diff --git a/packages/data/tsconfig.json b/packages/data/tsconfig.json new file mode 100644 index 00000000..26044466 --- /dev/null +++ b/packages/data/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@setup-texlive-action/config/tsconfig", +} diff --git a/packages/e2e/delete-caches.cjs b/packages/e2e/delete-caches.cjs deleted file mode 100644 index a17a27d0..00000000 --- a/packages/e2e/delete-caches.cjs +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @param {object} args - * @param {import('@actions/github').Context} args.context - * @param {import('@actions/core')} args.core - * @param {ReturnType} args.github - */ -async function deleteCaches(args) { - const { context, core, github } = args; - const { deleteActionsCacheByKey, getActionsCacheList } = github.rest.actions; - const paginator = github.paginate.iterator(getActionsCacheList, { - ...context.repo, - per_page: 100, - key: 'setup-texlive-action-', - }); - for await (const { data: caches } of paginator) { - await Promise.all(caches.map(async ({ key }) => { - if (key !== undefined) { - core.info(`Deleting ${key}`); - try { - await deleteActionsCacheByKey({ ...context.repo, key }); - } catch (error) { - core.setFailed(`${error}`); - } - } - })); - } -} - -module.exports = deleteCaches; diff --git a/packages/e2e/index.cjs b/packages/e2e/index.cjs new file mode 100644 index 00000000..3f1cafb3 --- /dev/null +++ b/packages/e2e/index.cjs @@ -0,0 +1,30 @@ +// @ts-check +/** + * @param {object} args + * @param {import('@actions/github').context} args.context + * @param {import('@actions/core')} args.core + * @param {ReturnType} args.github + */ +async function deleteCaches(args) { + const { context, core, github: { paginate, rest } } = args; + const { deleteActionsCacheByKey, getActionsCacheList } = rest.actions; + const paginator = paginate.iterator(getActionsCacheList, { + ...context.repo, + per_page: 100, + key: 'setup-texlive-action-', + }); + for await (const { data } of paginator) { + for (const { key } of data) { + if (key !== undefined) { + core.info(`Deleting ${key}`); + try { + await deleteActionsCacheByKey({ ...context.repo, key }); + } catch (error) { + core.setFailed(`${error}`); + } + } + } + } +} + +module.exports = { deleteCaches }; diff --git a/packages/e2e/package.json b/packages/e2e/package.json index 604df3ec..459d6063 100644 --- a/packages/e2e/package.json +++ b/packages/e2e/package.json @@ -4,7 +4,8 @@ "scripts": { "test": "task" }, - "exports": { - "./delete-caches": "./delete-caches.cjs" + "main": "index.cjs", + "devDependencies": { + "@actions/github": "^6.0.0" } } diff --git a/packages/fixtures/index.mjs b/packages/fixtures/index.mjs index 650ad0a5..a66bea9e 100644 --- a/packages/fixtures/index.mjs +++ b/packages/fixtures/index.mjs @@ -1,29 +1,37 @@ -import path from 'node:path'; +// @ts-check +import * as path from 'node:path'; /** @returns {import('vite').Plugin} */ export default function fixtures() { return { name: '@setup-texlive-action/fixtures', - async transform(code, id) { - const ext = path.extname(id); - if (ext === '.http') { - return { - code: ` - import parseHttp from 'http-headers'; + async transform(src, id) { + switch (path.extname(id)) { + case '.http': + return { + code: ` + import parseHttp from 'http-headers'; - const http = parseHttp(${JSON.stringify(code)}); - export const { version, statusCode, statusMessage, headers } = http; - export default http; - `, - }; - } else if ( - ['.log', '.stderr', '.stdout', '.tlpdb'].includes(ext) - ) { - return { - code: ` - export default ${JSON.stringify(code)}; - `, - }; + const http = parseHttp(${JSON.stringify(src)}); + + export const { + version, + statusCode, + statusMessage, + headers, + } = http; + export default http; + `, + }; + case '.log': + case '.stderr': + case '.stdout': + case '.tlpdb': + return { + code: ` + export default ${JSON.stringify(src)}; + `, + }; } }, }; diff --git a/packages/main/tests/__mocks__/@actions/cache.ts b/packages/main/__mocks__/@actions/cache.ts similarity index 100% rename from packages/main/tests/__mocks__/@actions/cache.ts rename to packages/main/__mocks__/@actions/cache.ts diff --git a/packages/main/tests/__mocks__/@actions/core.ts b/packages/main/__mocks__/@actions/core.ts similarity index 100% rename from packages/main/tests/__mocks__/@actions/core.ts rename to packages/main/__mocks__/@actions/core.ts diff --git a/packages/main/tests/__mocks__/@actions/exec.ts b/packages/main/__mocks__/@actions/exec.ts similarity index 100% rename from packages/main/tests/__mocks__/@actions/exec.ts rename to packages/main/__mocks__/@actions/exec.ts diff --git a/packages/main/tests/__mocks__/@actions/tool-cache.ts b/packages/main/__mocks__/@actions/tool-cache.ts similarity index 100% rename from packages/main/tests/__mocks__/@actions/tool-cache.ts rename to packages/main/__mocks__/@actions/tool-cache.ts diff --git a/packages/main/tests/__mocks__/node/fs/promises.ts b/packages/main/__mocks__/fs/promises.ts similarity index 100% rename from packages/main/tests/__mocks__/node/fs/promises.ts rename to packages/main/__mocks__/fs/promises.ts diff --git a/packages/main/tests/__mocks__/node/os.ts b/packages/main/__mocks__/os.ts similarity index 100% rename from packages/main/tests/__mocks__/node/os.ts rename to packages/main/__mocks__/os.ts diff --git a/packages/main/tests/__mocks__/node/path.ts b/packages/main/__mocks__/path.ts similarity index 100% rename from packages/main/tests/__mocks__/node/path.ts rename to packages/main/__mocks__/path.ts diff --git a/packages/main/tests/__mocks__/node/process.ts b/packages/main/__mocks__/process.ts similarity index 100% rename from packages/main/tests/__mocks__/node/process.ts rename to packages/main/__mocks__/process.ts diff --git a/packages/main/tests/__mocks__/unctx.ts b/packages/main/__mocks__/unctx.ts similarity index 100% rename from packages/main/tests/__mocks__/unctx.ts rename to packages/main/__mocks__/unctx.ts diff --git a/packages/main/tests/__snapshots__/action/cache.test.ts.snap b/packages/main/__snapshots__/action/cache.test.ts.snap similarity index 100% rename from packages/main/tests/__snapshots__/action/cache.test.ts.snap rename to packages/main/__snapshots__/action/cache.test.ts.snap diff --git a/packages/main/tests/__snapshots__/log.test.ts.snap b/packages/main/__snapshots__/log.test.ts.snap similarity index 100% rename from packages/main/tests/__snapshots__/log.test.ts.snap rename to packages/main/__snapshots__/log.test.ts.snap diff --git a/packages/main/tests/__snapshots__/texlive/install-tl/profile.test.ts.snap b/packages/main/__snapshots__/texlive/install-tl/profile.test.ts.snap similarity index 100% rename from packages/main/tests/__snapshots__/texlive/install-tl/profile.test.ts.snap rename to packages/main/__snapshots__/texlive/install-tl/profile.test.ts.snap diff --git a/packages/main/tests/__tests__/action/cache.test.ts b/packages/main/__tests__/action/cache.test.ts similarity index 100% rename from packages/main/tests/__tests__/action/cache.test.ts rename to packages/main/__tests__/action/cache.test.ts diff --git a/packages/main/tests/__tests__/action/config.test.ts b/packages/main/__tests__/action/config.test.ts similarity index 100% rename from packages/main/tests/__tests__/action/config.test.ts rename to packages/main/__tests__/action/config.test.ts diff --git a/packages/main/tests/__tests__/action/env.test.ts b/packages/main/__tests__/action/env.test.ts similarity index 100% rename from packages/main/tests/__tests__/action/env.test.ts rename to packages/main/__tests__/action/env.test.ts diff --git a/packages/main/tests/__tests__/action/inputs.test.ts b/packages/main/__tests__/action/inputs.test.ts similarity index 100% rename from packages/main/tests/__tests__/action/inputs.test.ts rename to packages/main/__tests__/action/inputs.test.ts diff --git a/packages/main/tests/__tests__/action/run/main/index.test.ts b/packages/main/__tests__/action/run/main/index.test.ts similarity index 100% rename from packages/main/tests/__tests__/action/run/main/index.test.ts rename to packages/main/__tests__/action/run/main/index.test.ts diff --git a/packages/main/tests/__tests__/action/run/main/install.test.ts b/packages/main/__tests__/action/run/main/install.test.ts similarity index 100% rename from packages/main/tests/__tests__/action/run/main/install.test.ts rename to packages/main/__tests__/action/run/main/install.test.ts diff --git a/packages/main/tests/__tests__/action/run/main/update.test.ts b/packages/main/__tests__/action/run/main/update.test.ts similarity index 100% rename from packages/main/tests/__tests__/action/run/main/update.test.ts rename to packages/main/__tests__/action/run/main/update.test.ts diff --git a/packages/main/tests/__tests__/ctan.test.ts b/packages/main/__tests__/ctan.test.ts similarity index 100% rename from packages/main/tests/__tests__/ctan.test.ts rename to packages/main/__tests__/ctan.test.ts diff --git a/packages/main/tests/__tests__/log.test.ts b/packages/main/__tests__/log.test.ts similarity index 100% rename from packages/main/tests/__tests__/log.test.ts rename to packages/main/__tests__/log.test.ts diff --git a/packages/main/__tests__/setup.ts b/packages/main/__tests__/setup.ts new file mode 100644 index 00000000..2e1310b1 --- /dev/null +++ b/packages/main/__tests__/setup.ts @@ -0,0 +1,52 @@ +import { vi } from 'vitest'; + +import { current } from '@setup-texlive-action/data/texlive-versions.json'; + +import '#/globals'; +import type { Version } from '#/texlive/version'; + +vi.mock('fs/promises'); +vi.mock('os'); +vi.mock('path'); +vi.mock('process'); +vi.mock('@actions/cache'); +vi.mock('@actions/core'); +vi.mock('@actions/exec'); +vi.mock('@actions/glob'); +vi.mock('@actions/http-client'); +vi.mock('@actions/io'); +vi.mock('@actions/tool-cache'); +vi.mock('@setup-texlive-action/utils'); +vi.mock('unctx'); +vi.mock('#/action/cache'); +vi.mock('#/action/config'); +vi.mock('#/action/env'); +vi.mock('#/action/inputs'); +vi.mock('#/ctan/mirrors'); +vi.mock('#/tex/kpse'); +vi.mock('#/texlive/install-tl/cli'); +vi.mock('#/texlive/install-tl/profile'); +vi.mock('#/texlive/releases'); +vi.mock('#/texlive/tlmgr/actions/conf'); +vi.mock('#/texlive/tlmgr/actions/install'); +vi.mock('#/texlive/tlmgr/actions/list'); +vi.mock('#/texlive/tlmgr/actions/path'); +vi.mock('#/texlive/tlmgr/actions/pinning'); +vi.mock('#/texlive/tlmgr/actions/repository'); +vi.mock('#/texlive/tlmgr/actions/update'); +vi.mock('#/texlive/tlmgr/actions/version'); +vi.mock('#/texlive/tlmgr/internals'); +vi.mock('#/texlive/tlnet'); +vi.mock('#/texlive/tlpkg/patch'); +vi.mock('#/texlive/tlpkg/util'); + +vi.stubGlobal('LATEST_VERSION', current.version as Version); +// https://www.rfc-editor.org/rfc/rfc2606.html +vi.stubGlobal('MOCK_URL', 'https://example.com/'); + +declare global { + var LATEST_VERSION: Version; + var MOCK_URL: string; +} + +/* eslint no-var: off */ diff --git a/packages/main/tests/__tests__/texlive/depends-txt.test.ts b/packages/main/__tests__/texlive/depends-txt.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/depends-txt.test.ts rename to packages/main/__tests__/texlive/depends-txt.test.ts diff --git a/packages/main/tests/__tests__/texlive/install-tl/cli.test.ts b/packages/main/__tests__/texlive/install-tl/cli.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/install-tl/cli.test.ts rename to packages/main/__tests__/texlive/install-tl/cli.test.ts diff --git a/packages/main/tests/__tests__/texlive/install-tl/profile.test.ts b/packages/main/__tests__/texlive/install-tl/profile.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/install-tl/profile.test.ts rename to packages/main/__tests__/texlive/install-tl/profile.test.ts diff --git a/packages/main/tests/__tests__/texlive/install-tl/texmf.test.ts b/packages/main/__tests__/texlive/install-tl/texmf.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/install-tl/texmf.test.ts rename to packages/main/__tests__/texlive/install-tl/texmf.test.ts diff --git a/packages/main/tests/__tests__/texlive/releases.test.ts b/packages/main/__tests__/texlive/releases.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/releases.test.ts rename to packages/main/__tests__/texlive/releases.test.ts diff --git a/packages/main/tests/__tests__/texlive/tlmgr/conf.test.ts b/packages/main/__tests__/texlive/tlmgr/conf.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/tlmgr/conf.test.ts rename to packages/main/__tests__/texlive/tlmgr/conf.test.ts diff --git a/packages/main/tests/__tests__/texlive/tlmgr/install.test.ts b/packages/main/__tests__/texlive/tlmgr/install.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/tlmgr/install.test.ts rename to packages/main/__tests__/texlive/tlmgr/install.test.ts diff --git a/packages/main/tests/__tests__/texlive/tlmgr/list.test.ts b/packages/main/__tests__/texlive/tlmgr/list.test.ts similarity index 96% rename from packages/main/tests/__tests__/texlive/tlmgr/list.test.ts rename to packages/main/__tests__/texlive/tlmgr/list.test.ts index d640189a..f51ab28d 100644 --- a/packages/main/tests/__tests__/texlive/tlmgr/list.test.ts +++ b/packages/main/__tests__/texlive/tlmgr/list.test.ts @@ -7,14 +7,14 @@ import tlpdb2023 from '@setup-texlive-action/fixtures/texlive.2023.tlpdb'; import { list } from '#/texlive/tlmgr/actions/list'; import { TlmgrInternals, set } from '#/texlive/tlmgr/internals'; -import type { Tlpobj } from '#/texlive/tlpkg'; +import type { TLPObj } from '#/texlive/tlpkg'; vi.unmock('#/texlive/tlmgr/actions/list'); const years = ['2008', '2023'] as const; const tlpdb = { - '2008': new Set(), - '2023': new Set(), + '2008': new Set(), + '2023': new Set(), } as const; beforeAll(async () => { diff --git a/packages/main/tests/__tests__/texlive/tlmgr/path.test.ts b/packages/main/__tests__/texlive/tlmgr/path.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/tlmgr/path.test.ts rename to packages/main/__tests__/texlive/tlmgr/path.test.ts diff --git a/packages/main/tests/__tests__/texlive/tlmgr/pinning.test.ts b/packages/main/__tests__/texlive/tlmgr/pinning.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/tlmgr/pinning.test.ts rename to packages/main/__tests__/texlive/tlmgr/pinning.test.ts diff --git a/packages/main/tests/__tests__/texlive/tlmgr/repository.test.ts b/packages/main/__tests__/texlive/tlmgr/repository.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/tlmgr/repository.test.ts rename to packages/main/__tests__/texlive/tlmgr/repository.test.ts diff --git a/packages/main/tests/__tests__/texlive/tlmgr/update.test.ts b/packages/main/__tests__/texlive/tlmgr/update.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/tlmgr/update.test.ts rename to packages/main/__tests__/texlive/tlmgr/update.test.ts diff --git a/packages/main/tests/__tests__/texlive/tlpdb.test.ts b/packages/main/__tests__/texlive/tlpdb.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/tlpdb.test.ts rename to packages/main/__tests__/texlive/tlpdb.test.ts diff --git a/packages/main/tests/__tests__/texlive/tlpkg.test.ts b/packages/main/__tests__/texlive/tlpkg.test.ts similarity index 100% rename from packages/main/tests/__tests__/texlive/tlpkg.test.ts rename to packages/main/__tests__/texlive/tlpkg.test.ts diff --git a/packages/main/eslint.config.js b/packages/main/eslint.config.js index f0f8a59a..66692ef5 100644 --- a/packages/main/eslint.config.js +++ b/packages/main/eslint.config.js @@ -1,18 +1 @@ -import { - common, - defineConfig, - sources, - tests, -} from '@setup-texlive-action/config/eslint'; - -export default defineConfig( - { - files: ['src/**/*.ts'], - ignores: ['src/index.ts', 'src/**/*.d.ts'], - extends: [...common, ...sources], - }, - { - files: ['tests/**/*.ts'], - extends: [...common, ...tests], - }, -); +export { default } from '@setup-texlive-action/config/eslint'; diff --git a/packages/main/package.json b/packages/main/package.json index d3e86ae2..6895749e 100644 --- a/packages/main/package.json +++ b/packages/main/package.json @@ -4,7 +4,7 @@ "type": "module", "main": "src/index.ts", "scripts": { - "lint": "eslint", + "lint": "eslint .", "test": "vitest" }, "sideEffects": [ @@ -21,13 +21,15 @@ "clean-stack": "^5.2.0", "deline": "^1.0.4", "scule": "^1.3.0", - "semver": "^7.6.0", "ts-mixer": "^6.0.4", "ts-pattern": "^5.0.8", "tslib": "^2.6.2", "unctx": "^2.3.1", "url-template": "^3.1.1" }, + "peerDependencies": { + "semver": "*" + }, "devDependencies": { "@setup-texlive-action/config": "*", "@setup-texlive-action/data": "*", @@ -43,8 +45,5 @@ "ts-dedent": "^2.2.0", "ts-essentials": "^9.4.1", "vitest": "^1.4.0" - }, - "overrides": { - "semver": "$semver" } } diff --git a/packages/main/tests/__mocks__/setup-texlive-action/action/cache.ts b/packages/main/src/action/__mocks__/cache.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/action/cache.ts rename to packages/main/src/action/__mocks__/cache.ts diff --git a/packages/main/tests/__mocks__/setup-texlive-action/action/inputs.ts b/packages/main/src/action/__mocks__/inputs.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/action/inputs.ts rename to packages/main/src/action/__mocks__/inputs.ts diff --git a/packages/main/src/action/env.ts b/packages/main/src/action/env.ts index 7ac841b5..9effd2cc 100644 --- a/packages/main/src/action/env.ts +++ b/packages/main/src/action/env.ts @@ -24,3 +24,18 @@ export function init(): void { } } } + +declare global { + namespace NodeJS { + /** + * @see {@link https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables} + */ + interface ProcessEnv { + GITHUB_ACTIONS?: string; + GITHUB_ACTION_PATH?: string; + GITHUB_WORKSPACE?: string; + RUNNER_DEBUG?: string; + RUNNER_TEMP?: string; + } + } +} diff --git a/packages/main/src/action/inputs.ts b/packages/main/src/action/inputs.ts index 40763601..6c4db75b 100644 --- a/packages/main/src/action/inputs.ts +++ b/packages/main/src/action/inputs.ts @@ -6,7 +6,7 @@ import { AsPath, Case, FromEnv, - type Lax, + type Nullish, getExposedName, id, } from '@setup-texlive-action/utils'; @@ -46,8 +46,10 @@ export class Inputs { readonly updateAllPackages: boolean = false; @Input - // eslint-disable-next-line @typescript-eslint/ban-types - @Transform(({ value }) => (value as Lax | undefined)?.toLowerCase?.()) + @Transform(({ value }) => + // eslint-disable-next-line @typescript-eslint/ban-types + (value as Nullish | undefined)?.toLowerCase?.() + ) readonly version: string = 'latest'; static load(this: void): Inputs { diff --git a/packages/main/tests/__mocks__/setup-texlive-action/ctan/mirrors.ts b/packages/main/src/ctan/__mocks__/mirrors.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/ctan/mirrors.ts rename to packages/main/src/ctan/__mocks__/mirrors.ts diff --git a/packages/main/src/globals/index.ts b/packages/main/src/globals/index.ts index 3290ac33..ead6b306 100644 --- a/packages/main/src/globals/index.ts +++ b/packages/main/src/globals/index.ts @@ -1,4 +1,4 @@ -import '@setup-texlive-action/polyfill/shims'; +import '@setup-texlive-action/polyfill'; import '#/globals/custom-inspect'; import '#/globals/node16-compat'; diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts index 17c37191..a1def1b8 100644 --- a/packages/main/src/index.ts +++ b/packages/main/src/index.ts @@ -1,3 +1,5 @@ import '#/globals'; + import { run } from '#/action/run'; + await run(); diff --git a/packages/main/tests/__mocks__/setup-texlive-action/tex/kpse.ts b/packages/main/src/tex/__mocks__/kpse.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/tex/kpse.ts rename to packages/main/src/tex/__mocks__/kpse.ts diff --git a/packages/main/tests/__mocks__/setup-texlive-action/texlive/releases.ts b/packages/main/src/texlive/__mocks__/releases.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/texlive/releases.ts rename to packages/main/src/texlive/__mocks__/releases.ts diff --git a/packages/main/tests/__mocks__/setup-texlive-action/texlive/tlnet.ts b/packages/main/src/texlive/__mocks__/tlnet.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/texlive/tlnet.ts rename to packages/main/src/texlive/__mocks__/tlnet.ts diff --git a/packages/main/tests/__mocks__/setup-texlive-action/texlive/install-tl/profile.ts b/packages/main/src/texlive/install-tl/__mocks__/profile.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/texlive/install-tl/profile.ts rename to packages/main/src/texlive/install-tl/__mocks__/profile.ts diff --git a/packages/main/tests/__mocks__/setup-texlive-action/texlive/tlmgr/internals.ts b/packages/main/src/texlive/tlmgr/__mocks__/internals.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/texlive/tlmgr/internals.ts rename to packages/main/src/texlive/tlmgr/__mocks__/internals.ts diff --git a/packages/main/tests/__mocks__/setup-texlive-action/texlive/tlmgr/actions/conf.ts b/packages/main/src/texlive/tlmgr/actions/__mocks__/conf.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/texlive/tlmgr/actions/conf.ts rename to packages/main/src/texlive/tlmgr/actions/__mocks__/conf.ts diff --git a/packages/main/tests/__mocks__/setup-texlive-action/texlive/tlmgr/actions/list.ts b/packages/main/src/texlive/tlmgr/actions/__mocks__/list.ts similarity index 100% rename from packages/main/tests/__mocks__/setup-texlive-action/texlive/tlmgr/actions/list.ts rename to packages/main/src/texlive/tlmgr/actions/__mocks__/list.ts diff --git a/packages/main/src/texlive/tlnet.ts b/packages/main/src/texlive/tlnet.ts index b8ddbb30..dd174360 100644 --- a/packages/main/src/texlive/tlnet.ts +++ b/packages/main/src/texlive/tlnet.ts @@ -1,3 +1,4 @@ +import { match } from '@setup-texlive-action/data'; import tlnet from '@setup-texlive-action/data/tlnet.json'; import { parseTemplate } from 'url-template'; @@ -15,9 +16,7 @@ export async function contrib(options?: TlnetOptions): Promise { } export function historic(version: Version, options?: TlnetOptions): URL { - const [template] = Object - .entries(tlnet.historic.path) - .find(([, { versions }]) => Version.satisfies(version, versions))!; + const [template] = match(tlnet.historic.path, { version }); const tlnetPath = parseTemplate(template).expand({ version }); const base = (options?.master ?? false) ? tlnet.historic.master diff --git a/packages/main/src/texlive/tlpkg/patch.ts b/packages/main/src/texlive/tlpkg/patch.ts index 9601927f..040c6821 100644 --- a/packages/main/src/texlive/tlpkg/patch.ts +++ b/packages/main/src/texlive/tlpkg/patch.ts @@ -1,9 +1,10 @@ import { readFile, writeFile } from 'node:fs/promises'; -import { EOL, platform } from 'node:os'; +import { EOL } from 'node:os'; import * as path from 'node:path'; +import { satisfies } from '@setup-texlive-action/data'; import { patches } from '@setup-texlive-action/data/tlpkg-patches.json'; -import { exec } from '@setup-texlive-action/utils'; +import { exec } from '@setup-texlive-action/utils/exec'; import type { DeepReadonly } from 'ts-essentials'; import * as log from '#/log'; @@ -13,11 +14,7 @@ export async function patch(options: { readonly directory: string; readonly version: Version; }): Promise { - const ps = patches.filter((p) => { - return (p.platforms?.includes(platform()) ?? true) - && Version.satisfies(options.version, p.versions); - }); - + const ps = patches.filter((p) => satisfies(p, options)); if (ps.length > 0) { log.info('Applying patches'); const lines = await Promise.all(ps.map((p) => apply(p, options.directory))); diff --git a/packages/main/src/types.d.ts b/packages/main/src/types.d.ts deleted file mode 100644 index 77a61c4b..00000000 --- a/packages/main/src/types.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -interface Error { - [key: string]: unknown; // Some additional information. -} - -declare namespace NodeJS { - /** - * @see {@link https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables} - */ - interface ProcessEnv { - GITHUB_ACTIONS?: string; - GITHUB_ACTION_PATH?: string; - GITHUB_WORKSPACE?: string; - RUNNER_DEBUG?: string; - RUNNER_TEMP?: string; - } -} diff --git a/packages/main/tests/setup-globals.ts b/packages/main/tests/setup-globals.ts deleted file mode 100644 index 9a9c9cc9..00000000 --- a/packages/main/tests/setup-globals.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { vi } from 'vitest'; - -import { current } from '@setup-texlive-action/data/texlive-versions.json'; - -import '#/globals'; -import type { Version } from '#/texlive/version'; - -vi.stubGlobal('LATEST_VERSION', current.version as Version); -// https://www.rfc-editor.org/rfc/rfc2606.html -vi.stubGlobal('MOCK_URL', 'https://example.com/'); - -declare global { - var LATEST_VERSION: Version; - var MOCK_URL: string; -} - -/* eslint no-var: off */ diff --git a/packages/main/tests/setup-mocks.ts b/packages/main/tests/setup-mocks.ts deleted file mode 100644 index f179ca9e..00000000 --- a/packages/main/tests/setup-mocks.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { vi } from 'vitest'; - -import { fileURLToPath } from 'node:url'; - -const path = await vi.importActual('node:path'); -const tests = path.dirname(fileURLToPath(import.meta.url)); - -vi.mock('@actions/http-client'); -vi.mock('@actions/glob'); -vi.mock('@actions/io'); -vi.mock('@setup-texlive-action/utils'); -vi.mock('#/action/config'); -vi.mock('#/action/env'); -vi.mock('#/texlive/install-tl/cli'); -vi.mock('#/texlive/tlmgr/actions/install'); -vi.mock('#/texlive/tlmgr/actions/path'); -vi.mock('#/texlive/tlmgr/actions/pinning'); -vi.mock('#/texlive/tlmgr/actions/repository'); -vi.mock('#/texlive/tlmgr/actions/update'); -vi.mock('#/texlive/tlmgr/actions/version'); -vi.mock('#/texlive/tlpkg/patch'); -vi.mock('#/texlive/tlpkg/util'); - -for ( - const [parent, modules] of Object.entries({ - '': [ - '@actions/cache', - '@actions/core', - '@actions/exec', - '@actions/tool-cache', - 'unctx', - ], - node: [ - 'fs/promises', - 'os', - 'path', - 'process', - ], - 'setup-texlive-action': [ - '#/action/cache', - '#/action/inputs', - '#/ctan/mirrors', - '#/tex/kpse', - '#/texlive/install-tl/profile', - '#/texlive/releases', - '#/texlive/tlmgr/actions/conf', - '#/texlive/tlmgr/actions/list', - '#/texlive/tlmgr/internals', - '#/texlive/tlnet', - ], - }) -) { - for (const mod of modules) { - vi.doMock(mod, async () => { - return await vi.importActual( - path.join( - tests, - '__mocks__', - parent, - mod.replace(/^#/v, ''), - ), - ); - }); - } -} diff --git a/packages/main/tests/tsconfig.json b/packages/main/tests/tsconfig.json deleted file mode 100644 index bf098907..00000000 --- a/packages/main/tests/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "@setup-texlive-action/config/tsconfig", - "compilerOptions": { - "baseUrl": "../src", - "paths": { - "#/*": ["*", "*.js", "*/index.js"], - }, - "allowArbitraryExtensions": true, - "composite": true, - }, - "include": [ - "../src/**/*.ts", - "../src/**/*.json", - "./**/*.ts", - ], - "references": [ - { "path": "../../polyfill" }, - { "path": "../../utils" }, - ], -} diff --git a/packages/main/tsconfig.json b/packages/main/tsconfig.json index 1974e58f..080b275c 100644 --- a/packages/main/tsconfig.json +++ b/packages/main/tsconfig.json @@ -5,21 +5,5 @@ "paths": { "#/*": ["*", "*.js", "*/index.js"], }, - "rootDir": "./src", - "outDir": "./lib", - "experimentalDecorators": true, - "composite": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", }, - "files": [ - "./src/types.d.ts", - ], - "include": [ - "./src/**/*.ts", - "./src/**/*.json", - ], - "references": [ - { "path": "../polyfill" }, - { "path": "../utils" }, - ], } diff --git a/packages/main/vitest.config.mjs b/packages/main/vitest.config.mjs index 63014cc2..25ec5349 100644 --- a/packages/main/vitest.config.mjs +++ b/packages/main/vitest.config.mjs @@ -6,12 +6,6 @@ import fixtures from '@setup-texlive-action/fixtures'; export default mergeConfig(sharedConfig, { plugins: [fixtures()], test: { - include: [ - 'tests/__tests__/**/*.test.ts', - ], - setupFiles: [ - 'tests/setup-globals.ts', - 'tests/setup-mocks.ts', - ], + setupFiles: ['__tests__/setup.ts'], }, }); diff --git a/packages/polyfill/eslint.config.js b/packages/polyfill/eslint.config.js index dbdf16fb..66692ef5 100644 --- a/packages/polyfill/eslint.config.js +++ b/packages/polyfill/eslint.config.js @@ -1,10 +1 @@ -import { - common, - defineConfig, - sources, -} from '@setup-texlive-action/config/eslint'; - -export default defineConfig({ - files: ['src/**/*.ts'], - extends: [...common, ...sources], -}); +export { default } from '@setup-texlive-action/config/eslint'; diff --git a/packages/polyfill/package.json b/packages/polyfill/package.json index 017640af..bb1b9f76 100644 --- a/packages/polyfill/package.json +++ b/packages/polyfill/package.json @@ -3,23 +3,16 @@ "private": true, "type": "module", "scripts": { - "lint": "eslint" + "lint": "eslint ." }, - "exports": { - "./pure": "./src/pure/index.ts", - "./shims": "./src/shims/index.ts" - }, - "sideEffects": [ - "./src/shims/**/*.ts" - ], + "main": "src/index.ts", + "sideEffects": true, "dependencies": { "@abraham/reflection": "^0.12.0", "array-from-async": "^3.0.0", - "node-fetch": "^2.7.0", "temporal-polyfill": "^0.2.3" }, "devDependencies": { - "@setup-texlive-action/config": "*", - "@types/node-fetch": "^2.6.11" + "@setup-texlive-action/config": "*" } } diff --git a/packages/polyfill/src/array-from-async.ts b/packages/polyfill/src/array-from-async.ts new file mode 100644 index 00000000..2c5c60b8 --- /dev/null +++ b/packages/polyfill/src/array-from-async.ts @@ -0,0 +1,16 @@ +import fromAsync from 'array-from-async'; + +if (typeof Array.fromAsync !== 'function') { + Object.defineProperty(Array, 'fromAsync', { + value: fromAsync as typeof Array.fromAsync, + configurable: false, + enumerable: false, + writable: false, + }); +} + +declare global { + interface ArrayConstructor { + fromAsync: typeof fromAsync; + } +} diff --git a/packages/polyfill/src/shims/disposable.ts b/packages/polyfill/src/disposable.ts similarity index 100% rename from packages/polyfill/src/shims/disposable.ts rename to packages/polyfill/src/disposable.ts diff --git a/packages/polyfill/src/shims/index.ts b/packages/polyfill/src/index.ts similarity index 100% rename from packages/polyfill/src/shims/index.ts rename to packages/polyfill/src/index.ts diff --git a/packages/polyfill/src/pure/abort-controller.ts b/packages/polyfill/src/pure/abort-controller.ts deleted file mode 100644 index 706d315b..00000000 --- a/packages/polyfill/src/pure/abort-controller.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { AbortError } from 'node-fetch'; - -export const { AbortController, AbortSignal } = globalThis; diff --git a/packages/polyfill/src/pure/index.ts b/packages/polyfill/src/pure/index.ts deleted file mode 100644 index ec6db3da..00000000 --- a/packages/polyfill/src/pure/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './abort-controller.js'; diff --git a/packages/polyfill/src/shims/array-from-async.ts b/packages/polyfill/src/shims/array-from-async.ts deleted file mode 100644 index 873acf16..00000000 --- a/packages/polyfill/src/shims/array-from-async.ts +++ /dev/null @@ -1,25 +0,0 @@ -// @ts-expect-error - no type definition -import fromAsync from 'array-from-async'; - -if (typeof Array.fromAsync !== 'function') { - Object.defineProperty(Array, 'fromAsync', { - value: fromAsync as typeof Array.fromAsync, - configurable: false, - enumerable: false, - writable: false, - }); -} - -declare global { - interface ArrayConstructor { - fromAsync( - items: Iterable | AsyncIterable | ArrayLike, - ): PromiseLike; - - fromAsync( - items: Iterable | AsyncIterable | ArrayLike, - mapfn: (this: This, item: T, index: number) => U, - thisArg?: This, - ): PromiseLike; - } -} diff --git a/packages/polyfill/tsconfig.json b/packages/polyfill/tsconfig.json index f764fa37..26044466 100644 --- a/packages/polyfill/tsconfig.json +++ b/packages/polyfill/tsconfig.json @@ -1,10 +1,3 @@ { "extends": "@setup-texlive-action/config/tsconfig", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./lib", - "composite": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", - }, - "include": ["./src/**/*.ts"], } diff --git a/packages/tsconfig.json b/packages/tsconfig.json index b269cb25..03c2c527 100644 --- a/packages/tsconfig.json +++ b/packages/tsconfig.json @@ -9,10 +9,5 @@ "main/src/*/index.js", ], }, - "experimentalDecorators": true, }, - "include": [ - "*/src/**/*.ts", - "*/src/**/*.json", - ], } diff --git a/packages/types/package.json b/packages/types/package.json new file mode 100644 index 00000000..55053fc2 --- /dev/null +++ b/packages/types/package.json @@ -0,0 +1,6 @@ +{ + "name": "@types/setup-texlive-action", + "private": true, + "type": "module", + "types": "src/index.d.ts" +} diff --git a/packages/types/src/array-from-async.d.ts b/packages/types/src/array-from-async.d.ts new file mode 100644 index 00000000..7c629860 --- /dev/null +++ b/packages/types/src/array-from-async.d.ts @@ -0,0 +1,11 @@ +declare module 'array-from-async' { + export default function fromAsync( + items: Iterable | AsyncIterable | ArrayLike, + ): PromiseLike; + + export default function fromAsync( + items: Iterable | AsyncIterable | ArrayLike, + mapfn: (this: This, item: T, index: number) => U, + thisArg?: This, + ): PromiseLike; +} diff --git a/packages/utils/src/class-transformer.d.ts b/packages/types/src/class-transformer.d.ts similarity index 100% rename from packages/utils/src/class-transformer.d.ts rename to packages/types/src/class-transformer.d.ts diff --git a/packages/types/src/globals.d.ts b/packages/types/src/globals.d.ts new file mode 100644 index 00000000..18633647 --- /dev/null +++ b/packages/types/src/globals.d.ts @@ -0,0 +1,3 @@ +interface Error { + [key: string]: unknown; // Some additional information. +} diff --git a/packages/types/src/index.d.ts b/packages/types/src/index.d.ts new file mode 100644 index 00000000..293a9d2a --- /dev/null +++ b/packages/types/src/index.d.ts @@ -0,0 +1,3 @@ +/// +/// +/// diff --git a/packages/utils/__tests__/index.test.ts b/packages/utils/__tests__/index.test.ts index 71ec5fa8..31d28bc3 100644 --- a/packages/utils/__tests__/index.test.ts +++ b/packages/utils/__tests__/index.test.ts @@ -4,7 +4,7 @@ import type { Dirent } from 'node:fs'; import * as fs from 'node:fs/promises'; import * as tool from '@actions/tool-cache'; -import '@setup-texlive-action/polyfill/shims'; +import '@setup-texlive-action/polyfill'; import { extract } from '@setup-texlive-action/utils'; vi.mock('node:fs/promises', () => ({ diff --git a/packages/utils/eslint.config.js b/packages/utils/eslint.config.js index 355e2325..66692ef5 100644 --- a/packages/utils/eslint.config.js +++ b/packages/utils/eslint.config.js @@ -1,20 +1 @@ -import { - common, - defineConfig, - sources, - tests, -} from '@setup-texlive-action/config/eslint'; - -const mockfiles = 'src/__mocks__/**/*.ts'; - -export default defineConfig( - { - files: ['src/**/*.ts'], - ignores: [mockfiles], - extends: [...common, ...sources], - }, - { - files: ['__tests__/**/*.ts', mockfiles], - extends: [...common, ...tests], - }, -); +export { default } from '@setup-texlive-action/config/eslint'; diff --git a/packages/utils/package.json b/packages/utils/package.json index 4cb41b8c..194888dd 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -3,7 +3,7 @@ "private": true, "type": "module", "scripts": { - "lint": "eslint", + "lint": "eslint .", "test": "vitest" }, "exports": { diff --git a/packages/utils/src/decorators.ts b/packages/utils/src/decorators.ts index 5f204b36..e3c6801c 100644 --- a/packages/utils/src/decorators.ts +++ b/packages/utils/src/decorators.ts @@ -87,7 +87,7 @@ function assertString(value: unknown): string { return value.valueOf(); } const error = new TypeError('Unexpectedly non-string passed'); - (error as unknown as Record)['input'] = value; + error['input'] = value; throw error; } diff --git a/packages/utils/src/exec.ts b/packages/utils/src/exec.ts index d0484548..c4e1df39 100644 --- a/packages/utils/src/exec.ts +++ b/packages/utils/src/exec.ts @@ -8,7 +8,7 @@ import { import { P, match } from 'ts-pattern'; import { Exception } from './decorators.js'; -import { type Lax } from './types.js'; +import { type Nullish } from './types.js'; export interface ExecOptions extends Readonly> @@ -18,7 +18,7 @@ export interface ExecOptions export type ExecResultConfig = & Omit - & Lax>; + & Nullish>; export class ExecResult implements ExecOutput { readonly command: string; @@ -52,7 +52,7 @@ export interface ExecError extends Omit {} @Exception export class ExecError extends Error { - constructor(config: Lax) { + constructor(config: Nullish) { const { command, exitCode, stderr, silenced = false } = config; super(`\`${command}\` exited with status ${exitCode}: ${stderr}`); Object.assign(this, config); diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 72e0a5ac..b122fe30 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,4 +1,4 @@ -import type {} from '@setup-texlive-action/polyfill/shims'; +import type {} from '@setup-texlive-action/polyfill'; export * from './decorators.js'; export * from './exec.js'; diff --git a/packages/utils/src/types.ts b/packages/utils/src/types.ts index a2e23ba3..2b504d3c 100644 --- a/packages/utils/src/types.ts +++ b/packages/utils/src/types.ts @@ -2,7 +2,7 @@ export type Strict = & Omit & { [K in Keys]-?: NonNullable }; -export type Lax = +export type Nullish = & Omit & { [K in Keys]?: T[K] | undefined }; diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json index dc79af1c..26044466 100644 --- a/packages/utils/tsconfig.json +++ b/packages/utils/tsconfig.json @@ -1,12 +1,3 @@ { "extends": "@setup-texlive-action/config/tsconfig", - "compilerOptions": { - "outDir": "./lib", - "experimentalDecorators": true, - "composite": true, - "tsBuildInfoFile": "./lib/.tsbuildinfo", - }, - "references": [ - { "path": "../polyfill" }, - ], } diff --git a/packages/utils/vitest.config.mjs b/packages/utils/vitest.config.mjs index d188e4fc..81abb6a7 100644 --- a/packages/utils/vitest.config.mjs +++ b/packages/utils/vitest.config.mjs @@ -1,9 +1 @@ -import { mergeConfig } from 'vitest/config'; - -import sharedConfig from '@setup-texlive-action/config/vitest'; - -export default mergeConfig(sharedConfig, { - test: { - include: ['__tests__/**/*.test.ts'], - }, -}); +export { default } from '@setup-texlive-action/config/vitest'; diff --git a/packages/vitest.config.mjs b/packages/vitest.config.mjs index 3bac9ba4..f50d1488 100644 --- a/packages/vitest.config.mjs +++ b/packages/vitest.config.mjs @@ -4,6 +4,7 @@ import sharedConfig from '@setup-texlive-action/config/vitest'; export default mergeConfig(sharedConfig, { test: { + include: [], coverage: { enabled: true, include: ['packages/*/src/**/*.ts'], diff --git a/scripts/build.mjs b/scripts/build.mjs index fe59d6cf..3372dcc1 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -1,4 +1,4 @@ -import { mkdir, writeFile } from 'node:fs/promises'; +import { writeFile } from 'node:fs/promises'; import path from 'node:path'; import { parseArgs } from 'node:util'; @@ -22,10 +22,8 @@ const { metafile } = await esbuild.build({ }); if (metafile != undefined) { - const outDir = './packages/main/lib'; - await mkdir(outDir, { recursive: true }); await writeFile( - path.join(outDir, 'metadata.txt'), + path.join('node_modules', '.esbuild.metadata.txt'), await esbuild.analyzeMetafile(metafile, { verbose: true }), ); } diff --git a/scripts/generate-matrix.jq b/scripts/generate-matrix.jq index 01e3310d..bea6f1b9 100755 --- a/scripts/generate-matrix.jq +++ b/scripts/generate-matrix.jq @@ -10,7 +10,7 @@ version: range(.value // 2008; $latest) | tostring } | select( - contains(env | {os, version} | map_values(. // empty)) + contains(env | { os, version } | map_values(. // empty)) ) ) )"