diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a20a13..f11804b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. +## [1.57.2] (30/07/2026) +Cap the liquid-test polling interval at 5 seconds. The delay between result polls grew 5% per poll without a limit, so long test runs (~10 minutes) were only checked every 30-60 seconds and a finished run could sit unnoticed for up to a minute. + ## [1.57.1] (15/07/2026) Improve `silverfin run-sampler` by adding a compact output mode. diff --git a/lib/liquidTestRunner.js b/lib/liquidTestRunner.js index d71da85..985e961 100644 --- a/lib/liquidTestRunner.js +++ b/lib/liquidTestRunner.js @@ -311,6 +311,10 @@ function buildTestParams(firmId, templateType, handle, testName = "", renderMode async function fetchResult(firmId, testRunId, templateType) { let testRun = { status: "started" }; let pollingDelay = 1000; + // Without a cap the 5% growth leaves long test runs polling every 30-60s (or more), + // so a finished run can sit unnoticed for up to a minute. Capping keeps the request + // rate modest (at most one poll per 5s per run) while bounding the detection lag. + const maxPollingDelay = 5000; const waitingLimit = 2000000; spinner.spin("Running tests.."); @@ -322,7 +326,7 @@ async function fetchResult(firmId, testRunId, templateType) { const response = await SF.readTestRun(firmId, testRunId, templateType); testRun = response.data; waitingTime += pollingDelay; - pollingDelay *= 1.05; + pollingDelay = Math.min(pollingDelay * 1.05, maxPollingDelay); if (waitingTime >= waitingLimit) { spinner.stop(); consola.error("Timeout. Try to run your test again"); diff --git a/package-lock.json b/package-lock.json index d6e27f8..b442eb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "silverfin-cli", - "version": "1.57.1", + "version": "1.57.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "silverfin-cli", - "version": "1.57.1", + "version": "1.57.2", "license": "MIT", "dependencies": { - "adm-zip": "^0.5.18", + "adm-zip": "^0.6.0", "axios": "^1.6.2", "chalk": "4.1.2", "chokidar": "^3.6.0", @@ -1330,12 +1330,12 @@ } }, "node_modules/adm-zip": { - "version": "0.5.18", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.18.tgz", - "integrity": "sha512-ufJnssQGbxzLNS1Ho9bCtX4rQKCCvoVuDLHoJyc3F9dOGDB4BkWs2Ci0kv53lqocAEQ/Cbi+I2XCsNYGqVYqng==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.0.tgz", + "integrity": "sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==", "license": "MIT", "engines": { - "node": ">=12.0" + "node": ">=14.0" } }, "node_modules/agent-base": { diff --git a/package.json b/package.json index 4d216bb..1ca95c4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "silverfin-cli", - "version": "1.57.1", + "version": "1.57.2", "description": "Command line tool for Silverfin template development", "main": "index.js", "license": "MIT", @@ -22,7 +22,7 @@ "silverfin": "./node_modules/silverfin-cli/bin/cli.js" }, "dependencies": { - "adm-zip": "^0.5.18", + "adm-zip": "^0.6.0", "axios": "^1.6.2", "chalk": "4.1.2", "chokidar": "^3.6.0", diff --git a/tests/TESTS.md b/tests/TESTS.md index 20024bd..824d550 100644 --- a/tests/TESTS.md +++ b/tests/TESTS.md @@ -857,6 +857,7 @@ Source: `lib/liquidTestRunner.js` | `runTests` | should return undefined when config is missing | Verifies that `undefined` is returned and an error is logged when the template's `config.json` does not exist. | | `runTests` | should return undefined when YAML test file does not exist | Verifies that `undefined` is returned and an error is logged when the YAML test file path in the config does not exist on disk. | | `runTests` | should run tests and return testRun result when YAML exists and API responds | Verifies that `createTestRun` and `readTestRun` are called and the completed test-run object is returned. | +| `runTests` | should cap the polling interval at 5 seconds on long test runs | Verifies that the poll delay growth is capped at 5s, so a long-running test is still detected promptly once it finishes. | | `runTests` | should log info and return false when YAML file is empty (single line) | Verifies that `undefined` is returned and an info message about no stored tests is logged when the YAML file contains only a comment. | | `runTests` | should run tests for accountTemplate type | Verifies that `runTests` works end-to-end for the `accountTemplate` type and returns a completed test-run object. | | `runTestsWithOutput` | should exit with error for invalid templateType | Verifies that an invalid `templateType` causes an error to be logged and `process.exit(1)` to be called. | diff --git a/tests/lib/liquidTestRunner.test.js b/tests/lib/liquidTestRunner.test.js index 68674bc..52e849a 100644 --- a/tests/lib/liquidTestRunner.test.js +++ b/tests/lib/liquidTestRunner.test.js @@ -219,6 +219,41 @@ describe("runTests", () => { expect(result.testRun.tests).toEqual(makePassedTests()); }); + it("should cap the polling interval at 5 seconds on long test runs", async () => { + const handle = "reconciliation_text_1"; + setupFsUtilsMocks(handle); + + const testDir = path.join(tempDir, "reconciliation_texts", handle, "tests"); + fs.mkdirSync(testDir, { recursive: true }); + fs.writeFileSync(path.join(testDir, `${handle}_liquid_test.yml`), SIMPLE_YAML); + + ReconciliationText.read.mockReturnValue({ + handle, + text: "{% assign x = 1 %}", + text_parts: [], + }); + + SF.createTestRun = jest.fn().mockResolvedValue({ data: 42 }); + // Keep the run "started" for 60 polls - enough for the uncapped 5% growth to pass + // 5s (1000 * 1.05^33 ≈ 5000) - then complete. + let polls = 0; + SF.readTestRun = jest.fn().mockImplementation(async () => { + polls += 1; + return { data: makeTestRun(polls < 60 ? "started" : "completed", makePassedTests()) }; + }); + const setTimeoutSpy = jest.spyOn(global, "setTimeout"); + + const promise = runTests(1001, "reconciliationText", handle, "", false, "none"); + await jest.runAllTimersAsync(); + const result = await promise; + + expect(result.testRun.status).toBe("completed"); + const delays = setTimeoutSpy.mock.calls.map((call) => call[1]).filter((delay) => typeof delay === "number"); + // The cap must actually be reached, and never exceeded. + expect(Math.max(...delays)).toBe(5000); + setTimeoutSpy.mockRestore(); + }); + it("should log info and return undefined when YAML file is empty (single line)", async () => { const handle = "reconciliation_text_1"; setupFsUtilsMocks(handle); diff --git a/yarn.lock b/yarn.lock index fb08611..03a5ef1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -298,9 +298,9 @@ strip-json-comments "^3.1.1" "@eslint/js@^9.27.0": - version "9.39.4" - resolved "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz" - integrity sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw== + version "9.39.5" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz" + integrity sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A== "@eslint/js@8.57.1": version "8.57.1" @@ -668,11 +668,11 @@ "@types/istanbul-lib-report" "*" "@types/node@*": - version "25.9.2" - resolved "https://registry.npmjs.org/@types/node/-/node-25.9.2.tgz" - integrity sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw== + version "26.1.1" + resolved "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz" + integrity sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw== dependencies: - undici-types ">=7.24.0 <7.24.7" + undici-types "~8.3.0" "@types/stack-utils@^2.0.0": version "2.0.3" @@ -692,9 +692,9 @@ "@types/yargs-parser" "*" "@ungap/structured-clone@^1.2.0": - version "1.3.1" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz" - integrity sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ== + version "1.3.3" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz" + integrity sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg== acorn-jsx@^5.3.2: version "5.3.2" @@ -702,9 +702,14 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: - version "8.16.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" - integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + version "8.17.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz" + integrity sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg== + +adm-zip@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.0.tgz" + integrity sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg== agent-base@6: version "6.0.2" @@ -786,9 +791,9 @@ axios-mock-adapter@^2.1.0: is-buffer "^2.0.5" axios@^1.6.2, "axios@>= 0.17.0": - version "1.17.0" - resolved "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz" - integrity sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw== + version "1.18.1" + resolved "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz" + integrity sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g== dependencies: follow-redirects "^1.16.0" form-data "^4.0.5" @@ -863,10 +868,10 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -baseline-browser-mapping@^2.10.12: - version "2.10.34" - resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.34.tgz" - integrity sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw== +baseline-browser-mapping@^2.10.42: + version "2.10.43" + resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.43.tgz" + integrity sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ== binary-extensions@^2.0.0: version "2.3.0" @@ -874,9 +879,9 @@ binary-extensions@^2.0.0: integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== brace-expansion@^1.1.7: - version "1.1.15" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz" - integrity sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg== + version "1.1.16" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz" + integrity sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -889,14 +894,14 @@ braces@^3.0.3, braces@~3.0.2: fill-range "^7.1.1" browserslist@^4.24.0, "browserslist@>= 4.21.0": - version "4.28.2" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz" - integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== - dependencies: - baseline-browser-mapping "^2.10.12" - caniuse-lite "^1.0.30001782" - electron-to-chromium "^1.5.328" - node-releases "^2.0.36" + version "4.28.6" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.6.tgz" + integrity sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw== + dependencies: + baseline-browser-mapping "^2.10.42" + caniuse-lite "^1.0.30001803" + electron-to-chromium "^1.5.389" + node-releases "^2.0.51" update-browserslist-db "^1.2.3" bser@2.1.1: @@ -934,10 +939,10 @@ camelcase@^6.2.0: resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001782: - version "1.0.30001797" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz" - integrity sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w== +caniuse-lite@^1.0.30001803: + version "1.0.30001805" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001805.tgz" + integrity sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA== chalk@^4.0.0, chalk@4.1.2: version "4.1.2" @@ -1115,10 +1120,10 @@ dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -electron-to-chromium@^1.5.328: - version "1.5.368" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.368.tgz" - integrity sha512-7RckJJK4uESJF9PxvfMWd3TGqIiieUTG4HxnKaKuIpGbcr+r2ZEB3g2gAhCP3Fqm42vJSzLfgab9eva/C4/XVw== +electron-to-chromium@^1.5.389: + version "1.5.392" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.392.tgz" + integrity sha512-1yQq3VQCZRwsnYc67Oc+1fge6Lwtn0hzi6zmEVkB61Zx21kTbwJAW4dFLadl5Rc1tKhG/kSpYXnfiAhu0f0a1g== emittery@^0.13.1: version "0.13.1" @@ -1392,15 +1397,15 @@ follow-redirects@^1.16.0: integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== form-data@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz" - integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + version "4.0.6" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz" + integrity sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" es-set-tostringtag "^2.1.0" - hasown "^2.0.2" - mime-types "^2.1.12" + hasown "^2.0.4" + mime-types "^2.1.35" fs.realpath@^1.0.0: version "1.0.0" @@ -1531,7 +1536,7 @@ has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -hasown@^2.0.2, hasown@^2.0.3: +hasown@^2.0.2, hasown@^2.0.3, hasown@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz" integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== @@ -2090,17 +2095,17 @@ js-tokens@^4.0.0: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.2" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz" - integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== + version "3.15.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz" + integrity sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog== dependencies: argparse "^1.0.7" esprima "^4.0.0" js-yaml@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz" - integrity sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw== + version "4.3.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz" + integrity sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q== dependencies: argparse "^2.0.1" @@ -2227,7 +2232,7 @@ mime-db@1.52.0: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12: +mime-types@^2.1.35: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -2261,10 +2266,10 @@ node-int64@^0.4.0: resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.36: - version "2.0.47" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz" - integrity sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og== +node-releases@^2.0.51: + version "2.0.51" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz" + integrity sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -2528,14 +2533,14 @@ semver@^6.3.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.5.3: - version "7.8.2" - resolved "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz" - integrity sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ== + version "7.8.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== semver@^7.5.4: - version "7.8.2" - resolved "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz" - integrity sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ== + version "7.8.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== shebang-command@^2.0.0: version "2.0.0" @@ -2702,10 +2707,10 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -"undici-types@>=7.24.0 <7.24.7": - version "7.24.6" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz" - integrity sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg== +undici-types@~8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz" + integrity sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ== update-browserslist-db@^1.2.3: version "1.2.3" @@ -2793,9 +2798,9 @@ yargs-parser@^21.1.1: integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.3.1: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + version "17.7.3" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz" + integrity sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g== dependencies: cliui "^8.0.1" escalade "^3.1.1"