diff --git a/package-lock.json b/package-lock.json index 496ca1b0..0021a56c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2203,14 +2203,9 @@ } }, "@types/ejs": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.0.7.tgz", - "integrity": "sha512-AUxAGNIPr7wQmzdFMNhHy/RkR5kk8gSzAZIuCYY//6ZYJKHvnjezmoEYP34coPleUPnqrUWt03cCq7NzNaA/qg==" - }, - "@types/fibers": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/fibers/-/fibers-3.1.1.tgz", - "integrity": "sha512-yHoUi46uika0snoTpNcVqUSvgbRndaIps4TUCotrXjtc0DHDoPQckmyXEZ2bX3e4mpJmyEW3hRhCwQa/ISCPaA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.0.tgz", + "integrity": "sha512-DCg+Ka+uDQ31lJ/UtEXVlaeV3d6t81gifaVWKJy4MYVVgvJttyX/viREy+If7fz+tK/gVxTGMtyrFPnm4gjrVA==" }, "@types/fs-extra": { "version": "9.0.12", @@ -2243,9 +2238,9 @@ } }, "@types/lodash": { - "version": "4.14.171", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", - "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==" + "version": "4.14.172", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", + "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==" }, "@types/lodash.flattendeep": { "version": "4.4.6", @@ -2281,14 +2276,6 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, - "@types/puppeteer": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.4.tgz", - "integrity": "sha512-3Nau+qi69CN55VwZb0ATtdUAlYlqOOQ3OfQfq0Hqgc4JMFXiQT/XInlwQ9g6LbicDslE6loIFsXFklGh5XmI6Q==", - "requires": { - "@types/node": "*" - } - }, "@types/recursive-readdir": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.0.tgz", @@ -2328,9 +2315,9 @@ } }, "@wdio/cli": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-7.9.0.tgz", - "integrity": "sha512-Fiin4ByFP3Q/Y7fff689paJHBKiTz4FKqWQa9wRmcEardc7svxl49oPmn6lcfdwWanhfj+JWRkpm6B/Yv59s2w==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-7.11.1.tgz", + "integrity": "sha512-CGFX7vy5U9i9ccsUNmcOv+LzFaoKNFPr1+mopELld/b0wUVN9yM70jfgmUMjpHQnAMl3lqxIjBQuDrxE8/qTEw==", "requires": { "@types/ejs": "^3.0.5", "@types/fs-extra": "^9.0.4", @@ -2340,10 +2327,10 @@ "@types/lodash.union": "^4.6.6", "@types/node": "^15.12.5", "@types/recursive-readdir": "^2.2.0", - "@wdio/config": "7.8.0", + "@wdio/config": "7.10.1", "@wdio/logger": "7.7.0", - "@wdio/types": "7.8.0", - "@wdio/utils": "7.9.0", + "@wdio/types": "7.10.1", + "@wdio/utils": "7.11.0", "async-exit-hook": "^2.0.1", "chalk": "^4.0.0", "chokidar": "^3.0.0", @@ -2356,15 +2343,15 @@ "lodash.union": "^4.6.0", "mkdirp": "^1.0.4", "recursive-readdir": "^2.2.2", - "webdriverio": "7.9.0", + "webdriverio": "7.11.1", "yargs": "^17.0.0", "yarn-install": "^1.0.0" }, "dependencies": { "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2378,30 +2365,30 @@ } }, "@wdio/config": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.8.0.tgz", - "integrity": "sha512-f/9z+aPYAYGxNpdoe78pVtgpMXXcqvuZsvy3IajO5qH0+kva5XbWAAS89QH5fZFMI+/fEiwHv8ki60t229N/fQ==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.10.1.tgz", + "integrity": "sha512-EA+kJBNPeIxkkyilHcmiIwqjtOUcWx5FVp69kSBs4BN2fG+6CgpzoVecuTm/qPU6D0DT5KIfxVR4FRHCF99F/g==", "requires": { "@wdio/logger": "7.7.0", - "@wdio/types": "7.8.0", + "@wdio/types": "7.10.1", "deepmerge": "^4.0.0", "glob": "^7.1.2" } }, "@wdio/devtools-service": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@wdio/devtools-service/-/devtools-service-7.9.0.tgz", - "integrity": "sha512-7BdGYKtsbBR0J6hfQslfnKZgBjPx1VVMJFgtC4LCJL44zdmj3NAo2KlogbIykUYQiF1kIr22+7nqajvL5PtcCQ==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@wdio/devtools-service/-/devtools-service-7.11.1.tgz", + "integrity": "sha512-Bel501lea3HrD2lKWSODRH/59DacCEfe1HJDRsRvmZpH71Qpf13JjrwxaHN2bglssftgYGOtLJG8UNPtEkbLAA==", "requires": { "@babel/core": "^7.12.10", "@tracerbench/trace-event": "^6.0.0", "@types/node": "^15.12.5", "@wdio/logger": "7.7.0", - "@wdio/types": "7.8.0", + "@wdio/types": "7.10.1", "atob": "^2.1.2", "babel-plugin-istanbul": "^6.0.0", - "core-js": "~3.15.0", - "devtools-protocol": "^0.0.905680", + "core-js": "~3.16.1", + "devtools-protocol": "^0.0.915197", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-reports": "^3.0.2", @@ -2409,7 +2396,7 @@ "puppeteer-core": "^10.1.0", "speedline": "^1.4.1", "stable": "^0.1.8", - "webdriverio": "7.9.0" + "webdriverio": "7.11.1" } }, "@wdio/logger": { @@ -2429,9 +2416,9 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2448,47 +2435,34 @@ } }, "@wdio/protocols": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-7.7.4.tgz", - "integrity": "sha512-gfGPOjvqUws3/dTnrXbCYP2keYE6O5BK5qHWnOEu6c7ubE4hebxV8W5c822L7ntabc1e38+diEbM+qFuIT890Q==" + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-7.11.0.tgz", + "integrity": "sha512-yWKmCUmbHB1AH0U3lebXRh/G3+JtsD9Tx9fevgP9qA7Hq+rHj7KqUf15k1lPPodhOms8ncPj0J6ET1E13wh2qg==" }, "@wdio/repl": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-7.9.0.tgz", - "integrity": "sha512-IrOXdZH4ogm9bS+HBxBPGrRVvl5qLEVGK7JPdTRaoGLvrWqpJnXtvc3gOKrpRDNmn2XkX/1xU24/W1CRMzjiEA==", - "requires": { - "@wdio/utils": "7.9.0" - } - }, - "@wdio/sync": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@wdio/sync/-/sync-7.9.0.tgz", - "integrity": "sha512-byHlFVqMDI3Q2srm4JiKV5GcyLZyo31TCe4zB2KGD+ys27y8YL/TP/xA/YJQTbP3k6gyC7/dRidgp6nph9POkQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-7.11.0.tgz", + "integrity": "sha512-2GtWkUqepQ0QGvdo7fLWiZklf/O4eh3AB4vcafwGVKQhE8bpSh0l8/fkXOzYU7oK/PBGHJyWXxPOVf+H5DAViA==", "requires": { - "@types/fibers": "^3.1.0", - "@types/puppeteer": "^5.4.0", - "@wdio/logger": "7.7.0", - "@wdio/types": "7.8.0", - "fibers": "^5.0.0", - "webdriverio": "7.9.0" + "@wdio/utils": "7.11.0" } }, "@wdio/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.8.0.tgz", - "integrity": "sha512-vqDUWs2gmI0DgZgh0kc2lWVeLI2/I4w6uZBnfmSnWtVdiIAjMgoqpgWvNT8DuZ1S9k1P2zYs5IugkuS5QCH2DQ==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.10.1.tgz", + "integrity": "sha512-wEDmdux2VCGO4wWVj7v9UbVRqQG7liHnDVPYJuQURPj3hJMiQQTIHwRi7EmwYfbJ9/mRoHBOGeZt7nSvtcjeaQ==", "requires": { "@types/node": "^15.12.5", "got": "^11.8.1" } }, "@wdio/utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.9.0.tgz", - "integrity": "sha512-Wf65vTIOkg9fpX/VVXt16U9IidT8aPh/z4+nGD00/QZwCyexo4lsLV/zMms1xQ0qDsroNU1nJY1Nvi2Y8wnbYQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.11.0.tgz", + "integrity": "sha512-0n5mZha2QktV0181nMhw+IQ8MgYrqyvVDjP20P7JEnl6hehSkyXTAYQcYuKaw5AAVqipV3Eh96JBi5CnhpsoKQ==", "requires": { "@wdio/logger": "7.7.0", - "@wdio/types": "7.8.0", + "@wdio/types": "7.10.1", "p-iteration": "^1.1.8" } }, @@ -3905,9 +3879,9 @@ "optional": true }, "core-js": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", - "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==" + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.4.tgz", + "integrity": "sha512-Tq4GVE6XCjE+hcyW6hPy0ofN3hwtLudz5ZRdrlCnsnD/xkm/PWQRudzYHiKgZKUcefV6Q57fhDHjZHJP5dpfSg==" }, "core-js-compat": { "version": "3.15.2", @@ -4019,9 +3993,9 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "csp_evaluator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.0.1.tgz", - "integrity": "sha512-9L57/vkuwH1tJv9Sw9t13xKGKyRR7OKn/pizcLCHK/83WH+sqRav0JCFBmBLmpurQAcz5usU3efS1rabOPV/qA==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.0.tgz", + "integrity": "sha512-TcB+ZH9wZBG314jAUpKHPl1oYbRJV+nAT2YwZ9y4fmUN0FkEJa8e/hKZoOgzLYp1Z/CJdFhbhhGIGh0XG8W54Q==" }, "css-shorthand-properties": { "version": "1.1.1", @@ -4226,22 +4200,6 @@ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.31.tgz", "integrity": "sha512-mPh1mslned+5PuIuiUfbw4CikHk6AEAf2Baxih+wP5fssv+wmlVhvgZ7mq+BhLt7Sr/Hc8leWDiwe6YnrpNt3g==" }, - "deasync": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.21.tgz", - "integrity": "sha512-kUmM8Y+PZpMpQ+B4AuOW9k2Pfx/mSupJtxOsLzmnHY2WqZUYRFccFn2RhzPAqt3Xb+sorK/badW2D4zNzqZz5w==", - "requires": { - "bindings": "^1.5.0", - "node-addon-api": "^1.7.1" - }, - "dependencies": { - "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" - } - } - }, "debug": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", @@ -4424,16 +4382,16 @@ } }, "devtools": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-7.9.0.tgz", - "integrity": "sha512-icgmZt2NejayJ5x/QjPUSzXq/7LsNBi54NGn5DeVKMfoFwCAVQEo941Se64e8TxQKCOK+VYkMawUholWyI8W7Q==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-7.11.0.tgz", + "integrity": "sha512-V3mIskCVv+OrqgJf9EU4bvoOrEx+qQ+sNoyLxqzxkFgh0wwtYIhcMiqDluL8dBKlhToV16UsYDKoqa67ylNwOg==", "requires": { "@types/node": "^15.12.5", - "@wdio/config": "7.8.0", + "@wdio/config": "7.10.1", "@wdio/logger": "7.7.0", - "@wdio/protocols": "7.7.4", - "@wdio/types": "7.8.0", - "@wdio/utils": "7.9.0", + "@wdio/protocols": "7.11.0", + "@wdio/types": "7.10.1", + "@wdio/utils": "7.11.0", "chrome-launcher": "^0.14.0", "edge-paths": "^2.1.0", "puppeteer-core": "^10.1.0", @@ -4450,9 +4408,9 @@ } }, "devtools-protocol": { - "version": "0.0.905680", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.905680.tgz", - "integrity": "sha512-3lyBZWrgqPljzIUlM3CqoD1ghRrhJsdS9nbqxS2P/p+rdzek7aLdsyU2XNH8TEW2YXIFXtf3DcMCK1XWwmU+3w==" + "version": "0.0.915197", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.915197.tgz", + "integrity": "sha512-JXt4akUoL62CtxKLQBxcJlI7gsCZyAQ1Qb/0MZJOz8VETazoJB6+IjUwTkECrvye9AnNLDQyyV00kz/vWXVifQ==" }, "diff": { "version": "4.0.2", @@ -5342,14 +5300,6 @@ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" }, - "fibers": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", - "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", - "requires": { - "detect-libc": "^1.0.3" - } - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -6145,9 +6095,9 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6210,9 +6160,9 @@ "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==" }, "intl-pluralrules": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/intl-pluralrules/-/intl-pluralrules-1.2.2.tgz", - "integrity": "sha512-SBdlNCJAhTA0I0uHg2dn7I+c6BCvSVk6zJ/01ozjwJK7BvKms9RH3w3Sd/Ag24KffZ/Yx6KJRCKAc7eE8TZLNg==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/intl-pluralrules/-/intl-pluralrules-1.3.0.tgz", + "integrity": "sha512-hFzGTkxCjyrwHvn4pWVoB3/cFk1RIOOKNFlcNvm37YjXsmdhIt2dU/Nwh9c9i95Xa248wDF1+bI71Q+yDlGPeA==" }, "ip-regex": { "version": "2.1.0", @@ -7002,9 +6952,9 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7338,9 +7288,9 @@ }, "dependencies": { "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8298,9 +8248,9 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8945,12 +8895,12 @@ } }, "puppeteer-core": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.1.0.tgz", - "integrity": "sha512-x2yDSJI/PRiWhDqAt1jd4rhTotxwjwKzHLIIqD2MlJ+TmzGJfBY9snAGIVXJwkWfKJg+Ef5xupdK0EbHDqBpFw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.2.0.tgz", + "integrity": "sha512-c1COxSnfynsE6Mtt+dW0t3TITjF9Ku4dnJbFMDDVhLQuMTYSpz4rkSP37qvzcSo3k02/Ac3GYWk0/ncp6DKZNA==", "requires": { "debug": "4.3.1", - "devtools-protocol": "0.0.883894", + "devtools-protocol": "0.0.901419", "extract-zip": "2.0.1", "https-proxy-agent": "5.0.0", "node-fetch": "2.6.1", @@ -8972,9 +8922,9 @@ } }, "devtools-protocol": { - "version": "0.0.883894", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.883894.tgz", - "integrity": "sha512-33idhm54QJzf3Q7QofMgCvIVSd2o9H3kQPWaKT/fhoZh+digc+WSiMhbkeG3iN79WY4Hwr9G05NpbhEVrsOYAg==" + "version": "0.0.901419", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", + "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==" }, "progress": { "version": "2.0.1", @@ -10676,9 +10626,9 @@ "integrity": "sha512-KU3SA3TjRRM932jpNfD3u4Ec3bSvedyo5ITPI7zgWYnKep7BwQQaxlhI9qbO+lKJoRnoAbEVfMcAHRuKVYikDA==" }, "third-party-web": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.12.4.tgz", - "integrity": "sha512-SaJdgPjCus/5ftexuCk8wJnYwe/nW9ZNDcWZc/dq90SREN6PvFEUva+kgaPZfT8opLDHvjJVAG9mNVvMnHeVgw==" + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.12.5.tgz", + "integrity": "sha512-A8YS1bpOzm9os0w7wH/BbN5WZgzyf0zbrrWHckX57v+EkCaM7jZPoRpzgqrakh2e7IWP1KwAnMtlcGTATYZw8A==" }, "throat": { "version": "5.0.0", @@ -11207,41 +11157,41 @@ "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=" }, "webdriver": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-7.9.0.tgz", - "integrity": "sha512-xIOJ3nE3YCYPPYkgOcM03G35wDfCqR9YhOotr9408pY48GCseyWVQhZM9UnQG3oxc+eoJiYY2FKy9V3h2zJ4rA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-7.11.0.tgz", + "integrity": "sha512-Sd4n3Hxz/6WDa4Ay8cJj/ICDbf2ndlAzd7NMj+dmhfDsDF7L77eCZYB8zrrxs2hoK63E54eyKzyycK3BB3WoYQ==", "requires": { "@types/node": "^15.12.5", - "@wdio/config": "7.8.0", + "@wdio/config": "7.10.1", "@wdio/logger": "7.7.0", - "@wdio/protocols": "7.7.4", - "@wdio/types": "7.8.0", - "@wdio/utils": "7.9.0", + "@wdio/protocols": "7.11.0", + "@wdio/types": "7.10.1", + "@wdio/utils": "7.11.0", "got": "^11.0.2", "ky": "^0.28.5", "lodash.merge": "^4.6.1" } }, "webdriverio": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.9.0.tgz", - "integrity": "sha512-Px6H+feFrUFJLSQXMHCCWEMs9aLuxo8id/cA+h0PuvnzhiaEMQophL+KubV6GKeHqKVhrQo1f3NLFdwXrIBV3w==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.11.1.tgz", + "integrity": "sha512-N796qZIqkfIJJtSNBcAimnVr3SrnEjbwjYSBqAhVdGSidUKb1k6bxjC223WFwpANGkxABJUrVkx+qGNOtc+yGg==", "requires": { "@types/aria-query": "^4.2.1", "@types/node": "^15.12.5", - "@wdio/config": "7.8.0", + "@wdio/config": "7.10.1", "@wdio/logger": "7.7.0", - "@wdio/protocols": "7.7.4", - "@wdio/repl": "7.9.0", - "@wdio/types": "7.8.0", - "@wdio/utils": "7.9.0", + "@wdio/protocols": "7.11.0", + "@wdio/repl": "7.11.0", + "@wdio/types": "7.10.1", + "@wdio/utils": "7.11.0", "archiver": "^5.0.0", "aria-query": "^4.2.2", "atob": "^2.1.2", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools": "7.9.0", - "devtools-protocol": "^0.0.905680", + "devtools": "7.11.0", + "devtools-protocol": "^0.0.915197", "fs-extra": "^10.0.0", "get-port": "^5.1.1", "grapheme-splitter": "^1.0.2", @@ -11255,7 +11205,7 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^8.0.0", - "webdriver": "7.9.0" + "webdriver": "7.11.0" } }, "webidl-conversions": { @@ -11629,9 +11579,9 @@ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", diff --git a/package.json b/package.json index a82782e3..916efb07 100644 --- a/package.json +++ b/package.json @@ -52,21 +52,18 @@ "@oxygenhq/chrome-remote-interface": "0.30.0", "@oxygenhq/logger": "0.5.1", "@oxygenhq/mitmproxy-node": "1.0.1", - "@wdio/cli": "7.9.0", - "@wdio/devtools-service": "7.9.0", - "@wdio/sync": "7.9.0", + "@wdio/cli": "7.11.1", + "@wdio/devtools-service": "7.11.1", "async": "3.2.0", "chai": "4.3.4", "chrome-har": "0.11.12", "config": "3.3.6", "csv-parse": "4.16.0", "cucumber": "6.0.5", - "deasync": "0.1.21", "decache": "4.6.0", "easyxml": "2.0.1", "ejs": "3.0.2", "esm": "3.2.25", - "fibers": "5.0.0", "glob": "7.1.7", "glob-to-regexp": "0.4.1", "got": "11.8.2", @@ -92,7 +89,7 @@ "testingbot-api": "1.0.7", "text-to-image": "2.4.4", "twilio": "3.66.1", - "webdriverio": "7.9.0", + "webdriverio": "7.11.1", "when": "3.7.8", "xlsx": "0.17.0" }, diff --git a/src/core/OxygenCore.js b/src/core/OxygenCore.js index 11e1b610..5dcf951a 100644 --- a/src/core/OxygenCore.js +++ b/src/core/OxygenCore.js @@ -2,9 +2,6 @@ import glob from 'glob'; import path from 'path'; import fs from 'fs'; -import deasync from 'deasync'; -import Future from 'fibers/future'; -import Fiber from 'fibers'; import { EOL } from 'os'; import StepResult from '../model/step-result'; import OxygenEvents from './OxygenEvents'; @@ -505,9 +502,9 @@ export default class Oxygen extends OxygenEvents { if (methodName === 'getCapabilities') { wrapper['_getCapabilities'] = method.bind(module); } - wrapper[methodName] = (...args) => { + wrapper[methodName] = async (...args) => { try { - return _this._commandWrapper(methodName, args, module, name); + return await _this._commandWrapper(methodName, args, module, name); } catch (e) { if (e instanceof OxError) { @@ -522,7 +519,7 @@ export default class Oxygen extends OxygenEvents { return wrapper; } - _commandWrapper(cmdName, cmdArgs, module, moduleName) { + async _commandWrapper(cmdName, cmdArgs, module, moduleName) { if (!module || !module[cmdName]) { return undefined; } @@ -539,7 +536,7 @@ export default class Oxygen extends OxygenEvents { cmdName !== 'init' && cmdName !== 'transaction' ) { - deasync.sleep(this.opts.delay * 1000); + await oxutil.sleep(this.opts.delay * 1000); } // throw if a command executed on unitialized module (except internal methods and a few other) @@ -569,30 +566,13 @@ export default class Oxygen extends OxygenEvents { try { // emit before events if (cmdName === 'dispose') { - this._wrapAsync(this._callServicesOnModuleWillDispose).apply(this, [module]); + await this._wrapAsync(this._callServicesOnModuleWillDispose).apply(this, [module]); } - const retvalPromise = this._wrapAsync(module[cmdName]).apply(module, decryptedArgs); - - if (retvalPromise && retvalPromise.then) { - let promiseDone = false; - - retvalPromise.then((value) => { - - retval = value; - promiseDone = true; - }, (e) => { - error = e; - promiseDone = true; - }); - - deasync.loopWhile(() => !promiseDone); - } else { - retval = retvalPromise; - } + retval = await this._wrapAsync(module[cmdName]).apply(module, decryptedArgs); if (cmdName === 'init') { - this._wrapAsync(this._callServicesOnModuleInitialized).apply(this, [module]); + await this._wrapAsync(this._callServicesOnModuleInitialized).apply(this, [module]); } } catch (e) { @@ -615,13 +595,12 @@ export default class Oxygen extends OxygenEvents { const endTime = oxutil.getTimeStamp(); let stepResult; - let done = false; if (publicMethod) { const waitId = +new Date(); this._waitStepResultList.push(waitId); - stepResult = this._getStepResult(module, moduleName, cmdName, cmdArgs, cmdLocation, startTime, endTime, retval, error); + stepResult = await this._getStepResult(module, moduleName, cmdName, cmdArgs, cmdLocation, startTime, endTime, retval, error); const index = this._waitStepResultList.indexOf(waitId); this._waitStepResultList.splice(index, 1); @@ -630,7 +609,6 @@ export default class Oxygen extends OxygenEvents { this.resultStore.steps.push(stepResult); this.emitAfterCommand(cmdName, moduleName, cmdFn, cmdArgs, this.ctx, cmdLocation, endTime, stepResult); - done = true; } if (error && error.isFatal && !this.opts.continueOnError) { @@ -645,87 +623,13 @@ export default class Oxygen extends OxygenEvents { throw error; } - if (!publicMethod) { - done = true; - } - - deasync.loopWhile(() => !done && !error); - return retval; } _wrapAsync (fn, context) { - return function (...args) { + return async function (...args) { var self = context || this; - // if the current code is not running inside the Fiber context, then run async code as sync using deasync module - if (!Fiber.current) { - const retval = fn.apply(self, args); - - let done = false; - let error = null; - let finalVal = null; - - if (retval && retval.then) { - Promise.resolve(retval) - .then((val) => { - finalVal = val; - done = true; - }) - .catch((e) => { - error = e; - done = true; - }); - } else { - finalVal = retval; - done = true; - } - - try { - deasync.loopWhile(() => !done && !error); - } - catch (e) { - - if (e && e.message && typeof e.message === 'string' && e.message.includes('readyState')) { - return undefined; - } - - // ignore this error as it usually happens - // when Oxygen is disposed and process is being killed - this.logger.error('deasync.loopWhile() failed:', e); - return undefined; - } - - if (!error) { - return finalVal; - } - throw error; - } - - let error = null; - let done = false; - let retval = null; - - try { - - // otherwise, if we are inside the Fiber context, then use Fiber's Future - const future = new Future(); - var result = fn.apply(self, args); - if (result && typeof result.then === 'function') { - result.then((val) => future.return(val), (err) => future.throw(err)); - return future.wait(); - } - return result; - - } catch (e) { - error = e; - } - - deasync.loopWhile(() => !done && !error); - - if (!error) { - return retval; - } - throw error; + return await fn.apply(self, args); }; } @@ -747,7 +651,7 @@ export default class Oxygen extends OxygenEvents { return null; } - _getStepResult(module, moduleName, methodName, args, location, startTime, endTime, retval, err) { + async _getStepResult(module, moduleName, methodName, args, location, startTime, endTime, retval, err) { var step = new StepResult(); step.name = oxutil.getMethodSignature(moduleName, methodName, args); @@ -794,14 +698,14 @@ export default class Oxygen extends OxygenEvents { if (typeof module._takeScreenshotSilent === 'function' && !this.opts.disableScreenshot) { try { - step.screenshot = module._takeScreenshotSilent(methodName); + step.screenshot = await module._takeScreenshotSilent(methodName); } catch (e) { // If we are here, we were unable to get a screenshot // Try to wait for a moment (in Perfecto Cloud, the screenshot might not be immidiately available) - deasync.sleep(1000); + await oxutil.sleep(1000); try { - step.screenshot = module._takeScreenshotSilent(methodName); + step.screenshot = await module._takeScreenshotSilent(methodName); } catch (e) { // FIXME: indicate to user that an attempt to take a screenshot has failed @@ -841,11 +745,7 @@ export default class Oxygen extends OxygenEvents { if (mod.dispose) { try { - const disposeResult = mod.dispose(status); - if (disposeResult && typeof disposeResult.then === 'function') { - // probably a promise - await disposeResult(); - } + await mod.dispose(status); } catch (e) { // ignore module disposal error diff --git a/src/ox_modules/module-assert.js b/src/ox_modules/module-assert.js index 3d6cb45d..4b654aa3 100644 --- a/src/ox_modules/module-assert.js +++ b/src/ox_modules/module-assert.js @@ -23,7 +23,7 @@ module.exports = function() { return true; }; - module._takeScreenshotSilent = function(name) { + module._takeScreenshotSilent = async function(name) { var mod; if (ox && ox.modules && ox.modules.mob && ox.modules.mob.getDriver && ox.modules.mob.getDriver()) { mod = ox.modules.mob; @@ -34,7 +34,7 @@ module.exports = function() { } if (mod && mod._takeScreenshotSilent) { - return mod._takeScreenshotSilent(); + return await mod._takeScreenshotSilent(); } else { return null; } diff --git a/src/ox_modules/module-mob.js b/src/ox_modules/module-mob.js index cdb489ed..6b96e508 100644 --- a/src/ox_modules/module-mob.js +++ b/src/ox_modules/module-mob.js @@ -355,7 +355,7 @@ export default class MobileModule extends WebDriverModule { return ACTION_COMMANDS.includes(name); } - _takeScreenshotSilent(name) { + async _takeScreenshotSilent(name) { if (!NO_SCREENSHOT_COMMANDS.includes(name)) { let error; try { @@ -364,7 +364,7 @@ export default class MobileModule extends WebDriverModule { this.driver.takeScreenshot ) { let retval; - this.driver.call(() => { + await this.driver.call(() => { return new Promise((resolve, reject) => { const waitUntilRetVal = this.driver.waitUntil(async() => { try { diff --git a/src/ox_modules/module-web.js b/src/ox_modules/module-web.js index 5be898d4..bde1e09e 100644 --- a/src/ox_modules/module-web.js +++ b/src/ox_modules/module-web.js @@ -481,7 +481,7 @@ export default class WebModule extends WebDriverModule { return ACTION_COMMANDS.includes(name); } - _takeScreenshotSilent(name) { + async _takeScreenshotSilent(name) { if (!NO_SCREENSHOT_COMMANDS.includes(name)) { let error; try { @@ -490,7 +490,7 @@ export default class WebModule extends WebDriverModule { this.driver.takeScreenshot ) { let retval; - this.driver.call(() => { + await this.driver.call(() => { return new Promise((resolve, reject) => { const waitUntilRetVal = this.driver.waitUntil(async() => { try { diff --git a/src/ox_modules/module-win.js b/src/ox_modules/module-win.js index 84bff758..0b9745cd 100644 --- a/src/ox_modules/module-win.js +++ b/src/ox_modules/module-win.js @@ -236,14 +236,14 @@ export default class WindowsModule extends WebDriverModule { return ACTION_COMMANDS.includes(name); } - _takeScreenshotSilent(name) { + async _takeScreenshotSilent(name) { if (!NO_SCREENSHOT_COMMANDS.includes(name)) { try { if ( this.driver && this.driver.takeScreenshot ) { - return this.driver.takeScreenshot(); + return await this.driver.takeScreenshot(); } } catch (e) { this.logger.error('Cannot get screenshot', e); diff --git a/src/runners/cucumber/CucumberWorker.js b/src/runners/cucumber/CucumberWorker.js index 28015ce9..b7ae93f4 100644 --- a/src/runners/cucumber/CucumberWorker.js +++ b/src/runners/cucumber/CucumberWorker.js @@ -14,12 +14,9 @@ require = require('esm')(module); var td = require('testdouble'); -import Fiber from 'fibers'; import * as Cucumber from 'cucumber'; import isGlob from 'is-glob'; import glob from 'glob'; -import { executeSync, executeAsync } from '@wdio/sync'; -import { isFunctionAsync, hasWdioSyncSupport, runFnInFiberContext } from '@wdio/utils'; import { EventEmitter } from 'events'; import CucumberEventListener from './CucumberEventListener'; import CucumberReporter from './CucumberReporter'; @@ -93,14 +90,14 @@ export default class CucumberWorker { } async _runFnInFiberContext (fn, args) { - return new Promise((resolve, reject) => Fiber(() => { + return new Promise((resolve, reject) => (async() => { try { - const result = fn.apply(this, args || []); + const result = await fn.apply(this, args || []); return resolve(result); } catch (err) { return reject(err); } - }).run()); + })()); } async run ({ scriptPath, context, poFile = null }) { @@ -302,10 +299,9 @@ export default class CucumberWorker { * @return {Function} wrapped step definiton for sync WebdriverIO code */ wrapStep (code, retryTest = 0, isStep, config, id) { - const executeFn = isFunctionAsync(code) || !hasWdioSyncSupport ? executeAsync : executeSync; const wrapWithHooks = this.wrapWithHooks.bind(this); return function (...args) { - return executeFn.call(this, wrapWithHooks(code), retryTest, args); + return executeSync.call(this, wrapWithHooks(code), retryTest, args); }; } @@ -315,7 +311,7 @@ export default class CucumberWorker { let result; let error; try { - result = await runFnInFiberContext(code.bind(this, ...args))(); + result = await runFnInFiberContext(code.bind(this, ...args)); } catch (err) { error = err; } @@ -353,3 +349,80 @@ export default class CucumberWorker { //console.log('onTestEnd', arguments) } } + +const STACK_START = /^\s+at /; +const STACKTRACE_FILTER = [ + // exclude webdriverio and webdriver stack traces + 'node_modules/webdriverio/build/', + 'node_modules/webdriver/build/', + // exclude request + 'node_modules/request/request', + // exclude EventEmitter + ' (events.js:', + ' (domain.js:', + // other excludes + '(internal/process/next_tick.js', + 'new Promise ()', + 'Generator.next ()', + '__awaiter (' +]; + +/** + * filter stack array + * @param {string} stackRow + * @returns {boolean} + */ +const stackTraceFilter = (stackRow) => { + if (stackRow.match(STACK_START)) { + return !STACKTRACE_FILTER.some(r => stackRow.includes(r)); + } + return true; +}; + +/** + * execute test or hook synchronously + * + * @param {Function} fn spec or hook method + * @param {Number} retries { limit: number, attempts: number } + * @param {Array} args arguments passed to hook + * @return {Promise} that gets resolved once test/hook is done or was retried enough + */ +const defaultRetries = { attempts: 0, limit: 0 }; +async function executeSync(fn, retries = defaultRetries, args = []) { + /** + * synchronously in standalone mode. In this case we neither have + * `global.browser` nor `this` + */ + if (global.browser) { + delete global.browser._NOT_FIBER; + } + if (this) { + this.wdioRetries = retries.attempts; + } + try { + let res = await fn.apply(this, args); + /** + * sometimes function result is Promise, + * we need to await result before proceeding + */ + return res; + } + catch (e) { + if (retries.limit > retries.attempts) { + retries.attempts++; + return await executeSync.call(this, fn, retries, args); + } + /** + * no need to modify stack if no stack available + */ + if (!e.stack) { + return Promise.reject(e); + } + e.stack = e.stack.split('\n').filter(stackTraceFilter).join('\n'); + return Promise.reject(e); + } +} + +const runFnInFiberContext = (fn) => { + return fn.apply(this); +}; diff --git a/src/runners/oxygen/OxygenWorker.js b/src/runners/oxygen/OxygenWorker.js index 0664d192..256afdab 100644 --- a/src/runners/oxygen/OxygenWorker.js +++ b/src/runners/oxygen/OxygenWorker.js @@ -10,7 +10,6 @@ * Copyright (c) OpenJS Foundation and other contributors. Licensed under MIT. */ -const Fiber = require('fibers'); const path = require('path'); const { EventEmitter } = require('events'); @@ -73,11 +72,12 @@ export default class OxygenWorker extends EventEmitter { // load and run the test script try { this._oxygen && this._oxygen.onBeforeCase && await this._oxygen.onBeforeCase(context); - await this._runFnInFiberContext(() => { + await this._runFnInFiberContext(async () => { try { // make sure to clear require cache so the script will be executed on each iteration require.cache[require.resolve(scriptPath)] && delete require.cache[require.resolve(scriptPath)]; - require(scriptPath); + const call = require(scriptPath); + await call(); } catch (e) { // error = e.code && e.code === 'MODULE_NOT_FOUND' ? new ScriptNotFoundError(scriptPath) : e; @@ -167,14 +167,14 @@ export default class OxygenWorker extends EventEmitter { } async _runFnInFiberContext (fn) { - return new Promise((resolve, reject) => Fiber(() => { + return new Promise((resolve, reject) => (async () => { try { - const result = fn.apply(this); + const result = await fn.apply(this); return resolve(result); } catch (err) { return reject(err); } - }).run()); + })()); } async replStart() {