diff --git a/.c8rc.json b/.c8rc.json new file mode 100644 index 00000000..ed9e7533 --- /dev/null +++ b/.c8rc.json @@ -0,0 +1,8 @@ +{ + "src": "./src", + "all": true, + "reporter": [ + "text", + "lcovonly" + ] +} \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c31135d7..b7be44d5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,6 @@ jobs: - name: setup pnpm uses: pnpm/action-setup@v3 - with: - version: 9 - name: setup node.js uses: actions/setup-node@v4 @@ -66,8 +64,6 @@ jobs: - name: setup pnpm uses: pnpm/action-setup@v3 - with: - version: 9 - name: setup node.js uses: actions/setup-node@v4 @@ -92,8 +88,6 @@ jobs: - name: setup pnpm uses: pnpm/action-setup@v3 - with: - version: 9 - name: setup node.js uses: actions/setup-node@v4 @@ -114,4 +108,4 @@ jobs: with: debug: true coverageLocations: | - ${{github.workspace}}/.tap/report/lcov.info:lcov + ${{github.workspace}}/coverage/lcov.info:lcov diff --git a/.gitignore b/.gitignore index df9166ec..f62f9ab1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,6 @@ node_modules/ coverage/ test.sh test.sh.sha256 -.tap/ +.tsimp/ +**/*.js + diff --git a/bin/test.ts b/bin/test.ts new file mode 100644 index 00000000..f7403145 --- /dev/null +++ b/bin/test.ts @@ -0,0 +1,19 @@ +import { assert } from '@japa/assert'; +import { configure, processCLIArgs, run } from '@japa/runner'; + +processCLIArgs(process.argv.splice(2)); +configure({ + suites: [ + { + name: 'unit', + files: ['test/unit/**/*.test.ts'], + }, + { + name: 'integration', + files: ['test/integration/**/*.test.ts'], + }, + ], + plugins: [assert()], +}); + +await run(); diff --git a/biome.json b/biome.json index 9a955e62..8567a050 100644 --- a/biome.json +++ b/biome.json @@ -1,7 +1,7 @@ { "$schema": "https://biomejs.dev/schemas/1.7.1/schema.json", "files": { - "include": ["./src/**/*.ts", "./test/**/*.ts"], + "include": ["./src/**/*.ts", "bin/test.ts", "./test/**/*.ts"], "ignore": ["./test/fixtures/**/*"] }, "organizeImports": { diff --git a/package.json b/package.json index 356b0b70..96c694e2 100644 --- a/package.json +++ b/package.json @@ -1,70 +1,62 @@ { - "name": "codeclimate-action", - "version": "6.0.0", - "private": true, - "description": "Publish code coverage to Code Climate", - "type": "module", - "main": "lib/main.js", - "packageManager": "pnpm@9.1.3", - "scripts": { - "build": "tsc", - "test": "cross-env NODE_OPTIONS=\"--no-warnings\" tap run --disable-coverage", - "test:only": "pnpm run test --only", - "coverage": "pnpm run test --no-disable-coverage --allow-incomplete-coverage --coverage-report=lcovonly", - "coverage:html": "pnpm run coverage --coverage-report=html", - "biome:ci": "biome ci ./", - "format:check": "biome format ./", - "format": "biome format --write ./", - "lint:check": "biome lint ./", - "lint": "biome lint --apply ./", - "lint:unsafe": "biome lint --apply-unsafe ./" - }, - "repository": { - "type": "git", - "url": "https://github.com/paambaati/codeclimate-action.git" - }, - "keywords": [ - "actions", - "codeclimate", - "quality", - "coverage" - ], - "author": "GP ", - "license": "MIT", - "dependencies": { - "@actions/core": "1.10.1", - "@actions/exec": "1.1.1", - "@actions/github": "6.0.0", - "@actions/glob": "0.4.0", - "hook-std": "3.0.0", - "node-fetch": "3.3.2", - "openpgp": "5.11.1" - }, - "devDependencies": { - "@biomejs/biome": "1.7.3", - "@openpgp/web-stream-tools": "0.1.1", - "@tapjs/core": "2.0.1", - "@tapjs/test": "2.0.1", - "@tapjs/tsx": "1.1.25", - "@tsconfig/node20": "20.1.4", - "@tsconfig/strictest": "2.0.5", - "@types/node": "20.12.12", - "@types/node-fetch": "2.6.11", - "@types/sinon": "17.0.3", - "@types/which": "3.0.3", - "cross-env": "7.0.3", - "nock": "13.5.4", - "sinon": "18.0.0", - "tap": "19.0.2", - "to-readable-stream": "4.0.0", - "ts-node": "10.9.2", - "typescript": "5.4.5", - "which": "4.0.0" - }, - "tap": { - "plugin": [ - "!@tapjs/typescript", - "@tapjs/tsx" - ] - } + "name": "codeclimate-action", + "version": "6.0.0", + "private": true, + "description": "Publish code coverage to Code Climate", + "type": "module", + "main": "lib/main.js", + "packageManager": "pnpm@9.1.3", + "scripts": { + "build": "tsc -p tsconfig.build.json", + "test": "node --import=tsimp/import --enable-source-maps bin/test.ts", + "coverage": "c8 pnpm run test", + "coverage:html": "c8 --reporter=html pnpm run test", + "biome:ci": "biome ci ./", + "format:check": "biome format ./", + "format": "biome format --write ./", + "lint:check": "biome lint ./", + "lint": "biome lint --apply ./", + "lint:unsafe": "biome lint --apply-unsafe ./" + }, + "repository": { + "type": "git", + "url": "https://github.com/paambaati/codeclimate-action.git" + }, + "keywords": [ + "actions", + "codeclimate", + "quality", + "coverage" + ], + "author": "GP ", + "license": "MIT", + "dependencies": { + "@actions/core": "1.10.1", + "@actions/exec": "1.1.1", + "@actions/github": "6.0.0", + "@actions/glob": "0.4.0", + "hook-std": "3.0.0", + "node-fetch": "3.3.2", + "openpgp": "5.11.1" + }, + "devDependencies": { + "@biomejs/biome": "1.7.3", + "@japa/assert": "3.0.0", + "@japa/runner": "3.1.4", + "@openpgp/web-stream-tools": "0.1.1", + "@tsconfig/node20": "20.1.4", + "@tsconfig/strictest": "2.0.5", + "@types/node": "20.12.13", + "@types/node-fetch": "2.6.11", + "@types/sinon": "17.0.3", + "@types/which": "3.0.3", + "c8": "9.1.0", + "cross-env": "7.0.3", + "into-stream": "8.0.1", + "nock": "13.5.4", + "sinon": "18.0.0", + "tsimp": "2.0.11", + "typescript": "5.4.5", + "which": "4.0.0" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a12730c3..67f78293 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,18 +33,15 @@ importers: '@biomejs/biome': specifier: 1.7.3 version: 1.7.3 + '@japa/assert': + specifier: 3.0.0 + version: 3.0.0(@japa/runner@3.1.4)(openapi-types@1.3.4) + '@japa/runner': + specifier: 3.1.4 + version: 3.1.4 '@openpgp/web-stream-tools': specifier: 0.1.1 version: 0.1.1(typescript@5.4.5) - '@tapjs/core': - specifier: 2.0.1 - version: 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/test': - specifier: 2.0.1 - version: 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/tsx': - specifier: 1.1.25 - version: 1.1.25(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) '@tsconfig/node20': specifier: 20.1.4 version: 20.1.4 @@ -52,8 +49,8 @@ importers: specifier: 2.0.5 version: 2.0.5 '@types/node': - specifier: 20.12.12 - version: 20.12.12 + specifier: 20.12.13 + version: 20.12.13 '@types/node-fetch': specifier: 2.6.11 version: 2.6.11 @@ -63,24 +60,24 @@ importers: '@types/which': specifier: 3.0.3 version: 3.0.3 + c8: + specifier: 9.1.0 + version: 9.1.0 cross-env: specifier: 7.0.3 version: 7.0.3 + into-stream: + specifier: 8.0.1 + version: 8.0.1 nock: specifier: 13.5.4 version: 13.5.4 sinon: specifier: 18.0.0 version: 18.0.0 - tap: - specifier: 19.0.2 - version: 19.0.2(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5) - to-readable-stream: - specifier: 4.0.0 - version: 4.0.0 - ts-node: - specifier: 10.9.2 - version: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) + tsimp: + specifier: 2.0.11 + version: 2.0.11(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -102,18 +99,26 @@ packages: '@actions/glob@0.4.0': resolution: {integrity: sha512-+eKIGFhsFa4EBwaf/GMyzCdWrXWymGXfFmZU3FHQvYS8mPcHtTtZONbkcqqUMzw9mJ/pImEBFET1JNifhqGsAQ==} - '@actions/http-client@2.2.0': - resolution: {integrity: sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==} + '@actions/http-client@2.2.1': + resolution: {integrity: sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==} '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} - '@alcalzone/ansi-tokenize@0.1.3': - resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} - engines: {node: '>=14.13.1'} + '@apidevtools/json-schema-ref-parser@9.1.2': + resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==} + + '@apidevtools/openapi-schemas@2.1.0': + resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} + engines: {node: '>=10'} + + '@apidevtools/swagger-methods@3.0.2': + resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} - '@base2/pretty-print-object@1.0.1': - resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} + '@apidevtools/swagger-parser@10.0.3': + resolution: {integrity: sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==} + peerDependencies: + openapi-types: '>=7' '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -171,257 +176,126 @@ packages: cpu: [x64] os: [win32] - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@esbuild/aix-ppc64@0.20.2': - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.20.2': - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.20.2': - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.20.2': - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.20.2': - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.20.2': - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.20.2': - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.20.2': - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.20.2': - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.20.2': - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.20.2': - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.20.2': - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.20.2': - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.20.2': - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.20.2': - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.20.2': - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.20.2': - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.20.2': - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.20.2': - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.20.2': - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.20.2': - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} - '@esbuild/win32-ia32@0.20.2': - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} - '@esbuild/win32-x64@0.20.2': - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] + '@isaacs/cached@1.0.1': + resolution: {integrity: sha512-7kGcJ9Hc1f4qpTApWz3swxbF9Qv1NF/GxuPtXeTptbsgvJIoufSd0h854Nq/2bw80F5C1onsFgEI05l+q0e4vw==} - '@fastify/busboy@2.1.0': - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} - engines: {node: '>=14'} + '@isaacs/catcher@1.0.4': + resolution: {integrity: sha512-g2klMwbnguClWNnCeQ1zYaDJsvPbIbnjdJPDE0z09MqoejJDZSLK5vIKiClq2Bkg5ubuI8vaN6wfIUi5GYzMVA==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@isaacs/ts-node-temp-fork-for-pr-2009@10.9.7': - resolution: {integrity: sha512-9f0bhUr9TnwwpgUhEpr3FjxSaH/OHaARkE2F9fM0lS4nIs2GNerrvGwQz493dk0JKlTaGYVrKbq36vA/whZ34g==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=4.2' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + '@japa/assert@3.0.0': + resolution: {integrity: sha512-4Uvixj78PBpRGeNTqO1GN/qYyl4EeWmIwt/cKiQSLLsoZQpQfe8tvF4PO2Z+zteUi3Zv7WR6pluKYbLQrn3vjg==} + engines: {node: '>=18.16.0'} + peerDependencies: + '@japa/runner': ^3.1.2 - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@japa/core@9.0.1': + resolution: {integrity: sha512-snngJNbvYC92nn+dB69DT2iyosWZLXPRnOp8NJnVEeotkkKAWSmcDqBKw9qq2+MVdshwClvKFVXTxko4MtmlEQ==} + engines: {node: '>=18.16.0'} - '@jridgewell/trace-mapping@0.3.20': - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + '@japa/errors-printer@3.0.4': + resolution: {integrity: sha512-gqBWkc8X6n5y91HH7H8fXyfe3rKV1+YeMNgE/+CY6hXf0/BS7J55s/QldosKEV2ZiWj/WmE6UPZiFH8W873fGw==} + engines: {node: '>=18.16.0'} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@japa/runner@3.1.4': + resolution: {integrity: sha512-ShaVZLdYq3GbFwyNiqQMCfdEoNq9vgYC0P6Z9gflqPcSUfOmN5jeJTLrLpChCBM5Sx9kYuAm5Bh6cqv1ZrArkQ==} + engines: {node: '>=18.16.0'} - '@npmcli/agent@2.2.0': - resolution: {integrity: sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==} - engines: {node: ^16.14.0 || >=18.0.0} + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@npmcli/fs@3.1.0': - resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@jest/types@25.5.0': + resolution: {integrity: sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==} + engines: {node: '>= 8.3'} - '@npmcli/git@5.0.3': - resolution: {integrity: sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw==} - engines: {node: ^16.14.0 || >=18.0.0} + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - '@npmcli/installed-package-contents@2.0.2': - resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@npmcli/node-gyp@3.0.0': - resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@npmcli/promise-spawn@7.0.0': - resolution: {integrity: sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ==} - engines: {node: ^16.14.0 || >=18.0.0} + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - '@npmcli/run-script@7.0.2': - resolution: {integrity: sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==} - engines: {node: ^16.14.0 || >=18.0.0} + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} '@octokit/auth-token@4.0.0': resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} - '@octokit/core@5.0.1': - resolution: {integrity: sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==} + '@octokit/core@5.2.0': + resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} engines: {node: '>= 18'} - '@octokit/endpoint@9.0.2': - resolution: {integrity: sha512-qhKW8YLIi+Kmc92FQUFGr++DYtkx/1fBv+Thua6baqnjnOsgBYJDCvWZR1YcINuHGOEQt416WOfE+A/oG60NBQ==} + '@octokit/endpoint@9.0.5': + resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} engines: {node: '>= 18'} - '@octokit/graphql@7.0.2': - resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} + '@octokit/graphql@7.1.0': + resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} engines: {node: '>= 18'} - '@octokit/openapi-types@19.0.2': - resolution: {integrity: sha512-8li32fUDUeml/ACRp/njCWTsk5t17cfTM1jp9n08pBrqs5cDFJubtjsSnuz56r5Tad6jdEPJld7LxNp9dNcyjQ==} + '@octokit/openapi-types@20.0.0': + resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + + '@octokit/openapi-types@22.2.0': + resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} - '@octokit/plugin-paginate-rest@9.1.4': - resolution: {integrity: sha512-MvZx4WvfhBnt7PtH5XE7HORsO7bBk4er1FgRIUr1qJ89NR2I6bWjGyKsxk8z42FPQ34hFQm0Baanh4gzdZR4gQ==} + '@octokit/plugin-paginate-rest@9.2.1': + resolution: {integrity: sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '>=5' + '@octokit/core': '5' - '@octokit/plugin-rest-endpoint-methods@10.1.4': - resolution: {integrity: sha512-e8dSb9ypW1Q2I+qkOPzs3A9f4/EGpSZSI45wWBfXiqcvpoxSywVcZajZRhFwAutKI+/NNoeKxsxMwCx73oQyWw==} + '@octokit/plugin-rest-endpoint-methods@10.4.1': + resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '>=5' + '@octokit/core': '5' - '@octokit/request-error@5.0.1': - resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} + '@octokit/request-error@5.1.0': + resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} engines: {node: '>= 18'} - '@octokit/request@8.1.5': - resolution: {integrity: sha512-zVKbNbX1xUluD9ZR4/tPs1yuYrK9xeh5fGZUXA6u04XGsTvomg0YO8/ZUC0FqAd49hAOEMFPAVUTh+2lBhOhLA==} + '@octokit/request@8.4.0': + resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} engines: {node: '>= 18'} - '@octokit/types@12.3.0': - resolution: {integrity: sha512-nJ8X2HRr234q3w/FcovDlA+ttUU4m1eJAourvfUUtwAWeqL8AsyRqfnLvVnYn3NFbUnsmzQCzLNdFerPwdmcDQ==} + '@octokit/types@12.6.0': + resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} + + '@octokit/types@13.5.0': + resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==} '@openpgp/web-stream-tools@0.1.1': resolution: {integrity: sha512-1WkV+z78S8DJNlUiCPxSjsna6gfAGCVuepL2KUDlBztXzhvplwWr4lAvsWcYzFkHykaFoCSOV9ssiRRq7QzydQ==} @@ -436,29 +310,24 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@sigstore/bundle@2.3.1': - resolution: {integrity: sha512-eqV17lO3EIFqCWK3969Rz+J8MYrRZKw9IBHpSo6DEcEX2c+uzDFOgHE9f2MnyDpfs48LFO4hXmk9KhQ74JzU1g==} - engines: {node: ^16.14.0 || >=18.0.0} - - '@sigstore/core@1.1.0': - resolution: {integrity: sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==} - engines: {node: ^16.14.0 || >=18.0.0} + '@poppinss/cliui@6.4.1': + resolution: {integrity: sha512-tdV3QpAfrPFRLPOh98F8QxWBvwYF3ziWGGtpVqfZtFNTFkC7nQnVQlUW55UtQ7rkeMmFohxfDI+2JNWScGJ1jQ==} + engines: {node: '>=18.16.0'} - '@sigstore/protobuf-specs@0.3.1': - resolution: {integrity: sha512-aIL8Z9NsMr3C64jyQzE0XlkEyBLpgEJJFDHLVVStkFV5Q3Il/r/YtY6NJWKQ4cy4AE7spP1IX5Jq7VCAxHHMfQ==} - engines: {node: ^16.14.0 || >=18.0.0} + '@poppinss/colors@4.1.3': + resolution: {integrity: sha512-A0FjJ6x14donWDN3bHAFFjJaPWTwM2PgWT834+bPKVK6Xukf25CscoRqCPYI939a8yuJFX9PYWWnVbUVI0E2Cg==} + engines: {node: '>=18.16.0'} - '@sigstore/sign@2.3.0': - resolution: {integrity: sha512-tsAyV6FC3R3pHmKS880IXcDJuiFJiKITO1jxR1qbplcsBkZLBmjrEw5GbC7ikD6f5RU1hr7WnmxB/2kKc1qUWQ==} - engines: {node: ^16.14.0 || >=18.0.0} + '@poppinss/hooks@7.2.3': + resolution: {integrity: sha512-+B7YSazGaCMcoUubwEkCTnpAvJ+Fv7tqgtpu7cm9qt1adEjmXDmaiG76loEnmxAkyHrbZJ5xHGNSD0NwMhLcnA==} + engines: {node: '>=18.16.0'} - '@sigstore/tuf@2.3.2': - resolution: {integrity: sha512-mwbY1VrEGU4CO55t+Kl6I7WZzIl+ysSzEYdA1Nv/FTrl2bkeaPXo5PnWZAVfcY2zSdhOpsUTJW67/M2zHXGn5w==} - engines: {node: ^16.14.0 || >=18.0.0} + '@poppinss/macroable@1.0.2': + resolution: {integrity: sha512-xhhEcEvhQC8mP5oOr5hbE4CmUgmw/IPV1jhpGg2xSkzoFrt9i8YVqBQt9744EFesi5F7pBheWozg63RUBM/5JA==} + engines: {node: '>=18.16.0'} - '@sigstore/verify@1.2.0': - resolution: {integrity: sha512-hQF60nc9yab+Csi4AyoAmilGNfpXT+EXdBgFkP9OgPwIBPwyqVf7JAWPtmqrrrneTmAT6ojv7OlH1f6Ix5BG4Q==} - engines: {node: ^16.14.0 || >=18.0.0} + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} '@sinonjs/commons@2.0.0': resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} @@ -475,188 +344,32 @@ packages: '@sinonjs/text-encoding@0.7.2': resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} - '@tapjs/after-each@2.0.1': - resolution: {integrity: sha512-3JXIJ4g9LPjyXmn/1VuIMC0vh7uBgUpQPksjffxv0rL8wq4C8lvmqt8Qu/fVImJucqzA+WrRqVG1b2Ab0ocDOw==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/after@1.1.24': - resolution: {integrity: sha512-Qys3CtftkfHGC7thDGm9TBzRCBLAoJKrXufF1zQxI1oNUjclWZP/s8CtHH0mwUTISOTehmBLV3wPPHSslD67Ng==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/asserts@2.0.1': - resolution: {integrity: sha512-v2xYDLUwMGt8pzoY5LIjDCaw2NM+G01NW4pC3RcpsZLZbzQv1x/phi2RAX0ixI0nCmZZybqRygFKuMcJamS+gg==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/before-each@2.0.1': - resolution: {integrity: sha512-gG1nYkvCHtWwhkueulO475KczdQZ3vBRgdkta/Qi42ZjZo6SNhYVjNc/+LRGV5vZoESrvgSd+JrDRGufd+j43w==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/before@2.0.1': - resolution: {integrity: sha512-GgnlWPm2PbuyYuG4gkkO2KAvT/BbGnpKs60U4XzPSJ2w73Qc/IYWP0Kz6qfCWongpiLteoco67M89ujUQApYJw==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/config@3.0.1': - resolution: {integrity: sha512-gAYFzErdSuPQ3afW6iRR99hiJmRLU+x9T+NE89z9UM45iPxglWLrRv1PFfh3tmtX6rpzwD5RY4/FVPcP2+/1LQ==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - '@tapjs/test': 2.0.1 - - '@tapjs/core@2.0.1': - resolution: {integrity: sha512-q+8d+ohw5kudktIqgP5ETBcPWAPip+kMIxs2eL2G3dV+7Gc8WrH43cCPrbSGPRITIOSIDPrtpQZEcZwQNqDdQw==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - - '@tapjs/error-serdes@2.0.1': - resolution: {integrity: sha512-P+M4rtcfkDsUveKKmoRNF+07xpbPnRY5KrstIUOnyn483clQ7BJhsnWr162yYNCsyOj4zEfZmAJI1f8Bi7h/ZA==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - - '@tapjs/filter@2.0.1': - resolution: {integrity: sha512-muKEeXK7Tz6VR4hjXfT2qXPvjYES575mtiRerjHf+8qP8D7MvmC8qDZJjzFdo1nZHKhF8snvFosIVuI1BAhvsw==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/fixture@2.0.1': - resolution: {integrity: sha512-MLgEwsBlCD69iUbZcnKBehP2js5cV4p5GrFoOKSudMuH2DQJInaF/g2bkijue61cVZwPj/MRPCqAlkwA94epjg==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/intercept@2.0.1': - resolution: {integrity: sha512-BZgXE3zCAbv4lfbph1r85gihtI3kXltHlFQ8Bf3Yy9fx27DKQlBvXnD7T69ke8kQLRzhz+wTMcR/mcQjo1fa7w==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/mock@2.0.1': - resolution: {integrity: sha512-i1vkwNgO7uEuQW3+hTuE2L64aC9xk0cC3PtC6DZKqyApk2IstNgoIS38nfsI6v2kvEgZNuWlsNcRAYNDOIEhzA==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/node-serialize@2.0.1': - resolution: {integrity: sha512-1GtHDa7AXpk8y08llIPfUKRTDNsq+BhXxz7wiIfVEAOEB09kGyfpWteOg+cmvb+aHU1Ays3z+medXTIBm0D5Kg==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/processinfo@3.1.7': - resolution: {integrity: sha512-SI5RJQ5HnUKEWnHSAF6hOm6XPdnjZ+CJzIaVHdFebed8iDAPTqb+IwMVu9yq9+VQ7FRsMMlgLL2SW4rss2iJbQ==} - engines: {node: '>=16.17'} - - '@tapjs/reporter@2.0.1': - resolution: {integrity: sha512-fCdl4vg8vnlqIYtTQ9dc3zOqeXrA5QbATbT4dsPIiPuCM3gvKTbntaNBeaWWZkPx697Dj+b8TIxT/xhNMNv7jQ==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/run@2.0.2': - resolution: {integrity: sha512-2hPGlabqbLb3hh4BHHvwE8R9a9OiWumkCkHw5QQUZurDsVOpB94FfteqW9mktTVjZJnN0go+sN3GN2jZUaPWGQ==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - hasBin: true - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/snapshot@2.0.1': - resolution: {integrity: sha512-ZnbCxL+9fiJ38tec6wvRtRBZz9ChRUq0Bov7dltdZMNkXqudKyB+Zzbg25bqDEIgcczyp6A9hOwTX6VybDGqpg==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/spawn@2.0.1': - resolution: {integrity: sha512-3VaQKJjHV5frMZj3Ef+QlJyB6b7VsGMil223zAEz8Ttgy2hDYtcb29nvsLPUcowFyOUrsydnXEnHgpR79wEPOA==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/stack@2.0.1': - resolution: {integrity: sha512-3rKbZkRkLeJl9ilV/6b80YfI4C4+OYf7iEz5/d0MIVhmVvxv0ttIy5JnZutAc4Gy9eRp5Ne5UTAIFOVY5k36cg==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - - '@tapjs/stdin@2.0.1': - resolution: {integrity: sha512-5Oe13Fzpnt9seAi8h3bsMxtJp8S+DQI6ncBD9JBcS91XKLbqyKrb1bNzeXQN2PrHBs6Atw8cOzFZh0TjL+bIaA==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/test@2.0.1': - resolution: {integrity: sha512-PKazf7r4+bLFATML2f/h8glGcSirXmzXUYlhFuxb4xHoOhHojyKgo1p8kSj+Ksxb3hVSCQlvyXgM8QYYaoMwog==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - hasBin: true - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/tsx@1.1.25': - resolution: {integrity: sha512-oXURZH3IklI3fOerSHAw+3VbchucnmnDUpWv5IUpDdXTVuAQ9cA3TtItfpv6gr4ZGIbKXLHOts1iwu7XA/7tkA==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/typescript@1.4.6': - resolution: {integrity: sha512-6jxUQ7Mdb+Y2q8RJcwgZZ6dCR+X2u3hCL+xb1GDAtO7k1+B6z2b+z+I+FdhuO4YgrP0SLRjocL5rJM/xi9K7qw==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tapjs/worker@2.0.1': - resolution: {integrity: sha512-wegz8IxNEPIIAA+R76/avZgNmZ4iC7QGFbtXKGBU962/1lXTITxshRV6e21r0IBa7YLkSVgDuVSVB3+Qzve0Yg==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - peerDependencies: - '@tapjs/core': 2.0.1 - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node14@14.1.0': - resolution: {integrity: sha512-VmsCG04YR58ciHBeJKBDNMWWfYbyP8FekWVuTlpstaUPlat1D0x/tXzkWP7yCMU0eSz9V4OZU0LBWTFJ3xZf6w==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@tsconfig/node16@16.1.1': - resolution: {integrity: sha512-+pio93ejHN4nINX4pXqfnR/fPLRtJBaT4ORaa5RH0Oc1zoYmo2B2koG+M328CQhHKn1Wj6FcOxCDFXAot9NhvA==} - - '@tsconfig/node18@18.2.2': - resolution: {integrity: sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==} - '@tsconfig/node20@20.1.4': resolution: {integrity: sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==} '@tsconfig/strictest@2.0.5': resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==} - '@tufjs/canonical-json@2.0.0': - resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} - engines: {node: ^16.14.0 || >=18.0.0} - - '@tufjs/models@2.0.0': - resolution: {integrity: sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==} - engines: {node: ^16.14.0 || >=18.0.0} + '@types/chai@4.3.16': + resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@1.1.2': + resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node-fetch@2.6.11': resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} - '@types/node@20.12.12': - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + '@types/node@20.12.13': + resolution: {integrity: sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA==} '@types/sinon@17.0.3': resolution: {integrity: sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==} @@ -667,29 +380,17 @@ packages: '@types/which@3.0.3': resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} - abbrev@2.0.0: - resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} - engines: {node: '>=0.4.0'} - - acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true + '@types/yargs@15.0.19': + resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} - agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - - ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} engines: {node: '>=14.16'} ansi-regex@5.0.1: @@ -704,30 +405,55 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + api-contract-validator@2.2.8: + resolution: {integrity: sha512-YM3rMcrIp8Thf/WWbVBXBGX793Mm3Phw2pn3VbJpiZkpeTCTtF10huKPrzQ2gSIaK5GjAhTRJMAOyf+rsS7MAw==} + engines: {node: '>=8'} + + api-schema-builder@2.0.11: + resolution: {integrity: sha512-85zbwf8MtPWodhfnmQRW5YD/fuGR12FP+8TbcYai5wbRnoUmPYLftLSbp7NB6zQMPb61Gjz+ApPUSyTdcCos7g==} + engines: {node: '>=8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + as-table@1.0.55: + resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} - async-hook-domain@4.0.1: - resolution: {integrity: sha512-bSktexGodAjfHWIrSrrqxqWzf1hWBZBpmPNZv+TYUMyWa2eoefFc6q6H1+KtdHYSz35lrhWdmXt/XK9wNEZvww==} - engines: {node: '>=16'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - auto-bind@5.0.1: - resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -735,10 +461,6 @@ packages: before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} @@ -752,37 +474,36 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} - c8@9.1.0: resolution: {integrity: sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==} engines: {node: '>=14.14.0'} hasBin: true - cacache@18.0.0: - resolution: {integrity: sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w==} - engines: {node: ^16.14.0 || >=18.0.0} + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} @@ -792,17 +513,29 @@ packages: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - code-excerpt@4.0.0: - resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -811,22 +544,34 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + columnify@1.6.0: + resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==} + engines: {node: '>=8.0.0'} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - convert-to-spaces@2.0.1: - resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} @@ -837,10 +582,31 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + dag-map@1.0.2: + resolution: {integrity: sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==} + + data-uri-to-buffer@2.0.2: + resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -850,6 +616,24 @@ packages: supports-color: optional: true + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + deep-eql@5.0.1: + resolution: {integrity: sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==} + engines: {node: '>=6'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -857,9 +641,13 @@ packages: deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + diff-sequences@25.2.6: + resolution: {integrity: sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==} + engines: {node: '>= 8.3'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} @@ -868,41 +656,64 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + emittery@1.0.3: + resolution: {integrity: sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==} + engines: {node: '>=14.16'} + + emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} - esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true - events-to-array@2.0.3: - resolution: {integrity: sha512-f/qE2gImHRa4Cp2y1stEOSgw8wTFyUdVJX7G//bMwbaV9JqISFxg99NbmVQeP7YLnDUZ2un851jlaDrlpmGehQ==} - engines: {node: '>=12'} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -912,10 +723,21 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + find-cache-dir@5.0.0: + resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==} + engines: {node: '>=16'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} @@ -928,44 +750,50 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} - fromentries@1.3.2: - resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function-loop@4.0.0: - resolution: {integrity: sha512-f34iQBedYF3XcI93uewZZOnyscDragxgTK/eTvVB74k3fCD0ZorOi5BV9GS4M8rz/JoNi0Kl3qX5Y9MH3S/CLQ==} + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-source@2.0.12: + resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + getopts@2.3.0: + resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob@10.3.16: - resolution: {integrity: sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==} + glob@10.3.15: + resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==} engines: {node: '>=16 || 14 >=14.18'} hasBin: true @@ -973,59 +801,46 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} hook-std@3.0.0: resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hosted-git-info@7.0.1: - resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} - engines: {node: ^16.14.0 || >=18.0.0} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - - http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ignore-walk@6.0.3: - resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -1033,35 +848,43 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ink@4.4.1: - resolution: {integrity: sha512-rXckvqPBB0Krifk5rn/5LvQGmyXwCUpBfmTwbkQNBY9JY8RSl3b8OftBNEYxg4+SWUhEKcPifgope28uL9inlA==} - engines: {node: '>=14.16'} - peerDependencies: - '@types/react': '>=18.0.0' - react: '>=18.0.0' - react-devtools-core: ^4.19.1 - peerDependenciesMeta: - '@types/react': - optional: true - react-devtools-core: - optional: true + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + into-stream@8.0.1: + resolution: {integrity: sha512-Vp2df7Utjs/1/sv0Vlj2X4u2e2yaCrcMd4T9u0D9B36XvxIOBHA2JIZTXCp2TPCa7w/ebwWVkXhbp9At1wJ0zg==} + engines: {node: '>=16'} - ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} - is-actual-promise@1.0.1: - resolution: {integrity: sha512-PlsL4tNv62lx5yN2HSqaRSTgIpUAPW7U6+crVB8HfWm5161rZpeqWbl0ZSqH2MAfRKXWSZVPRNbE/r8qPcb13g==} + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} - is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-extglob@1.0.0: + resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} + engines: {node: '>=0.10.0'} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -1075,26 +898,67 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-glob@2.0.1: + resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} + engines: {node: '>=0.10.0'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + is-invalid-path@0.1.0: + resolution: {integrity: sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==} + engines: {node: '>=0.10.0'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} - is-lower-case@2.0.2: - resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-valid-path@0.1.1: + resolution: {integrity: sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==} engines: {node: '>=0.10.0'} - is-upper-case@2.0.2: - resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1103,6 +967,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -1111,63 +979,117 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - jackspeak@3.1.2: - resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + jest-diff@25.5.0: + resolution: {integrity: sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==} + engines: {node: '>= 8.3'} + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@25.2.6: + resolution: {integrity: sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==} + engines: {node: '>= 8.3'} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@25.5.0: + resolution: {integrity: sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==} + engines: {node: '>= 8.3'} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-schema-deref-sync@0.14.0: + resolution: {integrity: sha512-yGR1xmhdiD6R0MSrwWcFxQzAj5b3i5Gb/mt5tvQKgFMMeNe0KZYNEN/jWr7G+xn39Azqgcvk4ZKMs8dQl8e4wA==} + engines: {node: '>=6.0.0'} - json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - just-extend@6.2.0: resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.set@4.3.2: + resolution: {integrity: sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} + + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} lru-cache@10.2.2: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + md5@2.2.1: + resolution: {integrity: sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==} + + memory-cache@0.2.0: + resolution: {integrity: sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} - make-fetch-happen@13.0.0: - resolution: {integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==} - engines: {node: ^16.14.0 || >=18.0.0} + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -1191,50 +1113,10 @@ packages: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - minipass-fetch@3.0.4: - resolution: {integrity: sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-json-stream@1.0.1: - resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + minipass@7.1.1: + resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} @@ -1246,9 +1128,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true nise@6.0.0: resolution: {integrity: sha512-K8ePqo9BFvN31HXwEtTNGzgrPpmvgciDsFz8aztFjt4LqKO/JeFD8tBOeuDiCMXrIl/m1YvfH8auSpxfaD09wg==} @@ -1265,51 +1147,16 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp@10.0.1: - resolution: {integrity: sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==} - engines: {node: ^16.14.0 || >=18.0.0} - hasBin: true - - nopt@7.2.0: - resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - - normalize-package-data@6.0.0: - resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} - engines: {node: ^16.14.0 || >=18.0.0} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-bundled@3.0.0: - resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - npm-install-checks@6.3.0: - resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - npm-normalize-package-bin@3.0.1: - resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - npm-package-arg@11.0.1: - resolution: {integrity: sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==} - engines: {node: ^16.14.0 || >=18.0.0} + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - npm-packlist@8.0.0: - resolution: {integrity: sha512-ErAGFB5kJUciPy1mmx/C2YFbvxoJ0QJ9uwkCZOeR6CqLLISPZBOiFModAbSXnjjlwW5lOhuhXva+fURsSGJqyw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - npm-pick-manifest@9.0.0: - resolution: {integrity: sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==} - engines: {node: ^16.14.0 || >=18.0.0} + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} - npm-registry-fetch@16.1.0: - resolution: {integrity: sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==} - engines: {node: ^16.14.0 || >=18.0.0} + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -1318,9 +1165,11 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true + openapi-schema-validator@3.0.3: + resolution: {integrity: sha512-KKpeNEvAmpy6B2JCfyrM4yWjL6vggDCVbBoR8Yfkj0Jltc6PCW+dBbcg+1yrTCuDv80qBQJ6w0ejA71DlOFegA==} + + openapi-types@1.3.4: + resolution: {integrity: sha512-h8rADpW3k/wepLdERKF0VKMAPdoFYNQCLGPmc/f8sgQ2dxUy+7sY4WAX2XDUDjhKTjbJVbxxofLkzy7f1/tE4g==} openpgp@5.11.1: resolution: {integrity: sha512-TynUBPuaSI7dN0gP+A38CjNRLxkOkkptefNanalDQ71BFAKKm+dLbksymSW5bUrB7RcAneMySL/Y+r/TbLpOnQ==} @@ -1330,27 +1179,26 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - pacote@17.0.7: - resolution: {integrity: sha512-sgvnoUMlkv9xHwDUKjKQFXVyUi8dtJGKp3vg6sYy+TxbDic5RjZCHF3ygv0EJgNRZ2GfRONjlKPUfokJ9lDpwQ==} - engines: {node: ^16.14.0 || >=18.0.0} - hasBin: true - - patch-console@2.0.0: - resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -1366,6 +1214,10 @@ packages: path-to-regexp@6.2.2: resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -1374,118 +1226,106 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - polite-json@4.0.1: - resolution: {integrity: sha512-8LI5ZeCPBEb4uBbcYKNVwk4jgqNx1yHReWoW4H4uUihWlSqZsUDfSITrRhjliuPgxsNPFhNSudGO2Zu4cbWinQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - prismjs-terminal@1.2.3: - resolution: {integrity: sha512-xc0zuJ5FMqvW+DpiRkvxURlz98DdfDsZcFHdO699+oL+ykbFfgI7O4VDEgUyc07BSL2NHl3zdb8m/tZ/aaqUrw==} - engines: {node: '>=16'} - - prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} - proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} - proc-log@4.2.0: - resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + pretty-format@25.5.0: + resolution: {integrity: sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==} + engines: {node: '>= 8.3'} - process-on-spawn@1.0.0: - resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} - engines: {node: '>=8'} + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true + pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} + printable-characters@1.0.42: + resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} propagate@2.0.1: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} - react-dom@18.2.0: - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - - react-element-to-jsx-string@15.0.0: - resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} - peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - - react-is@18.1.0: - resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} - - react-reconciler@0.29.0: - resolution: {integrity: sha512-wa0fGj7Zht1EYMRhKWwoo1H9GApxYLBuhoAuXN0TlltESAjDssB+Apf0T/DngVqaMyPypDmabL37vw/2aRM98Q==} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^18.2.0 + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} - react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - read-package-json-fast@3.0.2: - resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - read-package-json@7.0.0: - resolution: {integrity: sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==} - engines: {node: ^16.14.0 || >=18.0.0} - deprecated: This package is no longer supported. Please use @npmcli/package-json instead. + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - resolve-import@1.4.5: - resolution: {integrity: sha512-HXb4YqODuuXT7Icq1Z++0g2JmhgbUHSs3VT2xR83gqvAPUikYT2Xk+562KHQgiaNkbBOlPddYrDLsC44qQggzw==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - rimraf@5.0.5: - resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} - engines: {node: '>=14'} + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@5.0.7: + resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} + engines: {node: '>=14.18'} hasBin: true + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true + serialize-error@11.0.3: + resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} + engines: {node: '>=14.16'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1494,6 +1334,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -1501,56 +1345,37 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sigstore@2.3.0: - resolution: {integrity: sha512-q+o8L2ebiWD1AxD17eglf1pFrl9jtW7FHa0ygqY6EKvibK8JHyq9Z26v9MZXeDiw+RbfOJ9j2v70M10Hd6E06A==} - engines: {node: ^16.14.0 || >=18.0.0} - sinon@18.0.0: resolution: {integrity: sha512-+dXDXzD1sBO6HlmZDd7mXZCR/y5ECiEiGCBSGuFD/kZ0bDTofPYc6JaeGmPSF+1j1MejGUWkORbYOLDyvqCWpA==} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} - slice-ansi@6.0.0: - resolution: {integrity: sha512-6bn4hRfkTvDfUoEQYkERg0BVF1D0vrX9HEkMl08uDiNWvVvjylLHvZFZWkDo6wjT8tUctbYl1nCOuE66ZTaUtA==} - engines: {node: '>=14.16'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.2: - resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} - engines: {node: '>= 14'} - - socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + sock-daemon@1.4.2: + resolution: {integrity: sha512-IzbegWshWWR+UzQ7487mbdYNmfJ1jXUXQBUHooqtpylO+aW0vMVbFN2d2ug3CSPZ0wbG7ZTTGwpUuthIDFIOGg==} + engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + socket-post-message@1.0.3: + resolution: {integrity: sha512-UhJaB3xR2oF+HvddFOq2cBZi4zVKOHvdiBo+BaScNxsEUg3TLWSP8BkweKfe07kfH1thjn1hJR0af/w1EtBFjg==} - ssri@10.0.5: - resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - string-length@6.0.0: - resolution: {integrity: sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==} - engines: {node: '>=16'} + stacktracey@2.1.8: + resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -1560,6 +1385,21 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1572,79 +1412,43 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - sync-content@1.0.2: - resolution: {integrity: sha512-znd3rYiiSxU3WteWyS9a6FXkTA/Wjk8WQsOyzHbineeL837dLn3DA4MRhsIX3qGcxDMH6+uuFV4axztssk7wEQ==} - engines: {node: '>=14'} - hasBin: true - - tap-parser@16.0.1: - resolution: {integrity: sha512-vKianJzSSzLkJ3bHBwzvZDDRi9yGMwkRANJxwPAjAue50owB8rlluYySmTN4tZVH0nsh6stvrQbg9kuCL5svdg==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - hasBin: true - - tap-yaml@2.2.2: - resolution: {integrity: sha512-MWG4OpAKtNoNVjCz/BqlDJiwTM99tiHRhHPS4iGOe1ZS0CgM4jSFH92lthSFvvy4EdDjQZDV7uYqUFlU9JuNhw==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - - tap@19.0.2: - resolution: {integrity: sha512-SRGulk1RKlVuYtnPeephj+xyE0sG9CvGlKYP4lymBZykLtkwBPnEBjQ2iQmLX5z0BFEMfKh8G4bvZkhoSJb3kg==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} - hasBin: true + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} - tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + swagger-parser@10.0.3: + resolution: {integrity: sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==} engines: {node: '>=10'} - tcompare@7.0.1: - resolution: {integrity: sha512-JN5s7hgmg/Ya5HxZqCnywT+XiOGRFcJRgYhtMyt/1m+h0yWpWwApO7HIM8Bpwyno9hI151ljjp5eAPCHhIGbpQ==} - engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} + swagger-schema-official@2.0.0-bab6bed: + resolution: {integrity: sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA==} + + terminal-size@4.0.0: + resolution: {integrity: sha512-rcdty1xZ2/BkWa4ANjWRp4JGpda2quksXIHgn5TMjNBPZfwzJIgR68DKfSYiTL+CZWowDX/sbOo5ME/FRURvYQ==} + engines: {node: '>=18'} test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - to-readable-stream@4.0.0: - resolution: {integrity: sha512-b39z6yUzkmzZXTNlKZoLo1kIPXJDioGSMMX4ydudA3XX8M/AjcsPdJRVz2zbrGZoekhkMlz6qYok2iVdlMH/yQ==} - engines: {node: '>=18'} + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - trivial-deferred@2.0.0: - resolution: {integrity: sha512-iGbM7X2slv9ORDVj2y2FFUq3cP/ypbtu2nQ8S38ufjL0glBABvmR9pTdsib1XtS2LUhhLMbelaBUaf/s5J3dSw==} - engines: {node: '>= 8'} + traverse@0.6.9: + resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==} + engines: {node: '>= 0.4'} - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + tsimp@2.0.11: + resolution: {integrity: sha512-wRhMmvar8tWHN3ZmykD8f4B4sjCn/f8DFM67LRY+stf/LPa2Kq8ATE2PIi570/DiDJA8kjjxzos3EgP0LmnFLA==} + engines: {node: 16 >=16.17.0 || 18 >= 18.6.0 || >=20} hasBin: true peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tshy@1.14.0: - resolution: {integrity: sha512-YiUujgi4Jb+t2I48LwSRzHkBpniH9WjjktNozn+nlsGmVemKSjDNY7EwBRPvPCr5zAC/3ITAYWH9Z7kUinGSrw==} - engines: {node: 16 >=16.17 || 18 >=18.15.0 || >=20.6.1} - hasBin: true - - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - - tsx@4.11.0: - resolution: {integrity: sha512-vzGGELOgAupsNVssAmZjbUDfdm/pWP4R+Kg8TVdsonxbXk0bEpE1qh0yV6/QxUVXaVlNemgcPajGdJJ82n3stg==} - engines: {node: '>=18.0.0'} - hasBin: true - - tuf-js@2.2.0: - resolution: {integrity: sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==} - engines: {node: ^16.14.0 || >=18.0.0} + typescript: ^5.1.0 tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} @@ -1654,62 +1458,83 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.12.0: - resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} - engines: {node: '>=10'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} - type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typedarray.prototype.slice@1.0.3: + resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} + engines: {node: '>= 0.4'} typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici@5.28.3: - resolution: {integrity: sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==} + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} - unique-filename@3.0.0: - resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - unique-slug@4.0.0: - resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - v8-to-istanbul@9.1.3: - resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} + v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + valid-url@1.0.9: + resolution: {integrity: sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==} - validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} walk-up-path@3.0.1: resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1720,9 +1545,8 @@ packages: engines: {node: ^16.13.0 || >=18.0.0} hasBin: true - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -1732,39 +1556,17 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.14.2: - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml-types@0.3.0: - resolution: {integrity: sha512-i9RxAO/LZBiE0NJUy9pbN5jFz5EasYDImzRkj8Y81kkInTi1laia3P3K/wlMKzOxFQutZip8TejvQP/DwgbU7A==} - engines: {node: '>= 16', npm: '>= 7'} - peerDependencies: - yaml: ^2.3.0 - - yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} - engines: {node: '>= 14'} - hasBin: true - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -1773,22 +1575,30 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoga-wasm-web@0.3.3: - resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + + youch-terminal@2.2.3: + resolution: {integrity: sha512-/PE77ZwG072tXBvF47S9RL9/G80u86icZ5QwyjblyM67L4n/T5qQeM3Xrecbu8kkDDr/9T/PTj/X+6G/OSRQug==} + + youch@3.3.3: + resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} + + z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true snapshots: '@actions/core@1.10.1': dependencies: - '@actions/http-client': 2.2.0 + '@actions/http-client': 2.2.1 uuid: 8.3.2 '@actions/exec@1.1.1': @@ -1797,29 +1607,43 @@ snapshots: '@actions/github@6.0.0': dependencies: - '@actions/http-client': 2.2.0 - '@octokit/core': 5.0.1 - '@octokit/plugin-paginate-rest': 9.1.4(@octokit/core@5.0.1) - '@octokit/plugin-rest-endpoint-methods': 10.1.4(@octokit/core@5.0.1) + '@actions/http-client': 2.2.1 + '@octokit/core': 5.2.0 + '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.2.0) + '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.0) '@actions/glob@0.4.0': dependencies: '@actions/core': 1.10.1 minimatch: 3.1.2 - '@actions/http-client@2.2.0': + '@actions/http-client@2.2.1': dependencies: tunnel: 0.0.6 - undici: 5.28.3 + undici: 5.28.4 '@actions/io@1.1.3': {} - '@alcalzone/ansi-tokenize@0.1.3': + '@apidevtools/json-schema-ref-parser@9.1.2': dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + call-me-maybe: 1.0.2 + js-yaml: 4.1.0 - '@base2/pretty-print-object@1.0.1': {} + '@apidevtools/openapi-schemas@2.1.0': {} + + '@apidevtools/swagger-methods@3.0.2': {} + + '@apidevtools/swagger-parser@10.0.3(openapi-types@1.3.4)': + dependencies: + '@apidevtools/json-schema-ref-parser': 9.1.2 + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + call-me-maybe: 1.0.2 + openapi-types: 1.3.4 + z-schema: 5.0.5 '@bcoe/v8-coverage@0.2.3': {} @@ -1858,80 +1682,16 @@ snapshots: '@biomejs/cli-win32-x64@1.7.3': optional: true - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@esbuild/aix-ppc64@0.20.2': - optional: true - - '@esbuild/android-arm64@0.20.2': - optional: true - - '@esbuild/android-arm@0.20.2': - optional: true - - '@esbuild/android-x64@0.20.2': - optional: true - - '@esbuild/darwin-arm64@0.20.2': - optional: true - - '@esbuild/darwin-x64@0.20.2': - optional: true - - '@esbuild/freebsd-arm64@0.20.2': - optional: true - - '@esbuild/freebsd-x64@0.20.2': - optional: true - - '@esbuild/linux-arm64@0.20.2': - optional: true - - '@esbuild/linux-arm@0.20.2': - optional: true - - '@esbuild/linux-ia32@0.20.2': - optional: true - - '@esbuild/linux-loong64@0.20.2': - optional: true - - '@esbuild/linux-mips64el@0.20.2': + '@colors/colors@1.5.0': optional: true - '@esbuild/linux-ppc64@0.20.2': - optional: true - - '@esbuild/linux-riscv64@0.20.2': - optional: true - - '@esbuild/linux-s390x@0.20.2': - optional: true - - '@esbuild/linux-x64@0.20.2': - optional: true - - '@esbuild/netbsd-x64@0.20.2': - optional: true - - '@esbuild/openbsd-x64@0.20.2': - optional: true - - '@esbuild/sunos-x64@0.20.2': - optional: true - - '@esbuild/win32-arm64@0.20.2': - optional: true + '@fastify/busboy@2.1.1': {} - '@esbuild/win32-ia32@0.20.2': - optional: true - - '@esbuild/win32-x64@0.20.2': - optional: true + '@isaacs/cached@1.0.1': + dependencies: + '@isaacs/catcher': 1.0.4 - '@fastify/busboy@2.1.0': {} + '@isaacs/catcher@1.0.4': {} '@isaacs/cliui@8.0.2': dependencies: @@ -1942,139 +1702,141 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/ts-node-temp-fork-for-pr-2009@10.9.7(@types/node@20.12.12)(typescript@5.4.5)': - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node14': 14.1.0 - '@tsconfig/node16': 16.1.1 - '@tsconfig/node18': 18.2.2 - '@tsconfig/node20': 20.1.4 - '@types/node': 20.12.12 - acorn: 8.11.2 - acorn-walk: 8.3.0 - arg: 4.1.3 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.4.5 - v8-compile-cache-lib: 3.0.1 - '@istanbuljs/schema@0.1.3': {} - '@jridgewell/resolve-uri@3.1.1': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.20': + '@japa/assert@3.0.0(@japa/runner@3.1.4)(openapi-types@1.3.4)': dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@japa/runner': 3.1.4 + '@poppinss/macroable': 1.0.2 + '@types/chai': 4.3.16 + api-contract-validator: 2.2.8(openapi-types@1.3.4) + chai: 5.1.1 + transitivePeerDependencies: + - openapi-types + + '@japa/core@9.0.1': + dependencies: + '@poppinss/cliui': 6.4.1 + '@poppinss/hooks': 7.2.3 + '@poppinss/macroable': 1.0.2 + async-retry: 1.3.3 + emittery: 1.0.3 + string-width: 7.1.0 + time-span: 5.1.0 + + '@japa/errors-printer@3.0.4': + dependencies: + '@poppinss/colors': 4.1.3 + jest-diff: 29.7.0 + supports-color: 9.4.0 + youch: 3.3.3 + youch-terminal: 2.2.3 + + '@japa/runner@3.1.4': + dependencies: + '@japa/core': 9.0.1 + '@japa/errors-printer': 3.0.4 + '@poppinss/colors': 4.1.3 + '@poppinss/hooks': 7.2.3 + fast-glob: 3.3.2 + find-cache-dir: 5.0.0 + getopts: 2.3.0 + ms: 2.1.3 + serialize-error: 11.0.3 + slash: 5.1.0 + supports-color: 9.4.0 - '@jridgewell/trace-mapping@0.3.9': + '@jest/schemas@29.6.3': dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@sinclair/typebox': 0.27.8 - '@npmcli/agent@2.2.0': + '@jest/types@25.5.0': dependencies: - agent-base: 7.1.0 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - lru-cache: 10.2.2 - socks-proxy-agent: 8.0.2 - transitivePeerDependencies: - - supports-color + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 1.1.2 + '@types/yargs': 15.0.19 + chalk: 3.0.0 - '@npmcli/fs@3.1.0': - dependencies: - semver: 7.6.0 + '@jridgewell/resolve-uri@3.1.2': {} - '@npmcli/git@5.0.3': - dependencies: - '@npmcli/promise-spawn': 7.0.0 - lru-cache: 10.2.2 - npm-pick-manifest: 9.0.0 - proc-log: 3.0.0 - promise-inflight: 1.0.1 - promise-retry: 2.0.1 - semver: 7.6.0 - which: 4.0.0 - transitivePeerDependencies: - - bluebird + '@jridgewell/sourcemap-codec@1.4.15': {} - '@npmcli/installed-package-contents@2.0.2': + '@jridgewell/trace-mapping@0.3.25': dependencies: - npm-bundled: 3.0.0 - npm-normalize-package-bin: 3.0.1 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 - '@npmcli/node-gyp@3.0.0': {} + '@jsdevtools/ono@7.1.3': {} - '@npmcli/promise-spawn@7.0.0': + '@nodelib/fs.scandir@2.1.5': dependencies: - which: 4.0.0 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - '@npmcli/run-script@7.0.2': + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': dependencies: - '@npmcli/node-gyp': 3.0.0 - '@npmcli/promise-spawn': 7.0.0 - node-gyp: 10.0.1 - read-package-json-fast: 3.0.2 - which: 4.0.0 - transitivePeerDependencies: - - supports-color + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 '@octokit/auth-token@4.0.0': {} - '@octokit/core@5.0.1': + '@octokit/core@5.2.0': dependencies: '@octokit/auth-token': 4.0.0 - '@octokit/graphql': 7.0.2 - '@octokit/request': 8.1.5 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.3.0 + '@octokit/graphql': 7.1.0 + '@octokit/request': 8.4.0 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.5.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 - '@octokit/endpoint@9.0.2': + '@octokit/endpoint@9.0.5': dependencies: - '@octokit/types': 12.3.0 - is-plain-object: 5.0.0 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 - '@octokit/graphql@7.0.2': + '@octokit/graphql@7.1.0': dependencies: - '@octokit/request': 8.1.5 - '@octokit/types': 12.3.0 + '@octokit/request': 8.4.0 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 - '@octokit/openapi-types@19.0.2': {} + '@octokit/openapi-types@20.0.0': {} + + '@octokit/openapi-types@22.2.0': {} - '@octokit/plugin-paginate-rest@9.1.4(@octokit/core@5.0.1)': + '@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.2.0)': dependencies: - '@octokit/core': 5.0.1 - '@octokit/types': 12.3.0 + '@octokit/core': 5.2.0 + '@octokit/types': 12.6.0 - '@octokit/plugin-rest-endpoint-methods@10.1.4(@octokit/core@5.0.1)': + '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.0)': dependencies: - '@octokit/core': 5.0.1 - '@octokit/types': 12.3.0 + '@octokit/core': 5.2.0 + '@octokit/types': 12.6.0 - '@octokit/request-error@5.0.1': + '@octokit/request-error@5.1.0': dependencies: - '@octokit/types': 12.3.0 + '@octokit/types': 13.5.0 deprecation: 2.3.1 once: 1.4.0 - '@octokit/request@8.1.5': + '@octokit/request@8.4.0': dependencies: - '@octokit/endpoint': 9.0.2 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.3.0 - is-plain-object: 5.0.0 + '@octokit/endpoint': 9.0.5 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 - '@octokit/types@12.3.0': + '@octokit/types@12.6.0': dependencies: - '@octokit/openapi-types': 19.0.2 + '@octokit/openapi-types': 20.0.0 + + '@octokit/types@13.5.0': + dependencies: + '@octokit/openapi-types': 22.2.0 '@openpgp/web-stream-tools@0.1.1(typescript@5.4.5)': optionalDependencies: @@ -2083,35 +1845,28 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@sigstore/bundle@2.3.1': + '@poppinss/cliui@6.4.1': dependencies: - '@sigstore/protobuf-specs': 0.3.1 - - '@sigstore/core@1.1.0': {} - - '@sigstore/protobuf-specs@0.3.1': {} + '@poppinss/colors': 4.1.3 + cli-boxes: 3.0.0 + cli-table3: 0.6.5 + cli-truncate: 4.0.0 + log-update: 6.0.0 + pretty-hrtime: 1.0.3 + string-width: 7.1.0 + supports-color: 9.4.0 + terminal-size: 4.0.0 + wordwrap: 1.0.0 - '@sigstore/sign@2.3.0': + '@poppinss/colors@4.1.3': dependencies: - '@sigstore/bundle': 2.3.1 - '@sigstore/core': 1.1.0 - '@sigstore/protobuf-specs': 0.3.1 - make-fetch-happen: 13.0.0 - transitivePeerDependencies: - - supports-color + kleur: 4.1.5 - '@sigstore/tuf@2.3.2': - dependencies: - '@sigstore/protobuf-specs': 0.3.1 - tuf-js: 2.2.0 - transitivePeerDependencies: - - supports-color + '@poppinss/hooks@7.2.3': {} - '@sigstore/verify@1.2.0': - dependencies: - '@sigstore/bundle': 2.3.1 - '@sigstore/core': 1.1.0 - '@sigstore/protobuf-specs': 0.3.1 + '@poppinss/macroable@1.0.2': {} + + '@sinclair/typebox@0.27.8': {} '@sinonjs/commons@2.0.0': dependencies: @@ -2133,284 +1888,31 @@ snapshots: '@sinonjs/text-encoding@0.7.2': {} - '@tapjs/after-each@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - function-loop: 4.0.0 - - '@tapjs/after@1.1.24(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - is-actual-promise: 1.0.1 - - '@tapjs/asserts@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/stack': 2.0.1 - is-actual-promise: 1.0.1 - tcompare: 7.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - trivial-deferred: 2.0.0 - transitivePeerDependencies: - - react - - react-dom - - '@tapjs/before-each@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - function-loop: 4.0.0 - - '@tapjs/before@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - is-actual-promise: 1.0.1 - - '@tapjs/config@3.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tapjs/test@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/test': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - chalk: 5.3.0 - jackspeak: 3.1.2 - polite-json: 4.0.1 - tap-yaml: 2.2.2 - walk-up-path: 3.0.1 - - '@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@tapjs/processinfo': 3.1.7 - '@tapjs/stack': 2.0.1 - '@tapjs/test': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - async-hook-domain: 4.0.1 - diff: 5.2.0 - is-actual-promise: 1.0.1 - minipass: 7.0.4 - signal-exit: 4.1.0 - tap-parser: 16.0.1 - tap-yaml: 2.2.2 - tcompare: 7.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - trivial-deferred: 2.0.0 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - react - - react-dom - - '@tapjs/error-serdes@2.0.1': - dependencies: - minipass: 7.0.4 - - '@tapjs/filter@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - - '@tapjs/fixture@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - mkdirp: 3.0.1 - rimraf: 5.0.5 - - '@tapjs/intercept@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/after': 1.1.24(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/stack': 2.0.1 - - '@tapjs/mock@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/after': 1.1.24(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/stack': 2.0.1 - resolve-import: 1.4.5 - walk-up-path: 3.0.1 - - '@tapjs/node-serialize@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/error-serdes': 2.0.1 - '@tapjs/stack': 2.0.1 - tap-parser: 16.0.1 - - '@tapjs/processinfo@3.1.7': - dependencies: - pirates: 4.0.6 - process-on-spawn: 1.0.0 - signal-exit: 4.1.0 - uuid: 8.3.2 - - '@tapjs/reporter@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tapjs/test@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))': - dependencies: - '@tapjs/config': 3.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tapjs/test@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/stack': 2.0.1 - chalk: 5.3.0 - ink: 4.4.1(react@18.2.0) - minipass: 7.0.4 - ms: 2.1.3 - patch-console: 2.0.0 - prismjs-terminal: 1.2.3 - react: 18.2.0 - string-length: 6.0.0 - tap-parser: 16.0.1 - tap-yaml: 2.2.2 - tcompare: 7.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - transitivePeerDependencies: - - '@tapjs/test' - - '@types/react' - - bufferutil - - react-devtools-core - - react-dom - - utf-8-validate - - '@tapjs/run@2.0.2(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@tapjs/after': 1.1.24(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/before': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/config': 3.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tapjs/test@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/processinfo': 3.1.7 - '@tapjs/reporter': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tapjs/test@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0)) - '@tapjs/spawn': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/stdin': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/test': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - c8: 9.1.0 - chalk: 5.3.0 - chokidar: 3.6.0 - foreground-child: 3.1.1 - glob: 10.3.16 - minipass: 7.0.4 - mkdirp: 3.0.1 - opener: 1.5.2 - pacote: 17.0.7 - resolve-import: 1.4.5 - rimraf: 5.0.5 - semver: 7.6.0 - signal-exit: 4.1.0 - tap-parser: 16.0.1 - tap-yaml: 2.2.2 - tcompare: 7.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - trivial-deferred: 2.0.0 - which: 4.0.0 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - '@types/react' - - bluebird - - bufferutil - - react - - react-devtools-core - - react-dom - - supports-color - - utf-8-validate + '@tsconfig/node20@20.1.4': {} - '@tapjs/snapshot@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - is-actual-promise: 1.0.1 - tcompare: 7.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - trivial-deferred: 2.0.0 - transitivePeerDependencies: - - react - - react-dom - - '@tapjs/spawn@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - - '@tapjs/stack@2.0.1': {} - - '@tapjs/stdin@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - - '@tapjs/test@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@types/node@20.12.12)(typescript@5.4.5) - '@tapjs/after': 1.1.24(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/after-each': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/asserts': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/before': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/before-each': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/filter': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/fixture': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/intercept': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/mock': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/node-serialize': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/snapshot': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/spawn': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/stdin': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/typescript': 1.4.6(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(typescript@5.4.5) - '@tapjs/worker': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - glob: 10.3.16 - jackspeak: 3.1.2 - mkdirp: 3.0.1 - resolve-import: 1.4.5 - rimraf: 5.0.5 - sync-content: 1.0.2 - tap-parser: 16.0.1 - tshy: 1.14.0 - typescript: 5.4.5 - walk-up-path: 3.0.1 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - react - - react-dom + '@tsconfig/strictest@2.0.5': {} - '@tapjs/tsx@1.1.25(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': - dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - tsx: 4.11.0 + '@types/chai@4.3.16': {} - '@tapjs/typescript@1.4.6(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(typescript@5.4.5)': - dependencies: - '@isaacs/ts-node-temp-fork-for-pr-2009': 10.9.7(@types/node@20.12.12)(typescript@5.4.5) - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - typescript + '@types/istanbul-lib-coverage@2.0.6': {} - '@tapjs/worker@2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': + '@types/istanbul-lib-report@3.0.3': dependencies: - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node14@14.1.0': {} - - '@tsconfig/node16@1.0.4': {} - - '@tsconfig/node16@16.1.1': {} - - '@tsconfig/node18@18.2.2': {} - - '@tsconfig/node20@20.1.4': {} - - '@tsconfig/strictest@2.0.5': {} - - '@tufjs/canonical-json@2.0.0': {} + '@types/istanbul-lib-coverage': 2.0.6 - '@tufjs/models@2.0.0': + '@types/istanbul-reports@1.1.2': dependencies: - '@tufjs/canonical-json': 2.0.0 - minimatch: 9.0.4 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-lib-report': 3.0.3 - '@types/istanbul-lib-coverage@2.0.6': {} + '@types/json-schema@7.0.15': {} '@types/node-fetch@2.6.11': dependencies: - '@types/node': 20.12.12 + '@types/node': 20.12.13 form-data: 4.0.0 - '@types/node@20.12.12': + '@types/node@20.12.13': dependencies: undici-types: 5.26.5 @@ -2422,26 +1924,20 @@ snapshots: '@types/which@3.0.3': {} - abbrev@2.0.0: {} - - acorn-walk@8.3.0: {} + '@types/yargs-parser@21.0.3': {} - acorn@8.11.2: {} - - agent-base@7.1.0: + '@types/yargs@15.0.19': dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color + '@types/yargs-parser': 21.0.3 - aggregate-error@3.1.0: + ajv@6.12.6: dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 - ansi-escapes@6.2.0: - dependencies: - type-fest: 3.13.1 + ansi-escapes@6.2.1: {} ansi-regex@5.0.1: {} @@ -2451,14 +1947,62 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} - anymatch@3.1.3: + api-contract-validator@2.2.8(openapi-types@1.3.4): dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 + api-schema-builder: 2.0.11(openapi-types@1.3.4) + chalk: 3.0.0 + columnify: 1.6.0 + jest-diff: 25.5.0 + jest-matcher-utils: 25.5.0 + lodash.flatten: 4.4.0 + lodash.get: 4.4.2 + lodash.set: 4.3.2 + uri-js: 4.4.1 + transitivePeerDependencies: + - openapi-types - arg@4.1.3: {} + api-schema-builder@2.0.11(openapi-types@1.3.4): + dependencies: + ajv: 6.12.6 + clone-deep: 4.0.1 + decimal.js: 10.4.3 + js-yaml: 3.14.1 + json-schema-deref-sync: 0.14.0 + lodash.get: 4.4.2 + openapi-schema-validator: 3.0.3 + swagger-parser: 10.0.3(openapi-types@1.3.4) + transitivePeerDependencies: + - openapi-types + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + as-table@1.0.55: + dependencies: + printable-characters: 1.0.42 asn1.js@5.4.1: dependencies: @@ -2467,18 +2011,22 @@ snapshots: minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 - async-hook-domain@4.0.1: {} + assertion-error@2.0.1: {} + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 asynckit@0.4.0: {} - auto-bind@5.0.1: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 balanced-match@1.0.2: {} before-after-hook@2.2.3: {} - binary-extensions@2.2.0: {} - bn.js@4.12.0: {} brace-expansion@1.1.11: @@ -2494,10 +2042,6 @@ snapshots: dependencies: fill-range: 7.0.1 - builtins@5.0.1: - dependencies: - semver: 7.6.0 - c8@9.1.0: dependencies: '@bcoe/v8-coverage': 0.2.3 @@ -2506,46 +2050,43 @@ snapshots: foreground-child: 3.1.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 test-exclude: 6.0.0 - v8-to-istanbul: 9.1.3 + v8-to-istanbul: 9.2.0 yargs: 17.7.2 yargs-parser: 21.1.1 - cacache@18.0.0: + call-bind@1.0.7: dependencies: - '@npmcli/fs': 3.1.0 - fs-minipass: 3.0.3 - glob: 10.3.16 - lru-cache: 10.2.2 - minipass: 7.0.4 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 4.0.0 - ssri: 10.0.5 - tar: 6.2.0 - unique-filename: 3.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 - chalk@5.3.0: {} + call-me-maybe@1.0.2: {} - chokidar@3.6.0: + chai@5.1.1: dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.1 + loupe: 3.1.1 + pathval: 2.0.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 - chownr@2.0.0: {} + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 - ci-info@3.9.0: {} + charenc@0.0.2: {} - clean-stack@2.2.0: {} + check-error@2.1.1: {} cli-boxes@3.0.0: {} @@ -2553,10 +2094,16 @@ snapshots: dependencies: restore-cursor: 4.0.0 - cli-truncate@3.1.0: + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 5.1.2 + string-width: 7.1.0 cliui@8.0.1: dependencies: @@ -2564,9 +2111,15 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - code-excerpt@4.0.0: + clone-deep@4.0.1: dependencies: - convert-to-spaces: 2.0.1 + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + clone@1.0.4: {} + + clone@2.1.2: {} color-convert@2.0.1: dependencies: @@ -2574,17 +2127,27 @@ snapshots: color-name@1.1.4: {} + columnify@1.6.0: + dependencies: + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + commander@9.5.0: + optional: true + + common-path-prefix@3.0.0: {} + concat-map@0.0.1: {} - convert-source-map@2.0.0: {} + convert-hrtime@5.0.0: {} - convert-to-spaces@2.0.1: {} + convert-source-map@2.0.0: {} - create-require@1.1.1: {} + cookie@0.5.0: {} cross-env@7.0.3: dependencies: @@ -2596,68 +2159,166 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + crypt@0.0.2: {} + + dag-map@1.0.2: {} + + data-uri-to-buffer@2.0.2: {} + data-uri-to-buffer@4.0.1: {} + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + debug@4.3.4: dependencies: ms: 2.1.2 + decimal.js@10.4.3: {} + + deep-eql@5.0.1: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + delayed-stream@1.0.0: {} deprecation@2.3.1: {} - diff@4.0.2: {} + diff-sequences@25.2.6: {} + + diff-sequences@29.6.3: {} diff@5.2.0: {} eastasianwidth@0.2.0: {} + emittery@1.0.3: {} + + emoji-regex@10.3.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - env-paths@2.2.1: {} + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + escalade@3.1.2: {} + + esprima@4.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 - err-code@2.0.3: {} + fast-json-stable-stringify@2.1.0: {} - esbuild@0.20.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - - escalade@3.1.1: {} - - escape-string-regexp@2.0.0: {} - - events-to-array@2.0.3: {} - - exponential-backoff@3.1.1: {} + fastq@1.17.1: + dependencies: + reusify: 1.0.4 fetch-blob@3.2.0: dependencies: @@ -2668,11 +2329,25 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-cache-dir@5.0.0: + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 @@ -2688,41 +2363,56 @@ snapshots: dependencies: fetch-blob: 3.2.0 - fromentries@1.3.2: {} + fs.realpath@1.0.0: {} - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 + function-bind@1.1.2: {} - fs-minipass@3.0.3: + function.prototype.name@1.1.6: dependencies: - minipass: 7.0.4 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 - fs.realpath@1.0.0: {} + functions-have-names@1.2.3: {} - fsevents@2.3.3: - optional: true + get-caller-file@2.0.5: {} - function-bind@1.1.2: {} + get-east-asian-width@1.2.0: {} - function-loop@4.0.0: {} + get-func-name@2.0.2: {} - get-caller-file@2.0.5: {} + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-source@2.0.12: + dependencies: + data-uri-to-buffer: 2.0.2 + source-map: 0.6.1 - get-tsconfig@4.7.5: + get-symbol-description@1.0.2: dependencies: - resolve-pkg-maps: 1.0.0 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + getopts@2.3.0: {} glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - glob@10.3.16: + glob@10.3.15: dependencies: foreground-child: 3.1.1 - jackspeak: 3.1.2 + jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 + minipass: 7.1.1 path-scurry: 1.11.1 glob@7.2.3: @@ -2734,52 +2424,38 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - graceful-fs@4.2.11: {} - - has-flag@4.0.0: {} - - hasown@2.0.0: + globalthis@1.0.4: dependencies: - function-bind: 1.1.2 + define-properties: 1.2.1 + gopd: 1.0.1 - hook-std@3.0.0: {} - - hosted-git-info@7.0.1: + gopd@1.0.1: dependencies: - lru-cache: 10.2.2 + get-intrinsic: 1.2.4 - html-escaper@2.0.2: {} + has-bigints@1.0.2: {} - http-cache-semantics@4.1.1: {} + has-flag@4.0.0: {} - http-proxy-agent@7.0.0: + has-property-descriptors@1.0.2: dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color + es-define-property: 1.0.0 - https-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color + has-proto@1.0.3: {} - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - optional: true + has-symbols@1.0.3: {} - ignore-walk@6.0.3: + has-tostringtag@1.0.2: dependencies: - minimatch: 9.0.4 + has-symbols: 1.0.3 - imurmurhash@0.1.4: {} + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 - indent-string@4.0.0: {} + hook-std@3.0.0: {} - indent-string@5.0.0: {} + html-escaper@2.0.2: {} inflight@1.0.6: dependencies: @@ -2788,55 +2464,41 @@ snapshots: inherits@2.0.4: {} - ink@4.4.1(react@18.2.0): + internal-slot@1.0.7: dependencies: - '@alcalzone/ansi-tokenize': 0.1.3 - ansi-escapes: 6.2.0 - auto-bind: 5.0.1 - chalk: 5.3.0 - cli-boxes: 3.0.0 - cli-cursor: 4.0.0 - cli-truncate: 3.1.0 - code-excerpt: 4.0.0 - indent-string: 5.0.0 - is-ci: 3.0.1 - is-lower-case: 2.0.2 - is-upper-case: 2.0.2 - lodash: 4.17.21 - patch-console: 2.0.0 - react: 18.2.0 - react-reconciler: 0.29.0(react@18.2.0) - scheduler: 0.23.0 - signal-exit: 3.0.7 - slice-ansi: 6.0.0 - stack-utils: 2.0.6 - string-width: 5.1.2 - type-fest: 0.12.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 - ws: 8.14.2 - yoga-wasm-web: 0.3.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + into-stream@8.0.1: {} - ip@2.0.1: {} + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 - is-actual-promise@1.0.1: + is-bigint@1.0.4: dependencies: - tshy: 1.14.0 + has-bigints: 1.0.2 - is-binary-path@2.1.0: + is-boolean-object@1.1.2: dependencies: - binary-extensions: 2.2.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} - is-ci@3.0.1: + is-callable@1.2.7: {} + + is-data-view@1.0.1: dependencies: - ci-info: 3.9.0 + is-typed-array: 1.1.13 - is-core-module@2.13.1: + is-date-object@1.0.5: dependencies: - hasown: 2.0.0 + has-tostringtag: 1.0.2 + + is-extglob@1.0.0: {} is-extglob@2.1.1: {} @@ -2844,28 +2506,71 @@ snapshots: is-fullwidth-code-point@4.0.0: {} + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.2.0 + + is-glob@2.0.1: + dependencies: + is-extglob: 1.0.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-lambda@1.0.1: {} + is-invalid-path@0.1.0: + dependencies: + is-glob: 2.0.1 + + is-negative-zero@2.0.3: {} - is-lower-case@2.0.2: + is-number-object@1.0.7: dependencies: - tslib: 2.6.2 + has-tostringtag: 1.0.2 is-number@7.0.0: {} - is-plain-object@5.0.0: {} + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-valid-path@0.1.1: + dependencies: + is-invalid-path: 0.1.0 - is-upper-case@2.0.2: + is-weakref@1.0.2: dependencies: - tslib: 2.6.2 + call-bind: 1.0.7 + + isarray@2.0.5: {} isexe@2.0.0: {} isexe@3.1.1: {} + isobject@3.0.1: {} + istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -2874,66 +2579,124 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-reports@3.1.6: + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@3.1.2: + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - js-tokens@4.0.0: {} + jest-diff@25.5.0: + dependencies: + chalk: 3.0.0 + diff-sequences: 25.2.6 + jest-get-type: 25.2.6 + pretty-format: 25.5.0 - json-parse-even-better-errors@3.0.0: {} + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 - json-stringify-safe@5.0.1: {} + jest-get-type@25.2.6: {} + + jest-get-type@29.6.3: {} + + jest-matcher-utils@25.5.0: + dependencies: + chalk: 3.0.0 + jest-diff: 25.5.0 + jest-get-type: 25.2.6 + pretty-format: 25.5.0 + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-schema-deref-sync@0.14.0: + dependencies: + clone: 2.1.2 + dag-map: 1.0.2 + is-valid-path: 0.1.1 + lodash: 4.17.21 + md5: 2.2.1 + memory-cache: 0.2.0 + traverse: 0.6.9 + valid-url: 1.0.9 - jsonparse@1.3.1: {} + json-schema-traverse@0.4.1: {} + + json-stringify-safe@5.0.1: {} just-extend@6.2.0: {} + kind-of@6.0.3: {} + + kleur@4.1.5: {} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.flatten@4.4.0: {} + lodash.get@4.4.2: {} + lodash.isequal@4.5.0: {} + + lodash.merge@4.6.2: {} + + lodash.set@4.3.2: {} + lodash@4.17.21: {} - loose-envify@1.4.0: + log-update@6.0.0: dependencies: - js-tokens: 4.0.0 + ansi-escapes: 6.2.1 + cli-cursor: 4.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 lru-cache@10.2.2: {} - lru-cache@6.0.0: + make-dir@4.0.0: dependencies: - yallist: 4.0.0 + semver: 7.6.2 - make-dir@4.0.0: + md5@2.2.1: dependencies: - semver: 7.6.0 + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 - make-error@1.3.6: {} + memory-cache@0.2.0: {} - make-fetch-happen@13.0.0: + merge2@1.4.1: {} + + micromatch@4.0.5: dependencies: - '@npmcli/agent': 2.2.0 - cacache: 18.0.0 - http-cache-semantics: 4.1.1 - is-lambda: 1.0.1 - minipass: 7.0.4 - minipass-fetch: 3.0.4 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - ssri: 10.0.5 - transitivePeerDependencies: - - supports-color + braces: 3.0.2 + picomatch: 2.3.1 mime-db@1.52.0: {} @@ -2953,49 +2716,7 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minipass-collect@1.0.2: - dependencies: - minipass: 3.3.6 - - minipass-fetch@3.0.4: - dependencies: - minipass: 7.0.4 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-json-stream@1.0.1: - dependencies: - jsonparse: 1.3.1 - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.0.4: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - mkdirp@1.0.4: {} + minipass@7.1.1: {} mkdirp@3.0.1: {} @@ -3003,7 +2724,7 @@ snapshots: ms@2.1.3: {} - negotiator@0.6.3: {} + mustache@4.2.0: {} nise@6.0.0: dependencies: @@ -3029,73 +2750,16 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-gyp@10.0.1: - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.1 - glob: 10.3.16 - graceful-fs: 4.2.11 - make-fetch-happen: 13.0.0 - nopt: 7.2.0 - proc-log: 3.0.0 - semver: 7.6.0 - tar: 6.2.0 - which: 4.0.0 - transitivePeerDependencies: - - supports-color - - nopt@7.2.0: - dependencies: - abbrev: 2.0.0 - - normalize-package-data@6.0.0: - dependencies: - hosted-git-info: 7.0.1 - is-core-module: 2.13.1 - semver: 7.6.0 - validate-npm-package-license: 3.0.4 - - normalize-path@3.0.0: {} - - npm-bundled@3.0.0: - dependencies: - npm-normalize-package-bin: 3.0.1 - - npm-install-checks@6.3.0: - dependencies: - semver: 7.6.0 - - npm-normalize-package-bin@3.0.1: {} - - npm-package-arg@11.0.1: - dependencies: - hosted-git-info: 7.0.1 - proc-log: 3.0.0 - semver: 7.6.0 - validate-npm-package-name: 5.0.0 + object-inspect@1.13.1: {} - npm-packlist@8.0.0: - dependencies: - ignore-walk: 6.0.3 - - npm-pick-manifest@9.0.0: - dependencies: - npm-install-checks: 6.3.0 - npm-normalize-package-bin: 3.0.1 - npm-package-arg: 11.0.1 - semver: 7.6.0 + object-keys@1.1.1: {} - npm-registry-fetch@16.1.0: + object.assign@4.1.5: dependencies: - make-fetch-happen: 13.0.0 - minipass: 7.0.4 - minipass-fetch: 3.0.4 - minipass-json-stream: 1.0.1 - minizlib: 2.1.2 - npm-package-arg: 11.0.1 - proc-log: 3.0.0 - transitivePeerDependencies: - - supports-color + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 once@1.4.0: dependencies: @@ -3105,7 +2769,14 @@ snapshots: dependencies: mimic-fn: 2.1.0 - opener@1.5.2: {} + openapi-schema-validator@3.0.3: + dependencies: + ajv: 6.12.6 + lodash.merge: 4.6.2 + openapi-types: 1.3.4 + swagger-schema-official: 2.0.0-bab6bed + + openapi-types@1.3.4: {} openpgp@5.11.1: dependencies: @@ -3115,42 +2786,22 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-limit@4.0.0: + dependencies: + yocto-queue: 1.0.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - - pacote@17.0.7: - dependencies: - '@npmcli/git': 5.0.3 - '@npmcli/installed-package-contents': 2.0.2 - '@npmcli/promise-spawn': 7.0.0 - '@npmcli/run-script': 7.0.2 - cacache: 18.0.0 - fs-minipass: 3.0.3 - minipass: 7.0.4 - npm-package-arg: 11.0.1 - npm-packlist: 8.0.0 - npm-pick-manifest: 9.0.0 - npm-registry-fetch: 16.1.0 - proc-log: 4.2.0 - promise-retry: 2.0.1 - read-package-json: 7.0.0 - read-package-json-fast: 3.0.2 - sigstore: 2.3.0 - ssri: 10.0.5 - tar: 6.2.0 - transitivePeerDependencies: - - bluebird - - supports-color - - patch-console@2.0.0: {} + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 path-exists@4.0.0: {} + path-exists@5.0.0: {} + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -3158,112 +2809,115 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.2.2 - minipass: 7.0.4 + minipass: 7.1.1 path-to-regexp@6.2.2: {} + pathval@2.0.0: {} + picomatch@2.3.1: {} pirates@4.0.6: {} - polite-json@4.0.1: {} - - prismjs-terminal@1.2.3: + pkg-dir@7.0.0: dependencies: - chalk: 5.3.0 - prismjs: 1.29.0 - string-length: 6.0.0 + find-up: 6.3.0 - prismjs@1.29.0: {} + possible-typed-array-names@1.0.0: {} - proc-log@3.0.0: {} - - proc-log@4.2.0: {} + pretty-format@25.5.0: + dependencies: + '@jest/types': 25.5.0 + ansi-regex: 5.0.1 + ansi-styles: 4.3.0 + react-is: 16.13.1 - process-on-spawn@1.0.0: + pretty-format@29.7.0: dependencies: - fromentries: 1.3.2 + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 - promise-inflight@1.0.1: {} + pretty-hrtime@1.0.3: {} - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 + printable-characters@1.0.42: {} propagate@2.0.1: {} - react-dom@18.2.0(react@18.2.0): - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + punycode@2.3.1: {} - react-element-to-jsx-string@15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@base2/pretty-print-object': 1.0.1 - is-plain-object: 5.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-is: 18.1.0 + queue-microtask@1.2.3: {} - react-is@18.1.0: {} + react-is@16.13.1: {} - react-reconciler@0.29.0(react@18.2.0): - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + react-is@18.3.1: {} - react@18.2.0: + regexp.prototype.flags@1.5.2: dependencies: - loose-envify: 1.4.0 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 - read-package-json-fast@3.0.2: - dependencies: - json-parse-even-better-errors: 3.0.0 - npm-normalize-package-bin: 3.0.1 + require-directory@2.1.1: {} - read-package-json@7.0.0: + restore-cursor@4.0.0: dependencies: - glob: 10.3.16 - json-parse-even-better-errors: 3.0.0 - normalize-package-data: 6.0.0 - npm-normalize-package-bin: 3.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 + retry@0.13.1: {} - require-directory@2.1.1: {} + reusify@1.0.4: {} - resolve-import@1.4.5: + rimraf@5.0.7: dependencies: - glob: 10.3.16 - walk-up-path: 3.0.1 - - resolve-pkg-maps@1.0.0: {} + glob: 10.3.15 - restore-cursor@4.0.0: + run-parallel@1.2.0: dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + queue-microtask: 1.2.3 - retry@0.12.0: {} + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 - rimraf@5.0.5: + safe-regex-test@1.0.3: dependencies: - glob: 10.3.16 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 safer-buffer@2.1.2: {} - scheduler@0.23.0: + semver@7.6.2: {} + + serialize-error@11.0.3: + dependencies: + type-fest: 2.19.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: dependencies: - loose-envify: 1.4.0 + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 - semver@7.6.0: + shallow-clone@3.0.1: dependencies: - lru-cache: 6.0.0 + kind-of: 6.0.3 shebang-command@2.0.0: dependencies: @@ -3271,21 +2925,17 @@ snapshots: shebang-regex@3.0.0: {} + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + signal-exit@3.0.7: {} signal-exit@4.1.0: {} - sigstore@2.3.0: - dependencies: - '@sigstore/bundle': 2.3.1 - '@sigstore/core': 1.1.0 - '@sigstore/protobuf-specs': 0.3.1 - '@sigstore/sign': 2.3.0 - '@sigstore/tuf': 2.3.2 - '@sigstore/verify': 1.2.0 - transitivePeerDependencies: - - supports-color - sinon@18.0.0: dependencies: '@sinonjs/commons': 3.0.1 @@ -3295,56 +2945,34 @@ snapshots: nise: 6.0.0 supports-color: 7.2.0 + slash@5.1.0: {} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - slice-ansi@6.0.0: + slice-ansi@7.1.0: dependencies: ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.2: - dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - socks: 2.7.1 - transitivePeerDependencies: - - supports-color - - socks@2.7.1: - dependencies: - ip: 2.0.1 - smart-buffer: 4.2.0 + is-fullwidth-code-point: 5.0.0 - spdx-correct@3.2.0: + sock-daemon@1.4.2: dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 - - spdx-exceptions@2.3.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 + rimraf: 5.0.7 + signal-exit: 4.1.0 + socket-post-message: 1.0.3 - spdx-license-ids@3.0.16: {} + socket-post-message@1.0.3: {} - ssri@10.0.5: - dependencies: - minipass: 7.0.4 + source-map@0.6.1: {} - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 + sprintf-js@1.0.3: {} - string-length@6.0.0: + stacktracey@2.1.8: dependencies: - strip-ansi: 7.1.0 + as-table: 1.0.55 + get-source: 2.0.12 string-width@4.2.3: dependencies: @@ -3358,6 +2986,31 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@7.1.0: + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -3370,74 +3023,17 @@ snapshots: dependencies: has-flag: 4.0.0 - sync-content@1.0.2: + supports-color@9.4.0: {} + + swagger-parser@10.0.3(openapi-types@1.3.4): dependencies: - glob: 10.3.16 - mkdirp: 3.0.1 - path-scurry: 1.11.1 - rimraf: 5.0.5 - - tap-parser@16.0.1: - dependencies: - events-to-array: 2.0.3 - tap-yaml: 2.2.2 - - tap-yaml@2.2.2: - dependencies: - yaml: 2.4.1 - yaml-types: 0.3.0(yaml@2.4.1) - - tap@19.0.2(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.4.5): - dependencies: - '@tapjs/after': 1.1.24(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/after-each': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/asserts': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/before': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/before-each': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/core': 2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/filter': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/fixture': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/intercept': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/mock': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/node-serialize': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/run': 2.0.2(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/snapshot': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/spawn': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/stdin': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - '@tapjs/test': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@tapjs/typescript': 1.4.6(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/node@20.12.12)(typescript@5.4.5) - '@tapjs/worker': 2.0.1(@tapjs/core@2.0.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) - resolve-import: 1.4.5 + '@apidevtools/swagger-parser': 10.0.3(openapi-types@1.3.4) transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - '@types/react' - - bluebird - - bufferutil - - react - - react-devtools-core - - react-dom - - supports-color - - typescript - - utf-8-validate + - openapi-types - tar@6.2.0: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 + swagger-schema-official@2.0.0-bab6bed: {} - tcompare@7.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - diff: 5.2.0 - react-element-to-jsx-string: 15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - transitivePeerDependencies: - - react - - react-dom + terminal-size@4.0.0: {} test-exclude@6.0.0: dependencies: @@ -3445,112 +3041,137 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - to-readable-stream@4.0.0: {} + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - trivial-deferred@2.0.0: {} - - ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.12 - acorn: 8.11.2 - acorn-walk: 8.3.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.4.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 + traverse@0.6.9: + dependencies: + gopd: 1.0.1 + typedarray.prototype.slice: 1.0.3 + which-typed-array: 1.1.15 - tshy@1.14.0: + tsimp@2.0.11(typescript@5.4.5): dependencies: - chalk: 5.3.0 - chokidar: 3.6.0 + '@isaacs/cached': 1.0.1 + '@isaacs/catcher': 1.0.4 foreground-child: 3.1.1 - minimatch: 9.0.4 mkdirp: 3.0.1 - polite-json: 4.0.1 - resolve-import: 1.4.5 - rimraf: 5.0.5 - sync-content: 1.0.2 + pirates: 4.0.6 + rimraf: 5.0.7 + signal-exit: 4.1.0 + sock-daemon: 1.4.2 typescript: 5.4.5 walk-up-path: 3.0.1 - tslib@2.6.2: {} + tunnel@0.0.6: {} - tsx@4.11.0: - dependencies: - esbuild: 0.20.2 - get-tsconfig: 4.7.5 - optionalDependencies: - fsevents: 2.3.3 + type-detect@4.0.8: {} - tuf-js@2.2.0: + type-fest@2.19.0: {} + + typed-array-buffer@1.0.2: dependencies: - '@tufjs/models': 2.0.0 - debug: 4.3.4 - make-fetch-happen: 13.0.0 - transitivePeerDependencies: - - supports-color + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 - tunnel@0.0.6: {} + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - type-detect@4.0.8: {} + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - type-fest@0.12.0: {} + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 - type-fest@3.13.1: {} + typedarray.prototype.slice@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + typed-array-buffer: 1.0.2 + typed-array-byte-offset: 1.0.2 typescript@5.4.5: {} - undici-types@5.26.5: {} - - undici@5.28.3: + unbox-primitive@1.0.2: dependencies: - '@fastify/busboy': 2.1.0 + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 - unique-filename@3.0.0: - dependencies: - unique-slug: 4.0.0 + undici-types@5.26.5: {} - unique-slug@4.0.0: + undici@5.28.4: dependencies: - imurmurhash: 0.1.4 + '@fastify/busboy': 2.1.1 universal-user-agent@6.0.1: {} - uuid@8.3.2: {} + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 - v8-compile-cache-lib@3.0.1: {} + uuid@8.3.2: {} - v8-to-istanbul@9.1.3: + v8-to-istanbul@9.2.0: dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 + valid-url@1.0.9: {} - validate-npm-package-name@5.0.0: - dependencies: - builtins: 5.0.1 + validator@13.12.0: {} walk-up-path@3.0.1: {} + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-streams-polyfill@3.3.3: {} + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -3559,9 +3180,7 @@ snapshots: dependencies: isexe: 3.1.1 - widest-line@4.0.1: - dependencies: - string-width: 5.1.2 + wordwrap@1.0.0: {} wrap-ansi@7.0.0: dependencies: @@ -3575,34 +3194,48 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrappy@1.0.2: {} + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.1.0 + strip-ansi: 7.1.0 - ws@8.14.2: {} + wrappy@1.0.2: {} y18n@5.0.8: {} - yallist@4.0.0: {} - - yaml-types@0.3.0(yaml@2.4.1): - dependencies: - yaml: 2.4.1 - - yaml@2.4.1: {} - yargs-parser@21.1.1: {} yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - yn@3.1.1: {} - yocto-queue@0.1.0: {} - yoga-wasm-web@0.3.3: {} + yocto-queue@1.0.0: {} + + youch-terminal@2.2.3: + dependencies: + kleur: 4.1.5 + string-width: 4.2.3 + wordwrap: 1.0.0 + + youch@3.3.3: + dependencies: + cookie: 0.5.0 + mustache: 4.2.0 + stacktracey: 2.1.8 + + z-schema@5.0.5: + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.12.0 + optionalDependencies: + commander: 9.5.0 diff --git a/src/main.ts b/src/main.ts index 44803c89..aa8a8348 100644 --- a/src/main.ts +++ b/src/main.ts @@ -16,6 +16,28 @@ import { verifySignature, } from './utils.js'; +/** + * Main arguments/options for the action to run. + */ +export interface ActionArguments { + /** Download URL for the Code Climate test reporter binary. @default https://codeclimate.com/downloads/test-reporter/test-reporter-latest-{platform}-{architecture} */ + downloadUrl?: string; + /** Filesystem path where the Code Climate binary should be downloaded to. @default ./{current-directory}/cc-reporter */ + executable?: string; + /** Command to execute to generate coverage report. */ + coverageCommand?: string; + /** Working directory to change to before running the test reporter. @default Current directory */ + workingDirectory?: string; + /** Turn on debugging mode for the Code Climate test reporter. @default false */ + codeClimateDebug?: string; + /** Coverage locations. @see https://github.com/paambaati/codeclimate-action/?tab=readme-ov-file#inputs */ + coverageLocationsParam?: string; + /** Coverage prefix. @see https://docs.codeclimate.com/docs/configuring-test-coverage#list-of-subcommands */ + coveragePrefix?: string; + /** Verifies the downloaded binary with a Code Climate-provided SHA 256 checksum and GPG sinature. @default true */ + verifyDownload?: string; +} + const PLATFORM = platform(); // REFER: https://docs.codeclimate.com/docs/configuring-test-coverage#locations-of-pre-built-binaries /** Canonical download URL for the official CodeClimate reporter. */ @@ -182,16 +204,7 @@ export async function run({ coverageLocationsParam = DEFAULT_COVERAGE_LOCATIONS, coveragePrefix, verifyDownload = DEFAULT_VERIFY_DOWNLOAD, -}: { - downloadUrl?: string; - executable?: string; - coverageCommand?: string; - workingDirectory?: string; - codeClimateDebug?: string; - coverageLocationsParam?: string; - coveragePrefix?: string; - verifyDownload?: string; -} = {}): Promise { +}: ActionArguments = {}): Promise { let lastExitCode = 1; if (workingDirectory) { debug(`Changing working directory to ${workingDirectory}`); diff --git a/test/integration.test.ts b/test/integration/integration.test.ts similarity index 68% rename from test/integration.test.ts rename to test/integration/integration.test.ts index 31eae164..62d968b5 100644 --- a/test/integration.test.ts +++ b/test/integration/integration.test.ts @@ -1,25 +1,20 @@ import { unlinkSync } from 'node:fs'; import { EOL, arch, platform } from 'node:os'; +import { test } from '@japa/runner'; import { hookStd } from 'hook-std'; -import t from 'tap'; import { DOWNLOAD_URL, EXECUTABLE, FILE_ARTIFACTS, downloadAndRecord, verifyChecksumAndSignature, -} from '../src/main.js'; +} from '../../src/main.js'; -t.test( - '🧪 verifyChecksumAndSignature() should download the CC reporter and pass all validations (happy path).', - { - skip: - platform() === 'darwin' && arch() === 'arm64' - ? 'Skipping because the CC reporter is not available on macOS Apple Silicon!' - : undefined, - }, - async (t) => { - t.plan(1); +test.group('🌏 integration tests', () => { + test('🧪 verifyChecksumAndSignature() should download the CC reporter and pass all validations (happy path).', async ({ + assert, + }) => { + assert.plan(1); let capturedOutput = ''; const stdHook = hookStd((text: string) => { capturedOutput += text; @@ -31,7 +26,7 @@ t.test( stdHook.unhook(); } catch (err) { stdHook.unhook(); - t.fail(err); + assert.fail((err as Error).message); } finally { for (const artifact of FILE_ARTIFACTS) { try { @@ -40,7 +35,7 @@ t.test( } } - t.equal( + assert.equal( capturedOutput, [ '::debug::ℹ️ Verifying CC Reporter checksum...', @@ -51,6 +46,8 @@ t.test( ].join(EOL), 'should download the reporter and correctly pass checksum and signature verification steps.', ); - t.end(); - }, -); + }).skip( + platform() === 'darwin' && arch() === 'arm64', + 'Skipping because the CC reporter is not available on macOS Apple Silicon!', + ); +}); diff --git a/test/main.test.ts b/test/main.test.ts deleted file mode 100644 index 947d9433..00000000 --- a/test/main.test.ts +++ /dev/null @@ -1,1098 +0,0 @@ -import { - readFile, - realpath as realpathCallback, - unlinkSync, - writeFileSync, -} from 'node:fs'; -import { default as os, EOL, tmpdir } from 'node:os'; -import { join as joinPath } from 'node:path'; -import { promisify } from 'node:util'; -import { context } from '@actions/github'; -import * as glob from '@actions/glob'; -import { hookStd } from 'hook-std'; -import nock from 'nock'; -import sinon from 'sinon'; -import t from 'tap'; -import toReadableStream from 'to-readable-stream'; -import which from 'which'; -import { CODECLIMATE_GPG_PUBLIC_KEY_ID, prepareEnv, run } from '../src/main.js'; -import * as utils from '../src/utils.js'; - -/** - * Dev Notes - * - * 1. `stdHook.unhook()` is called at the end of both `try` and `catch` - * instead of once in `finally` specifically because the hook is still - * capturing stdout/stderr, and so if there's some error, it can still - * be printed on the screen. If the unhook method is moved to `finally`, - * it will capture, i.e. swallow and not print, error traces. - * */ - -const realpath = promisify(realpathCallback); -const readFileAsync = promisify(readFile); - -const PLATFORM = os.platform(); -const EXE_EXT = PLATFORM === 'win32' ? 'bat' : ('sh' as const); -const DEFAULT_WORKDIR = process.cwd(); -const EXE_PATH_PREFIX = - PLATFORM === 'win32' - ? 'C:\\Windows\\system32\\cmd.exe /D /S /C' - : ('' as const); -// NOTE: We have to use `which` because although `echo` is in `/bin/echo` on most *nix systems, on rare occastions, it is in `/usr/bin/echo`. -const ECHO_CMD = - PLATFORM === 'win32' ? `${EXE_PATH_PREFIX} echo` : which.sync('echo'); - -const sandbox = sinon.createSandbox(); - -t.test('🛠 setup', (t) => { - t.plan(0); - nock.disableNetConnect(); - if (!nock.isActive()) nock.activate(); - t.end(); -}); - -t.test( - '🧪 prepareEnv() should return envs as-is in the absence of any GitHub-related variables.', - (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const expected = { - HOME: '/home', - USER: 'gp', - PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', - }; - sandbox.stub(process, 'env').value(expected); - const output = prepareEnv(); - t.strictSame(output, expected, 'should return envs as-is'); - }, -); - -t.test( - '🧪 prepareEnv() should return Git branch correctly when those GitHub-related variables are available.', - (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const mockEnv = { - HOME: '/home', - USER: 'gp', - PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', - GIT_BRANCH: 'refs/heads/main', - }; - sandbox.stub(process, 'env').value(mockEnv); - const expected = { - ...mockEnv, - GIT_BRANCH: 'main', - }; - const output = prepareEnv(); - t.strictSame( - output, - expected, - 'should return correctly updated additional environment variables', - ); - }, -); - -t.test( - '🧪 prepareEnv() should return Git commit SHA and branch correctly when those GitHub-related variables are available.', - (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const mockEnv = { - HOME: '/home', - USER: 'gp', - PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', - GITHUB_SHA: '89cac89532a27123c44a8fd77c9f8f2ea5c02528', - GITHUB_REF: 'main', - }; - sandbox.stub(process, 'env').value(mockEnv); - const expected = { - ...mockEnv, - GIT_COMMIT_SHA: '89cac89532a27123c44a8fd77c9f8f2ea5c02528', - GIT_BRANCH: 'main', - }; - const output = prepareEnv(); - t.strictSame( - output, - expected, - 'should return correctly updated additional environment variables', - ); - }, -); - -t.test( - '🧪 prepareEnv() should return Git commit SHA and branch correctly when the relevant GitHub event context is available.', - (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const mockEnv = { - HOME: '/home', - USER: 'gp', - PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', - GITHUB_EVENT_NAME: 'pull_request', - GITHUB_HEAD_REF: 'main', - }; - const mockCommitSHA = '89cac89532a27123c44a8fd77c9f8f2ea5c02528'; - - sandbox.stub(process, 'env').value(mockEnv); - sandbox - .stub(context, 'payload') - .value({ pull_request: { head: { sha: mockCommitSHA } } }); - - const expected = { - ...mockEnv, - GIT_COMMIT_SHA: mockCommitSHA, - GIT_BRANCH: 'main', - }; - - const output = prepareEnv(); - t.strictSame( - output, - expected, - 'should return correctly updated additional environment variables', - ); - }, -); - -t.test('🧪 run() should run the CC reporter (happy path).', async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, async () => { - const checksumFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256`; - const checksum = await readFileAsync(checksumFile); - return toReadableStream(checksum); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256.sig') - .reply(200, async () => { - const signatureFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`; - const signature = await readFileAsync(signatureFile); - return toReadableStream(signature); - }); - - nock('https://keys.openpgp.org') - .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) - .reply(200, async () => { - const publicKeyFile = - './test/fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc'; - const publicKey = await readFileAsync(publicKeyFile); - return toReadableStream(publicKey); - }); - - // We now allow `verifyChecksum()` to return `true` as well - // because a) we don't want to bother crafting checksums for - // fixtures and b) checksums differ across platforms and they - // are a pain to create and get to work correctly. - sandbox.stub(utils, 'verifyChecksum').resolves(true); - // We always allow `verifySignature()` to return `true` - // because we don't have access to the private key (obviously) - // and so cannot create correct signatures for fixtures anyways. - sandbox.stub(utils, 'verifySignature').resolves(true); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: `${ECHO_CMD} 'coverage ok'`, - }); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - t.fail(err); - } finally { - nock.cleanAll(); - } - - const expected = [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::debug::✅ CC Reported checksum verification completed...', - '::debug::ℹ️ Verifying CC Reporter GPG signature...', - '::debug::✅ CC Reported GPG signature verification completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, - 'before-build', - '::debug::✅ CC Reporter before-build checkin completed...', - `[command]${ECHO_CMD} 'coverage ok'`, - `'coverage ok'`, - '::debug::✅ Coverage run completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} after-build --exit-code 0"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, - 'after-build --exit-code 0', - '::debug::✅ CC Reporter after-build checkin completed!', - '', - ].join(EOL); - t.equal( - JSON.stringify(capturedOutput), - JSON.stringify(expected), - 'should execute all steps in happy path.', - ); - unlinkSync(filePath); - unlinkSync(`${filePath}.sha256`); - unlinkSync(`${filePath}.sha256.sig`); - unlinkSync('public-key.asc'); - nock.cleanAll(); - t.end(); -}); - -t.test( - '🧪 run() should run the CC reporter without verification if configured.', - async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: `${ECHO_CMD} 'coverage ok'`, - verifyDownload: 'false', - }); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - t.fail(err); - } finally { - nock.cleanAll(); - } - - t.equal( - capturedOutput, - [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, - 'before-build', - '::debug::✅ CC Reporter before-build checkin completed...', - `[command]${ECHO_CMD} 'coverage ok'`, - `'coverage ok'`, - '::debug::✅ Coverage run completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} after-build --exit-code 0"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, - 'after-build --exit-code 0', - '::debug::✅ CC Reporter after-build checkin completed!', - '', - ].join(EOL), - 'should execute all steps (except verification).', - ); - unlinkSync(filePath); - nock.cleanAll(); - t.end(); - }, -); - -t.test( - '🧪 run() should run the CC reporter without a coverage command.', - async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, async () => { - const checksumFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256`; - const checksum = await readFileAsync(checksumFile); - return toReadableStream(checksum); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256.sig') - .reply(200, async () => { - const signatureFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`; - const signature = await readFileAsync(signatureFile); - return toReadableStream(signature); - }); - - nock('https://keys.openpgp.org') - .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) - .reply(200, async () => { - const publicKeyFile = - './test/fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc'; - const publicKey = await readFileAsync(publicKeyFile); - return toReadableStream(publicKey); - }); - - sandbox.stub(utils, 'verifyChecksum').resolves(true); - sandbox.stub(utils, 'verifySignature').resolves(true); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: '', - }); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - t.fail(err); - } finally { - nock.cleanAll(); - } - - t.equal( - capturedOutput, - [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::debug::✅ CC Reported checksum verification completed...', - '::debug::ℹ️ Verifying CC Reporter GPG signature...', - '::debug::✅ CC Reported GPG signature verification completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, - 'before-build', - '::debug::✅ CC Reporter before-build checkin completed...', - `ℹ️ 'coverageCommand' not set, so skipping building coverage report!`, - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} after-build --exit-code 0"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, - 'after-build --exit-code 0', - '::debug::✅ CC Reporter after-build checkin completed!', - '', - ].join(EOL), - 'should execute all steps (except running the coverage command).', - ); - unlinkSync(filePath); - unlinkSync(`${filePath}.sha256`); - unlinkSync(`${filePath}.sha256.sig`); - unlinkSync('public-key.asc'); - nock.cleanAll(); - t.end(); - }, -); - -t.test('🧪 run() should convert patterns to locations.', async (t) => { - t.plan(3); - t.teardown(() => sandbox.restore()); - const globSpy = sandbox - .stub() - .resolves([ - joinPath(DEFAULT_WORKDIR, './file-a.lcov'), - joinPath(DEFAULT_WORKDIR, './file-b.lcov'), - ]); - sandbox.stub(glob, 'create').resolves({ - glob: globSpy, - getSearchPaths: sandbox.spy(), - globGenerator: sandbox.spy(), - }); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, async () => { - const checksumFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256`; - const checksum = await readFileAsync(checksumFile); - return toReadableStream(checksum); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256.sig') - .reply(200, async () => { - const signatureFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`; - const signature = await readFileAsync(signatureFile); - return toReadableStream(signature); - }); - - nock('https://keys.openpgp.org') - .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) - .reply(200, async () => { - const publicKeyFile = - './test/fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc'; - const publicKey = await readFileAsync(publicKeyFile); - return toReadableStream(publicKey); - }); - - sandbox.stub(utils, 'verifyChecksum').resolves(true); - sandbox.stub(utils, 'verifySignature').resolves(true); - - const filePattern = - PLATFORM === 'win32' - ? `${DEFAULT_WORKDIR}\\*.lcov:lcov` - : `${DEFAULT_WORKDIR}/*.lcov:lcov`; - const fileA = 'file-a.lcov' as const; - const fileB = 'file-b.lcov' as const; - - writeFileSync(fileA, 'file a content'); - writeFileSync(fileB, 'file b content'); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: '', - coverageLocationsParam: filePattern, - codeClimateDebug: 'false', - }); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - t.fail(err); - } finally { - nock.cleanAll(); - } - - t.equal( - (glob.create as unknown as sinon.SinonSpy).firstCall.firstArg, - PLATFORM === 'win32' - ? `${DEFAULT_WORKDIR}\\*.lcov` - : `${DEFAULT_WORKDIR}/*.lcov`, - 'should create a globber with given pattern.', - ); - t.ok( - globSpy.calledOnceWithExactly(), - 'should get the paths of the files from the newly created globber instance.', - ); - t.equal( - capturedOutput, - [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::debug::✅ CC Reported checksum verification completed...', - '::debug::ℹ️ Verifying CC Reporter GPG signature...', - '::debug::✅ CC Reported GPG signature verification completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, - 'before-build', - '::debug::✅ CC Reporter before-build checkin completed...', - `ℹ️ 'coverageCommand' not set, so skipping building coverage report!`, - PLATFORM === 'win32' - ? `::debug::Parsing 2 coverage location(s) — ${DEFAULT_WORKDIR}\\file-a.lcov:lcov,${DEFAULT_WORKDIR}\\file-b.lcov:lcov (object)` - : `::debug::Parsing 2 coverage location(s) — ${DEFAULT_WORKDIR}/file-a.lcov:lcov,${DEFAULT_WORKDIR}/file-b.lcov:lcov (object)`, - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} format-coverage ${DEFAULT_WORKDIR}\\file-a.lcov -t lcov -o codeclimate.0.json"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} format-coverage ${DEFAULT_WORKDIR}/file-a.lcov -t lcov -o codeclimate.0.json`, - PLATFORM === 'win32' - ? `format-coverage ${DEFAULT_WORKDIR}\\file-a.lcov -t lcov -o codeclimate.0.json` - : `format-coverage ${DEFAULT_WORKDIR}/file-a.lcov -t lcov -o codeclimate.0.json`, - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} format-coverage ${DEFAULT_WORKDIR}\\file-b.lcov -t lcov -o codeclimate.1.json"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} format-coverage ${DEFAULT_WORKDIR}/file-b.lcov -t lcov -o codeclimate.1.json`, - PLATFORM === 'win32' - ? `format-coverage ${DEFAULT_WORKDIR}\\file-b.lcov -t lcov -o codeclimate.1.json` - : `format-coverage ${DEFAULT_WORKDIR}/file-b.lcov -t lcov -o codeclimate.1.json`, - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} sum-coverage codeclimate.0.json codeclimate.1.json -p 2 -o coverage.total.json"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} sum-coverage codeclimate.0.json codeclimate.1.json -p 2 -o coverage.total.json`, - 'sum-coverage codeclimate.0.json codeclimate.1.json -p 2 -o coverage.total.json', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} upload-coverage -i coverage.total.json"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} upload-coverage -i coverage.total.json`, - 'upload-coverage -i coverage.total.json', - '::debug::✅ CC Reporter upload coverage completed!', - '', - ].join(EOL), - 'should execute all steps (including uploading globbed coverage files).', - ); - unlinkSync(filePath); - unlinkSync(`${filePath}.sha256`); - unlinkSync(`${filePath}.sha256.sig`); - unlinkSync('public-key.asc'); - unlinkSync(fileA); - unlinkSync(fileB); - nock.cleanAll(); - t.end(); -}); - -t.test( - '🧪 run() should correctly switch the working directory if given.', - async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = joinPath( - __dirname, - `./fixtures/dummy-cc-reporter.${EXE_EXT}`, - ); - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, async () => { - const checksumFile = joinPath( - __dirname, - `./fixtures/dummy-cc-reporter.${EXE_EXT}.sha256`, - ); - const checksum = await readFileAsync(checksumFile); - return toReadableStream(checksum); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256.sig') - .reply(200, async () => { - const signatureFile = joinPath( - __dirname, - `./fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`, - ); - const signature = await readFileAsync(signatureFile); - return toReadableStream(signature); - }); - - nock('https://keys.openpgp.org') - .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) - .reply(200, async () => { - const publicKeyFile = joinPath( - __dirname, - './fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc', - ); - const publicKey = await readFileAsync(publicKeyFile); - return toReadableStream(publicKey); - }); - - sandbox.stub(utils, 'verifyChecksum').resolves(true); - sandbox.stub(utils, 'verifySignature').resolves(true); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - const CUSTOM_WORKDIR = await realpath(tmpdir()); - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: `${ECHO_CMD} 'coverage ok'`, - workingDirectory: CUSTOM_WORKDIR, - }); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - t.fail(err); - } finally { - nock.cleanAll(); - } - - t.equal( - capturedOutput, - [ - `::debug::Changing working directory to ${CUSTOM_WORKDIR}`, - '::debug::✅ Changing working directory completed...', - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::debug::✅ CC Reported checksum verification completed...', - '::debug::ℹ️ Verifying CC Reporter GPG signature...', - '::debug::✅ CC Reported GPG signature verification completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} ""${CUSTOM_WORKDIR}\\test.${EXE_EXT}" before-build"` - : `[command]${CUSTOM_WORKDIR}/test.${EXE_EXT} before-build`, - 'before-build', - '::debug::✅ CC Reporter before-build checkin completed...', - `[command]${ECHO_CMD} 'coverage ok'`, - `'coverage ok'`, - '::debug::✅ Coverage run completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} ""${CUSTOM_WORKDIR}\\test.${EXE_EXT}" after-build --exit-code 0"` - : `[command]${CUSTOM_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, - 'after-build --exit-code 0', - '::debug::✅ CC Reporter after-build checkin completed!', - '', - ].join(EOL), - 'should execute all steps when custom working directory is given.', - ); - unlinkSync(filePath); - nock.cleanAll(); - process.chdir(DEFAULT_WORKDIR); - t.end(); - }, -); - -t.test( - '🧪 run() should throw an error if the checksum verification fails.', - async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, () => { - const dummyChecksum = 'lolno'; - return toReadableStream(dummyChecksum); - }); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: `${ECHO_CMD} 'coverage ok'`, - }); - t.fail('should have thrown an error'); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - // do nothing else, we expect this run command to fail. - } finally { - nock.cleanAll(); - } - - t.equal( - capturedOutput, - [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::error::CC Reporter checksum does not match!', - '::error::🚨 CC Reporter checksum verfication failed!', - '', - ].join(EOL), - 'should correctly throw the error if the checksum verification fails.', - ); - unlinkSync(filePath); - unlinkSync(`${filePath}.sha256`); - nock.cleanAll(); - t.end(); - }, -); - -t.test( - '🧪 run() should throw an error if the GPG signature verification fails.', - async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, async () => { - const checksumFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}.sha256`; - const checksum = await readFileAsync(checksumFile); - return toReadableStream(checksum); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256.sig') - .reply(200, async () => { - const signatureFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`; - const signature = await readFileAsync(signatureFile); - return toReadableStream(signature); - }); - - nock('https://keys.openpgp.org') - .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) - .reply(200, async () => { - const publicKeyFile = - './test/fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc'; - const publicKey = await readFileAsync(publicKeyFile); - return toReadableStream(publicKey); - }); - - sandbox.stub(utils, 'verifyChecksum').resolves(true); - sandbox.stub(utils, 'verifySignature').resolves(false); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: `${ECHO_CMD} 'coverage ok'`, - }); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - // do nothing else, we expect this run command to fail. - } finally { - nock.cleanAll(); - } - - t.equal( - capturedOutput, - [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::debug::✅ CC Reported checksum verification completed...', - '::debug::ℹ️ Verifying CC Reporter GPG signature...', - '::error::CC Reporter GPG signature is invalid!', - '::error::🚨 CC Reporter GPG signature verfication failed!', - '', - ].join(EOL), - 'should correctly throw the error if the GPG signature verification fails.', - ); - unlinkSync(filePath); - unlinkSync(`${filePath}.sha256`); - unlinkSync(`${filePath}.sha256.sig`); - unlinkSync('public-key.asc'); - nock.cleanAll(); - t.end(); - }, -); - -t.test( - '🧪 run() should throw an error if the before-build step throws an error.', - async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, async () => { - const checksumFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}.sha256`; - const checksum = await readFileAsync(checksumFile); - return toReadableStream(checksum); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256.sig') - .reply(200, async () => { - const signatureFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`; - const signature = await readFileAsync(signatureFile); - return toReadableStream(signature); - }); - - nock('https://keys.openpgp.org') - .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) - .reply(200, async () => { - const publicKeyFile = - './test/fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc'; - const publicKey = await readFileAsync(publicKeyFile); - return toReadableStream(publicKey); - }); - - sandbox.stub(utils, 'verifyChecksum').resolves(true); - sandbox.stub(utils, 'verifySignature').resolves(true); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: `${ECHO_CMD} 'coverage ok'`, - }); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - // do nothing else, we expect this run command to fail. - } finally { - nock.cleanAll(); - } - - t.equal( - capturedOutput, - [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::debug::✅ CC Reported checksum verification completed...', - '::debug::ℹ️ Verifying CC Reporter GPG signature...', - '::debug::✅ CC Reported GPG signature verification completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, - PLATFORM === 'win32' - ? `::error::The process '${DEFAULT_WORKDIR}\\test.${EXE_EXT}' failed with exit code 69` - : `::error::The process '${DEFAULT_WORKDIR}/test.${EXE_EXT}' failed with exit code 69`, - '::error::🚨 CC Reporter before-build checkin failed!', - '', - ].join(EOL), - 'should correctly throw the error if the before-build step throws an error.', - ); - unlinkSync(filePath); - unlinkSync(`${filePath}.sha256`); - unlinkSync(`${filePath}.sha256.sig`); - unlinkSync('public-key.asc'); - nock.cleanAll(); - t.end(); - }, -); - -t.test( - '🧪 run() should throw an error if the after-build step throws an error.', - async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter-after-build-error.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, async () => { - const checksumFile = `./test/fixtures/dummy-cc-reporter-after-build-error.${EXE_EXT}.sha256`; - const checksum = await readFileAsync(checksumFile); - return toReadableStream(checksum); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256.sig') - .reply(200, async () => { - const signatureFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`; - const signature = await readFileAsync(signatureFile); - return toReadableStream(signature); - }); - - nock('https://keys.openpgp.org') - .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) - .reply(200, async () => { - const publicKeyFile = - './test/fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc'; - const publicKey = await readFileAsync(publicKeyFile); - return toReadableStream(publicKey); - }); - - sandbox.stub(utils, 'verifyChecksum').resolves(true); - sandbox.stub(utils, 'verifySignature').resolves(true); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: `${ECHO_CMD} 'coverage ok'`, - }); - stdHook.unhook(); - } catch (err) { - stdHook.unhook(); - // do nothing else, we expect this run command to fail. - } finally { - nock.cleanAll(); - } - - t.equal( - capturedOutput, - [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::debug::✅ CC Reported checksum verification completed...', - '::debug::ℹ️ Verifying CC Reporter GPG signature...', - '::debug::✅ CC Reported GPG signature verification completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, - '::debug::✅ CC Reporter before-build checkin completed...', - `[command]${ECHO_CMD} 'coverage ok'`, - `'coverage ok'`, - '::debug::✅ Coverage run completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} after-build --exit-code 0"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, - PLATFORM === 'win32' - ? `::error::The process '${DEFAULT_WORKDIR}\\test.${EXE_EXT}' failed with exit code 69` - : `::error::The process '${DEFAULT_WORKDIR}/test.${EXE_EXT}' failed with exit code 69`, - '::error::🚨 CC Reporter after-build checkin failed!', - '', - ].join(EOL), - 'should correctly throw the error if the after-build step throws an error.', - ); - unlinkSync(filePath); - unlinkSync(`${filePath}.sha256`); - unlinkSync(`${filePath}.sha256.sig`); - unlinkSync('public-key.asc'); - nock.cleanAll(); - t.end(); - }, -); - -t.test( - '🧪 run() should exit cleanly when the coverage command fails.', - async (t) => { - t.plan(1); - t.teardown(() => sandbox.restore()); - const COVERAGE_COMMAND = 'wololololo'; // Random command that doesn't exist (and so should fail). - const filePath = `./test.${EXE_EXT}`; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, async () => { - const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; - const dummyReporter = await readFileAsync(dummyReporterFile); - return toReadableStream(dummyReporter); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256') - .reply(200, async () => { - const checksumFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256`; - const checksum = await readFileAsync(checksumFile); - return toReadableStream(checksum); - }); - - nock('http://localhost.test') - .get('/dummy-cc-reporter.sha256.sig') - .reply(200, async () => { - const signatureFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`; - const signature = await readFileAsync(signatureFile); - return toReadableStream(signature); - }); - - nock('https://keys.openpgp.org') - .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) - .reply(200, async () => { - const publicKeyFile = - './test/fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc'; - const publicKey = await readFileAsync(publicKeyFile); - return toReadableStream(publicKey); - }); - - sandbox.stub(utils, 'verifyChecksum').resolves(true); - sandbox.stub(utils, 'verifySignature').resolves(true); - - let capturedOutput = ''; - const stdHook = hookStd((text: string) => { - capturedOutput += text; - }); - - try { - await run({ - downloadUrl: 'http://localhost.test/dummy-cc-reporter', - executable: filePath, - coverageCommand: COVERAGE_COMMAND, - verifyDownload: 'false', - }); - stdHook.unhook(); - t.fail('Should throw an error.'); - } catch (err) { - stdHook.unhook(); - t.equal( - capturedOutput, - [ - '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', - '::debug::✅ CC Reporter downloaded...', - '::debug::ℹ️ Verifying CC Reporter checksum...', - '::debug::✅ CC Reported checksum verification completed...', - '::debug::ℹ️ Verifying CC Reporter GPG signature...', - '::debug::✅ CC Reported GPG signature verification completed...', - PLATFORM === 'win32' - ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` - : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, - 'before-build', - '::debug::✅ CC Reporter before-build checkin completed...', - PLATFORM === 'win32' - ? `::error::Unable to locate executable file: ${COVERAGE_COMMAND}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.` - : `::error::Unable to locate executable file: ${COVERAGE_COMMAND}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`, - '::error::🚨 Coverage run failed!', - '', - ].join(EOL), - 'should fail correctly on wrong/invalid coverage command.', - ); - } finally { - unlinkSync(filePath); - unlinkSync(`${filePath}.sha256`); - unlinkSync(`${filePath}.sha256.sig`); - unlinkSync('public-key.asc'); - nock.cleanAll(); - t.end(); - } - }, -); - -t.test('💣 teardown', (t) => { - nock.restore(); - nock.cleanAll(); - nock.enableNetConnect(); - sandbox.restore(); - if (process.exitCode === 1) process.exitCode = 0; // This is required because @actions/core `setFailed` sets the exit code to 0 when we're testing errors. - t.end(); -}); diff --git a/test/unit/main.test.ts b/test/unit/main.test.ts new file mode 100644 index 00000000..45f942e2 --- /dev/null +++ b/test/unit/main.test.ts @@ -0,0 +1,846 @@ +import { + readFile, + realpath as realpathCallback, + unlinkSync, + writeFileSync, +} from 'node:fs'; +import { default as os, EOL, tmpdir } from 'node:os'; +import { dirname, join as joinPath } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { promisify } from 'node:util'; +import { context } from '@actions/github'; +import * as glob from '@actions/glob'; +import { test } from '@japa/runner'; +import { hookStd } from 'hook-std'; +import intoStream from 'into-stream'; +import nock from 'nock'; +import sinon from 'sinon'; +import which from 'which'; +import { + CODECLIMATE_GPG_PUBLIC_KEY_ID, + prepareEnv, + run, +} from '../../src/main.js'; +import * as utils from '../../src/utils.js'; + +/** + * Dev Notes + * + * 1. `stdHook.unhook()` is called at the end of both `try` and `catch` + * instead of once in `finally` specifically because the hook is still + * capturing stdout/stderr, and so if there's some error, it can still + * be printed on the screen. If the unhook method is moved to `finally`, + * it will capture, i.e. swallow and not print, error traces. + * */ + +const realpath = promisify(realpathCallback); +const readFileAsync = promisify(readFile); + +const PLATFORM = os.platform(); +const EXE_EXT = PLATFORM === 'win32' ? 'bat' : ('sh' as const); +const DEFAULT_WORKDIR = process.cwd(); + +const __DIRNAME = dirname(fileURLToPath(import.meta.url)); + +const EXE_PATH_PREFIX = + PLATFORM === 'win32' + ? 'C:\\Windows\\system32\\cmd.exe /D /S /C' + : ('' as const); +// NOTE: We have to use `which` because although `echo` is in `/bin/echo` on most *nix systems, on rare occastions, it is in `/usr/bin/echo`. +const ECHO_CMD = + PLATFORM === 'win32' ? `${EXE_PATH_PREFIX} echo` : which.sync('echo'); + +const sandbox = sinon.createSandbox(); + +test.group('🫀 core unit tests', (g) => { + g.setup(() => { + nock.disableNetConnect(); + if (!nock.isActive()) nock.activate(); + }); + + g.teardown(() => { + nock.restore(); + nock.cleanAll(); + nock.enableNetConnect(); + if (process.exitCode === 1) process.exitCode = 0; // This is required because @actions/core `setFailed` sets the exit code to 1 when we're testing errors. + }); + + test('🧪 prepareEnv() should return envs as-is in the absence of any GitHub-related variables.', ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const expected = { + HOME: '/home', + USER: 'gp', + PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', + }; + sandbox.stub(process, 'env').value(expected); + const output = prepareEnv(); + assert.deepEqual(output, expected, 'should return envs as-is'); + }); + + test('🧪 prepareEnv() should return Git branch correctly when those GitHub-related variables are available.', ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const mockEnv = { + HOME: '/home', + USER: 'gp', + PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', + GIT_BRANCH: 'refs/heads/main', + }; + sandbox.stub(process, 'env').value(mockEnv); + const expected = { + ...mockEnv, + GIT_BRANCH: 'main', + }; + const output = prepareEnv(); + assert.deepEqual( + output, + expected, + 'should return correctly updated additional environment variables', + ); + }); + + test('🧪 prepareEnv() should return Git commit SHA and branch correctly when those GitHub-related variables are available.', ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const mockEnv = { + HOME: '/home', + USER: 'gp', + PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', + GITHUB_SHA: '89cac89532a27123c44a8fd77c9f8f2ea5c02528', + GITHUB_REF: 'main', + }; + sandbox.stub(process, 'env').value(mockEnv); + const expected = { + ...mockEnv, + GIT_COMMIT_SHA: '89cac89532a27123c44a8fd77c9f8f2ea5c02528', + GIT_BRANCH: 'main', + }; + const output = prepareEnv(); + assert.deepEqual( + output, + expected, + 'should return correctly updated additional environment variables', + ); + }); + + test('🧪 prepareEnv() should return Git commit SHA and branch correctly when the relevant GitHub event context is available.', ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const mockEnv = { + HOME: '/home', + USER: 'gp', + PATH: '/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', + GITHUB_EVENT_NAME: 'pull_request', + GITHUB_HEAD_REF: 'main', + }; + const mockCommitSHA = '89cac89532a27123c44a8fd77c9f8f2ea5c02528'; + + sandbox.stub(process, 'env').value(mockEnv); + sandbox + .stub(context, 'payload') + .value({ pull_request: { head: { sha: mockCommitSHA } } }); + + const expected = { + ...mockEnv, + GIT_COMMIT_SHA: mockCommitSHA, + GIT_BRANCH: 'main', + }; + + const output = prepareEnv(); + assert.deepEqual( + output, + expected, + 'should return correctly updated additional environment variables', + ); + }); + + test('🧪 run() should run the CC reporter (happy path).', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + coverageCommand: `${ECHO_CMD} 'coverage ok'`, + verifyDownload: 'false', + }); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + assert.fail((err as Error).message); + } finally { + nock.cleanAll(); + } + + const expected = [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, + 'before-build', + '::debug::✅ CC Reporter before-build checkin completed...', + `[command]${ECHO_CMD} 'coverage ok'`, + `'coverage ok'`, + '::debug::✅ Coverage run completed...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} after-build --exit-code 0"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, + 'after-build --exit-code 0', + '::debug::✅ CC Reporter after-build checkin completed!', + '', + ].join(EOL); + assert.equal( + JSON.stringify(capturedOutput), + JSON.stringify(expected), + 'should execute all steps in happy path.', + ); + unlinkSync(filePath); + nock.cleanAll(); + }); + + test('🧪 run() should run the CC reporter without verification if configured.', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + coverageCommand: `${ECHO_CMD} 'coverage ok'`, + verifyDownload: 'false', + }); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + assert.fail((err as Error).message); + } finally { + nock.cleanAll(); + } + + assert.equal( + capturedOutput, + [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, + 'before-build', + '::debug::✅ CC Reporter before-build checkin completed...', + `[command]${ECHO_CMD} 'coverage ok'`, + `'coverage ok'`, + '::debug::✅ Coverage run completed...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} after-build --exit-code 0"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, + 'after-build --exit-code 0', + '::debug::✅ CC Reporter after-build checkin completed!', + '', + ].join(EOL), + 'should execute all steps (except verification).', + ); + unlinkSync(filePath); + nock.cleanAll(); + }); + + test('🧪 run() should run the CC reporter without a coverage command.', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + verifyDownload: 'false', + }); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + assert.fail((err as Error).message); + } finally { + nock.cleanAll(); + } + + assert.equal( + capturedOutput, + [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, + 'before-build', + '::debug::✅ CC Reporter before-build checkin completed...', + `ℹ️ 'coverageCommand' not set, so skipping building coverage report!`, + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} after-build --exit-code 0"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, + 'after-build --exit-code 0', + '::debug::✅ CC Reporter after-build checkin completed!', + '', + ].join(EOL), + 'should execute all steps (except running the coverage command).', + ); + unlinkSync(filePath); + nock.cleanAll(); + }); + + test('🧪 run() should convert patterns to locations.', async ({ + assert, + test, + }) => { + assert.plan(3); + test.teardown(() => sandbox.restore()); + const globSpy = sandbox + .stub() + .resolves([ + joinPath(DEFAULT_WORKDIR, './file-a.lcov'), + joinPath(DEFAULT_WORKDIR, './file-b.lcov'), + ]); + sandbox.stub(glob, 'create').resolves({ + glob: globSpy, + getSearchPaths: sandbox.spy(), + globGenerator: sandbox.spy(), + }); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + const filePattern = + PLATFORM === 'win32' + ? `${DEFAULT_WORKDIR}\\*.lcov:lcov` + : `${DEFAULT_WORKDIR}/*.lcov:lcov`; + const fileA = 'file-a.lcov' as const; + const fileB = 'file-b.lcov' as const; + + writeFileSync(fileA, 'file a content'); + writeFileSync(fileB, 'file b content'); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + verifyDownload: 'false', + coverageLocationsParam: filePattern, + }); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + assert.fail((err as Error).message); + } finally { + nock.cleanAll(); + } + + assert.equal( + (glob.create as unknown as sinon.SinonSpy).firstCall.firstArg, + PLATFORM === 'win32' + ? `${DEFAULT_WORKDIR}\\*.lcov` + : `${DEFAULT_WORKDIR}/*.lcov`, + 'should create a globber with given pattern.', + ); + assert.ok( + globSpy.calledOnceWithExactly(), + 'should get the paths of the files from the newly created globber instance.', + ); + assert.equal( + capturedOutput, + [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, + 'before-build', + '::debug::✅ CC Reporter before-build checkin completed...', + `ℹ️ 'coverageCommand' not set, so skipping building coverage report!`, + PLATFORM === 'win32' + ? `::debug::Parsing 2 coverage location(s) — ${DEFAULT_WORKDIR}\\file-a.lcov:lcov,${DEFAULT_WORKDIR}\\file-b.lcov:lcov (object)` + : `::debug::Parsing 2 coverage location(s) — ${DEFAULT_WORKDIR}/file-a.lcov:lcov,${DEFAULT_WORKDIR}/file-b.lcov:lcov (object)`, + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} format-coverage ${DEFAULT_WORKDIR}\\file-a.lcov -t lcov -o codeclimate.0.json"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} format-coverage ${DEFAULT_WORKDIR}/file-a.lcov -t lcov -o codeclimate.0.json`, + PLATFORM === 'win32' + ? `format-coverage ${DEFAULT_WORKDIR}\\file-a.lcov -t lcov -o codeclimate.0.json` + : `format-coverage ${DEFAULT_WORKDIR}/file-a.lcov -t lcov -o codeclimate.0.json`, + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} format-coverage ${DEFAULT_WORKDIR}\\file-b.lcov -t lcov -o codeclimate.1.json"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} format-coverage ${DEFAULT_WORKDIR}/file-b.lcov -t lcov -o codeclimate.1.json`, + PLATFORM === 'win32' + ? `format-coverage ${DEFAULT_WORKDIR}\\file-b.lcov -t lcov -o codeclimate.1.json` + : `format-coverage ${DEFAULT_WORKDIR}/file-b.lcov -t lcov -o codeclimate.1.json`, + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} sum-coverage codeclimate.0.json codeclimate.1.json -p 2 -o coverage.total.json"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} sum-coverage codeclimate.0.json codeclimate.1.json -p 2 -o coverage.total.json`, + 'sum-coverage codeclimate.0.json codeclimate.1.json -p 2 -o coverage.total.json', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} upload-coverage -i coverage.total.json"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} upload-coverage -i coverage.total.json`, + 'upload-coverage -i coverage.total.json', + '::debug::✅ CC Reporter upload coverage completed!', + '', + ].join(EOL), + 'should execute all steps (including uploading globbed coverage files).', + ); + unlinkSync(filePath); + unlinkSync(fileA); + unlinkSync(fileB); + nock.cleanAll(); + }).skip(true, 'Skipping because ES modules cannot be stubbed 😭'); + + test('🧪 run() should correctly switch the working directory if given.', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = joinPath( + __DIRNAME, + `../fixtures/dummy-cc-reporter.${EXE_EXT}`, + ); + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + const CUSTOM_WORKDIR = await realpath(tmpdir()); + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + coverageCommand: `${ECHO_CMD} 'coverage ok'`, + workingDirectory: CUSTOM_WORKDIR, + verifyDownload: 'false', + }); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + assert.fail((err as Error).message); + } finally { + nock.cleanAll(); + } + + assert.equal( + capturedOutput, + [ + `::debug::Changing working directory to ${CUSTOM_WORKDIR}`, + '::debug::✅ Changing working directory completed...', + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} ""${CUSTOM_WORKDIR}\\test.${EXE_EXT}" before-build"` + : `[command]${CUSTOM_WORKDIR}/test.${EXE_EXT} before-build`, + 'before-build', + '::debug::✅ CC Reporter before-build checkin completed...', + `[command]${ECHO_CMD} 'coverage ok'`, + `'coverage ok'`, + '::debug::✅ Coverage run completed...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} ""${CUSTOM_WORKDIR}\\test.${EXE_EXT}" after-build --exit-code 0"` + : `[command]${CUSTOM_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, + 'after-build --exit-code 0', + '::debug::✅ CC Reporter after-build checkin completed!', + '', + ].join(EOL), + 'should execute all steps when custom working directory is given.', + ); + unlinkSync(filePath); + nock.cleanAll(); + process.chdir(DEFAULT_WORKDIR); + }); + + test('🧪 run() should throw an error if the checksum verification fails.', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + nock('http://localhost.test') + .get('/dummy-cc-reporter.sha256') + .reply(200, () => { + const dummyChecksum = 'lolno'; + return intoStream(dummyChecksum); + }); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + coverageCommand: `${ECHO_CMD} 'coverage ok'`, + }); + assert.fail('should have thrown an error'); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + // do nothing else, we expect this run command to fail. + } finally { + nock.cleanAll(); + } + + assert.equal( + capturedOutput, + [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + '::debug::ℹ️ Verifying CC Reporter checksum...', + '::error::CC Reporter checksum does not match!', + '::error::🚨 CC Reporter checksum verfication failed!', + '', + ].join(EOL), + 'should correctly throw the error if the checksum verification fails.', + ); + unlinkSync(filePath); + unlinkSync(`${filePath}.sha256`); + nock.cleanAll(); + }); + + test('🧪 run() should throw an error if the GPG signature verification fails.', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + nock('http://localhost.test') + .get('/dummy-cc-reporter.sha256') + .reply(200, async () => { + const checksumFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}.sha256`; + const checksum = await readFileAsync(checksumFile); + return intoStream(checksum); + }); + + nock('http://localhost.test') + .get('/dummy-cc-reporter.sha256.sig') + .reply(200, async () => { + const signatureFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}.sha256.sig`; + const signature = await readFileAsync(signatureFile); + return intoStream(signature); + }); + + nock('https://keys.openpgp.org') + .get(`/vks/v1/by-fingerprint/${CODECLIMATE_GPG_PUBLIC_KEY_ID}`) + .reply(200, async () => { + const publicKeyFile = + './test/fixtures/9BD9E2DD46DA965A537E5B0A5CBF320243B6FD85.asc'; + const publicKey = await readFileAsync(publicKeyFile); + return intoStream(publicKey); + }); + + sandbox.stub(utils, 'verifyChecksum').resolves(true); + sandbox.stub(utils, 'verifySignature').resolves(false); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + coverageCommand: `${ECHO_CMD} 'coverage ok'`, + }); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + // do nothing else, we expect this run command to fail. + } finally { + nock.cleanAll(); + } + + assert.equal( + capturedOutput, + [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + '::debug::ℹ️ Verifying CC Reporter checksum...', + '::debug::✅ CC Reported checksum verification completed...', + '::debug::ℹ️ Verifying CC Reporter GPG signature...', + '::error::CC Reporter GPG signature is invalid!', + '::error::🚨 CC Reporter GPG signature verfication failed!', + '', + ].join(EOL), + 'should correctly throw the error if the GPG signature verification fails.', + ); + unlinkSync(filePath); + unlinkSync(`${filePath}.sha256`); + unlinkSync(`${filePath}.sha256.sig`); + unlinkSync('public-key.asc'); + nock.cleanAll(); + }).skip(true, 'Skipping because ES modules cannot be stubbed 😭'); + + test('🧪 run() should throw an error if the before-build step throws an error.', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter-before-build-error.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + coverageCommand: `${ECHO_CMD} 'coverage ok'`, + verifyDownload: 'false', + }); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + // do nothing else, we expect this run command to fail. + } finally { + nock.cleanAll(); + } + + assert.equal( + capturedOutput, + [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, + PLATFORM === 'win32' + ? `::error::The process '${DEFAULT_WORKDIR}\\test.${EXE_EXT}' failed with exit code 69` + : `::error::The process '${DEFAULT_WORKDIR}/test.${EXE_EXT}' failed with exit code 69`, + '::error::🚨 CC Reporter before-build checkin failed!', + '', + ].join(EOL), + 'should correctly throw the error if the before-build step throws an error.', + ); + unlinkSync(filePath); + nock.cleanAll(); + }); + + test('🧪 run() should throw an error if the after-build step throws an error.', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter-after-build-error.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + coverageCommand: `${ECHO_CMD} 'coverage ok'`, + verifyDownload: 'false', + }); + stdHook.unhook(); + } catch (err) { + stdHook.unhook(); + // do nothing else, we expect this run command to fail. + } finally { + nock.cleanAll(); + } + + assert.equal( + capturedOutput, + [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, + '::debug::✅ CC Reporter before-build checkin completed...', + `[command]${ECHO_CMD} 'coverage ok'`, + `'coverage ok'`, + '::debug::✅ Coverage run completed...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} after-build --exit-code 0"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} after-build --exit-code 0`, + PLATFORM === 'win32' + ? `::error::The process '${DEFAULT_WORKDIR}\\test.${EXE_EXT}' failed with exit code 69` + : `::error::The process '${DEFAULT_WORKDIR}/test.${EXE_EXT}' failed with exit code 69`, + '::error::🚨 CC Reporter after-build checkin failed!', + '', + ].join(EOL), + 'should correctly throw the error if the after-build step throws an error.', + ); + unlinkSync(filePath); + nock.cleanAll(); + }); + + test('🧪 run() should exit cleanly when the coverage command fails.', async ({ + assert, + test, + }) => { + assert.plan(1); + test.teardown(() => sandbox.restore()); + const COVERAGE_COMMAND = 'wololololo'; // Random command that doesn't exist (and so should fail). + const filePath = `./test.${EXE_EXT}`; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, async () => { + const dummyReporterFile = `./test/fixtures/dummy-cc-reporter.${EXE_EXT}`; + const dummyReporter = await readFileAsync(dummyReporterFile); + return intoStream(dummyReporter); + }); + + let capturedOutput = ''; + const stdHook = hookStd((text: string) => { + capturedOutput += text; + }); + + try { + await run({ + downloadUrl: 'http://localhost.test/dummy-cc-reporter', + executable: filePath, + coverageCommand: COVERAGE_COMMAND, + verifyDownload: 'false', + }); + stdHook.unhook(); + assert.fail('Should throw an error.'); + } catch (err) { + stdHook.unhook(); + assert.equal( + capturedOutput, + [ + '::debug::ℹ️ Downloading CC Reporter from http://localhost.test/dummy-cc-reporter ...', + '::debug::✅ CC Reporter downloaded...', + PLATFORM === 'win32' + ? `[command]${EXE_PATH_PREFIX} "${DEFAULT_WORKDIR}\\test.${EXE_EXT} before-build"` + : `[command]${DEFAULT_WORKDIR}/test.${EXE_EXT} before-build`, + 'before-build', + '::debug::✅ CC Reporter before-build checkin completed...', + PLATFORM === 'win32' + ? `::error::Unable to locate executable file: ${COVERAGE_COMMAND}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.` + : `::error::Unable to locate executable file: ${COVERAGE_COMMAND}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`, + '::error::🚨 Coverage run failed!', + '', + ].join(EOL), + 'should fail correctly on wrong/invalid coverage command.', + ); + } finally { + unlinkSync(filePath); + nock.cleanAll(); + } + }); +}); diff --git a/test/unit/utils.test.ts b/test/unit/utils.test.ts new file mode 100644 index 00000000..a381c588 --- /dev/null +++ b/test/unit/utils.test.ts @@ -0,0 +1,134 @@ +import { stat as statCallback, unlinkSync } from 'node:fs'; +import { platform } from 'node:os'; +import { promisify } from 'node:util'; +import { test } from '@japa/runner'; +import intoStream from 'into-stream'; +import nock from 'nock'; +import { + areObjectsEqual, + downloadToFile, + parsePathAndFormat, +} from '../../src/utils.js'; + +const stat = promisify(statCallback); + +test.group('⚒️ utils tests', (group) => { + group.setup(() => { + nock.disableNetConnect(); + if (!nock.isActive()) nock.activate(); + }); + + group.teardown(() => { + nock.restore(); + nock.cleanAll(); + nock.enableNetConnect(); + if (process.exitCode === 1) process.exitCode = 0; // This is required because @actions/core `setFailed` sets the exit code to 1 when we're testing errors. + }); + + test('🧪 areObjectsEqual() should correctly check object equality', ({ + assert, + }) => { + assert.plan(1); + const obj1 = { + a: 1, + b: true, + c: null, + d: undefined, + 45: -45.223232323, + }; + assert.ok( + areObjectsEqual(obj1, { ...obj1 }), + 'objects should be compared correctly.', + ); + }); + + test('🧪 downloadToFile() should download the give URL and write to given file location with given mode.', async ({ + assert, + }) => { + assert.plan(1); + const filePath = './test.sh'; + nock('http://localhost.test') + .get('/dummy-cc-reporter') + .reply(200, () => { + return intoStream(`#!/bin/bash + echo "hello" + `); + }); + await downloadToFile( + 'http://localhost.test/dummy-cc-reporter', + filePath, + 0o777, + ); + const stats = await stat(filePath); + assert.equal( + stats.mode, + platform() === 'win32' ? 33206 : 33261, + 'downloaded file should exist and have executable permissions on valid platforms.', + ); + unlinkSync(filePath); + nock.cleanAll(); + }); + + test('🧪 parsePathAndFormat() should correctly parse path patterns and formats correctly on Windows.', async ({ + assert, + }) => { + assert.plan(1); + const fixture = + 'C:\\Users\\gp\\Projects\\codeclimate-action\\test\\*.lcov:lcov' as const; + const expected = { + format: 'lcov', + pattern: 'C:\\Users\\gp\\Projects\\codeclimate-action\\test\\*.lcov', + }; + const result = parsePathAndFormat(fixture); + assert.strictEqual( + result, + expected, + 'path patterns and formats should be correctly parsed on Windows', + ); + }).skip( + platform() !== 'win32', + `Skipping because this test is only for Windows, but the current OS is ${platform()}`, + ); + + test('🧪 parsePathAndFormat() should correctly parse path patterns and formats correctly on macOS.', async ({ + assert, + }) => { + assert.plan(1); + const fixture = + '/Users/gp/Projects/codeclimate-action/test/*.lcov:lcov' as const; + const expected = { + format: 'lcov', + pattern: '/Users/gp/Projects/codeclimate-action/test/*.lcov', + }; + const result = parsePathAndFormat(fixture); + assert.deepEqual( + result, + expected, + 'path patterns and formats should be correctly parsed on macOS', + ); + }).skip( + platform() !== 'darwin', + `Skipping because this test is only for macOS, but the current OS is ${platform()}`, + ); + + test('🧪 parsePathAndFormat() should correctly parse path patterns and formats correctly on Linux.', async ({ + assert, + }) => { + assert.plan(1); + const fixture = + '/home/gp/Projects/codeclimate-action/test/*.lcov:lcov' as const; + const expected = { + format: 'lcov', + pattern: '/home/gp/Projects/codeclimate-action/test/*.lcov', + }; + const result = parsePathAndFormat(fixture); + assert.deepEqual( + result, + expected, + 'path patterns and formats should be correctly parsed on Linux', + ); + }).skip( + platform() !== 'linux', + `Skipping because this test is only for Linux, but the current OS is ${platform()}`, + ); +}); diff --git a/test/utils.test.ts b/test/utils.test.ts deleted file mode 100644 index 70acecc5..00000000 --- a/test/utils.test.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { stat as statCallback, unlinkSync } from 'node:fs'; -import { platform } from 'node:os'; -import { promisify } from 'node:util'; -import nock from 'nock'; -import t from 'tap'; -import toReadableStream from 'to-readable-stream'; -import { - areObjectsEqual, - downloadToFile, - parsePathAndFormat, -} from '../src/utils.js'; - -const stat = promisify(statCallback); - -t.test('🛠 setup', (t) => { - nock.disableNetConnect(); - if (!nock.isActive()) nock.activate(); - t.end(); -}); - -t.test('🧪 areObjectsEqual() should correctly check object equality', (t) => { - t.plan(1); - const obj1 = { - a: 1, - b: true, - c: null, - d: undefined, - 45: -45.223232323, - }; - t.ok( - areObjectsEqual(obj1, { ...obj1 }), - 'objects should be compared correctly.', - ); - t.end(); -}); - -t.test( - '🧪 downloadToFile() should download the give URL and write to given file location with given mode.', - async (t) => { - t.plan(1); - const filePath = './test.sh'; - nock('http://localhost.test') - .get('/dummy-cc-reporter') - .reply(200, () => { - return toReadableStream(`#!/bin/bash -echo "hello" -`); - }); - await downloadToFile( - 'http://localhost.test/dummy-cc-reporter', - filePath, - 0o777, - ); - const stats = await stat(filePath); - t.equal( - stats.mode, - platform() === 'win32' ? 33206 : 33261, - 'downloaded file should exist and have executable permissions on valid platforms.', - ); - unlinkSync(filePath); - nock.cleanAll(); - t.end(); - }, -); - -t.test( - '🧪 parsePathAndFormat() should correctly parse path patterns and formats correctly on Windows.', - { - skip: - platform() !== 'win32' - ? `Skipping because this test is only for Windows, but the current OS is ${platform()}` - : undefined, - }, - async (t) => { - t.plan(1); - const fixture = - 'C:\\Users\\gp\\Projects\\codeclimate-action\\test\\*.lcov:lcov' as const; - const expected = { - format: 'lcov', - pattern: 'C:\\Users\\gp\\Projects\\codeclimate-action\\test\\*.lcov', - }; - const result = parsePathAndFormat(fixture); - t.strictSame( - result, - expected, - 'path patterns and formats should be correctly parsed on Windows', - ); - t.end(); - }, -); - -t.test( - '🧪 parsePathAndFormat() should correctly parse path patterns and formats correctly on macOS.', - { - skip: - platform() !== 'darwin' - ? `Skipping because this test is only for macOS, but the current OS is ${platform()}` - : undefined, - }, - async (t) => { - t.plan(1); - const fixture = - '/Users/gp/Projects/codeclimate-action/test/*.lcov:lcov' as const; - const expected = { - format: 'lcov', - pattern: '/Users/gp/Projects/codeclimate-action/test/*.lcov', - }; - const result = parsePathAndFormat(fixture); - t.strictSame( - result, - expected, - 'path patterns and formats should be correctly parsed on macOS', - ); - t.end(); - }, -); - -t.test( - '🧪 parsePathAndFormat() should correctly parse path patterns and formats correctly on Linux.', - { - skip: - platform() !== 'linux' - ? `Skipping because this test is only for Linux, but the current OS is ${platform()}` - : undefined, - }, - async (t) => { - t.plan(1); - const fixture = - '/home/gp/Projects/codeclimate-action/test/*.lcov:lcov' as const; - const expected = { - format: 'lcov', - pattern: '/home/gp/Projects/codeclimate-action/test/*.lcov', - }; - const result = parsePathAndFormat(fixture); - t.strictSame( - result, - expected, - 'path patterns and formats should be correctly parsed on Linux', - ); - t.end(); - }, -); - -t.test('💣 teardown', (t) => { - nock.restore(); - nock.cleanAll(); - nock.enableNetConnect(); - if (process.exitCode === 1) process.exitCode = 0; // This is required because @actions/core `setFailed` sets the exit code to 1 when we're testing errors. - t.end(); -}); diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..36d8b90f --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": [ + "./tsconfig.json" + ], + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/tsconfig.json b/tsconfig.json index 25d522d9..98424e07 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,13 +5,15 @@ "@tsconfig/strictest/tsconfig.json" ], "compilerOptions": { - "outDir": "./lib", /* Redirect output structure to the directory. */ - "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - "rootDirs": ["./src", "./test"] /* List of root folders whose combined content represents the structure of the project at runtime. */ + "outDir": "./lib", + "rootDirs": [ + "./bin", + "./src", + "./test" + ], }, "exclude": [ - "node_modules", - "**/*.test.ts", - "coverage/" + "./coverage", + "./lib" ] } diff --git a/tsconfig.test.json b/tsconfig.test.json deleted file mode 100644 index 908e1c63..00000000 --- a/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "include": [ - "./test/*.test.ts" - ] -}