From ff96ace55db8ab39a69067847ad19a05ab954983 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 12:30:37 +0000 Subject: [PATCH 01/14] build(deps-dev): bump ava from 5.3.1 to 6.1.1 Bumps [ava](https://github.com/avajs/ava) from 5.3.1 to 6.1.1. - [Release notes](https://github.com/avajs/ava/releases) - [Commits](https://github.com/avajs/ava/compare/v5.3.1...v6.1.1) --- updated-dependencies: - dependency-name: ava dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 739 +++++++++++++++++++--------------------------- package.json | 2 +- 2 files changed, 300 insertions(+), 441 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6370094bc29..4a544198ed0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "@types/mailparser": "3.4.4", "@typescript-eslint/eslint-plugin": "6.21.0", "@typescript-eslint/parser": "6.21.0", - "ava": "5.3.1", + "ava": "6.1.1", "chai": "4.4.1", "chai-as-promised": "7.1.1", "eslint": "^8.56.0", @@ -648,7 +648,6 @@ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "dev": true, - "optional": true, "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -669,7 +668,6 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "optional": true, "dependencies": { "debug": "4" }, @@ -682,7 +680,6 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, - "optional": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -894,6 +891,19 @@ "node": ">=12" } }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/@selderee/plugin-htmlparser2": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", @@ -919,6 +929,18 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.2.1.tgz", + "integrity": "sha512-255V7MMIKw6aQ43Wbqp9HZ+VHn6acddERTLiiLnlcPLU9PdTq9Aijl12oklAgUEblLWye+vHLzmqBx6f2TGcZw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", @@ -1302,6 +1324,41 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@vercel/nft": { + "version": "0.26.4", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.26.4.tgz", + "integrity": "sha512-j4jCOOXke2t8cHZCIxu1dzKLHLcFmYzC3yqAK6MfZznOL1QIJKd0xcFsXK3zcqzU7ScsE2zWkiMMNHGMHgp+FA==", + "dev": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.5", + "@rollup/pluginutils": "^4.0.0", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.2", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.2", + "node-gyp-build": "^4.2.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vercel/nft/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -1525,8 +1582,7 @@ "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, - "optional": true + "dev": true }, "node_modules/abort-controller": { "version": "3.0.0", @@ -1562,6 +1618,15 @@ "acorn": "^8" } }, + "node_modules/acorn-import-attributes": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.2.tgz", + "integrity": "sha512-O+nfJwNolEA771IYJaiLWK1UAwjNsQmZbTRqqwBYxCgVQTmpFEMvBw6LOIQV0Me339L5UMVYFyRohGnGlQDdIQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -1857,22 +1922,6 @@ "node": ">= 14" } }, - "node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2015,25 +2064,11 @@ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "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, - "optional": true + "dev": true }, "node_modules/are-docs-informative": { "version": "0.0.2", @@ -2049,7 +2084,6 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dev": true, - "optional": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -2312,6 +2346,12 @@ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, + "node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2337,50 +2377,47 @@ } }, "node_modules/ava": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ava/-/ava-5.3.1.tgz", - "integrity": "sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ava/-/ava-6.1.1.tgz", + "integrity": "sha512-A+DG0Ag0e5zvt262Ze0pG5QH7EBmhn+DB9uK7WkUtJVAtGjZFeKTpUOKx339DMGn53+FB24pCJC5klX2WU4VOw==", "dev": true, "dependencies": { - "acorn": "^8.8.2", - "acorn-walk": "^8.2.0", + "@vercel/nft": "^0.26.2", + "acorn": "^8.11.3", + "acorn-walk": "^8.3.2", "ansi-styles": "^6.2.1", "arrgv": "^1.0.2", "arrify": "^3.0.0", - "callsites": "^4.0.0", - "cbor": "^8.1.0", - "chalk": "^5.2.0", - "chokidar": "^3.5.3", + "callsites": "^4.1.0", + "cbor": "^9.0.1", + "chalk": "^5.3.0", "chunkd": "^2.0.1", - "ci-info": "^3.8.0", + "ci-info": "^4.0.0", "ci-parallel-vars": "^1.0.1", - "clean-yaml-object": "^0.1.0", - "cli-truncate": "^3.1.0", + "cli-truncate": "^4.0.0", "code-excerpt": "^4.0.0", "common-path-prefix": "^3.0.0", "concordance": "^5.0.4", "currently-unhandled": "^0.4.1", "debug": "^4.3.4", "emittery": "^1.0.1", - "figures": "^5.0.0", - "globby": "^13.1.4", + "figures": "^6.0.1", + "globby": "^14.0.0", "ignore-by-default": "^2.1.0", "indent-string": "^5.0.0", - "is-error": "^2.2.2", "is-plain-object": "^5.0.0", "is-promise": "^4.0.0", "matcher": "^5.0.0", - "mem": "^9.0.2", + "memoize": "^10.0.0", "ms": "^2.1.3", - "p-event": "^5.0.1", - "p-map": "^5.5.0", - "picomatch": "^2.3.1", - "pkg-conf": "^4.0.0", + "p-map": "^7.0.1", + "package-config": "^5.0.0", + "picomatch": "^3.0.1", "plur": "^5.1.0", - "pretty-ms": "^8.0.0", + "pretty-ms": "^9.0.0", "resolve-cwd": "^3.0.0", "stack-utils": "^2.0.6", - "strip-ansi": "^7.0.1", + "strip-ansi": "^7.1.0", "supertap": "^3.0.1", "temp-dir": "^3.0.0", "write-file-atomic": "^5.0.1", @@ -2390,7 +2427,7 @@ "ava": "entrypoints/cli.mjs" }, "engines": { - "node": ">=14.19 <15 || >=16.15 <17 || >=18" + "node": "^18.18 || ^20.8 || ^21" }, "peerDependencies": { "@ava/typescript": "*" @@ -2401,29 +2438,45 @@ } } }, + "node_modules/ava/node_modules/ci-info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, "node_modules/ava/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ava/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/ava/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, "engines": { "node": ">=12" @@ -2432,6 +2485,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ava/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/ava/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", @@ -2525,13 +2602,13 @@ "node": "*" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "file-uri-to-path": "1.0.0" } }, "node_modules/bluebird": { @@ -2894,15 +2971,15 @@ "dev": true }, "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", "dev": true, "dependencies": { "nofilter": "^3.1.0" }, "engines": { - "node": ">=12.19" + "node": ">=16" } }, "node_modules/chai": { @@ -2997,36 +3074,11 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "optional": true, "engines": { "node": ">=10" } @@ -3098,42 +3150,6 @@ "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", "dev": true }, - "node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-stack/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-yaml-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", - "integrity": "sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", @@ -3162,16 +3178,39 @@ } }, "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "dependencies": { "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "string-width": "^7.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3368,7 +3407,6 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "optional": true, "bin": { "color-support": "bin.js" } @@ -3591,8 +3629,7 @@ "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, - "optional": true + "dev": true }, "node_modules/convert-to-spaces": { "version": "2.0.1", @@ -3987,15 +4024,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "optional": true + "dev": true }, "node_modules/detect-libc": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "dev": true, - "optional": true, "engines": { "node": ">=8" } @@ -4900,6 +4935,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -5135,28 +5176,15 @@ } }, "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.0.1.tgz", + "integrity": "sha512-0oY/olScYD4IhQ8u//gCPA4F3mlTn2dacYmiDm/mbDQvpmLjV4uH+zhsQ5IyXRyvqkvtUkXkNdGvg5OFJTCsuQ==", "dev": true, "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" + "is-unicode-supported": "^2.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5174,6 +5202,12 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, "node_modules/filesize": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.0.tgz", @@ -5210,6 +5244,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-up-simple": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", + "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/firefox-profile": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.3.2.tgz", @@ -5406,7 +5452,6 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "optional": true, "dependencies": { "minipass": "^3.0.0" }, @@ -5419,7 +5464,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "optional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5433,20 +5477,6 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -5536,7 +5566,6 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dev": true, - "optional": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -5557,7 +5586,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "optional": true, "engines": { "node": ">=8" } @@ -5566,15 +5594,13 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "optional": true + "dev": true }, "node_modules/gauge/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "optional": true, "engines": { "node": ">=8" } @@ -5583,15 +5609,13 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "optional": true + "dev": true }, "node_modules/gauge/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "optional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5606,7 +5630,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "optional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6186,8 +6209,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true, - "optional": true + "dev": true }, "node_modules/has-yarn": { "version": "3.0.0", @@ -6618,18 +6640,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -6727,12 +6737,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-error": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", - "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", - "dev": true - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6970,12 +6974,12 @@ "dev": true }, "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz", + "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7570,45 +7574,6 @@ "node": ">=18.0.0" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true - }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", - "dev": true, - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/load-json-file": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", @@ -7788,7 +7753,6 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "optional": true, "dependencies": { "semver": "^6.0.0" }, @@ -7804,7 +7768,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "optional": true, "bin": { "semver": "bin/semver.js" } @@ -7888,20 +7851,19 @@ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, - "node_modules/mem": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", + "node_modules/memoize": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/memoize/-/memoize-10.0.0.tgz", + "integrity": "sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==", "dev": true, "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=12.20" + "node": ">=18" }, "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" + "url": "https://github.com/sindresorhus/memoize?sponsor=1" } }, "node_modules/meow": { @@ -7977,6 +7939,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mimic-function": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.0.tgz", + "integrity": "sha512-RBfQ+9X9DpXdEoK7Bu+KeEU6vFhumEIiXKWECPzRBmDserEq4uR2b/VCm0LwpMSosoq2k+Zuxj/GzOr0Fn6h/g==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", @@ -8033,7 +8007,6 @@ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, - "optional": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -8047,7 +8020,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "optional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8346,6 +8318,17 @@ "node": ">= 6.13.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-notifier": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", @@ -8399,7 +8382,6 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, - "optional": true, "dependencies": { "abbrev": "1" }, @@ -8463,7 +8445,6 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dev": true, - "optional": true, "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -8819,21 +8800,6 @@ "node": ">=4" } }, - "node_modules/p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", - "dev": true, - "dependencies": { - "p-timeout": "^5.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", @@ -8874,27 +8840,12 @@ } }, "node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.1.tgz", + "integrity": "sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8942,6 +8893,22 @@ "node": ">= 14" } }, + "node_modules/package-config": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/package-config/-/package-config-5.0.0.tgz", + "integrity": "sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==", + "dev": true, + "dependencies": { + "find-up-simple": "^1.0.0", + "load-json-file": "^7.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-json": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", @@ -9006,12 +8973,12 @@ } }, "node_modules/parse-ms": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", - "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9282,104 +9249,6 @@ "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", "dev": true }, - "node_modules/pkg-conf": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", - "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", - "dev": true, - "dependencies": { - "find-up": "^6.0.0", - "load-json-file": "^7.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/pkg-conf/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -9576,15 +9445,15 @@ } }, "node_modules/pretty-ms": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", - "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.0.0.tgz", + "integrity": "sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==", "dev": true, "dependencies": { - "parse-ms": "^3.0.0" + "parse-ms": "^4.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9850,7 +9719,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "optional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9860,18 +9728,6 @@ "node": ">= 6" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/real-require": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", @@ -10461,8 +10317,7 @@ "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, - "optional": true + "dev": true }, "node_modules/set-function-length": { "version": "1.2.1", @@ -11727,7 +11582,6 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dev": true, - "optional": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -11767,7 +11621,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "optional": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -12214,6 +12067,18 @@ "integrity": "sha512-acoBcoBobgsg3YUEO/Oht8JJCuFYpzWLFKbqEbcEZcXdkQrTzkF/yWj9JoLaFDa6ArI31dFEmNZkCjQZ7mlf7w==", "dev": true }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -12861,7 +12726,6 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, - "optional": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -12871,7 +12735,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "optional": true, "engines": { "node": ">=8" } @@ -12880,15 +12743,13 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "optional": true + "dev": true }, "node_modules/wide-align/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "optional": true, "engines": { "node": ">=8" } @@ -12898,7 +12759,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "optional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12913,7 +12773,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "optional": true, "dependencies": { "ansi-regex": "^5.0.1" }, diff --git a/package.json b/package.json index da8c06f093b..b319591a319 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@types/mailparser": "3.4.4", "@typescript-eslint/eslint-plugin": "6.21.0", "@typescript-eslint/parser": "6.21.0", - "ava": "5.3.1", + "ava": "6.1.1", "chai": "4.4.1", "chai-as-promised": "7.1.1", "eslint": "^8.56.0", From 31c518a116897c489bee2991042599219d03e342 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Mon, 26 Feb 2024 15:03:25 +0200 Subject: [PATCH 02/14] add registerCompletionHandler --- test/source/test.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/source/test.ts b/test/source/test.ts index d29254f556c..3398415e190 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -52,6 +52,14 @@ export type CommonAcct = 'compatibility' | 'compose' | 'ci.tests.gmail'; const asyncExec = promisify(exec); const browserPool = new BrowserPool(consts.POOL_SIZE, 'browserPool', buildDir, isMock, undefined, undefined, consts.IS_LOCAL_DEBUG); +test.before('set registerCompletionHandler', async () => { + const dynamicImport = new Function('specifier', 'return import(specifier)'); + const registerCompletionHandler = await dynamicImport('ava').registerCompletionHandler; + registerCompletionHandler(() => { + process.exit(); + }); +}); + test.beforeEach('set timeout', async t => { t.timeout(consts.TIMEOUT_EACH_RETRY); }); From 4fbb392d7a917467f680ff37ef942d721536a524 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Wed, 28 Feb 2024 22:29:32 +0200 Subject: [PATCH 03/14] wip --- test/source/test.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index 3398415e190..f2452d2aac1 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -52,11 +52,14 @@ export type CommonAcct = 'compatibility' | 'compose' | 'ci.tests.gmail'; const asyncExec = promisify(exec); const browserPool = new BrowserPool(consts.POOL_SIZE, 'browserPool', buildDir, isMock, undefined, undefined, consts.IS_LOCAL_DEBUG); +const dynamicImport = new Function('specifier', 'return import(specifier)'); + test.before('set registerCompletionHandler', async () => { - const dynamicImport = new Function('specifier', 'return import(specifier)'); - const registerCompletionHandler = await dynamicImport('ava').registerCompletionHandler; - registerCompletionHandler(() => { - process.exit(); + dynamicImport('ava').then((module: { registerCompletionHandler: (handler: () => void) => void }) => { + const { registerCompletionHandler } = module; + registerCompletionHandler(() => { + process.exit(); + }); }); }); From 7360774eab3e163f44e33771827fba2cabc7d97d Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Wed, 28 Feb 2024 22:42:18 +0200 Subject: [PATCH 04/14] wip --- test/source/test.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index f2452d2aac1..2561c34f9b9 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -54,12 +54,10 @@ const browserPool = new BrowserPool(consts.POOL_SIZE, 'browserPool', buildDir, i const dynamicImport = new Function('specifier', 'return import(specifier)'); -test.before('set registerCompletionHandler', async () => { - dynamicImport('ava').then((module: { registerCompletionHandler: (handler: () => void) => void }) => { - const { registerCompletionHandler } = module; - registerCompletionHandler(() => { - process.exit(); - }); +dynamicImport('ava').then((module: { registerCompletionHandler: (handler: () => void) => void }) => { + const { registerCompletionHandler } = module; + registerCompletionHandler(() => { + process.exit(); }); }); From 0eefded8bda087bc033209c4c67d622de42675d2 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Wed, 28 Feb 2024 23:09:18 +0200 Subject: [PATCH 05/14] wip --- test/source/test.ts | 191 ++++++++++++++++++++++---------------------- 1 file changed, 96 insertions(+), 95 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index 2561c34f9b9..6e22d7a1ff4 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -5,10 +5,11 @@ import { exec } from 'child_process'; import { promisify } from 'util'; import { BrowserHandle, BrowserPool } from './browser'; -import { AvaContext, TestContext, getDebugHtmlAtts, minutes, standaloneTestTimeout } from './tests/tooling'; -import { Util, getParsedCliParams } from './util'; +import { AvaContext, minutes } from './tests/tooling'; +import { getParsedCliParams } from './util'; -import { mkdirSync, realpathSync, writeFileSync } from 'fs'; +// import { mkdirSync, realpathSync, writeFileSync } from 'fs'; +import { writeFileSync } from 'fs'; import { TestUrls } from './browser/test-urls'; import { startAllApisMock } from './mock/all-apis-mock'; import { defineComposeTests } from './tests/compose'; @@ -21,7 +22,7 @@ import { defineSettingsTests } from './tests/settings'; import { defineSetupTests } from './tests/setup'; import { defineUnitBrowserTests } from './tests/unit-browser'; import { defineUnitNodeTests } from './tests/unit-node'; -import { reportedErrors } from './mock/fes/shared-tenant-fes-endpoints'; +// import { reportedErrors } from './mock/fes/shared-tenant-fes-endpoints'; export const { testVariant, testGroup, oneIfNotPooled, buildDir, isMock } = getParsedCliParams(); export const internalTestState = { expectIntentionalErrReport: false }; // updated when a particular test that causes an error is run @@ -147,98 +148,98 @@ const saveBrowserLog = async (t: AvaContext, browser: BrowserHandle) => { export type TestWithBrowser = typeof testWithBrowser; -test.after.always('evaluate Catch.reportErr errors', async t => { - if (!isMock || testGroup !== 'STANDARD-GROUP') { - // can only collect reported errs when running with a mocked api - t.pass(); - return; - } - // todo - here we filter out an error that would otherwise be useful - // in one test we are testing an error scenario - // our S/MIME implementation is still early so it throws "reportable" errors like this during tests - const usefulErrors = reportedErrors - .filter(e => e.message !== 'Too few bytes to read ASN.1 value.') - // below for test "get.updating.key@key-manager-choose-passphrase-forbid-storing.flowcrypt.test - automatic update of key found on key manager" - // and for test "setup [using key manager] - notify users when their keys expire soon" - .filter( - e => - e.message !== 'Some keys could not be parsed' && - !e.message.match(/Bad Request: 400 when GET-ing https:\/\/.*localhost:\d+\/flowcrypt-email-key-manager/) - ) - // below for test "decrypt - failure retrieving chunk download - next request will try anew" - .filter( - e => - !/400 when GET-ing https:\/\/.*localhost:\d+\/gmail\/v1\/users\/me\/messages\/1885ded59a2b5a8d\/attachments\/ANGjdJ_0g7PGqJSjI8-Wjd5o8HcVnAHxIk-H210TAxxwf/.test( - e.message - ) - ) - // below for test "user4@standardsubdomainfes.localhost:8001 - PWD encrypted message with FES web portal - a send fails with gateway update error" - .filter(e => !e.message.includes('Test error')) - // below for test "no.fes@example.com - skip FES on consumer, show friendly message on enterprise" - .filter(e => !e.trace.includes('-1 when GET-ing https://fes.example.com')) - // todo - ideally mock tests would never call this. But we do tests with human@flowcrypt.com so it's calling here - .filter(e => !e.trace.includes('-1 when GET-ing https://openpgpkey.flowcrypt.com')) - // below for "test allows to retry public key search when attester returns error" - .filter( - e => !e.message.match(/Error: Internal Server Error: 500 when GET-ing https:\/\/localhost:\d+\/attester\/pub\/attester\.return\.error@flowcrypt\.test/) - ); - const foundExpectedErr = usefulErrors.find(re => re.message === `intentional error for debugging`); - const foundUnwantedErrs = usefulErrors.filter( - re => - re.message !== `intentional error for debugging` && - !re.message.includes('traversal forbidden') && - !re.message.includes('The string to be decoded is not correctly encoded') - ); - if (testVariant === 'CONSUMER-MOCK' && internalTestState.expectIntentionalErrReport && !foundExpectedErr) { - // on consumer flavor app, we submit errors to flowcrypt.com backend - t.fail(`Catch.reportErr errors: missing intentional error report on consumer flavor`); - return; - } - if (testVariant === 'ENTERPRISE-MOCK' && reportedErrors.length) { - // on enterprise flavor app, we don't submit any errors anywhere yet - t.fail(`Catch.reportErr errors: should not report any error on enterprise app`); - return; - } - if (foundUnwantedErrs.length) { - for (const e of foundUnwantedErrs) { - console.info(`----- mockBackendData Catch.reportErr -----\nname: ${e.name}\nmessage: ${e.message}\nurl: ${e.url}\ntrace: ${e.trace}`); - } - t.fail(`Catch.reportErr errors: ${foundUnwantedErrs.length}`); - } else { - t.pass(); - } -}); +// test.after.always('evaluate Catch.reportErr errors', async t => { +// if (!isMock || testGroup !== 'STANDARD-GROUP') { +// // can only collect reported errs when running with a mocked api +// t.pass(); +// return; +// } +// // todo - here we filter out an error that would otherwise be useful +// // in one test we are testing an error scenario +// // our S/MIME implementation is still early so it throws "reportable" errors like this during tests +// const usefulErrors = reportedErrors +// .filter(e => e.message !== 'Too few bytes to read ASN.1 value.') +// // below for test "get.updating.key@key-manager-choose-passphrase-forbid-storing.flowcrypt.test - automatic update of key found on key manager" +// // and for test "setup [using key manager] - notify users when their keys expire soon" +// .filter( +// e => +// e.message !== 'Some keys could not be parsed' && +// !e.message.match(/Bad Request: 400 when GET-ing https:\/\/.*localhost:\d+\/flowcrypt-email-key-manager/) +// ) +// // below for test "decrypt - failure retrieving chunk download - next request will try anew" +// .filter( +// e => +// !/400 when GET-ing https:\/\/.*localhost:\d+\/gmail\/v1\/users\/me\/messages\/1885ded59a2b5a8d\/attachments\/ANGjdJ_0g7PGqJSjI8-Wjd5o8HcVnAHxIk-H210TAxxwf/.test( +// e.message +// ) +// ) +// // below for test "user4@standardsubdomainfes.localhost:8001 - PWD encrypted message with FES web portal - a send fails with gateway update error" +// .filter(e => !e.message.includes('Test error')) +// // below for test "no.fes@example.com - skip FES on consumer, show friendly message on enterprise" +// .filter(e => !e.trace.includes('-1 when GET-ing https://fes.example.com')) +// // todo - ideally mock tests would never call this. But we do tests with human@flowcrypt.com so it's calling here +// .filter(e => !e.trace.includes('-1 when GET-ing https://openpgpkey.flowcrypt.com')) +// // below for "test allows to retry public key search when attester returns error" +// .filter( +// e => !e.message.match(/Error: Internal Server Error: 500 when GET-ing https:\/\/localhost:\d+\/attester\/pub\/attester\.return\.error@flowcrypt\.test/) +// ); +// const foundExpectedErr = usefulErrors.find(re => re.message === `intentional error for debugging`); +// const foundUnwantedErrs = usefulErrors.filter( +// re => +// re.message !== `intentional error for debugging` && +// !re.message.includes('traversal forbidden') && +// !re.message.includes('The string to be decoded is not correctly encoded') +// ); +// if (testVariant === 'CONSUMER-MOCK' && internalTestState.expectIntentionalErrReport && !foundExpectedErr) { +// // on consumer flavor app, we submit errors to flowcrypt.com backend +// t.fail(`Catch.reportErr errors: missing intentional error report on consumer flavor`); +// return; +// } +// if (testVariant === 'ENTERPRISE-MOCK' && reportedErrors.length) { +// // on enterprise flavor app, we don't submit any errors anywhere yet +// t.fail(`Catch.reportErr errors: should not report any error on enterprise app`); +// return; +// } +// if (foundUnwantedErrs.length) { +// for (const e of foundUnwantedErrs) { +// console.info(`----- mockBackendData Catch.reportErr -----\nname: ${e.name}\nmessage: ${e.message}\nurl: ${e.url}\ntrace: ${e.trace}`); +// } +// t.fail(`Catch.reportErr errors: ${foundUnwantedErrs.length}`); +// } else { +// t.pass(); +// } +// }); -test.afterEach.always('send debug info if any', async t => { - console.info(`${t.passed ? 'passed' : 'FAILED'} test, ${t.title}`); - const failRnd = Util.lousyRandom(); - const testId = `FlowCrypt Browser Extension ${testVariant} ${failRnd}`; - const debugHtmlAttachments = getDebugHtmlAtts(testId, t.context as TestContext); - if (debugHtmlAttachments.length) { - console.info(`FAIL ID ${testId}`); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - standaloneTestTimeout(t, consts.TIMEOUT_SHORT, t.title); - console.info(`There are ${debugHtmlAttachments.length} debug files.`); - const debugArtifactDir = realpathSync(`${__dirname}/..`) + '/debugArtifacts'; - try { - mkdirSync(debugArtifactDir); - } catch (error) { - if (error.code !== 'EEXIST') throw error; - } - for (let i = 0; i < debugHtmlAttachments.length; i++) { - // const subject = `${testId} ${i + 1}/${debugHtmlAttachments.length}`; - const fileName = `debugHtmlAttachment-${testVariant}-${failRnd}-${i}.html`; - const filePath = `${debugArtifactDir}/${fileName}`; - console.info(`Writing debug file ${fileName}`); - writeFileSync(filePath, debugHtmlAttachments[i]); - } - console.info('All debug files written.'); - } else if (!t.passed) { - console.info(`no fails to debug`); - } - t.pass(); -}); +// test.afterEach.always('send debug info if any', async t => { +// console.info(`${t.passed ? 'passed' : 'FAILED'} test, ${t.title}`); +// const failRnd = Util.lousyRandom(); +// const testId = `FlowCrypt Browser Extension ${testVariant} ${failRnd}`; +// const debugHtmlAttachments = getDebugHtmlAtts(testId, t.context as TestContext); +// if (debugHtmlAttachments.length) { +// console.info(`FAIL ID ${testId}`); +// // eslint-disable-next-line @typescript-eslint/ban-ts-comment +// // @ts-expect-error +// standaloneTestTimeout(t, consts.TIMEOUT_SHORT, t.title); +// console.info(`There are ${debugHtmlAttachments.length} debug files.`); +// const debugArtifactDir = realpathSync(`${__dirname}/..`) + '/debugArtifacts'; +// try { +// mkdirSync(debugArtifactDir); +// } catch (error) { +// if (error.code !== 'EEXIST') throw error; +// } +// for (let i = 0; i < debugHtmlAttachments.length; i++) { +// // const subject = `${testId} ${i + 1}/${debugHtmlAttachments.length}`; +// const fileName = `debugHtmlAttachment-${testVariant}-${failRnd}-${i}.html`; +// const filePath = `${debugArtifactDir}/${fileName}`; +// console.info(`Writing debug file ${fileName}`); +// writeFileSync(filePath, debugHtmlAttachments[i]); +// } +// console.info('All debug files written.'); +// } else if (!t.passed) { +// console.info(`no fails to debug`); +// } +// t.pass(); +// }); if (testGroup === 'UNIT-TESTS') { defineUnitNodeTests(testVariant); From 71728badb4ff4822f221e604072f0ed457b4829a Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Mon, 4 Mar 2024 14:31:51 +0200 Subject: [PATCH 06/14] wip --- test/source/test.ts | 67 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index 6e22d7a1ff4..ccc8b3b38c1 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -5,11 +5,10 @@ import { exec } from 'child_process'; import { promisify } from 'util'; import { BrowserHandle, BrowserPool } from './browser'; -import { AvaContext, minutes } from './tests/tooling'; -import { getParsedCliParams } from './util'; +import { AvaContext, TestContext, getDebugHtmlAtts, minutes } from './tests/tooling'; +import { Util, getParsedCliParams } from './util'; -// import { mkdirSync, realpathSync, writeFileSync } from 'fs'; -import { writeFileSync } from 'fs'; +import { mkdirSync, realpathSync, writeFileSync } from 'fs'; import { TestUrls } from './browser/test-urls'; import { startAllApisMock } from './mock/all-apis-mock'; import { defineComposeTests } from './tests/compose'; @@ -210,36 +209,36 @@ export type TestWithBrowser = typeof testWithBrowser; // } // }); -// test.afterEach.always('send debug info if any', async t => { -// console.info(`${t.passed ? 'passed' : 'FAILED'} test, ${t.title}`); -// const failRnd = Util.lousyRandom(); -// const testId = `FlowCrypt Browser Extension ${testVariant} ${failRnd}`; -// const debugHtmlAttachments = getDebugHtmlAtts(testId, t.context as TestContext); -// if (debugHtmlAttachments.length) { -// console.info(`FAIL ID ${testId}`); -// // eslint-disable-next-line @typescript-eslint/ban-ts-comment -// // @ts-expect-error -// standaloneTestTimeout(t, consts.TIMEOUT_SHORT, t.title); -// console.info(`There are ${debugHtmlAttachments.length} debug files.`); -// const debugArtifactDir = realpathSync(`${__dirname}/..`) + '/debugArtifacts'; -// try { -// mkdirSync(debugArtifactDir); -// } catch (error) { -// if (error.code !== 'EEXIST') throw error; -// } -// for (let i = 0; i < debugHtmlAttachments.length; i++) { -// // const subject = `${testId} ${i + 1}/${debugHtmlAttachments.length}`; -// const fileName = `debugHtmlAttachment-${testVariant}-${failRnd}-${i}.html`; -// const filePath = `${debugArtifactDir}/${fileName}`; -// console.info(`Writing debug file ${fileName}`); -// writeFileSync(filePath, debugHtmlAttachments[i]); -// } -// console.info('All debug files written.'); -// } else if (!t.passed) { -// console.info(`no fails to debug`); -// } -// t.pass(); -// }); +test.afterEach.always('send debug info if any', async t => { + console.info(`${t.passed ? 'passed' : 'FAILED'} test, ${t.title}`); + const failRnd = Util.lousyRandom(); + const testId = `FlowCrypt Browser Extension ${testVariant} ${failRnd}`; + const debugHtmlAttachments = getDebugHtmlAtts(testId, t.context as TestContext); + if (debugHtmlAttachments.length) { + console.info(`FAIL ID ${testId}`); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + standaloneTestTimeout(t, consts.TIMEOUT_SHORT, t.title); + console.info(`There are ${debugHtmlAttachments.length} debug files.`); + const debugArtifactDir = realpathSync(`${__dirname}/..`) + '/debugArtifacts'; + try { + mkdirSync(debugArtifactDir); + } catch (error) { + if (error.code !== 'EEXIST') throw error; + } + for (let i = 0; i < debugHtmlAttachments.length; i++) { + // const subject = `${testId} ${i + 1}/${debugHtmlAttachments.length}`; + const fileName = `debugHtmlAttachment-${testVariant}-${failRnd}-${i}.html`; + const filePath = `${debugArtifactDir}/${fileName}`; + console.info(`Writing debug file ${fileName}`); + writeFileSync(filePath, debugHtmlAttachments[i]); + } + console.info('All debug files written.'); + } else if (!t.passed) { + console.info(`no fails to debug`); + } + t.pass(); +}); if (testGroup === 'UNIT-TESTS') { defineUnitNodeTests(testVariant); From 89d38cb24a6b4a4bf74f5e975e53f2c3116fa540 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Mon, 4 Mar 2024 15:18:40 +0200 Subject: [PATCH 07/14] wip --- test/source/test.ts | 124 ++++++++++++++++++++++---------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index ccc8b3b38c1..96f616dba54 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -21,7 +21,7 @@ import { defineSettingsTests } from './tests/settings'; import { defineSetupTests } from './tests/setup'; import { defineUnitBrowserTests } from './tests/unit-browser'; import { defineUnitNodeTests } from './tests/unit-node'; -// import { reportedErrors } from './mock/fes/shared-tenant-fes-endpoints'; +import { reportedErrors } from './mock/fes/shared-tenant-fes-endpoints'; export const { testVariant, testGroup, oneIfNotPooled, buildDir, isMock } = getParsedCliParams(); export const internalTestState = { expectIntentionalErrReport: false }; // updated when a particular test that causes an error is run @@ -147,67 +147,67 @@ const saveBrowserLog = async (t: AvaContext, browser: BrowserHandle) => { export type TestWithBrowser = typeof testWithBrowser; -// test.after.always('evaluate Catch.reportErr errors', async t => { -// if (!isMock || testGroup !== 'STANDARD-GROUP') { -// // can only collect reported errs when running with a mocked api -// t.pass(); -// return; -// } -// // todo - here we filter out an error that would otherwise be useful -// // in one test we are testing an error scenario -// // our S/MIME implementation is still early so it throws "reportable" errors like this during tests -// const usefulErrors = reportedErrors -// .filter(e => e.message !== 'Too few bytes to read ASN.1 value.') -// // below for test "get.updating.key@key-manager-choose-passphrase-forbid-storing.flowcrypt.test - automatic update of key found on key manager" -// // and for test "setup [using key manager] - notify users when their keys expire soon" -// .filter( -// e => -// e.message !== 'Some keys could not be parsed' && -// !e.message.match(/Bad Request: 400 when GET-ing https:\/\/.*localhost:\d+\/flowcrypt-email-key-manager/) -// ) -// // below for test "decrypt - failure retrieving chunk download - next request will try anew" -// .filter( -// e => -// !/400 when GET-ing https:\/\/.*localhost:\d+\/gmail\/v1\/users\/me\/messages\/1885ded59a2b5a8d\/attachments\/ANGjdJ_0g7PGqJSjI8-Wjd5o8HcVnAHxIk-H210TAxxwf/.test( -// e.message -// ) -// ) -// // below for test "user4@standardsubdomainfes.localhost:8001 - PWD encrypted message with FES web portal - a send fails with gateway update error" -// .filter(e => !e.message.includes('Test error')) -// // below for test "no.fes@example.com - skip FES on consumer, show friendly message on enterprise" -// .filter(e => !e.trace.includes('-1 when GET-ing https://fes.example.com')) -// // todo - ideally mock tests would never call this. But we do tests with human@flowcrypt.com so it's calling here -// .filter(e => !e.trace.includes('-1 when GET-ing https://openpgpkey.flowcrypt.com')) -// // below for "test allows to retry public key search when attester returns error" -// .filter( -// e => !e.message.match(/Error: Internal Server Error: 500 when GET-ing https:\/\/localhost:\d+\/attester\/pub\/attester\.return\.error@flowcrypt\.test/) -// ); -// const foundExpectedErr = usefulErrors.find(re => re.message === `intentional error for debugging`); -// const foundUnwantedErrs = usefulErrors.filter( -// re => -// re.message !== `intentional error for debugging` && -// !re.message.includes('traversal forbidden') && -// !re.message.includes('The string to be decoded is not correctly encoded') -// ); -// if (testVariant === 'CONSUMER-MOCK' && internalTestState.expectIntentionalErrReport && !foundExpectedErr) { -// // on consumer flavor app, we submit errors to flowcrypt.com backend -// t.fail(`Catch.reportErr errors: missing intentional error report on consumer flavor`); -// return; -// } -// if (testVariant === 'ENTERPRISE-MOCK' && reportedErrors.length) { -// // on enterprise flavor app, we don't submit any errors anywhere yet -// t.fail(`Catch.reportErr errors: should not report any error on enterprise app`); -// return; -// } -// if (foundUnwantedErrs.length) { -// for (const e of foundUnwantedErrs) { -// console.info(`----- mockBackendData Catch.reportErr -----\nname: ${e.name}\nmessage: ${e.message}\nurl: ${e.url}\ntrace: ${e.trace}`); -// } -// t.fail(`Catch.reportErr errors: ${foundUnwantedErrs.length}`); -// } else { -// t.pass(); -// } -// }); +test.after.always('evaluate Catch.reportErr errors', async t => { + if (!isMock || testGroup !== 'STANDARD-GROUP') { + // can only collect reported errs when running with a mocked api + t.pass(); + return; + } + // todo - here we filter out an error that would otherwise be useful + // in one test we are testing an error scenario + // our S/MIME implementation is still early so it throws "reportable" errors like this during tests + const usefulErrors = reportedErrors + .filter(e => e.message !== 'Too few bytes to read ASN.1 value.') + // below for test "get.updating.key@key-manager-choose-passphrase-forbid-storing.flowcrypt.test - automatic update of key found on key manager" + // and for test "setup [using key manager] - notify users when their keys expire soon" + .filter( + e => + e.message !== 'Some keys could not be parsed' && + !e.message.match(/Bad Request: 400 when GET-ing https:\/\/.*localhost:\d+\/flowcrypt-email-key-manager/) + ) + // below for test "decrypt - failure retrieving chunk download - next request will try anew" + .filter( + e => + !/400 when GET-ing https:\/\/.*localhost:\d+\/gmail\/v1\/users\/me\/messages\/1885ded59a2b5a8d\/attachments\/ANGjdJ_0g7PGqJSjI8-Wjd5o8HcVnAHxIk-H210TAxxwf/.test( + e.message + ) + ) + // below for test "user4@standardsubdomainfes.localhost:8001 - PWD encrypted message with FES web portal - a send fails with gateway update error" + .filter(e => !e.message.includes('Test error')) + // below for test "no.fes@example.com - skip FES on consumer, show friendly message on enterprise" + .filter(e => !e.trace.includes('-1 when GET-ing https://fes.example.com')) + // todo - ideally mock tests would never call this. But we do tests with human@flowcrypt.com so it's calling here + .filter(e => !e.trace.includes('-1 when GET-ing https://openpgpkey.flowcrypt.com')) + // below for "test allows to retry public key search when attester returns error" + .filter( + e => !e.message.match(/Error: Internal Server Error: 500 when GET-ing https:\/\/localhost:\d+\/attester\/pub\/attester\.return\.error@flowcrypt\.test/) + ); + const foundExpectedErr = usefulErrors.find(re => re.message === `intentional error for debugging`); + const foundUnwantedErrs = usefulErrors.filter( + re => + re.message !== `intentional error for debugging` && + !re.message.includes('traversal forbidden') && + !re.message.includes('The string to be decoded is not correctly encoded') + ); + if (testVariant === 'CONSUMER-MOCK' && internalTestState.expectIntentionalErrReport && !foundExpectedErr) { + // on consumer flavor app, we submit errors to flowcrypt.com backend + t.fail(`Catch.reportErr errors: missing intentional error report on consumer flavor`); + return; + } + if (testVariant === 'ENTERPRISE-MOCK' && reportedErrors.length) { + // on enterprise flavor app, we don't submit any errors anywhere yet + t.fail(`Catch.reportErr errors: should not report any error on enterprise app`); + return; + } + if (foundUnwantedErrs.length) { + for (const e of foundUnwantedErrs) { + console.info(`----- mockBackendData Catch.reportErr -----\nname: ${e.name}\nmessage: ${e.message}\nurl: ${e.url}\ntrace: ${e.trace}`); + } + t.fail(`Catch.reportErr errors: ${foundUnwantedErrs.length}`); + } else { + t.pass(); + } +}); test.afterEach.always('send debug info if any', async t => { console.info(`${t.passed ? 'passed' : 'FAILED'} test, ${t.title}`); From 586230def7d3ec36727502c33f4da7d330099d49 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Thu, 28 Mar 2024 11:59:39 +0200 Subject: [PATCH 08/14] wip --- test/source/test.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index 96f616dba54..f63b95b5ac5 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -5,7 +5,7 @@ import { exec } from 'child_process'; import { promisify } from 'util'; import { BrowserHandle, BrowserPool } from './browser'; -import { AvaContext, TestContext, getDebugHtmlAtts, minutes } from './tests/tooling'; +import { AvaContext, TestContext, getDebugHtmlAtts, minutes, standaloneTestTimeout } from './tests/tooling'; import { Util, getParsedCliParams } from './util'; import { mkdirSync, realpathSync, writeFileSync } from 'fs'; @@ -216,9 +216,7 @@ test.afterEach.always('send debug info if any', async t => { const debugHtmlAttachments = getDebugHtmlAtts(testId, t.context as TestContext); if (debugHtmlAttachments.length) { console.info(`FAIL ID ${testId}`); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - standaloneTestTimeout(t, consts.TIMEOUT_SHORT, t.title); + standaloneTestTimeout(t as AvaContext, consts.TIMEOUT_SHORT, t.title); console.info(`There are ${debugHtmlAttachments.length} debug files.`); const debugArtifactDir = realpathSync(`${__dirname}/..`) + '/debugArtifacts'; try { From fd686232d96db65c4062c82261a19ba29dc0ca84 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Thu, 28 Mar 2024 15:05:21 +0200 Subject: [PATCH 09/14] wip --- test/source/test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/source/test.ts b/test/source/test.ts index f63b95b5ac5..2561c34f9b9 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -216,7 +216,9 @@ test.afterEach.always('send debug info if any', async t => { const debugHtmlAttachments = getDebugHtmlAtts(testId, t.context as TestContext); if (debugHtmlAttachments.length) { console.info(`FAIL ID ${testId}`); - standaloneTestTimeout(t as AvaContext, consts.TIMEOUT_SHORT, t.title); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + standaloneTestTimeout(t, consts.TIMEOUT_SHORT, t.title); console.info(`There are ${debugHtmlAttachments.length} debug files.`); const debugArtifactDir = realpathSync(`${__dirname}/..`) + '/debugArtifacts'; try { From cc1e9e4fb42b02478af2a96c27bb32d7be612f43 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Tue, 4 Jun 2024 15:00:28 +0300 Subject: [PATCH 10/14] add registerCompletionHandler --- test/source/test.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index 763786076ba..d64d665b056 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -53,13 +53,19 @@ export type CommonAcct = 'compatibility' | 'compose' | 'ci.tests.gmail'; const asyncExec = promisify(exec); const browserPool = new BrowserPool(consts.POOL_SIZE, 'browserPool', buildDir, isMock, undefined, undefined, consts.IS_LOCAL_DEBUG); -const dynamicImport = new Function('specifier', 'return import(specifier)'); +const registerCompletionHandler = () => { + const dynamicImport = new Function('specifier', 'return import(specifier)'); -dynamicImport('ava').then((module: { registerCompletionHandler: (handler: () => void) => void }) => { - const { registerCompletionHandler } = module; - registerCompletionHandler(() => { - process.exit(); + dynamicImport('ava').then((module: { registerCompletionHandler: (handler: () => void) => void }) => { + const { registerCompletionHandler } = module; + registerCompletionHandler(() => { + process.exit(); + }); }); +}; + +test.before(() => { + registerCompletionHandler(); }); test.beforeEach('set timeout', async t => { From 7dbc3f352b9ef815fab6f439a31c4d1109144597 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Tue, 4 Jun 2024 15:55:00 +0300 Subject: [PATCH 11/14] =?UTF-8?q?add=20=E2=80=9C=E2=80=94force=E2=80=9D=20?= =?UTF-8?q?flag=20to=20artifact=20push?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .semaphore/semaphore.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.semaphore/semaphore.yml b/.semaphore/semaphore.yml index 0502a4d4b89..1fe5d5102e5 100644 --- a/.semaphore/semaphore.yml +++ b/.semaphore/semaphore.yml @@ -53,7 +53,7 @@ blocks: shopt -s nullglob for file in build/test/test/debugArtifacts/debugHtmlAttachment-*.html; do echo "Uploading debug file $file as job artifact..." - artifact push job "$file" + artifact push job "$file" --force done - name: Live UI Gmail tests @@ -89,7 +89,7 @@ blocks: shopt -s nullglob for file in build/test/test/debugArtifacts/debugHtmlAttachment-*.html; do echo "Uploading debug file $file as job artifact..." - artifact push job "$file" + artifact push job "$file" --force done - name: Other tests From 373d788b70afe56d4314bbc6e6922905d935ac58 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Tue, 4 Jun 2024 19:46:26 +0300 Subject: [PATCH 12/14] move registerCompletionHandler --- test/source/test.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index d64d665b056..bcc43e05005 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -64,10 +64,6 @@ const registerCompletionHandler = () => { }); }; -test.before(() => { - registerCompletionHandler(); -}); - test.beforeEach('set timeout', async t => { t.timeout(consts.TIMEOUT_EACH_RETRY); }); @@ -263,3 +259,5 @@ if (testGroup === 'UNIT-TESTS') { defineSettingsTests(testVariant, testWithBrowser); defineElementTests(testVariant, testWithBrowser); } + +registerCompletionHandler(); From 721bee95b6032d6d91a1e1813ac0b29dbb4fdcd4 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Mon, 19 Aug 2024 16:22:20 +0300 Subject: [PATCH 13/14] wip --- test/source/test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/source/test.ts b/test/source/test.ts index d8752ed3044..c2b2c1ddc4b 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -65,6 +65,10 @@ const registerCompletionHandler = () => { }); }; +test.before(() => { + registerCompletionHandler(); +}); + test.beforeEach('set timeout', async t => { t.timeout(consts.TIMEOUT_EACH_RETRY); }); @@ -260,5 +264,3 @@ if (testGroup === 'UNIT-TESTS') { defineSettingsTests(testVariant, testWithBrowser); defineElementTests(testVariant, testWithBrowser); } - -registerCompletionHandler(); From 7c9c4cef3b8c9d9ae081c722e15db54e5e380cb3 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Thu, 16 Jan 2025 16:03:38 +0200 Subject: [PATCH 14/14] use process.exit(0) --- test/source/test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/source/test.ts b/test/source/test.ts index 2ad14c903ea..c00108c5b28 100644 --- a/test/source/test.ts +++ b/test/source/test.ts @@ -61,7 +61,7 @@ const registerCompletionHandler = () => { dynamicImport('ava').then((module: { registerCompletionHandler: (handler: () => void) => void }) => { const { registerCompletionHandler } = module; registerCompletionHandler(() => { - process.exit(); + process.exit(0); }); }); };