diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index ea7e207d..7f1621c2 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -61,7 +61,7 @@ jobs: - name: Calculate base code coverage run: | - export CUR_COVER=$(npx c8 tap | xargs -0 node -p 'parseInt(process.argv[1].split("\nAll files")[1].split("|")[1].trim(), 10)') + export CUR_COVER=$(npx tap | xargs -0 node -p 'parseInt(process.argv[1].split("\nAll files")[1].split("|")[1].trim(), 10)') echo "CUR_COVER=$CUR_COVER" >> $GITHUB_ENV - name: Checkout PR branch @@ -75,7 +75,7 @@ jobs: - name: Calculate PR code coverage run: | - export PR_COVER=$(npx c8 tap | xargs -0 node -p 'parseInt(process.argv[1].split("\nAll files")[1].split("|")[1].trim(), 10)') + export PR_COVER=$(npx tap | xargs -0 node -p 'parseInt(process.argv[1].split("\nAll files")[1].split("|")[1].trim(), 10)') echo "PR_COVER=$PR_COVER" >> $GITHUB_ENV - name: Verify code coverage. If your reading this and the step has failed, please add tests to cover your changes. diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a1ddc312..96953d41 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -93,13 +93,23 @@ jobs: - name: Transpile TypeScript run: npm run prepare + - name: Setup v14.x-compatible tap + if: "${{ matrix.node-version == 'v14.x' }}" + run: npm uninstall tap && npm install tap@16 && npx npm@10 pkg delete tap + - name: Run Tests - run: npx c8 tap -c -t0 -o test_results.tap + if: "${{ matrix.node-version != 'v14.x' }}" + run: npx tap -c -t0 -o test_results.tap + timeout-minutes: 5 + + - name: Run Tests v14.x + if: "${{ matrix.node-version == 'v14.x' }}" + run: npx tap -c -t0 --no-coverage --no-ts --node-arg="--require" --node-arg="./scripts/tap16-adapter.js" --node-arg="--no-warnings" --node-arg="--loader" --node-arg="ts-node/esm" timeout-minutes: 5 - name: Convert test output to XML if: ${{ (github.event_name == 'schedule' || github.event_name == 'push') && always() }} - run: cat test_results.tap | npx tap - --reporter=xunit > sponge_log.xml + run: cat test_results.tap | npx tap - --reporter=junit > sponge_log.xml - name: FlakyBot (Linux) # only run flakybot on periodic (schedule) and continuous (push) events @@ -231,12 +241,12 @@ jobs: SQLSERVER_USER: '${{ steps.secrets.outputs.SQLSERVER_USER }}' SQLSERVER_PASS: '${{ steps.secrets.outputs.SQLSERVER_PASS }}' SQLSERVER_DB: '${{ steps.secrets.outputs.SQLSERVER_DB }}' - run: npx tap -c -t0 --no-coverage system-test -o test_results.tap + run: npx tap -c -t0 --disable-coverage --allow-empty-coverage system-test -o test_results.tap timeout-minutes: 5 - name: Convert test output to XML if: ${{ (github.event_name == 'schedule' || github.event_name == 'push') && always() }} - run: cat test_results.tap | npx tap - --reporter=xunit > sponge_log.xml + run: cat test_results.tap | npx tap - --reporter=junit > sponge_log.xml - name: FlakyBot (Linux) # only run flakybot on periodic (schedule) and continuous (push) events diff --git a/package-lock.json b/package-lock.json index 029ebdfa..d301bfa1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,29 +9,30 @@ "version": "1.1.0", "license": "Apache-2.0", "dependencies": { - "@googleapis/sqladmin": "^10.1.1", - "gaxios": "^6.1.0", - "google-auth-library": "^9.0.0", + "@googleapis/sqladmin": "^11.0.0", + "gaxios": "^6.1.1", + "google-auth-library": "^9.2.0", + "mysql": "^2.18.1", "p-throttle": "^5.1.0" }, "devDependencies": { - "@types/node": "^20.4.9", - "@types/pg": "^8.10.1", - "@types/semver": "^7.5.0", - "@types/tap": "^15.0.8", - "@types/tedious": "^4.0.9", - "@typescript-eslint/eslint-plugin": "^6.3.0", - "c8": "^8.0.0", - "eslint-plugin-prettier": "^5.0.0", - "gts": "^5.0.0", - "mysql2": "^3.2.0", - "nock": "^13.3.0", + "@types/node": "^20.9.0", + "@types/pg": "^8.10.9", + "@types/semver": "^7.5.5", + "@types/tap": "^15.0.11", + "@types/tedious": "^4.0.14", + "@typescript-eslint/eslint-plugin": "^6.11.0", + "c8": "^8.0.1", + "eslint-plugin-prettier": "^5.0.1", + "gts": "^5.2.0", + "mysql2": "^3.6.3", + "nock": "^13.3.8", "pg": "^8.10.0", "semver": "^7.5.1", - "tap": "^18.0.0", - "tedious": "^16.1.0", + "tap": "^18.5.8", + "tedious": "^16.6.0", "ts-node": "^10.9.1", - "typescript": "^5.1.6" + "typescript": "^5.2.2" }, "engines": { "node": ">=14" @@ -721,9 +722,9 @@ } }, "node_modules/@googleapis/sqladmin": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@googleapis/sqladmin/-/sqladmin-10.1.1.tgz", - "integrity": "sha512-doUaY+htE65r18z4Ts4eRp/Ft5/B/xvLhu743LAibaOHJa8ucOMc4acWgrvizp29VlPt3SQ9h20MAYXCstnfcg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@googleapis/sqladmin/-/sqladmin-11.0.0.tgz", + "integrity": "sha512-VEUhjrsAa8HjSa/SnfnFeJDJJ3err7UV7qySlcIpwEyeZjJwJk/EvJVk81tpviHhr2h8TK6/WDX3FCjkCGYPGA==", "dependencies": { "googleapis-common": "^7.0.0" }, @@ -861,9 +862,9 @@ } }, "node_modules/@isaacs/ts-node-temp-fork-for-pr-2009": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/@isaacs/ts-node-temp-fork-for-pr-2009/-/ts-node-temp-fork-for-pr-2009-10.9.1.tgz", - "integrity": "sha512-MY4rUonz835NsTbd4dcgKZvZFYX9IkLnYFZV9M7GQV8t39fawafLin/Qw6VXD4yfMs4HcBq8P3ddeU0QHMH1YQ==", + "version": "10.9.5", + "resolved": "https://registry.npmjs.org/@isaacs/ts-node-temp-fork-for-pr-2009/-/ts-node-temp-fork-for-pr-2009-10.9.5.tgz", + "integrity": "sha512-hEDlwpHhIabtB+Urku8muNMEkGui0LVGlYLS3KoB9QBDf0Pw3r7q0RrfoQmFuk8CvRpGzErO3/vLQd9Ys+/g4g==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -1030,26 +1031,15 @@ } }, "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" + "semver": "^7.3.5" }, "engines": { - "node": ">= 14" + "node": "14 || >=16.14" } }, "node_modules/@npmcli/fs": { @@ -1093,10 +1083,13 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, "engines": { "node": "14 || >=16.14" } @@ -1178,14 +1171,14 @@ } }, "node_modules/@npmcli/run-script": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.1.tgz", - "integrity": "sha512-Od/JMrgkjZ8alyBE0IzeqZDiF1jgMez9Gkc/OYrCkHHiXNwM0wc6s7+h+xM7kYDZkS0tAoOLr9VvygyE5+2F7g==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", + "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^9.0.0", + "node-gyp": "^10.0.0", "read-package-json-fast": "^3.0.0", "which": "^4.0.0" }, @@ -1275,9 +1268,9 @@ } }, "node_modules/@sigstore/sign": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.1.0.tgz", - "integrity": "sha512-4VRpfJxs+8eLqzLVrZngVNExVA/zAhVbi4UT4zmtLi4xRd7vz5qie834OgkrGsLlLB1B2nz/3wUxT1XAUBe8gw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.0.tgz", + "integrity": "sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA==", "dev": true, "dependencies": { "@sigstore/bundle": "^2.1.0", @@ -1288,28 +1281,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", - "dev": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/@sigstore/tuf": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.2.0.tgz", @@ -1324,109 +1295,109 @@ } }, "node_modules/@tapjs/after": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/after/-/after-1.1.13.tgz", - "integrity": "sha512-E2yGUayyCmgtyGDGIcejcVZjdcTmqxEfQexS/TTdELE2cCVYDlkTog5sRJVW02fQUyKrqta0X6bfUjT5+VtO9g==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/after/-/after-1.1.16.tgz", + "integrity": "sha512-/KwElRYMMN4pKDP0VT1a5d9RLsnV/HrnpvBbDJiavs816wQOEOwMt1q4rXVU2XO6cSpXn0cm77xBLDkkBlJQWA==", "dev": true, "dependencies": { "is-actual-promise": "^1.0.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/after-each": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/after-each/-/after-each-1.1.13.tgz", - "integrity": "sha512-KnX5QCz+f0Qvm8ZkN+/QugSqbNznVTisNu+xbYWY+m2sOhUtyNYSsqvxcKEhpBTS+fRjTPl1wU5ocZv5dDUMEA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/after-each/-/after-each-1.1.16.tgz", + "integrity": "sha512-TlhGKfX+3GHwqGhMxNWZ50xb8vfwp2+kx0COTbuGLrwcCgwmpFPU/r/7td03BOtdCV2J1yKFxGiRDvZyowZLyg==", "dev": true, "dependencies": { "function-loop": "^4.0.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/asserts": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/asserts/-/asserts-1.1.13.tgz", - "integrity": "sha512-nX9Dzkz4BToVw6Foi/naQO2oId4kvu1nOd9Brql75TrLOhSIf0BNhmUtedPouzefqHTnOQcOK+wxPqm2mUCvHQ==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/asserts/-/asserts-1.1.16.tgz", + "integrity": "sha512-gf37N6VMv7iuaomB8Yr+3VyuPS77kXy6Uw2n2AHsiU47Q0eNodjrN0d2G+glfrXfD3zLbsLuQHx4x6IsAsgq7Q==", "dev": true, "dependencies": { - "@tapjs/stack": "1.2.6", + "@tapjs/stack": "1.2.7", "is-actual-promise": "^1.0.0", - "tcompare": "6.4.3", + "tcompare": "6.4.4", "trivial-deferred": "^2.0.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/before": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/before/-/before-1.1.13.tgz", - "integrity": "sha512-IBgbKmc5Mqw+4JX0A52ZSn3ycwIQSNkqfOEjzELrEqhLuzeyQnb99P6QZKYfcVDaMhPqeYHRO+ziJOgtbAgPkQ==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/before/-/before-1.1.16.tgz", + "integrity": "sha512-3hO7eQbL1Ac8OgPq9+nBuQS4cz/eVGcaPDs0cTcTy3NYbhCrp4MGTpRtKxF4Cds1Y/rHAipB81MhZrmG7xBjlg==", "dev": true, "dependencies": { "is-actual-promise": "^1.0.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/before-each": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/before-each/-/before-each-1.1.13.tgz", - "integrity": "sha512-wprmLLmX9QowI9Z5eNtQ8/PRpLHzip99PxukOR59V2839Ypmwu9e1vVfrSIU1F6u6CcUrb80SaJDf2Izm8hmBg==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/before-each/-/before-each-1.1.16.tgz", + "integrity": "sha512-yJAt0yGOQFnozmm2fQSfAELp/hMzudYOr4udANZ/1RIVJYXHThj0qrUZP9nEkXMWK4wRQytOInt1jEwXR/cFfQ==", "dev": true, "dependencies": { "function-loop": "^4.0.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/config": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@tapjs/config/-/config-2.4.9.tgz", - "integrity": "sha512-3coHlkF0XJn59ixl0ln2vRn2SyYPUXyoLDixu4jP/C38ZA7yYTlpsDYuovNiMhXUgJi1AMbWCqASmYL49rn8Sw==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@tapjs/config/-/config-2.4.13.tgz", + "integrity": "sha512-gnRSrHoISe7bXTa7ew2YwkXh9XmLc0GwrgwUcwq6Pyz/aqdT8NdvwDZb77uv7VQyJiZk5BkziNsn4qTKsBpOGw==", "dev": true, "dependencies": { - "@tapjs/core": "1.4.2", - "@tapjs/test": "1.3.13", + "@tapjs/core": "1.4.5", + "@tapjs/test": "1.3.16", "chalk": "^5.2.0", "jackspeak": "^2.3.6", "polite-json": "^4.0.1", - "tap-yaml": "2.2.0", + "tap-yaml": "2.2.1", "walk-up-path": "^3.0.1" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2", - "@tapjs/test": "1.3.13" + "@tapjs/core": "1.4.5", + "@tapjs/test": "1.3.16" } }, "node_modules/@tapjs/config/node_modules/chalk": { @@ -1442,26 +1413,26 @@ } }, "node_modules/@tapjs/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@tapjs/core/-/core-1.4.2.tgz", - "integrity": "sha512-+mI2R8l/LjRrf7VLcme7jumi9MZb8vx3ARrheuS/djaXdcUd7lWHMjJSvCvnWhV5twTTUsfnc7GytWeFL3N4vA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@tapjs/core/-/core-1.4.5.tgz", + "integrity": "sha512-vvLrM75t1/Yq2MlH1x3jfJPdPs4ArR+tFTpzNgQ+PF50x0PTDup1sVj7ZhZbNY4zeQFsvnVtoReptr3FsMix7Q==", "dev": true, "dependencies": { - "@tapjs/processinfo": "^3.1.5", - "@tapjs/stack": "1.2.6", - "@tapjs/test": "1.3.13", + "@tapjs/processinfo": "^3.1.6", + "@tapjs/stack": "1.2.7", + "@tapjs/test": "1.3.16", "async-hook-domain": "^4.0.1", "diff": "^5.1.0", "is-actual-promise": "^1.0.0", "minipass": "^7.0.3", "signal-exit": "4.1", - "tap-parser": "15.3.0", - "tap-yaml": "2.2.0", - "tcompare": "6.4.3", + "tap-parser": "15.3.1", + "tap-yaml": "2.2.1", + "tcompare": "6.4.4", "trivial-deferred": "^2.0.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" } }, "node_modules/@tapjs/core/node_modules/diff": { @@ -1486,52 +1457,52 @@ } }, "node_modules/@tapjs/error-serdes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@tapjs/error-serdes/-/error-serdes-1.2.0.tgz", - "integrity": "sha512-Lt7kHWxILVCkfiRbsIZW5sfZ79+CmS1a+mp41dgp5oiiO2TJGBSpEWptD+bIfk9tegtU4wcMUwnStymfTKl4Xw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@tapjs/error-serdes/-/error-serdes-1.2.1.tgz", + "integrity": "sha512-/7eLEcrGo+Qz3eWrjkhDC+VSEOjabkkzr9eRADeU+OLFeZaik8L/GRk0SGhnp4YsQkv0jcNV00A42bEx2HIZcw==", "dev": true, "dependencies": { "minipass": "^7.0.3" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@tapjs/filter": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@tapjs/filter/-/filter-1.2.13.tgz", - "integrity": "sha512-HahbPSl5gkJ12pIRqMq595A0zNMaTSUvQyLYtDX8GhQM7YanCMLPPPfxg5SFk2p7XinxN5HUiZ5i+Jh1W9tpeQ==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@tapjs/filter/-/filter-1.2.16.tgz", + "integrity": "sha512-TiOjFMy+Sg5Lnm5pzUcjgpyw19bEg0WejLGpml0DPQi/OEVYlazu2lcDQFRgpRBhvYlOc7we9nul2y2a3Jh8PQ==", "dev": true, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/fixture": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@tapjs/fixture/-/fixture-1.2.13.tgz", - "integrity": "sha512-PPw4EqgIwOzoPjaPSv4O6l7e5RKLEhJH1CbrTqdaM2YxuLgC9Gv9AN0LxJsXsfTnJgoWodzC29dE7JB5RJINuQ==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@tapjs/fixture/-/fixture-1.2.16.tgz", + "integrity": "sha512-9+QUkGW4CoSR4cKO3vLe9YYsBgD9wCRvta5jxquTWk9VJiVQZ3pKIqaSULB47kUZbtERorhvI7J5YCYWnVbF7A==", "dev": true, "dependencies": { "mkdirp": "^3.0.0", "rimraf": "^5.0.5" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/fixture/node_modules/brace-expansion": { @@ -1627,66 +1598,66 @@ } }, "node_modules/@tapjs/intercept": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@tapjs/intercept/-/intercept-1.2.13.tgz", - "integrity": "sha512-/miqU/GK+AFW1y7Wc3N/1OpcFYK++voQ/Ai4u2cORbcxnUt0cWBxHPOZOyepZqwX88sPwr1NdrCV1/B3BbgPWw==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@tapjs/intercept/-/intercept-1.2.16.tgz", + "integrity": "sha512-Mgw3ib7bu2cFjbeujFw6y7CcEq1mNd/EQhrg1L9Q96bETtp9YNSlox4Z7MKmTEtnk9fzuCIVs7T9QbI8eq2k7w==", "dev": true, "dependencies": { - "@tapjs/after": "1.1.13", - "@tapjs/stack": "1.2.6" + "@tapjs/after": "1.1.16", + "@tapjs/stack": "1.2.7" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/mock": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@tapjs/mock/-/mock-1.2.11.tgz", - "integrity": "sha512-fXMvbQa04qfnNjgGN/cKWj52flYpN8J18/gkWQDbiOLieC1QJVtF1tkTohL602mqVbxn+9rOpTPjDvyJhi65zg==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@tapjs/mock/-/mock-1.2.14.tgz", + "integrity": "sha512-HnXUmkn3xk4gzoMb3s77EK2CJaBzAoi1hzyyE6abBJf8dnLCid4xUOs+H4KybWllKcwwIUr0yzKmXJl7eCWVbQ==", "dev": true, "dependencies": { - "@tapjs/after": "1.1.13", - "@tapjs/stack": "1.2.6", - "resolve-import": "^1.4.4", + "@tapjs/after": "1.1.16", + "@tapjs/stack": "1.2.7", + "resolve-import": "^1.4.5", "walk-up-path": "^3.0.1" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/node-serialize": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@tapjs/node-serialize/-/node-serialize-1.2.2.tgz", - "integrity": "sha512-ycPPYNxRsj/AFoqaGY5P38nehMVcwMAz7U0uRO7/2dh4vxUQcKyIBh5KNhB3z/EEas5wiQip+YJ1CW1fAx/PHg==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@tapjs/node-serialize/-/node-serialize-1.2.5.tgz", + "integrity": "sha512-y7QS5Sev6QQ0O+sx5WjY11XoUBzuNdSNDwVRxrj1qwTuigRVj+1ePWutP80pn7bE/r2G+2L2IHuEsMDRLCgulw==", "dev": true, "dependencies": { - "@tapjs/error-serdes": "1.2.0", - "@tapjs/stack": "1.2.6", - "tap-parser": "15.3.0" + "@tapjs/error-serdes": "1.2.1", + "@tapjs/stack": "1.2.7", + "tap-parser": "15.3.1" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/processinfo": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@tapjs/processinfo/-/processinfo-3.1.5.tgz", - "integrity": "sha512-KCx0Dbatmuja9soLFFK1asDwodz+16gwHL9QWiziz83b7LK4x5h9kiUbbhTi3I3wtKREeaN8caNA0Z2m6Yxsag==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@tapjs/processinfo/-/processinfo-3.1.6.tgz", + "integrity": "sha512-ktDsaf79wJsLaoG1Pp+stHSRf6a1k/JydoRAaYVG5iJnd3DooL6yewZsciUi2yiN/WQc5tAXCIFTXL4uXGB8LA==", "dev": true, "dependencies": { "pirates": "^4.0.5", @@ -1720,13 +1691,13 @@ } }, "node_modules/@tapjs/reporter": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@tapjs/reporter/-/reporter-1.3.9.tgz", - "integrity": "sha512-nMakS5iE8b8p5eQBiwqsPvakreBXWYe+qNmgNlSSmXpKhOXYq4gvL8i4K1/ilJIIA/SzSSBz8ZPA8SRZTs0/aA==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@tapjs/reporter/-/reporter-1.3.14.tgz", + "integrity": "sha512-rcocjP6luA2XEjWkcG3yPolUvWKALdixOtBztAJ/r+P+iFRwyngV2DO9HM9ThLVRTQxj8f73EamoE1llxwD2YQ==", "dev": true, "dependencies": { - "@tapjs/config": "2.4.9", - "@tapjs/stack": "1.2.6", + "@tapjs/config": "2.4.13", + "@tapjs/stack": "1.2.7", "chalk": "^5.2.0", "ink": "^4.4.1", "minipass": "^7.0.3", @@ -1735,18 +1706,18 @@ "prismjs-terminal": "^1.2.3", "react": "^18.2.0", "string-length": "^6.0.0", - "tap-parser": "15.3.0", - "tap-yaml": "2.2.0", - "tcompare": "6.4.3" + "tap-parser": "15.3.1", + "tap-yaml": "2.2.1", + "tcompare": "6.4.4" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/reporter/node_modules/chalk": { @@ -1768,19 +1739,19 @@ "dev": true }, "node_modules/@tapjs/run": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/@tapjs/run/-/run-1.4.9.tgz", - "integrity": "sha512-98wXYtgsuFr6CvjI1d7yDLnG0oSCMgy8Avg/UYo3dcYUbobMeMXk3/VOx4/f6eGTBEtaVT8VCzz3HIOEdpD1rA==", - "dev": true, - "dependencies": { - "@tapjs/after": "1.1.13", - "@tapjs/before": "1.1.13", - "@tapjs/config": "2.4.9", - "@tapjs/processinfo": "^3.1.5", - "@tapjs/reporter": "1.3.9", - "@tapjs/spawn": "1.1.13", - "@tapjs/stdin": "1.1.13", - "@tapjs/test": "1.3.13", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@tapjs/run/-/run-1.4.15.tgz", + "integrity": "sha512-yeG9BLfRYK1ScDD4M50oF/T7mkNVtQcSEG8twgxxHM3zGlg4hubNBPYh4VXffotuAk3jTjm0jAaEgFbypZLwFQ==", + "dev": true, + "dependencies": { + "@tapjs/after": "1.1.16", + "@tapjs/before": "1.1.16", + "@tapjs/config": "2.4.13", + "@tapjs/processinfo": "^3.1.6", + "@tapjs/reporter": "1.3.14", + "@tapjs/spawn": "1.1.16", + "@tapjs/stdin": "1.1.16", + "@tapjs/test": "1.3.16", "c8": "^8.0.1", "chalk": "^5.3.0", "chokidar": "^3.5.3", @@ -1790,13 +1761,13 @@ "mkdirp": "^3.0.1", "opener": "^1.5.2", "pacote": "^17.0.3", - "resolve-import": "^1.4.4", + "resolve-import": "^1.4.5", "rimraf": "^5.0.5", "semver": "^7.5.4", "signal-exit": "^4.1.0", - "tap-parser": "15.3.0", - "tap-yaml": "2.2.0", - "tcompare": "6.4.3", + "tap-parser": "15.3.1", + "tap-yaml": "2.2.1", + "tcompare": "6.4.4", "trivial-deferred": "^2.0.0", "which": "^4.0.0" }, @@ -1804,13 +1775,13 @@ "tap-run": "dist/esm/index.js" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/run/node_modules/brace-expansion": { @@ -1942,90 +1913,90 @@ } }, "node_modules/@tapjs/snapshot": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@tapjs/snapshot/-/snapshot-1.2.13.tgz", - "integrity": "sha512-/vW3kOxNA1vclsEU87A5vZ7edRbrL1Hlm7LauJwRAvAgdW2VrEcc1ivyCMbWvYi11csGu1MM9A2Poo/aOhzQ/Q==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@tapjs/snapshot/-/snapshot-1.2.16.tgz", + "integrity": "sha512-4Da9TXAQ3ni+JC8AfzDKRQG6cIjT/LxTTGmVDK4/Fe4NubdNKw/A76Gvl9xPUIlqW1vNZVGVN/0KruEDKJ4xkQ==", "dev": true, "dependencies": { "is-actual-promise": "^1.0.0", - "tcompare": "6.4.3", + "tcompare": "6.4.4", "trivial-deferred": "^2.0.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/spawn": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/spawn/-/spawn-1.1.13.tgz", - "integrity": "sha512-s2byTuuyyPv+8uI4xSspFhiFPddi/Bwz2a/RHQVm3IKuvO0gW9KA53J8PEjWIRXLFNgf5X0xWIYGgMXeklYN/w==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/spawn/-/spawn-1.1.16.tgz", + "integrity": "sha512-Y0/WNlFp8kkRwKNyOqYUrIwwY2sLkegakvhtcJsg9eg/P4CC9lnh+zaSEfgNGJb24S4qeWOOnJ/rQ68bK9HVYg==", "dev": true, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/stack": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@tapjs/stack/-/stack-1.2.6.tgz", - "integrity": "sha512-us73FMZytpcvYT/gOSDDKHk/LLZQZ/bBLoz48VcEE5EFQmF0EELhNOlyg4Rrvj8DmuYuFjiliidiV/FB1Fchaw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@tapjs/stack/-/stack-1.2.7.tgz", + "integrity": "sha512-7qUDWDmd+y7ZQ0vTrDTvFlWnJ+ND32NemS5HVuT1ZggHtBwJ62PQHIyCx/B5RopETBb6NvFPfUE21yTiex9Jkw==", "dev": true, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@tapjs/stdin": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/stdin/-/stdin-1.1.13.tgz", - "integrity": "sha512-ilamAMcQ7TPzuB4fVLtTyCYaqU3bAh1YLssmwtcYwRE0J4szNIFLMsduVjWLNGnjViKRHI6x1iHGOZg2IwTXug==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/stdin/-/stdin-1.1.16.tgz", + "integrity": "sha512-kP22n5kaoMcAp+elESvRCg/fodfeefsbtacTOGAfXnHLK+eh8XBSz1SwDmyaeQ4/C3F6SMQ8+8ZeybMcbeLEGQ==", "dev": true, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/test": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@tapjs/test/-/test-1.3.13.tgz", - "integrity": "sha512-eqlrFgdMwOuqMeMGWMButPmas7q5Z0yEqmyBZIsjKk246wN1GUKIwGxX+K0THMBHaiSKW4c/PvXpMynZyywqbw==", - "dev": true, - "dependencies": { - "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.1", - "@tapjs/after": "1.1.13", - "@tapjs/after-each": "1.1.13", - "@tapjs/asserts": "1.1.13", - "@tapjs/before": "1.1.13", - "@tapjs/before-each": "1.1.13", - "@tapjs/filter": "1.2.13", - "@tapjs/fixture": "1.2.13", - "@tapjs/intercept": "1.2.13", - "@tapjs/mock": "1.2.11", - "@tapjs/node-serialize": "1.2.2", - "@tapjs/snapshot": "1.2.13", - "@tapjs/spawn": "1.1.13", - "@tapjs/stdin": "1.1.13", - "@tapjs/typescript": "1.3.2", - "@tapjs/worker": "1.1.13", + "version": "1.3.16", + "resolved": "https://registry.npmjs.org/@tapjs/test/-/test-1.3.16.tgz", + "integrity": "sha512-HalYruL4tpTgKVJQwkTh/vw5Mt7sEVXXoS7bTik8tyPr9wQ7UXTRPB2EErna89mhhRc0hYU4NYXlwzS1UHiQkQ==", + "dev": true, + "dependencies": { + "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.5", + "@tapjs/after": "1.1.16", + "@tapjs/after-each": "1.1.16", + "@tapjs/asserts": "1.1.16", + "@tapjs/before": "1.1.16", + "@tapjs/before-each": "1.1.16", + "@tapjs/filter": "1.2.16", + "@tapjs/fixture": "1.2.16", + "@tapjs/intercept": "1.2.16", + "@tapjs/mock": "1.2.14", + "@tapjs/node-serialize": "1.2.5", + "@tapjs/snapshot": "1.2.16", + "@tapjs/spawn": "1.1.16", + "@tapjs/stdin": "1.1.16", + "@tapjs/typescript": "1.3.5", + "@tapjs/worker": "1.1.16", "glob": "^10.3.10", "jackspeak": "^2.3.6", "mkdirp": "^3.0.0", - "resolve-import": "^1.4.4", + "resolve-import": "^1.4.5", "rimraf": "^5.0.5", "sync-content": "^1.0.1", - "tap-parser": "15.3.0", + "tap-parser": "15.3.1", "tshy": "^1.2.2", "typescript": "5.2" }, @@ -2033,10 +2004,10 @@ "generate-tap-test-class": "scripts/build.mjs" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/test/node_modules/brace-expansion": { @@ -2132,30 +2103,30 @@ } }, "node_modules/@tapjs/typescript": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@tapjs/typescript/-/typescript-1.3.2.tgz", - "integrity": "sha512-R8E36Kd1ImufcygVzSbQt/rEgg5RIW+CvIBzJNmv1IczRoAVFo5/OElZwOThiko7CAxDMRJxI8Cla63uK3gsLA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@tapjs/typescript/-/typescript-1.3.5.tgz", + "integrity": "sha512-LoOHEJ1Bx3MWnh4+uIBXVobxkYNwFzJVnzl1tsLuX0jgGBIGtvmFwXDoM9MtcmO5m8WMZL9bMDT1NWPtcO0V6w==", "dev": true, "dependencies": { - "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.1" + "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.5" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tapjs/worker": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/worker/-/worker-1.1.13.tgz", - "integrity": "sha512-B/g1rdQcuOFdU6OeBHkdYUjzM6pbHo64nV+ckQNE7Atj4yzV0u7C+Emq+f7F+zItsGXaMm/a4Z7Zoliszy7YXw==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/worker/-/worker-1.1.16.tgz", + "integrity": "sha512-BVXyGnf3PMJ7hnwIgaheSpLESI8E9d95EBi8Ni/L3sObbxYR3xIPnhiwCEUCQOp6pkeo8z04T7nJdbQW3dslIA==", "dev": true, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "peerDependencies": { - "@tapjs/core": "1.4.2" + "@tapjs/core": "1.4.5" } }, "node_modules/@tootallnate/once": { @@ -2268,12 +2239,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", - "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", "dev": true, "dependencies": { - "undici-types": "~5.25.1" + "undici-types": "~5.26.4" } }, "node_modules/@types/normalize-package-data": { @@ -2283,9 +2254,9 @@ "dev": true }, "node_modules/@types/pg": { - "version": "8.10.7", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.7.tgz", - "integrity": "sha512-ksJqHipwYaSEHz9e1fr6H6erjoEdNNaOxwyJgPx9bNeaqOW3iWBQgVHfpwiSAoqGzchfc+ZyRLwEfeCcyYD3uQ==", + "version": "8.10.9", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.9.tgz", + "integrity": "sha512-UksbANNE/f8w0wOMxVKKIrLCbEMV+oM1uKejmwXr39olg4xqcfBDbXxObJAt6XxHbDa4XTKOlUEcEltXDX+XLQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -2294,40 +2265,40 @@ } }, "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", + "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", "dev": true }, "node_modules/@types/tap": { - "version": "15.0.10", - "resolved": "https://registry.npmjs.org/@types/tap/-/tap-15.0.10.tgz", - "integrity": "sha512-NcsQN3XkZ+xuhaUJjkfpQfJLpyLz/2+wlFKZ1bRK5B5Pe37ccotzkDo66jWjjwmARD5slzLC/KtSt7+gomvLSQ==", + "version": "15.0.11", + "resolved": "https://registry.npmjs.org/@types/tap/-/tap-15.0.11.tgz", + "integrity": "sha512-QzbxIsrK6yX3iWC2PXGX/Ljz5cGISDEuOGISMcckeSUKIJXzbsfJLF4LddoncZ+ELVZpO0X87KfRem4h+yBFXQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/tedious": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.13.tgz", - "integrity": "sha512-eCADRqah0uHMUNVHJ/0Yz4drscJ5tZ+IQ/i+nDs7/nR8R6RqLhJaplklvMe3EsMraxOWmp4mTqYi0Xo6ik1DpQ==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", + "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -2353,13 +2324,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", + "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2370,9 +2341,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2383,12 +2354,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2447,13 +2418,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", + "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -2474,9 +2445,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2487,13 +2458,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2514,12 +2485,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2573,17 +2544,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", + "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", "semver": "^7.5.4" }, "engines": { @@ -2598,13 +2569,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", + "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2615,9 +2586,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2628,13 +2599,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2655,12 +2626,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2690,10 +2661,13 @@ } }, "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/abort-controller": { "version": "3.0.0", @@ -2749,18 +2723,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -2854,39 +2816,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -3235,10 +3164,13 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, "engines": { "node": "14 || >=16.14" } @@ -3580,15 +3512,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3607,12 +3530,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -3890,12 +3807,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", @@ -4244,9 +4155,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", - "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", @@ -4728,29 +4639,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/gaxios": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.0.tgz", - "integrity": "sha512-EIHuesZxNyIkUGcTQKQPMICyOpDD/bi+LJIJx+NLsSGmnS7N+xCLRX5bi4e9yAu9AlSZdVq+qlyWWVuTh/483w==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", @@ -4939,17 +4831,16 @@ } }, "node_modules/google-auth-library": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", - "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.2.0.tgz", + "integrity": "sha512-1oV3p0JhNEhVbj26eF3FAJcv9MXXQt4S0wcvKZaDbl4oHq5V3UJoSbsGZGQNcjoCdhW4kDSwOs11wLlHog3fgQ==", "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.0.0", "gcp-metadata": "^6.0.0", "gtoken": "^7.0.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" + "jws": "^4.0.0" }, "engines": { "node": ">=14" @@ -5227,6 +5118,35 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/gts/node_modules/eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/gts/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -5336,12 +5256,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -5402,15 +5316,6 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5804,10 +5709,13 @@ "dev": true }, "node_modules/is-actual-promise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-actual-promise/-/is-actual-promise-1.0.0.tgz", - "integrity": "sha512-DWSmKTiEoY3Y9LGHG9TVnFgydCCu+3fLJi4rv3fpi0gL/lKoILekh/oF/nO3/Lq1l5Rqo+tQt5TWzxMmYIhWyg==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-actual-promise/-/is-actual-promise-1.0.1.tgz", + "integrity": "sha512-PlsL4tNv62lx5yN2HSqaRSTgIpUAPW7U6+crVB8HfWm5161rZpeqWbl0ZSqH2MAfRKXWSZVPRNbE/r8qPcb13g==", + "dev": true, + "dependencies": { + "tshy": "^1.7.0" + } }, "node_modules/is-array-buffer": { "version": "3.0.2", @@ -6493,6 +6401,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6522,197 +6431,69 @@ "dev": true }, "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", "dev": true, "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", + "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", "ssri": "^10.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/make-fetch-happen/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/make-fetch-happen/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-fetch-happen/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { "node": ">=10" @@ -7090,9 +6871,9 @@ } }, "node_modules/mysql2": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.6.0.tgz", - "integrity": "sha512-EWUGAhv6SphezurlfI2Fpt0uJEWLmirrtQR7SkbTHFC+4/mJBrPiSzHESHKAWKG7ALVD6xaG/NBjjd1DGJGQQQ==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.6.3.tgz", + "integrity": "sha512-qYd/1CDuW1KYZjD4tzg2O8YS3X/UWuGH8ZMHyMeggMTXL3yOdMisbwZ5SNkHzDGlZXKYLAvV8tMrEH+NUMz3fw==", "dev": true, "dependencies": { "denque": "^2.1.0", @@ -7187,14 +6968,13 @@ } }, "node_modules/nock": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.4.tgz", - "integrity": "sha512-DDpmn5oLEdCTclEqweOT4U7bEpuoifBMFUXem9sA4turDAZ5tlbrEoWqCorwXey8CaAw44mst5JOQeVNiwtkhw==", + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.8.tgz", + "integrity": "sha512-96yVFal0c/W1lG7mmfRe7eO+hovrhJYd2obzzOZ90f6fjpeU/XNvd9cYHZKZAQJumDfhXgoTpkpJ9pvMj+hqHw==", "dev": true, "dependencies": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.21", "propagate": "^2.0.0" }, "engines": { @@ -7227,43 +7007,140 @@ } }, "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", + "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "tar": "^6.1.2", - "which": "^2.0.2" + "which": "^4.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^12.13 || ^14.13 || >=16" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "dev": true, "dependencies": { - "abbrev": "^1.0.0" + "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-package-data": { @@ -7351,10 +7228,13 @@ } }, "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, "engines": { "node": "14 || >=16.14" } @@ -7404,28 +7284,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", - "dev": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -7438,21 +7296,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -7763,10 +7606,13 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, "engines": { "node": "14 || >=16.14" } @@ -8379,10 +8225,13 @@ } }, "node_modules/read-package-json/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, "engines": { "node": "14 || >=16.14" } @@ -8664,16 +8513,16 @@ } }, "node_modules/resolve-import": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/resolve-import/-/resolve-import-1.4.4.tgz", - "integrity": "sha512-+IccDyUypl5rHv25216cXu2m30flEoetrG8p4qDH3RsP53cytedI58Pz+pjCU4PAbxPOQgFkgmxTJLKI9tgf/g==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/resolve-import/-/resolve-import-1.4.5.tgz", + "integrity": "sha512-HXb4YqODuuXT7Icq1Z++0g2JmhgbUHSs3VT2xR83gqvAPUikYT2Xk+562KHQgiaNkbBOlPddYrDLsC44qQggzw==", "dev": true, "dependencies": { "glob": "^10.3.3", "walk-up-path": "^3.0.1" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -8946,12 +8795,6 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", "dev": true }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -9081,17 +8924,29 @@ } }, "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" }, "engines": { - "node": ">= 10" + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/spdx-correct": { @@ -9536,68 +9391,68 @@ "dev": true }, "node_modules/tap": { - "version": "18.5.2", - "resolved": "https://registry.npmjs.org/tap/-/tap-18.5.2.tgz", - "integrity": "sha512-Fd8JN1fwA5+CNwKxLf6zhBgMMJZKYWxBwi6551Y4uGU/IFrKvEsK/hYEbBsw+Ae335wkW96+gmnu2lHJh26CPw==", - "dev": true, - "dependencies": { - "@tapjs/after": "1.1.13", - "@tapjs/after-each": "1.1.13", - "@tapjs/asserts": "1.1.13", - "@tapjs/before": "1.1.13", - "@tapjs/before-each": "1.1.13", - "@tapjs/core": "1.4.2", - "@tapjs/filter": "1.2.13", - "@tapjs/fixture": "1.2.13", - "@tapjs/intercept": "1.2.13", - "@tapjs/mock": "1.2.11", - "@tapjs/node-serialize": "1.2.2", - "@tapjs/run": "1.4.9", - "@tapjs/snapshot": "1.2.13", - "@tapjs/spawn": "1.1.13", - "@tapjs/stdin": "1.1.13", - "@tapjs/test": "1.3.13", - "@tapjs/typescript": "1.3.2", - "@tapjs/worker": "1.1.13", - "resolve-import": "^1.4.4" + "version": "18.5.8", + "resolved": "https://registry.npmjs.org/tap/-/tap-18.5.8.tgz", + "integrity": "sha512-lTJXogAU/SQZVeCjHG8ozQSESRO7aD0THbA5G8El/OHv+ifFR8U0UdU5cZY8uMD6r8TYBt09tlb/gsXNVnrOXw==", + "dev": true, + "dependencies": { + "@tapjs/after": "1.1.16", + "@tapjs/after-each": "1.1.16", + "@tapjs/asserts": "1.1.16", + "@tapjs/before": "1.1.16", + "@tapjs/before-each": "1.1.16", + "@tapjs/core": "1.4.5", + "@tapjs/filter": "1.2.16", + "@tapjs/fixture": "1.2.16", + "@tapjs/intercept": "1.2.16", + "@tapjs/mock": "1.2.14", + "@tapjs/node-serialize": "1.2.5", + "@tapjs/run": "1.4.15", + "@tapjs/snapshot": "1.2.16", + "@tapjs/spawn": "1.1.16", + "@tapjs/stdin": "1.1.16", + "@tapjs/test": "1.3.16", + "@tapjs/typescript": "1.3.5", + "@tapjs/worker": "1.1.16", + "resolve-import": "^1.4.5" }, "bin": { "tap": "dist/esm/run.mjs" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/tap-parser": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-15.3.0.tgz", - "integrity": "sha512-R0yLuoC288K+gHtwcOhH7Af/8EocDglAyMpaASsmzNxV1chmq3v4juSAVhvMBbPx/pRVJYrPKe9Wsj9aaqMalQ==", + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-15.3.1.tgz", + "integrity": "sha512-hwAtXX5TBGt2MJeYvASc7DjP48PUzA7P8RTbLxQcgKCEH7ICD5IsRco7l5YvkzjHlZbUbeI9wzO8B4hw2sKgnQ==", "dev": true, "dependencies": { "events-to-array": "^2.0.3", - "tap-yaml": "2.2.0" + "tap-yaml": "2.2.1" }, "bin": { "tap-parser": "bin/cmd.cjs" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" } }, "node_modules/tap-yaml": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-2.2.0.tgz", - "integrity": "sha512-o8I7WDNiGpuF04tGAVaNYY5rX9waCtqw9A7Y0YVSQBGcFwNUJWUPLkr2lbhgLRTxc+Tpnw4xUXlIanZc+ZAGnw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-2.2.1.tgz", + "integrity": "sha512-ovZuUMLAIH59jnFHXKEGJ+WyDYl6Cuduwg9qpvnqkZOUA1nU84q02Sry1HT0KXcdv2uB91bEKKxnIybBgrb6oA==", "dev": true, "dependencies": { "yaml": "^2.3.0", "yaml-types": "^0.3.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" } }, "node_modules/tar": { @@ -9663,16 +9518,16 @@ } }, "node_modules/tcompare": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-6.4.3.tgz", - "integrity": "sha512-bKVNHmQ6Nd7/K3+SFuhsppUrXGwQjXts/U9NAVz52JNYeOlyCjtVydNZHgscw3RmtHp+JdWuheYjVqPvY9x9kg==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-6.4.4.tgz", + "integrity": "sha512-mvv9apveoY+XFP2CO2xF3Mkz/v+itzV9ZlhcDY+chIpFGYeTEgiCYdFUPynPme82kNU7UweuxDBQ5J6FkVox/Q==", "dev": true, "dependencies": { "diff": "^5.1.0", "react-element-to-jsx-string": "^15.0.0" }, "engines": { - "node": ">=16" + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" } }, "node_modules/tcompare/node_modules/diff": { @@ -9685,9 +9540,9 @@ } }, "node_modules/tedious": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-16.4.1.tgz", - "integrity": "sha512-WwRkGs7N5jFiHhD7uyLHnZ9rCmOfYytEHZhE/vyU56mxzFB3+xHd4WV+DssLwuc1piJqDI54vHDi6SRACOGu8g==", + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-16.6.0.tgz", + "integrity": "sha512-Gsi/XzWtJ+oyYsoDHSxjV5k/LzZb/3pJseC1NJoCkQ1VJF66rxj7pRLDF6jOFL4F52uSqOhtYTucs3K1sKYB7g==", "dev": true, "dependencies": { "@azure/identity": "^2.0.4", @@ -9860,12 +9715,13 @@ } }, "node_modules/tshy": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/tshy/-/tshy-1.5.0.tgz", - "integrity": "sha512-/Z+K0n6XGWgT65ID4gukgojktWmm5CobTzD7O9mmBQzY/1wk/PlI0H5a5dCKOvllsYeRarPbDefKQQDmw2Fncg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/tshy/-/tshy-1.8.0.tgz", + "integrity": "sha512-Lg2hVO+B8pdNYvBUSgcra4ULlFCcBIkd7ZJ3nRIPvEjplgEscNSwnOzpIMzKW1m17AYhEGcy1nzv7mA3fi/oEQ==", "dev": true, "dependencies": { "chalk": "^5.3.0", + "chokidar": "^3.5.3", "foreground-child": "^3.1.1", "mkdirp": "^3.0.1", "resolve-import": "^1.4.4", @@ -10020,28 +9876,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", - "dev": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -10160,9 +9994,9 @@ } }, "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "node_modules/unique-filename": { @@ -10337,15 +10171,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", @@ -10507,12 +10332,13 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", - "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true, "engines": { "node": ">= 14" @@ -11166,9 +10992,9 @@ "dev": true }, "@googleapis/sqladmin": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@googleapis/sqladmin/-/sqladmin-10.1.1.tgz", - "integrity": "sha512-doUaY+htE65r18z4Ts4eRp/Ft5/B/xvLhu743LAibaOHJa8ucOMc4acWgrvizp29VlPt3SQ9h20MAYXCstnfcg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@googleapis/sqladmin/-/sqladmin-11.0.0.tgz", + "integrity": "sha512-VEUhjrsAa8HjSa/SnfnFeJDJJ3err7UV7qySlcIpwEyeZjJwJk/EvJVk81tpviHhr2h8TK6/WDX3FCjkCGYPGA==", "requires": { "googleapis-common": "^7.0.0" } @@ -11262,9 +11088,9 @@ } }, "@isaacs/ts-node-temp-fork-for-pr-2009": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/@isaacs/ts-node-temp-fork-for-pr-2009/-/ts-node-temp-fork-for-pr-2009-10.9.1.tgz", - "integrity": "sha512-MY4rUonz835NsTbd4dcgKZvZFYX9IkLnYFZV9M7GQV8t39fawafLin/Qw6VXD4yfMs4HcBq8P3ddeU0QHMH1YQ==", + "version": "10.9.5", + "resolved": "https://registry.npmjs.org/@isaacs/ts-node-temp-fork-for-pr-2009/-/ts-node-temp-fork-for-pr-2009-10.9.5.tgz", + "integrity": "sha512-hEDlwpHhIabtB+Urku8muNMEkGui0LVGlYLS3KoB9QBDf0Pw3r7q0RrfoQmFuk8CvRpGzErO3/vLQd9Ys+/g4g==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -11383,20 +11209,12 @@ } }, "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true - }, - "socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "dev": true, "requires": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" + "semver": "^7.3.5" } } } @@ -11433,10 +11251,13 @@ "dev": true }, "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } }, "which": { "version": "4.0.0", @@ -11492,14 +11313,14 @@ } }, "@npmcli/run-script": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.1.tgz", - "integrity": "sha512-Od/JMrgkjZ8alyBE0IzeqZDiF1jgMez9Gkc/OYrCkHHiXNwM0wc6s7+h+xM7kYDZkS0tAoOLr9VvygyE5+2F7g==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", + "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", "dev": true, "requires": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^9.0.0", + "node-gyp": "^10.0.0", "read-package-json-fast": "^3.0.0", "which": "^4.0.0" }, @@ -11566,35 +11387,14 @@ "dev": true }, "@sigstore/sign": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.1.0.tgz", - "integrity": "sha512-4VRpfJxs+8eLqzLVrZngVNExVA/zAhVbi4UT4zmtLi4xRd7vz5qie834OgkrGsLlLB1B2nz/3wUxT1XAUBe8gw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.0.tgz", + "integrity": "sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA==", "dev": true, "requires": { "@sigstore/bundle": "^2.1.0", "@sigstore/protobuf-specs": "^0.2.1", "make-fetch-happen": "^13.0.0" - }, - "dependencies": { - "make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", - "dev": true, - "requires": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - } - } } }, "@sigstore/tuf": { @@ -11608,65 +11408,65 @@ } }, "@tapjs/after": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/after/-/after-1.1.13.tgz", - "integrity": "sha512-E2yGUayyCmgtyGDGIcejcVZjdcTmqxEfQexS/TTdELE2cCVYDlkTog5sRJVW02fQUyKrqta0X6bfUjT5+VtO9g==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/after/-/after-1.1.16.tgz", + "integrity": "sha512-/KwElRYMMN4pKDP0VT1a5d9RLsnV/HrnpvBbDJiavs816wQOEOwMt1q4rXVU2XO6cSpXn0cm77xBLDkkBlJQWA==", "dev": true, "requires": { "is-actual-promise": "^1.0.0" } }, "@tapjs/after-each": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/after-each/-/after-each-1.1.13.tgz", - "integrity": "sha512-KnX5QCz+f0Qvm8ZkN+/QugSqbNznVTisNu+xbYWY+m2sOhUtyNYSsqvxcKEhpBTS+fRjTPl1wU5ocZv5dDUMEA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/after-each/-/after-each-1.1.16.tgz", + "integrity": "sha512-TlhGKfX+3GHwqGhMxNWZ50xb8vfwp2+kx0COTbuGLrwcCgwmpFPU/r/7td03BOtdCV2J1yKFxGiRDvZyowZLyg==", "dev": true, "requires": { "function-loop": "^4.0.0" } }, "@tapjs/asserts": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/asserts/-/asserts-1.1.13.tgz", - "integrity": "sha512-nX9Dzkz4BToVw6Foi/naQO2oId4kvu1nOd9Brql75TrLOhSIf0BNhmUtedPouzefqHTnOQcOK+wxPqm2mUCvHQ==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/asserts/-/asserts-1.1.16.tgz", + "integrity": "sha512-gf37N6VMv7iuaomB8Yr+3VyuPS77kXy6Uw2n2AHsiU47Q0eNodjrN0d2G+glfrXfD3zLbsLuQHx4x6IsAsgq7Q==", "dev": true, "requires": { - "@tapjs/stack": "1.2.6", + "@tapjs/stack": "1.2.7", "is-actual-promise": "^1.0.0", - "tcompare": "6.4.3", + "tcompare": "6.4.4", "trivial-deferred": "^2.0.0" } }, "@tapjs/before": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/before/-/before-1.1.13.tgz", - "integrity": "sha512-IBgbKmc5Mqw+4JX0A52ZSn3ycwIQSNkqfOEjzELrEqhLuzeyQnb99P6QZKYfcVDaMhPqeYHRO+ziJOgtbAgPkQ==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/before/-/before-1.1.16.tgz", + "integrity": "sha512-3hO7eQbL1Ac8OgPq9+nBuQS4cz/eVGcaPDs0cTcTy3NYbhCrp4MGTpRtKxF4Cds1Y/rHAipB81MhZrmG7xBjlg==", "dev": true, "requires": { "is-actual-promise": "^1.0.0" } }, "@tapjs/before-each": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/before-each/-/before-each-1.1.13.tgz", - "integrity": "sha512-wprmLLmX9QowI9Z5eNtQ8/PRpLHzip99PxukOR59V2839Ypmwu9e1vVfrSIU1F6u6CcUrb80SaJDf2Izm8hmBg==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/before-each/-/before-each-1.1.16.tgz", + "integrity": "sha512-yJAt0yGOQFnozmm2fQSfAELp/hMzudYOr4udANZ/1RIVJYXHThj0qrUZP9nEkXMWK4wRQytOInt1jEwXR/cFfQ==", "dev": true, "requires": { "function-loop": "^4.0.0" } }, "@tapjs/config": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/@tapjs/config/-/config-2.4.9.tgz", - "integrity": "sha512-3coHlkF0XJn59ixl0ln2vRn2SyYPUXyoLDixu4jP/C38ZA7yYTlpsDYuovNiMhXUgJi1AMbWCqASmYL49rn8Sw==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@tapjs/config/-/config-2.4.13.tgz", + "integrity": "sha512-gnRSrHoISe7bXTa7ew2YwkXh9XmLc0GwrgwUcwq6Pyz/aqdT8NdvwDZb77uv7VQyJiZk5BkziNsn4qTKsBpOGw==", "dev": true, "requires": { - "@tapjs/core": "1.4.2", - "@tapjs/test": "1.3.13", + "@tapjs/core": "1.4.5", + "@tapjs/test": "1.3.16", "chalk": "^5.2.0", "jackspeak": "^2.3.6", "polite-json": "^4.0.1", - "tap-yaml": "2.2.0", + "tap-yaml": "2.2.1", "walk-up-path": "^3.0.1" }, "dependencies": { @@ -11679,22 +11479,22 @@ } }, "@tapjs/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@tapjs/core/-/core-1.4.2.tgz", - "integrity": "sha512-+mI2R8l/LjRrf7VLcme7jumi9MZb8vx3ARrheuS/djaXdcUd7lWHMjJSvCvnWhV5twTTUsfnc7GytWeFL3N4vA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@tapjs/core/-/core-1.4.5.tgz", + "integrity": "sha512-vvLrM75t1/Yq2MlH1x3jfJPdPs4ArR+tFTpzNgQ+PF50x0PTDup1sVj7ZhZbNY4zeQFsvnVtoReptr3FsMix7Q==", "dev": true, "requires": { - "@tapjs/processinfo": "^3.1.5", - "@tapjs/stack": "1.2.6", - "@tapjs/test": "1.3.13", + "@tapjs/processinfo": "^3.1.6", + "@tapjs/stack": "1.2.7", + "@tapjs/test": "1.3.16", "async-hook-domain": "^4.0.1", "diff": "^5.1.0", "is-actual-promise": "^1.0.0", "minipass": "^7.0.3", "signal-exit": "4.1", - "tap-parser": "15.3.0", - "tap-yaml": "2.2.0", - "tcompare": "6.4.3", + "tap-parser": "15.3.1", + "tap-yaml": "2.2.1", + "tcompare": "6.4.4", "trivial-deferred": "^2.0.0" }, "dependencies": { @@ -11713,25 +11513,25 @@ } }, "@tapjs/error-serdes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@tapjs/error-serdes/-/error-serdes-1.2.0.tgz", - "integrity": "sha512-Lt7kHWxILVCkfiRbsIZW5sfZ79+CmS1a+mp41dgp5oiiO2TJGBSpEWptD+bIfk9tegtU4wcMUwnStymfTKl4Xw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@tapjs/error-serdes/-/error-serdes-1.2.1.tgz", + "integrity": "sha512-/7eLEcrGo+Qz3eWrjkhDC+VSEOjabkkzr9eRADeU+OLFeZaik8L/GRk0SGhnp4YsQkv0jcNV00A42bEx2HIZcw==", "dev": true, "requires": { "minipass": "^7.0.3" } }, "@tapjs/filter": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@tapjs/filter/-/filter-1.2.13.tgz", - "integrity": "sha512-HahbPSl5gkJ12pIRqMq595A0zNMaTSUvQyLYtDX8GhQM7YanCMLPPPfxg5SFk2p7XinxN5HUiZ5i+Jh1W9tpeQ==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@tapjs/filter/-/filter-1.2.16.tgz", + "integrity": "sha512-TiOjFMy+Sg5Lnm5pzUcjgpyw19bEg0WejLGpml0DPQi/OEVYlazu2lcDQFRgpRBhvYlOc7we9nul2y2a3Jh8PQ==", "dev": true, "requires": {} }, "@tapjs/fixture": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@tapjs/fixture/-/fixture-1.2.13.tgz", - "integrity": "sha512-PPw4EqgIwOzoPjaPSv4O6l7e5RKLEhJH1CbrTqdaM2YxuLgC9Gv9AN0LxJsXsfTnJgoWodzC29dE7JB5RJINuQ==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@tapjs/fixture/-/fixture-1.2.16.tgz", + "integrity": "sha512-9+QUkGW4CoSR4cKO3vLe9YYsBgD9wCRvta5jxquTWk9VJiVQZ3pKIqaSULB47kUZbtERorhvI7J5YCYWnVbF7A==", "dev": true, "requires": { "mkdirp": "^3.0.0", @@ -11797,42 +11597,42 @@ } }, "@tapjs/intercept": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@tapjs/intercept/-/intercept-1.2.13.tgz", - "integrity": "sha512-/miqU/GK+AFW1y7Wc3N/1OpcFYK++voQ/Ai4u2cORbcxnUt0cWBxHPOZOyepZqwX88sPwr1NdrCV1/B3BbgPWw==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@tapjs/intercept/-/intercept-1.2.16.tgz", + "integrity": "sha512-Mgw3ib7bu2cFjbeujFw6y7CcEq1mNd/EQhrg1L9Q96bETtp9YNSlox4Z7MKmTEtnk9fzuCIVs7T9QbI8eq2k7w==", "dev": true, "requires": { - "@tapjs/after": "1.1.13", - "@tapjs/stack": "1.2.6" + "@tapjs/after": "1.1.16", + "@tapjs/stack": "1.2.7" } }, "@tapjs/mock": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@tapjs/mock/-/mock-1.2.11.tgz", - "integrity": "sha512-fXMvbQa04qfnNjgGN/cKWj52flYpN8J18/gkWQDbiOLieC1QJVtF1tkTohL602mqVbxn+9rOpTPjDvyJhi65zg==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@tapjs/mock/-/mock-1.2.14.tgz", + "integrity": "sha512-HnXUmkn3xk4gzoMb3s77EK2CJaBzAoi1hzyyE6abBJf8dnLCid4xUOs+H4KybWllKcwwIUr0yzKmXJl7eCWVbQ==", "dev": true, "requires": { - "@tapjs/after": "1.1.13", - "@tapjs/stack": "1.2.6", - "resolve-import": "^1.4.4", + "@tapjs/after": "1.1.16", + "@tapjs/stack": "1.2.7", + "resolve-import": "^1.4.5", "walk-up-path": "^3.0.1" } }, "@tapjs/node-serialize": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@tapjs/node-serialize/-/node-serialize-1.2.2.tgz", - "integrity": "sha512-ycPPYNxRsj/AFoqaGY5P38nehMVcwMAz7U0uRO7/2dh4vxUQcKyIBh5KNhB3z/EEas5wiQip+YJ1CW1fAx/PHg==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@tapjs/node-serialize/-/node-serialize-1.2.5.tgz", + "integrity": "sha512-y7QS5Sev6QQ0O+sx5WjY11XoUBzuNdSNDwVRxrj1qwTuigRVj+1ePWutP80pn7bE/r2G+2L2IHuEsMDRLCgulw==", "dev": true, "requires": { - "@tapjs/error-serdes": "1.2.0", - "@tapjs/stack": "1.2.6", - "tap-parser": "15.3.0" + "@tapjs/error-serdes": "1.2.1", + "@tapjs/stack": "1.2.7", + "tap-parser": "15.3.1" } }, "@tapjs/processinfo": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@tapjs/processinfo/-/processinfo-3.1.5.tgz", - "integrity": "sha512-KCx0Dbatmuja9soLFFK1asDwodz+16gwHL9QWiziz83b7LK4x5h9kiUbbhTi3I3wtKREeaN8caNA0Z2m6Yxsag==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@tapjs/processinfo/-/processinfo-3.1.6.tgz", + "integrity": "sha512-ktDsaf79wJsLaoG1Pp+stHSRf6a1k/JydoRAaYVG5iJnd3DooL6yewZsciUi2yiN/WQc5tAXCIFTXL4uXGB8LA==", "dev": true, "requires": { "pirates": "^4.0.5", @@ -11856,13 +11656,13 @@ } }, "@tapjs/reporter": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@tapjs/reporter/-/reporter-1.3.9.tgz", - "integrity": "sha512-nMakS5iE8b8p5eQBiwqsPvakreBXWYe+qNmgNlSSmXpKhOXYq4gvL8i4K1/ilJIIA/SzSSBz8ZPA8SRZTs0/aA==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@tapjs/reporter/-/reporter-1.3.14.tgz", + "integrity": "sha512-rcocjP6luA2XEjWkcG3yPolUvWKALdixOtBztAJ/r+P+iFRwyngV2DO9HM9ThLVRTQxj8f73EamoE1llxwD2YQ==", "dev": true, "requires": { - "@tapjs/config": "2.4.9", - "@tapjs/stack": "1.2.6", + "@tapjs/config": "2.4.13", + "@tapjs/stack": "1.2.7", "chalk": "^5.2.0", "ink": "^4.4.1", "minipass": "^7.0.3", @@ -11871,9 +11671,9 @@ "prismjs-terminal": "^1.2.3", "react": "^18.2.0", "string-length": "^6.0.0", - "tap-parser": "15.3.0", - "tap-yaml": "2.2.0", - "tcompare": "6.4.3" + "tap-parser": "15.3.1", + "tap-yaml": "2.2.1", + "tcompare": "6.4.4" }, "dependencies": { "chalk": { @@ -11891,19 +11691,19 @@ } }, "@tapjs/run": { - "version": "1.4.9", - "resolved": "https://registry.npmjs.org/@tapjs/run/-/run-1.4.9.tgz", - "integrity": "sha512-98wXYtgsuFr6CvjI1d7yDLnG0oSCMgy8Avg/UYo3dcYUbobMeMXk3/VOx4/f6eGTBEtaVT8VCzz3HIOEdpD1rA==", - "dev": true, - "requires": { - "@tapjs/after": "1.1.13", - "@tapjs/before": "1.1.13", - "@tapjs/config": "2.4.9", - "@tapjs/processinfo": "^3.1.5", - "@tapjs/reporter": "1.3.9", - "@tapjs/spawn": "1.1.13", - "@tapjs/stdin": "1.1.13", - "@tapjs/test": "1.3.13", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@tapjs/run/-/run-1.4.15.tgz", + "integrity": "sha512-yeG9BLfRYK1ScDD4M50oF/T7mkNVtQcSEG8twgxxHM3zGlg4hubNBPYh4VXffotuAk3jTjm0jAaEgFbypZLwFQ==", + "dev": true, + "requires": { + "@tapjs/after": "1.1.16", + "@tapjs/before": "1.1.16", + "@tapjs/config": "2.4.13", + "@tapjs/processinfo": "^3.1.6", + "@tapjs/reporter": "1.3.14", + "@tapjs/spawn": "1.1.16", + "@tapjs/stdin": "1.1.16", + "@tapjs/test": "1.3.16", "c8": "^8.0.1", "chalk": "^5.3.0", "chokidar": "^3.5.3", @@ -11913,13 +11713,13 @@ "mkdirp": "^3.0.1", "opener": "^1.5.2", "pacote": "^17.0.3", - "resolve-import": "^1.4.4", + "resolve-import": "^1.4.5", "rimraf": "^5.0.5", "semver": "^7.5.4", "signal-exit": "^4.1.0", - "tap-parser": "15.3.0", - "tap-yaml": "2.2.0", - "tcompare": "6.4.3", + "tap-parser": "15.3.1", + "tap-yaml": "2.2.1", + "tcompare": "6.4.4", "trivial-deferred": "^2.0.0", "which": "^4.0.0" }, @@ -12004,65 +11804,65 @@ } }, "@tapjs/snapshot": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@tapjs/snapshot/-/snapshot-1.2.13.tgz", - "integrity": "sha512-/vW3kOxNA1vclsEU87A5vZ7edRbrL1Hlm7LauJwRAvAgdW2VrEcc1ivyCMbWvYi11csGu1MM9A2Poo/aOhzQ/Q==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@tapjs/snapshot/-/snapshot-1.2.16.tgz", + "integrity": "sha512-4Da9TXAQ3ni+JC8AfzDKRQG6cIjT/LxTTGmVDK4/Fe4NubdNKw/A76Gvl9xPUIlqW1vNZVGVN/0KruEDKJ4xkQ==", "dev": true, "requires": { "is-actual-promise": "^1.0.0", - "tcompare": "6.4.3", + "tcompare": "6.4.4", "trivial-deferred": "^2.0.0" } }, "@tapjs/spawn": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/spawn/-/spawn-1.1.13.tgz", - "integrity": "sha512-s2byTuuyyPv+8uI4xSspFhiFPddi/Bwz2a/RHQVm3IKuvO0gW9KA53J8PEjWIRXLFNgf5X0xWIYGgMXeklYN/w==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/spawn/-/spawn-1.1.16.tgz", + "integrity": "sha512-Y0/WNlFp8kkRwKNyOqYUrIwwY2sLkegakvhtcJsg9eg/P4CC9lnh+zaSEfgNGJb24S4qeWOOnJ/rQ68bK9HVYg==", "dev": true, "requires": {} }, "@tapjs/stack": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@tapjs/stack/-/stack-1.2.6.tgz", - "integrity": "sha512-us73FMZytpcvYT/gOSDDKHk/LLZQZ/bBLoz48VcEE5EFQmF0EELhNOlyg4Rrvj8DmuYuFjiliidiV/FB1Fchaw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@tapjs/stack/-/stack-1.2.7.tgz", + "integrity": "sha512-7qUDWDmd+y7ZQ0vTrDTvFlWnJ+ND32NemS5HVuT1ZggHtBwJ62PQHIyCx/B5RopETBb6NvFPfUE21yTiex9Jkw==", "dev": true }, "@tapjs/stdin": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/stdin/-/stdin-1.1.13.tgz", - "integrity": "sha512-ilamAMcQ7TPzuB4fVLtTyCYaqU3bAh1YLssmwtcYwRE0J4szNIFLMsduVjWLNGnjViKRHI6x1iHGOZg2IwTXug==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/stdin/-/stdin-1.1.16.tgz", + "integrity": "sha512-kP22n5kaoMcAp+elESvRCg/fodfeefsbtacTOGAfXnHLK+eh8XBSz1SwDmyaeQ4/C3F6SMQ8+8ZeybMcbeLEGQ==", "dev": true, "requires": {} }, "@tapjs/test": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@tapjs/test/-/test-1.3.13.tgz", - "integrity": "sha512-eqlrFgdMwOuqMeMGWMButPmas7q5Z0yEqmyBZIsjKk246wN1GUKIwGxX+K0THMBHaiSKW4c/PvXpMynZyywqbw==", - "dev": true, - "requires": { - "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.1", - "@tapjs/after": "1.1.13", - "@tapjs/after-each": "1.1.13", - "@tapjs/asserts": "1.1.13", - "@tapjs/before": "1.1.13", - "@tapjs/before-each": "1.1.13", - "@tapjs/filter": "1.2.13", - "@tapjs/fixture": "1.2.13", - "@tapjs/intercept": "1.2.13", - "@tapjs/mock": "1.2.11", - "@tapjs/node-serialize": "1.2.2", - "@tapjs/snapshot": "1.2.13", - "@tapjs/spawn": "1.1.13", - "@tapjs/stdin": "1.1.13", - "@tapjs/typescript": "1.3.2", - "@tapjs/worker": "1.1.13", + "version": "1.3.16", + "resolved": "https://registry.npmjs.org/@tapjs/test/-/test-1.3.16.tgz", + "integrity": "sha512-HalYruL4tpTgKVJQwkTh/vw5Mt7sEVXXoS7bTik8tyPr9wQ7UXTRPB2EErna89mhhRc0hYU4NYXlwzS1UHiQkQ==", + "dev": true, + "requires": { + "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.5", + "@tapjs/after": "1.1.16", + "@tapjs/after-each": "1.1.16", + "@tapjs/asserts": "1.1.16", + "@tapjs/before": "1.1.16", + "@tapjs/before-each": "1.1.16", + "@tapjs/filter": "1.2.16", + "@tapjs/fixture": "1.2.16", + "@tapjs/intercept": "1.2.16", + "@tapjs/mock": "1.2.14", + "@tapjs/node-serialize": "1.2.5", + "@tapjs/snapshot": "1.2.16", + "@tapjs/spawn": "1.1.16", + "@tapjs/stdin": "1.1.16", + "@tapjs/typescript": "1.3.5", + "@tapjs/worker": "1.1.16", "glob": "^10.3.10", "jackspeak": "^2.3.6", "mkdirp": "^3.0.0", - "resolve-import": "^1.4.4", + "resolve-import": "^1.4.5", "rimraf": "^5.0.5", "sync-content": "^1.0.1", - "tap-parser": "15.3.0", + "tap-parser": "15.3.1", "tshy": "^1.2.2", "typescript": "5.2" }, @@ -12126,18 +11926,18 @@ } }, "@tapjs/typescript": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@tapjs/typescript/-/typescript-1.3.2.tgz", - "integrity": "sha512-R8E36Kd1ImufcygVzSbQt/rEgg5RIW+CvIBzJNmv1IczRoAVFo5/OElZwOThiko7CAxDMRJxI8Cla63uK3gsLA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@tapjs/typescript/-/typescript-1.3.5.tgz", + "integrity": "sha512-LoOHEJ1Bx3MWnh4+uIBXVobxkYNwFzJVnzl1tsLuX0jgGBIGtvmFwXDoM9MtcmO5m8WMZL9bMDT1NWPtcO0V6w==", "dev": true, "requires": { - "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.1" + "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.5" } }, "@tapjs/worker": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@tapjs/worker/-/worker-1.1.13.tgz", - "integrity": "sha512-B/g1rdQcuOFdU6OeBHkdYUjzM6pbHo64nV+ckQNE7Atj4yzV0u7C+Emq+f7F+zItsGXaMm/a4Z7Zoliszy7YXw==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@tapjs/worker/-/worker-1.1.16.tgz", + "integrity": "sha512-BVXyGnf3PMJ7hnwIgaheSpLESI8E9d95EBi8Ni/L3sObbxYR3xIPnhiwCEUCQOp6pkeo8z04T7nJdbQW3dslIA==", "dev": true, "requires": {} }, @@ -12238,12 +12038,12 @@ "dev": true }, "@types/node": { - "version": "20.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", - "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", "dev": true, "requires": { - "undici-types": "~5.25.1" + "undici-types": "~5.26.4" } }, "@types/normalize-package-data": { @@ -12253,9 +12053,9 @@ "dev": true }, "@types/pg": { - "version": "8.10.7", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.7.tgz", - "integrity": "sha512-ksJqHipwYaSEHz9e1fr6H6erjoEdNNaOxwyJgPx9bNeaqOW3iWBQgVHfpwiSAoqGzchfc+ZyRLwEfeCcyYD3uQ==", + "version": "8.10.9", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.10.9.tgz", + "integrity": "sha512-UksbANNE/f8w0wOMxVKKIrLCbEMV+oM1uKejmwXr39olg4xqcfBDbXxObJAt6XxHbDa4XTKOlUEcEltXDX+XLQ==", "dev": true, "requires": { "@types/node": "*", @@ -12264,40 +12064,40 @@ } }, "@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", + "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", "dev": true }, "@types/tap": { - "version": "15.0.10", - "resolved": "https://registry.npmjs.org/@types/tap/-/tap-15.0.10.tgz", - "integrity": "sha512-NcsQN3XkZ+xuhaUJjkfpQfJLpyLz/2+wlFKZ1bRK5B5Pe37ccotzkDo66jWjjwmARD5slzLC/KtSt7+gomvLSQ==", + "version": "15.0.11", + "resolved": "https://registry.npmjs.org/@types/tap/-/tap-15.0.11.tgz", + "integrity": "sha512-QzbxIsrK6yX3iWC2PXGX/Ljz5cGISDEuOGISMcckeSUKIJXzbsfJLF4LddoncZ+ELVZpO0X87KfRem4h+yBFXQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/tedious": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.13.tgz", - "integrity": "sha512-eCADRqah0uHMUNVHJ/0Yz4drscJ5tZ+IQ/i+nDs7/nR8R6RqLhJaplklvMe3EsMraxOWmp4mTqYi0Xo6ik1DpQ==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", "dev": true, "requires": { "@types/node": "*" } }, "@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", + "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -12307,28 +12107,28 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", + "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" } }, "@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true }, "@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" } } @@ -12360,31 +12160,31 @@ } }, "@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", + "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "dependencies": { "@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12393,12 +12193,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" } } @@ -12428,44 +12228,44 @@ } }, "@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", + "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", "semver": "^7.5.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", + "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0" } }, "@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12474,12 +12274,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" } } @@ -12497,9 +12297,9 @@ } }, "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true }, "abort-controller": { @@ -12539,15 +12339,6 @@ "debug": "4" } }, - "agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, - "requires": { - "humanize-ms": "^1.2.1" - } - }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -12612,35 +12403,6 @@ "picomatch": "^2.0.4" } }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -12886,10 +12648,13 @@ } }, "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } }, "minimatch": { "version": "9.0.3", @@ -13112,12 +12877,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -13130,13 +12889,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "convert-source-map": { @@ -13322,12 +13075,6 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, "denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", @@ -13600,9 +13347,9 @@ } }, "eslint-plugin-prettier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", - "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", @@ -13945,26 +13692,10 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, "gaxios": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.0.tgz", - "integrity": "sha512-EIHuesZxNyIkUGcTQKQPMICyOpDD/bi+LJIJx+NLsSGmnS7N+xCLRX5bi4e9yAu9AlSZdVq+qlyWWVuTh/483w==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", "requires": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", @@ -14098,17 +13829,16 @@ } }, "google-auth-library": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", - "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.2.0.tgz", + "integrity": "sha512-1oV3p0JhNEhVbj26eF3FAJcv9MXXQt4S0wcvKZaDbl4oHq5V3UJoSbsGZGQNcjoCdhW4kDSwOs11wLlHog3fgQ==", "requires": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.0.0", "gcp-metadata": "^6.0.0", "gtoken": "^7.0.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" + "jws": "^4.0.0" } }, "googleapis-common": { @@ -14276,6 +14006,16 @@ "eslint-visitor-keys": "^3.3.0" } }, + "eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + } + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -14348,12 +14088,6 @@ "has-symbols": "^1.0.2" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -14402,15 +14136,6 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -14675,10 +14400,13 @@ "dev": true }, "is-actual-promise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-actual-promise/-/is-actual-promise-1.0.0.tgz", - "integrity": "sha512-DWSmKTiEoY3Y9LGHG9TVnFgydCCu+3fLJi4rv3fpi0gL/lKoILekh/oF/nO3/Lq1l5Rqo+tQt5TWzxMmYIhWyg==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-actual-promise/-/is-actual-promise-1.0.1.tgz", + "integrity": "sha512-PlsL4tNv62lx5yN2HSqaRSTgIpUAPW7U6+crVB8HfWm5161rZpeqWbl0ZSqH2MAfRKXWSZVPRNbE/r8qPcb13g==", + "dev": true, + "requires": { + "tshy": "^1.7.0" + } }, "is-array-buffer": { "version": "3.0.2", @@ -15192,6 +14920,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -15212,115 +14941,22 @@ "dev": true }, "make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", "dev": true, "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", + "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", "ssri": "^10.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - } - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } } }, "map-obj": { @@ -15598,7 +15234,8 @@ "dev": true }, "mysql": { - "version": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", "requires": { "bignumber.js": "9.0.0", @@ -15652,9 +15289,9 @@ } }, "mysql2": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.6.0.tgz", - "integrity": "sha512-EWUGAhv6SphezurlfI2Fpt0uJEWLmirrtQR7SkbTHFC+4/mJBrPiSzHESHKAWKG7ALVD6xaG/NBjjd1DGJGQQQ==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.6.3.tgz", + "integrity": "sha512-qYd/1CDuW1KYZjD4tzg2O8YS3X/UWuGH8ZMHyMeggMTXL3yOdMisbwZ5SNkHzDGlZXKYLAvV8tMrEH+NUMz3fw==", "dev": true, "requires": { "denque": "^2.1.0", @@ -15732,14 +15369,13 @@ "dev": true }, "nock": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.4.tgz", - "integrity": "sha512-DDpmn5oLEdCTclEqweOT4U7bEpuoifBMFUXem9sA4turDAZ5tlbrEoWqCorwXey8CaAw44mst5JOQeVNiwtkhw==", + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.8.tgz", + "integrity": "sha512-96yVFal0c/W1lG7mmfRe7eO+hovrhJYd2obzzOZ90f6fjpeU/XNvd9cYHZKZAQJumDfhXgoTpkpJ9pvMj+hqHw==", "dev": true, "requires": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.21", "propagate": "^2.0.0" } }, @@ -15758,31 +15394,94 @@ } }, "node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", "dev": true, "requires": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", + "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "tar": "^6.1.2", - "which": "^2.0.2" + "which": "^4.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "requires": { + "isexe": "^3.1.1" + } + } } }, "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "dev": true, "requires": { - "abbrev": "^1.0.0" + "abbrev": "^2.0.0" } }, "normalize-package-data": { @@ -15849,10 +15548,13 @@ } }, "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } } } }, @@ -15890,27 +15592,6 @@ "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", "proc-log": "^3.0.0" - }, - "dependencies": { - "make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", - "dev": true, - "requires": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - } - } } }, "npm-run-path": { @@ -15922,18 +15603,6 @@ "path-key": "^3.0.0" } }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -16151,10 +15820,13 @@ }, "dependencies": { "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } } } }, @@ -16568,10 +16240,13 @@ "dev": true }, "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } }, "minimatch": { "version": "9.0.3", @@ -16793,9 +16468,9 @@ "dev": true }, "resolve-import": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/resolve-import/-/resolve-import-1.4.4.tgz", - "integrity": "sha512-+IccDyUypl5rHv25216cXu2m30flEoetrG8p4qDH3RsP53cytedI58Pz+pjCU4PAbxPOQgFkgmxTJLKI9tgf/g==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/resolve-import/-/resolve-import-1.4.5.tgz", + "integrity": "sha512-HXb4YqODuuXT7Icq1Z++0g2JmhgbUHSs3VT2xR83gqvAPUikYT2Xk+562KHQgiaNkbBOlPddYrDLsC44qQggzw==", "dev": true, "requires": { "glob": "^10.3.3", @@ -16973,12 +16648,6 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", "dev": true }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -17069,14 +16738,25 @@ } }, "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dev": true, "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "requires": { + "debug": "^4.3.4" + } + } } }, "spdx-correct": { @@ -17394,46 +17074,46 @@ } }, "tap": { - "version": "18.5.2", - "resolved": "https://registry.npmjs.org/tap/-/tap-18.5.2.tgz", - "integrity": "sha512-Fd8JN1fwA5+CNwKxLf6zhBgMMJZKYWxBwi6551Y4uGU/IFrKvEsK/hYEbBsw+Ae335wkW96+gmnu2lHJh26CPw==", - "dev": true, - "requires": { - "@tapjs/after": "1.1.13", - "@tapjs/after-each": "1.1.13", - "@tapjs/asserts": "1.1.13", - "@tapjs/before": "1.1.13", - "@tapjs/before-each": "1.1.13", - "@tapjs/core": "1.4.2", - "@tapjs/filter": "1.2.13", - "@tapjs/fixture": "1.2.13", - "@tapjs/intercept": "1.2.13", - "@tapjs/mock": "1.2.11", - "@tapjs/node-serialize": "1.2.2", - "@tapjs/run": "1.4.9", - "@tapjs/snapshot": "1.2.13", - "@tapjs/spawn": "1.1.13", - "@tapjs/stdin": "1.1.13", - "@tapjs/test": "1.3.13", - "@tapjs/typescript": "1.3.2", - "@tapjs/worker": "1.1.13", - "resolve-import": "^1.4.4" + "version": "18.5.8", + "resolved": "https://registry.npmjs.org/tap/-/tap-18.5.8.tgz", + "integrity": "sha512-lTJXogAU/SQZVeCjHG8ozQSESRO7aD0THbA5G8El/OHv+ifFR8U0UdU5cZY8uMD6r8TYBt09tlb/gsXNVnrOXw==", + "dev": true, + "requires": { + "@tapjs/after": "1.1.16", + "@tapjs/after-each": "1.1.16", + "@tapjs/asserts": "1.1.16", + "@tapjs/before": "1.1.16", + "@tapjs/before-each": "1.1.16", + "@tapjs/core": "1.4.5", + "@tapjs/filter": "1.2.16", + "@tapjs/fixture": "1.2.16", + "@tapjs/intercept": "1.2.16", + "@tapjs/mock": "1.2.14", + "@tapjs/node-serialize": "1.2.5", + "@tapjs/run": "1.4.15", + "@tapjs/snapshot": "1.2.16", + "@tapjs/spawn": "1.1.16", + "@tapjs/stdin": "1.1.16", + "@tapjs/test": "1.3.16", + "@tapjs/typescript": "1.3.5", + "@tapjs/worker": "1.1.16", + "resolve-import": "^1.4.5" } }, "tap-parser": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-15.3.0.tgz", - "integrity": "sha512-R0yLuoC288K+gHtwcOhH7Af/8EocDglAyMpaASsmzNxV1chmq3v4juSAVhvMBbPx/pRVJYrPKe9Wsj9aaqMalQ==", + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-15.3.1.tgz", + "integrity": "sha512-hwAtXX5TBGt2MJeYvASc7DjP48PUzA7P8RTbLxQcgKCEH7ICD5IsRco7l5YvkzjHlZbUbeI9wzO8B4hw2sKgnQ==", "dev": true, "requires": { "events-to-array": "^2.0.3", - "tap-yaml": "2.2.0" + "tap-yaml": "2.2.1" } }, "tap-yaml": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-2.2.0.tgz", - "integrity": "sha512-o8I7WDNiGpuF04tGAVaNYY5rX9waCtqw9A7Y0YVSQBGcFwNUJWUPLkr2lbhgLRTxc+Tpnw4xUXlIanZc+ZAGnw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-2.2.1.tgz", + "integrity": "sha512-ovZuUMLAIH59jnFHXKEGJ+WyDYl6Cuduwg9qpvnqkZOUA1nU84q02Sry1HT0KXcdv2uB91bEKKxnIybBgrb6oA==", "dev": true, "requires": { "yaml": "^2.3.0", @@ -17489,9 +17169,9 @@ } }, "tcompare": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-6.4.3.tgz", - "integrity": "sha512-bKVNHmQ6Nd7/K3+SFuhsppUrXGwQjXts/U9NAVz52JNYeOlyCjtVydNZHgscw3RmtHp+JdWuheYjVqPvY9x9kg==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-6.4.4.tgz", + "integrity": "sha512-mvv9apveoY+XFP2CO2xF3Mkz/v+itzV9ZlhcDY+chIpFGYeTEgiCYdFUPynPme82kNU7UweuxDBQ5J6FkVox/Q==", "dev": true, "requires": { "diff": "^5.1.0", @@ -17507,9 +17187,9 @@ } }, "tedious": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-16.4.1.tgz", - "integrity": "sha512-WwRkGs7N5jFiHhD7uyLHnZ9rCmOfYytEHZhE/vyU56mxzFB3+xHd4WV+DssLwuc1piJqDI54vHDi6SRACOGu8g==", + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-16.6.0.tgz", + "integrity": "sha512-Gsi/XzWtJ+oyYsoDHSxjV5k/LzZb/3pJseC1NJoCkQ1VJF66rxj7pRLDF6jOFL4F52uSqOhtYTucs3K1sKYB7g==", "dev": true, "requires": { "@azure/identity": "^2.0.4", @@ -17630,12 +17310,13 @@ } }, "tshy": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/tshy/-/tshy-1.5.0.tgz", - "integrity": "sha512-/Z+K0n6XGWgT65ID4gukgojktWmm5CobTzD7O9mmBQzY/1wk/PlI0H5a5dCKOvllsYeRarPbDefKQQDmw2Fncg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/tshy/-/tshy-1.8.0.tgz", + "integrity": "sha512-Lg2hVO+B8pdNYvBUSgcra4ULlFCcBIkd7ZJ3nRIPvEjplgEscNSwnOzpIMzKW1m17AYhEGcy1nzv7mA3fi/oEQ==", "dev": true, "requires": { "chalk": "^5.3.0", + "chokidar": "^3.5.3", "foreground-child": "^3.1.1", "mkdirp": "^3.0.1", "resolve-import": "^1.4.4", @@ -17733,27 +17414,6 @@ "@tufjs/models": "2.0.0", "debug": "^4.3.4", "make-fetch-happen": "^13.0.0" - }, - "dependencies": { - "make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", - "dev": true, - "requires": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - } - } } }, "type-check": { @@ -17837,9 +17497,9 @@ } }, "undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "unique-filename": { @@ -17981,15 +17641,6 @@ "has-tostringtag": "^1.0.0" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", @@ -18093,12 +17744,13 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yaml": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", - "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true }, "yaml-types": { diff --git a/package.json b/package.json index 396f23f5..f125f888 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,7 @@ "prepare": "rm -rf dist && npm run compile && node ./scripts/fixup.cjs", "pretest": "npm run prepare", "presnap": "npm run prepare", - "test": "c8 --100 tap", - "snap": "c8 tap", + "test": "tap", "presystem-test": "npm run prepare", "system-test": "tap --no-coverage system-test", "lint": "gts check", @@ -49,32 +48,29 @@ "posttest": "npm run lint" }, "tap": { - "coverage": false, - "node-arg": [ - "--no-warnings", - "--loader", - "ts-node/esm" + "serial": [ + "test/serial" ], - "ts": false + "show-full-coverage": true }, "devDependencies": { - "@types/node": "^20.4.9", - "@types/pg": "^8.10.1", - "@types/semver": "^7.5.0", - "@types/tap": "^15.0.8", - "@types/tedious": "^4.0.9", - "@typescript-eslint/eslint-plugin": "^6.3.0", - "c8": "^8.0.0", - "eslint-plugin-prettier": "^5.0.0", - "gts": "^5.0.0", - "mysql2": "^3.2.0", - "nock": "^13.3.0", + "@types/node": "^20.9.0", + "@types/pg": "^8.10.9", + "@types/semver": "^7.5.5", + "@types/tap": "^15.0.11", + "@types/tedious": "^4.0.14", + "@typescript-eslint/eslint-plugin": "^6.11.0", + "c8": "^8.0.1", + "eslint-plugin-prettier": "^5.0.1", + "gts": "^5.2.0", + "mysql2": "^3.6.3", + "nock": "^13.3.8", "pg": "^8.10.0", "semver": "^7.5.1", - "tap": "^18.0.0", - "tedious": "^16.1.0", + "tap": "^18.5.8", + "tedious": "^16.6.0", "ts-node": "^10.9.1", - "typescript": "^5.1.6" + "typescript": "^5.2.2" }, "engines": { "node": ">=14" @@ -84,9 +80,10 @@ "url": "git+https://github.com/GoogleCloudPlatform/cloud-sql-nodejs-connector" }, "dependencies": { - "@googleapis/sqladmin": "^10.1.1", - "gaxios": "^6.1.0", - "google-auth-library": "^9.0.0", + "@googleapis/sqladmin": "^11.0.0", + "gaxios": "^6.1.1", + "google-auth-library": "^9.2.0", + "mysql": "^2.18.1", "p-throttle": "^5.1.0" } } diff --git a/scripts/tap16-adapter.js b/scripts/tap16-adapter.js new file mode 100644 index 00000000..565d4de8 --- /dev/null +++ b/scripts/tap16-adapter.js @@ -0,0 +1,27 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Test adapter used to bridge test files to tap16-compatible +// APIs in order to enable running tests in node@14 +// This file (and its usage in .github/tests.yml) can be safely +// removed once node14 is no longer supported +const originalJsHandler = require.extensions['.js'] +require.extensions['.js'] = function(module, filename) { + const compile = module._compile + module._compile = function (code, filename) { + const source = code.replace(/t\.mockRequire/g, 't.mock') + return compile.call(module, source, filename) + } + originalJsHandler(module, filename) +} diff --git a/src/cloud-sql-instance.ts b/src/cloud-sql-instance.ts index e87acfd7..877cf59c 100644 --- a/src/cloud-sql-instance.ts +++ b/src/cloud-sql-instance.ts @@ -104,18 +104,17 @@ export class CloudSQLInstance { }) as ReturnType; } - async forceRefresh(): Promise { + forceRefresh(): Promise { // if a refresh is already ongoing, just await for its promise to fulfill // so that a new instance info is available before reconnecting if (this.next) { - await this.next; - return; + return this.next; } this.cancelRefresh(); return this.refresh(); } - async refresh(): Promise { + refresh(): Promise { const currentRefreshId = this.scheduledRefreshID; // Since forceRefresh might be invoked during an ongoing refresh @@ -166,14 +165,15 @@ export class CloudSQLInstance { // This refresh cycle has failed, releases ref to next this.next = undefined; + }) + // The rate limiter needs to be initialized _after_ assigning a ref + // to next in order to avoid race conditions with + // the forceRefresh check that ensures a refresh cycle is not ongoing + .then(() => { + this.initializeRateLimiter(); }); - // The rate limiter needs to be initialized _after_ assigning a ref - // to next in order to avoid race conditions with - // the forceRefresh check that ensures a refresh cycle is not ongoing - await this.initializeRateLimiter(); - - await this.next; + return this.next as Promise; } // The performRefresh method will perform all the necessary async steps diff --git a/test/cloud-sql-instance.ts b/test/cloud-sql-instance.ts index e83a25e7..5ce311dc 100644 --- a/test/cloud-sql-instance.ts +++ b/test/cloud-sql-instance.ts @@ -43,7 +43,7 @@ t.test('CloudSQLInstance', async t => { // mocks crypto module so that it can return a deterministic result // and set a standard, fast static value for cert refresh interval - const {CloudSQLInstance} = t.mock('../src/cloud-sql-instance', { + const {CloudSQLInstance} = t.mockRequire('../src/cloud-sql-instance', { '../src/crypto': { generateKeys: async () => ({ publicKey: '-----BEGIN PUBLIC KEY-----', @@ -113,7 +113,7 @@ t.test('CloudSQLInstance', async t => { limitRateInterval: 50, }); - t.rejects( + await t.rejects( instance.refresh(), /ERR/, 'should raise the specific error to the end user' @@ -193,7 +193,7 @@ t.test('CloudSQLInstance', async t => { t.test( 'refresh error with expired cert should not throw any errors on established connection', async t => { - const {CloudSQLInstance} = t.mock('../src/cloud-sql-instance', { + const {CloudSQLInstance} = t.mockRequire('../src/cloud-sql-instance', { '../src/crypto': { generateKeys: async () => ({ publicKey: '-----BEGIN PUBLIC KEY-----', @@ -485,7 +485,7 @@ t.test('CloudSQLInstance', async t => { 'get invalid certificate data while having a current valid', async t => { let checkedExpirationTimeCount = 0; - const {CloudSQLInstance} = t.mock('../src/cloud-sql-instance', { + const {CloudSQLInstance} = t.mockRequire('../src/cloud-sql-instance', { '../src/crypto': { generateKeys: async () => ({ publicKey: '-----BEGIN PUBLIC KEY-----', diff --git a/test/connector.ts b/test/connector.ts index 3757d707..9e44eaf2 100644 --- a/test/connector.ts +++ b/test/connector.ts @@ -26,7 +26,7 @@ t.test('Connector', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -48,7 +48,7 @@ t.test('Connector', async t => { } }, }, - '../src/cloud-sql-instance': t.mock('../src/cloud-sql-instance', { + '../src/cloud-sql-instance': t.mockRequire('../src/cloud-sql-instance', { '../src/crypto': { generateKeys: async () => ({ publicKey: '-----BEGIN PUBLIC KEY-----', @@ -76,7 +76,7 @@ t.test('Connector missing instance info error', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -130,7 +130,7 @@ t.test('Connector bad instance info error', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -186,7 +186,7 @@ t.test('start only a single instance info per connection name', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -242,7 +242,7 @@ t.test('Connector reusing instance on mismatching auth type', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -306,7 +306,7 @@ t.test('Connector reusing instance on mismatching ip type', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -371,7 +371,7 @@ t.test('Connector factory method mismatch auth type', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -427,7 +427,7 @@ t.test('Connector factory method mismatch ip type', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -482,7 +482,7 @@ t.test('Connector, supporting Tedious driver', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -504,7 +504,7 @@ t.test('Connector, supporting Tedious driver', async t => { } }, }, - '../src/cloud-sql-instance': t.mock('../src/cloud-sql-instance', { + '../src/cloud-sql-instance': t.mockRequire('../src/cloud-sql-instance', { '../src/crypto': { generateKeys: async () => ({ publicKey: '-----BEGIN PUBLIC KEY-----', @@ -560,7 +560,7 @@ t.test('Connector force refresh on socket connection error', async t => { // Mocks CloudSQLInstance to spy on forceRefresh calls let forceRefresh = false; - const {CloudSQLInstance} = t.mock('../src/cloud-sql-instance', { + const {CloudSQLInstance} = t.mockRequire('../src/cloud-sql-instance', { '../src/crypto': { generateKeys: async () => ({ publicKey: '-----BEGIN PUBLIC KEY-----', @@ -574,7 +574,7 @@ t.test('Connector force refresh on socket connection error', async t => { // mocks sql admin fetcher and generateKeys modules // so that they can return a deterministic result - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { getInstanceMetadata() { @@ -632,7 +632,7 @@ t.test('Connector, custom sqlAdminAPIEndpoint', async t => { let actualsqlAdminAPIEndpoint: string | undefined; // mocks sql admin fetcher to check that the custom // sqlAdminAPIEndpoint is correctly passed into it - const {Connector} = t.mock('../src/connector', { + const {Connector} = t.mockRequire('../src/connector', { '../src/sqladmin-fetcher': { SQLAdminFetcher: class { constructor({sqlAdminAPIEndpoint}: SQLAdminFetcherOptions) { diff --git a/test/crypto.ts b/test/crypto.ts index 23a7b1e2..25ff5333 100644 --- a/test/crypto.ts +++ b/test/crypto.ts @@ -49,7 +49,7 @@ t.test('parseCert failure', async t => { }); t.test('parseCert missing expiration time', async t => { - const {parseCert} = t.mock('../src/crypto', { + const {parseCert} = t.mockRequire('../src/crypto', { '../src/node-crypto': { async cryptoModule() { return { @@ -68,8 +68,8 @@ t.test('parseCert missing expiration time', async t => { }); t.test('parseCert no x509 parser fallback', async t => { - const {cryptoModule} = t.mock('../src/node-crypto', {}); - const {parseCert} = t.mock('../src/crypto', { + const {cryptoModule} = t.mockRequire('../src/node-crypto', {}); + const {parseCert} = t.mockRequire('../src/crypto', { '../src/node-crypto': { async cryptoModule() { const mod = cryptoModule(); @@ -90,8 +90,8 @@ t.test('parseCert no x509 parser fallback', async t => { }); t.test('parseCert no x509 parser fallback failure', async t => { - const {cryptoModule} = t.mock('../src/node-crypto', {}); - const {parseCert} = t.mock('../src/crypto', { + const {cryptoModule} = t.mockRequire('../src/node-crypto', {}); + const {parseCert} = t.mockRequire('../src/crypto', { '../src/node-crypto': { async cryptoModule() { const mod = cryptoModule(); diff --git a/test/sqladmin-fetcher.ts b/test/sqladmin-fetcher.ts index 00029fb7..ec79e0f1 100644 --- a/test/sqladmin-fetcher.ts +++ b/test/sqladmin-fetcher.ts @@ -12,17 +12,63 @@ // See the License for the specific language governing permissions and // limitations under the License. -import {resolve} from 'node:path'; import t from 'tap'; -import nock from 'nock'; -import {GoogleAuth, OAuth2Client} from 'google-auth-library'; -import {sqladmin_v1beta4} from '@googleapis/sqladmin'; -import {SQLAdminFetcher} from '../src/sqladmin-fetcher'; import {InstanceConnectionInfo} from '../src/instance-connection-info'; -import {setupCredentials} from './fixtures/setup-credentials'; import {CLIENT_CERT} from './fixtures/certs'; import {AuthTypes} from '../src/auth-types'; +// Mocks the @googleapis/sqladmin interface +interface SQLAdminOptions { + rootUrl: string; +} +interface IpAddress { + type?: string | null; + ipAddress?: string | null; +} +interface SQLAdminClientGetResponse { + dnsName?: string; + ipAddresses?: IpAddress[]; + region?: string; + serverCaCert?: {} | ReturnType; +} +interface SQLAdminClientGenerateEphemeralCertResponse { + ephemeralCert: void | {cert?: string}; +} +interface SQLAdminClient { + get: ({ + requestBody, + }: { + requestBody?: unknown; + }) => void | {data?: void | SQLAdminClientGetResponse}; + generateEphemeralCert: ({ + requestBody, + }: { + requestBody?: unknown; + }) => void | {data?: void | SQLAdminClientGenerateEphemeralCertResponse}; +} +let sqlAdminOptions: SQLAdminOptions; +const sqlAdminClient: SQLAdminClient = { + get() {}, + generateEphemeralCert() {}, +}; + +class Sqladmin { + public connect; + constructor(opts: SQLAdminOptions) { + this.connect = sqlAdminClient; + sqlAdminOptions = opts; + } +} + +const {SQLAdminFetcher} = t.mockRequire('../src/sqladmin-fetcher', { + 'google-auth-library': { + GoogleAuth: class {}, + }, + '@googleapis/sqladmin': { + sqladmin_v1beta4: {Sqladmin}, + }, +}); + const serverCaCertResponse = (instance: string) => ({ kind: 'sql#sslCert', certSerialNumber: '0', @@ -39,20 +85,18 @@ const ephCertResponse = { cert: CLIENT_CERT, }; -const mockRequest = ( +const mockEmptySQLAdminGetInstanceMetadata = (): void => { + sqlAdminClient.get = () => ({}); +}; + +const mockSQLAdminGetInstanceMetadata = ( instanceInfo: InstanceConnectionInfo, - overrides?: sqladmin_v1beta4.Schema$ConnectSettings, - sqlAdminAPIEndpoint?: string + overrides?: SQLAdminClientGetResponse ): void => { - const {projectId, regionId, instanceId} = instanceInfo; - - nock(sqlAdminAPIEndpoint ?? 'https://sqladmin.googleapis.com') - .get( - `/sql/v1beta4/projects/${projectId}/instances/${instanceId}/connectSettings` - ) - .reply(200, { - kind: 'sql#connectSettings', - serverCaCert: serverCaCertResponse(instanceId), + const {regionId, instanceId} = instanceInfo; + + sqlAdminClient.get = () => ({ + data: { ipAddresses: [ { type: 'PRIMARY', @@ -64,33 +108,63 @@ const mockRequest = ( }, ], region: regionId, - databaseVersion: 'POSTGRES_14', - backendType: 'SECOND_GEN', - // overrides any properties from the base mock + serverCaCert: serverCaCertResponse(instanceId), ...overrides, - }); + }, + }); }; -t.test('constructor', async t => { +const mockEmptySQLAdminGenerateEphemeralCert = (): void => { + sqlAdminClient.generateEphemeralCert = () => ({}); +}; + +const mockSQLAdminGenerateEphemeralCert = ( + instanceInfo: InstanceConnectionInfo, + overrides?: SQLAdminClientGenerateEphemeralCertResponse +): void => { + sqlAdminClient.generateEphemeralCert = () => ({ + data: { + ephemeralCert: ephCertResponse, + ...overrides, + }, + }); +}; + +t.afterEach(() => { + sqlAdminClient.get = () => {}; + sqlAdminClient.generateEphemeralCert = () => {}; +}); + +t.test('constructor loginAuth using GoogleAuth instance', async t => { + class GoogleAuth {} + const {SQLAdminFetcher} = t.mockRequire('../src/sqladmin-fetcher', { + 'google-auth-library': { + GoogleAuth, + }, + '@googleapis/sqladmin': { + sqladmin_v1beta4: {Sqladmin}, + }, + }); await t.test('should support GoogleAuth for `loginAuth`', async t => { const auth = new GoogleAuth(); t.ok(new SQLAdminFetcher({loginAuth: auth})); }); +}); +t.test('constructor loginAuth using non-GoogleAuth instance', async t => { await t.test('should support `AuthClient` for `loginAuth`', async t => { - const authClient = new OAuth2Client(); + const authClient = {}; t.ok(new SQLAdminFetcher({loginAuth: authClient})); }); }); t.test('getInstanceMetadata', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'my-project', regionId: 'us-east1', instanceId: 'my-instance', }; - mockRequest(instanceConnectionInfo); + mockSQLAdminGetInstanceMetadata(instanceConnectionInfo); const fetcher = new SQLAdminFetcher(); const instanceMetadata = await fetcher.getInstanceMetadata( @@ -112,42 +186,22 @@ t.test('getInstanceMetadata', async t => { }); t.test('getInstanceMetadata custom SQL Admin API endpoint', async t => { - setupCredentials(t); const sqlAdminAPIEndpoint = 'https://sqladmin.mydomain.com'; - const instanceConnectionInfo: InstanceConnectionInfo = { - projectId: 'my-project', - regionId: 'us-east1', - instanceId: 'my-instance', - }; - mockRequest(instanceConnectionInfo, {}, sqlAdminAPIEndpoint); - - const fetcher = new SQLAdminFetcher({sqlAdminAPIEndpoint}); - const instanceMetadata = await fetcher.getInstanceMetadata( - instanceConnectionInfo - ); - t.same( - instanceMetadata, - { - ipAddresses: { - public: '0.0.0.0', - }, - serverCaCert: { - cert: '-----BEGIN CERTIFICATE-----\n-----END CERTIFICATE-----', - expirationTime: '2033-01-06T10:00:00.232Z', - }, - }, - 'should return expected instance metadata object' + new SQLAdminFetcher({sqlAdminAPIEndpoint}); + t.strictSame( + sqlAdminOptions.rootUrl, + sqlAdminAPIEndpoint, + 'should pass on the sql admin endpoint to the sqladmin lib' ); }); t.test('getInstanceMetadata private ip', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'private-ip-project', regionId: 'us-east1', instanceId: 'private-ip-instance', }; - mockRequest(instanceConnectionInfo, { + mockSQLAdminGetInstanceMetadata(instanceConnectionInfo, { ipAddresses: [ { type: 'PRIVATE', @@ -172,13 +226,12 @@ t.test('getInstanceMetadata private ip', async t => { }); t.test('getInstanceMetadata no valid cert', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'no-cert-project', regionId: 'us-east1', instanceId: 'no-cert-instance', }; - mockRequest(instanceConnectionInfo, { + mockSQLAdminGetInstanceMetadata(instanceConnectionInfo, { serverCaCert: {}, }); @@ -193,17 +246,12 @@ t.test('getInstanceMetadata no valid cert', async t => { }); t.test('getInstanceMetadata no response data', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'no-response-data-project', regionId: 'us-east1', instanceId: 'no-response-data-instance', }; - nock('https://sqladmin.googleapis.com/sql/v1beta4/projects') - .get( - '/no-response-data-project/instances/no-response-data-instance/connectSettings' - ) - .reply(200, ''); + mockEmptySQLAdminGetInstanceMetadata(); const fetcher = new SQLAdminFetcher(); t.rejects( @@ -218,13 +266,12 @@ t.test('getInstanceMetadata no response data', async t => { }); t.test('getInstanceMetadata no valid region', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'no-region-project', regionId: 'us-east1', instanceId: 'no-region-instance', }; - mockRequest(instanceConnectionInfo, { + mockSQLAdminGetInstanceMetadata(instanceConnectionInfo, { region: undefined, }); @@ -239,13 +286,12 @@ t.test('getInstanceMetadata no valid region', async t => { }); t.test('getInstanceMetadata invalid region', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'invalid-region-project', regionId: 'us-east1', instanceId: 'invalid-region-instance', }; - mockRequest(instanceConnectionInfo, { + mockSQLAdminGetInstanceMetadata(instanceConnectionInfo, { region: 'something-else', }); @@ -261,32 +307,13 @@ t.test('getInstanceMetadata invalid region', async t => { ); }); -const mockGenerateEphemeralCertRequest = ( - instanceInfo: InstanceConnectionInfo, - overrides?: sqladmin_v1beta4.Schema$GenerateEphemeralCertResponse, - sqlAdminAPIEndpoint?: string -): void => { - const {projectId, instanceId} = instanceInfo; - - nock(sqlAdminAPIEndpoint ?? 'https://sqladmin.googleapis.com') - .post( - `/sql/v1beta4/projects/${projectId}/instances/${instanceId}:generateEphemeralCert` - ) - .reply(200, { - ephemeralCert: ephCertResponse, - // overrides any properties from the base mock - ...overrides, - }); -}; - t.test('getEphemeralCertificate', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'my-project', regionId: 'us-east1', instanceId: 'my-instance', }; - mockGenerateEphemeralCertRequest(instanceConnectionInfo); + mockSQLAdminGenerateEphemeralCert(instanceConnectionInfo); const fetcher = new SQLAdminFetcher(); const ephemeralCert = await fetcher.getEphemeralCertificate( @@ -304,44 +331,13 @@ t.test('getEphemeralCertificate', async t => { ); }); -t.test('getEphemeralCertificate custom SQL Admin API endpoint', async t => { - setupCredentials(t); - const sqlAdminAPIEndpoint = 'https://sqladmin.mydomain.com'; - const instanceConnectionInfo: InstanceConnectionInfo = { - projectId: 'my-project', - regionId: 'us-east1', - instanceId: 'my-instance', - }; - mockGenerateEphemeralCertRequest( - instanceConnectionInfo, - {}, - sqlAdminAPIEndpoint - ); - - const fetcher = new SQLAdminFetcher({sqlAdminAPIEndpoint}); - const ephemeralCert = await fetcher.getEphemeralCertificate( - instanceConnectionInfo, - 'key', - AuthTypes.PASSWORD - ); - t.same( - ephemeralCert, - { - cert: CLIENT_CERT, - expirationTime: '3022-07-22T17:53:09.000Z', - }, - 'should return expected ssl cert' - ); -}); - -t.test('getEphemeralCertificate no certificate', async t => { - setupCredentials(t); +t.test('getEphemeralCertificate no resulting certificate', async t => { const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'no-cert-project', regionId: 'us-east1', instanceId: 'no-cert-instance', }; - mockGenerateEphemeralCertRequest(instanceConnectionInfo, { + mockSQLAdminGenerateEphemeralCert(instanceConnectionInfo, { ephemeralCert: undefined, }); @@ -360,17 +356,12 @@ t.test('getEphemeralCertificate no certificate', async t => { }); t.test('getEphemeralCertificate no response data', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'no-response-data-project', regionId: 'us-east1', instanceId: 'no-response-data-instance', }; - nock('https://sqladmin.googleapis.com/sql/v1beta4/projects') - .post( - '/no-response-data-project/instances/no-response-data-instance:generateEphemeralCert' - ) - .reply(200, ''); + mockEmptySQLAdminGenerateEphemeralCert(); const fetcher = new SQLAdminFetcher(); t.rejects( @@ -389,19 +380,29 @@ t.test('getEphemeralCertificate no response data', async t => { }); t.test('getEphemeralCertificate no access token', async t => { - setupCredentials(t); const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'my-project', regionId: 'us-east1', instanceId: 'my-instance', }; - mockGenerateEphemeralCertRequest(instanceConnectionInfo); - - const loginAuth = new GoogleAuth({ - scopes: ['https://www.googleapis.com/auth/sqlservice.login'], + const {SQLAdminFetcher} = t.mockRequire('../src/sqladmin-fetcher', { + 'google-auth-library': { + GoogleAuth: class { + async getAccessToken() { + return ''; + } + async getClient() { + return {}; + } + }, + }, + '@googleapis/sqladmin': { + sqladmin_v1beta4: {Sqladmin}, + }, }); - loginAuth.getAccessToken = async () => null; + mockSQLAdminGenerateEphemeralCert(instanceConnectionInfo); + const loginAuth = {}; const fetcher = new SQLAdminFetcher({loginAuth}); t.rejects( @@ -418,33 +419,47 @@ t.test('getEphemeralCertificate no access token', async t => { ); }); -t.test('getEphemeralCertificate sets access token', async t => { - setupCredentials(t); +t.test('getEphemeralCertificate sets access token on IAM', async t => { const instanceConnectionInfo: InstanceConnectionInfo = { projectId: 'my-project', regionId: 'us-east1', instanceId: 'my-instance', }; - const {projectId, instanceId} = instanceConnectionInfo; - - nock('https://sqladmin.googleapis.com/sql/v1beta4/projects') - .post(`/${projectId}/instances/${instanceId}:generateEphemeralCert`) - .reply((uri, reqBody) => { - // check that token is sent in the ephemeral cert request - t.hasProp( - reqBody, - 'access_token', - 'should have access_token in request body' - ); - return [ - 200, - { - ephemeralCert: ephCertResponse, - }, - ]; - }); + const {SQLAdminFetcher} = t.mockRequire('../src/sqladmin-fetcher', { + 'google-auth-library': { + GoogleAuth: class { + async getAccessToken() { + return 'token'; + } + async getClient() { + return { + credentials: { + expire_date: '2033-01-06T10:00:00.232Z', + }, + }; + } + }, + }, + '@googleapis/sqladmin': { + sqladmin_v1beta4: {Sqladmin}, + }, + }); + const loginAuth = {}; + + sqlAdminClient.generateEphemeralCert = ({requestBody}) => { + t.hasProp( + requestBody, + 'access_token', + 'should have access_token in request body' + ); + return { + data: { + ephemeralCert: ephCertResponse, + }, + }; + }; - const fetcher = new SQLAdminFetcher(); + const fetcher = new SQLAdminFetcher({loginAuth}); const ephemeralCert = await fetcher.getEphemeralCertificate( instanceConnectionInfo, 'key', @@ -452,72 +467,4 @@ t.test('getEphemeralCertificate sets access token', async t => { ); t.same(ephemeralCert.cert, CLIENT_CERT, 'should return expected ssl cert'); - // check that it is using the earlier expiration time for the token - t.notMatch( - ephemeralCert.expirationTime, - '3022-07-22T17:53:09.000Z', - 'should return earlier token expiration time' - ); -}); - -t.test('generateAccessToken endpoint should retry', async t => { - const path = t.testdir({ - credentials: JSON.stringify({ - delegates: [], - service_account_impersonation_url: - 'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/foo@dev.org:generateAccessToken', - source_credentials: { - client_id: - 'b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c', - client_secret: - '7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730', - refresh_token: - 'bf07a7fbb825fc0aae7bf4a1177b2b31fcf8a3feeaf7092761e18c859ee52a9c', - type: 'authorized_user', - }, - type: 'impersonated_service_account', - }), - }); - const creds = process.env.GOOGLE_APPLICATION_CREDENTIALS; - process.env.GOOGLE_APPLICATION_CREDENTIALS = resolve(path, 'credentials'); - t.teardown(() => { - process.env.GOOGLE_APPLICATION_CREDENTIALS = creds; - }); - - nock('https://oauth2.googleapis.com') - .persist() - .post('/token') - .reply(200, {access_token: 'abc123', expires_in: 1}); - - nock('https://oauth2.googleapis.com').post('/tokeninfo').reply(200, { - expires_in: 3600, - scope: 'https://www.googleapis.com/auth/sqlservice.login', - }); - - nock('https://iamcredentials.googleapis.com/v1') - .post('/projects/-/serviceAccounts/foo@dev.org:generateAccessToken') - .replyWithError({code: 'ECONNRESET'}); - - nock('https://iamcredentials.googleapis.com/v1') - .post('/projects/-/serviceAccounts/foo@dev.org:generateAccessToken') - .reply(200, { - accessToken: - 'b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c', - expireTime: new Date(Date.now() + 3600).toISOString(), - }); - - const instanceConnectionInfo: InstanceConnectionInfo = { - projectId: 'my-project', - regionId: 'us-east1', - instanceId: 'my-instance', - }; - - // Second try should succeed - mockRequest(instanceConnectionInfo); - - const fetcher = new SQLAdminFetcher(); - const instanceMetadata = await fetcher.getInstanceMetadata( - instanceConnectionInfo - ); - t.ok(instanceMetadata, 'should return expected instance metadata object'); }); diff --git a/test/serial/connector-integration.ts b/test/x-serial/connector-integration.ts similarity index 89% rename from test/serial/connector-integration.ts rename to test/x-serial/connector-integration.ts index 9c674364..5b9e4851 100644 --- a/test/serial/connector-integration.ts +++ b/test/x-serial/connector-integration.ts @@ -68,15 +68,18 @@ t.test('Connector integration test', async t => { }); // mocks generateKeys module so that it can return a deterministic result - const {Connector} = t.mock('../../src/connector', { - '../../src/cloud-sql-instance': t.mock('../../src/cloud-sql-instance', { - '../../src/crypto': { - generateKeys: async () => ({ - publicKey: '-----BEGIN PUBLIC KEY-----', - privateKey: CLIENT_KEY, - }), - }, - }), + const {Connector} = t.mockRequire('../../src/connector', { + '../../src/cloud-sql-instance': t.mockRequire( + '../../src/cloud-sql-instance', + { + '../../src/crypto': { + generateKeys: async () => ({ + publicKey: '-----BEGIN PUBLIC KEY-----', + privateKey: CLIENT_KEY, + }), + }, + } + ), }); const connector = new Connector();